Mam następujące tablice. W jaki sposób mogę sprawdzić, czy tablica zawierająca n elementów jest stertą min ? Jak sprawdzić, czy tablica jest stertą min?
Odpowiedz
Ponieważ indeks zaczyna się od 1, (indeks 0 zawiera 0 - dlaczego?), Można określić indeks dzieci danego węzła w następujący sposób:
- Niech indeks danego węzła być
i
- Indeks
i
'lewego dziecka s:2i
- Indeks
i
' s prawego dziecka:2i + 1
Dzięki temu dla każdego węzła można z łatwością sprawdzić, czy oba dzieci są większe niż sam węzeł.
Niektórzy ludzie lubią umieszczać pierwiastek w indeksie 1. Mówią, że to ze względu na wydajność (eliminuje dodatkowe dodanie podczas obliczania lewego dziecka i usuwa odejmowanie podczas obliczania rodzica), ale dokonałem porównania wydajności: brak znaczącego różnica. Wadą jest to, że powoduje on niepoliczone błędy na krawędziach ogrodzenia wśród programistów w języku C-podobnym. Myślę, że głównym powodem, dla którego ludzie to robią, jest fakt, że Sedgewick napisał książkę Algorithms w 1983 roku, a wszystkie jego przykłady były w Pascalu z tablicami opartymi na 1. C tłumaczenia jego przykładów Pascala są powszechne nawet dzisiaj. –
is_heap
to świetna propozycja. Musisz tylko użyć odpowiedniego komparatora. A można nawet używać go z indeksowaniem 1, zgodne z iteratorów, bez wysiłku:
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
int main()
{
std::vector<int> v {0, 5, 9, 11, 14, 18, 19 };
std::cout << std::is_heap(
v.begin()+1, // off by 1
v.end(),
std::greater<int>() // std::less is used by default for max-heap
);
}
Znajomy przeszukiwanie wszerz (BFS) mogą być również stosowane w celu sprawdzenia, czy drzewo jest minimalna/maksymalna sterty lub nie.
#include <iostream>
#include <queue>
int main() {
int tree[] = {5, 9, 11, 14, 18, 19, 21, 33, 17, 27};
int size = 10;
std::queue <int> q;
q.push(0);
bool flag = true;
while(!q.empty()) {
int x = q.front();
q.pop();
int left = 2*x+1, right = 2*x+2; // 0-based indexing used here
if(left < size) { // check if left child exists or not.
q.push(left);
// check value at parent is less than child or not.
if(tree[x] > tree[left]) {
flag = false;
break;
}
}
if(right < size) { // check whether right child exists or not.
q.push(right);
if(tree[x] > tree[right]) { // check value of parent less than child.
flag = false;
break;
}
}
}
if(flag)
std::cout << "It is minimum heap.\n";
else
std::cout << "Not a minimum heap.\n";
return 0;
}
Pomysł jest podobny do tego z wookie919.
- 1. Jak sprawdzić, czy tablica jest pusta?
- 2. ng-jeśli sprawdzić, czy tablica jest pusta
- 3. Jak sprawdzić, czy tablica wielowymiarowa jest pusta, czy nie?
- 4. Jak sprawdzić, czy pusta tablica w C
- 5. Jak sprawdzić, czy moja tablica zawiera obiekt?
- 6. Jak sprawdzić, czy tablica ma wartość zerową lub jest pusta?
- 7. Jak sprawdzić, czy jedna tablica jest podzbiorem innej?
- 8. Jak sprawdzić, czy w jq jest tablica lub obiekt?
- 9. JavaScript: Jak sprawdzić, czy odpowiedź JSON tablica jest pusta
- 10. Jak sprawdzić, czy tablica bajtów jest prawidłowym obrazem?
- 11. Perl jak sprawdzić, czy tablica jest wciąż pusta?
- 12. Jaka jest różnica między RSS a stertą?
- 13. Jak sprawdzić, czy wartość tablicy jest pusta?
- 14. Jak mogę sprawdzić, czy tablica zawiera określoną wartość w php?
- 15. Jak sprawdzić, czy tablica asocjacyjna ma pusty lub wartość null
- 16. Numpy: Jak sprawdzić, czy tablica zawiera określone liczby?
- 17. Jak mogę sprawdzić, czy tablica ciągów zawiera określony ciąg znaków?
- 18. W programie Underscorejs, jak sprawdzić, czy tablica zawiera inną tablicę?
- 19. Jak sprawdzić ogólny typ klasy to tablica?
- 20. Jak sprawdzić, czy tablica znaków zawiera jeden ciąg w JavaScript?
- 21. Jak sprawdzić, czy tablica zawiera ciąg znaków w maszynopisie?
- 22. Jak sprawdzić, czy jest konsola?
- 23. Sprawdź, czy tablica jest pusta w Jinja2
- 24. Czy wiesz, czy tablica jest widokiem innego?
- 25. Jak mogę sprawdzić, czy oczekiwana tablica jest faktyczną tablicą w MSTest?
- 26. Flask-WTForms: jak sprawdzić, czy pole jest wymagane?
- 27. Jaki jest związek między stertą "a" i stosem?
- 28. Javascript - Sprawdzenie, czy wielowymiarowa tablica jest niezdefiniowany
- 29. Sprawdź, czy tablica zawiera wartości
- 30. Jak sprawdzić, czy wartość jest liczbą JavaScript lub jQuery
http://stackoverflow.com/questions/4157159/algorithm-for-checking-if-an-array-with-n-elements-is-a-minimum-heap Skorzystaj z tego. –
Szukasz ['std :: is_heap'] (http://en.cppreference.com/w/cpp/algorithm/is_heap)? –
Dzieci węzła i są w 2i i 2i + 1. Zatem sprawdź [2i]> = a [i] i [2i + 1]> = a [i], ponieważ jest to właściwość sterty: dzieci są co najmniej tak duże, jak ich rodzice. – Gene