Strona główna Algorytmy i SI Kopiec binarny — kolejka priorytetowa

⛰️ Kopiec binarny — kolejka priorytetowa

Wstawiaj i pobieraj wartości z binarnego kopca min przechowywanego jako tablica. Obserwuj, jak zamiany sift-up i sift-down przywracają własność kopca, przedstawioną zarówno jako drzewo, jak i jako leżąca u podstaw tablica.

Algorytmy i SI2DUmiarkowany60 FPS
binary-heap ↗ Otwórz samodzielnie
Interfejs symulacji jest w języku angielskim — sterowanie odbywa się bezpośrednio w oknie symulacji (przeciąganie, przewijanie, kliknięcie).

O tej symulacji

Kopiec binarny to kompletne drzewo binarne — każdy poziom w pełni wypełniony poza ewentualnie ostatnim, wypełnianym od lewej do prawej — przechowywane zwięźle w zwykłej tablicy bez wskaźników. Dla dowolnego indeksu i jego rodzic znajduje się pod ⌊(i−1)/2⌋, a dzieci pod 2i+1 i 2i+2.

🔬 Co pokazuje

Kopiec min narysowany jednocześnie jako drzewo binarne i jako tablica indeksowana, z animacją zamian sift-up i sift-down przy każdej operacji.

🎮 Jak korzystać

Wstawiaj wartości pojedynczo, pobieraj minimum lub zbuduj cały kopiec naraz z losowej tablicy za pomocą algorytmu Floyda działającego w czasie O(n).

💡 Czy wiesz, że…

Zbudowanie kopca z n nieuporządkowanych wartości metodą Floyda zajmuje O(n), a nie O(n log n) — ponieważ większość węzłów leży blisko dna drzewa, gdzie operacja sift-down wykonuje niewiele pracy.

Często zadawane pytania

Dlaczego kopiec binarny można przechowywać w tablicy bez wskaźników?

Ponieważ jest to kompletne drzewo binarne, wypełniane poziom po poziomie bez luk, rodzica i dzieci węzła można obliczyć bezpośrednio z jego indeksu w tablicy (rodzic = ⌊(i−1)/2⌋, dzieci = 2i+1 i 2i+2).

Jaka jest różnica w złożoności czasowej między sift-up a sift-down?

Obie operacje działają w czasie O(log n) w najgorszym przypadku, ponieważ każda podąża tylko jedną ścieżką od korzenia do liścia o długości ⌊log₂ n⌋. Sift-up wykonuje co najwyżej jedno porównanie na poziom z rodzicem, podczas gdy sift-down wykonuje do dwóch porównań na poziom z obydwoma dziećmi.

Dlaczego budowanie kopca z n elementów zajmuje O(n), a nie O(n log n)?

Algorytm budowania kopca Floyda wywołuje sift-down tylko na węzłach wewnętrznych, zaczynając od ostatniego i pracując w górę do korzenia. Większość węzłów znajduje się blisko dna drzewa, gdzie sift-down może przemieścić się tylko na krótką odległość.

Jaka jest różnica między kopcem min a kopcem max, i jak kopiec wypada w porównaniu ze zbalansowanym BST dla kolejki priorytetowej?

Kopiec min utrzymuje najmniejszą wartość w korzeniu (rodzic ≤ dzieci); kopiec max utrzymuje największą (rodzic ≥ dzieci). W porównaniu ze zbalansowanym drzewem poszukiwań binarnych kopiec daje takie samo O(log n) wstawianie i O(log n) pobieranie minimum, ale z prostszą implementacją opartą na tablicy.

Powiązane symulacje