Kopiec dwumianowy: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja przejrzana]
Usunięta treść Dodana treść
m ort.
Linia 22:
Pierwsza własność gwarantuje, że każdy korzeń drzewa dwumianowego zawiera najmniejszą wartość w drzewie, co stosuje się do całego kopca.
 
Dzięki drugiej własności wiemy, że kopiec dwumianowy zawierający ''n'' elementów składa się z co najwyżej lg ''n'' + 1 drzew dwumianowych. Istotnie, liczba i rzedyrzędy tych drzew są jednoznacznie wyznaczone przez liczbę elementów w kopcu: każde drzewo odpowiada jedynce w reprezentacji dwójkowej liczby ''n''. Na przykład 13 to 1101 w systemie dwójkowym, <math>2^3 + 2^2 + 2^0</math>, a więc kopiec dwumianowy z 13 elementami bedziebędzie się składał z 3 drzew o rzędach 3, 2 i 0 (patrz rysunek niżej).
 
<center>[[Plik:Binomial-heap-13.svg|325px|Przykładowy kopiec dwumianowy]]<br />''Przykładowy kopiec dwumianowy o 13 rozróżnialnych elementach.<br/>Kopiec składa się z 3 drzew dwumianowych rzędów 0, 2 i 3.''</center>
Linia 33:
* Jeśli w kopcu nie ma drzewa o wielkości 1, dodajemy je na początku listy drzew i kończymy.
* Jeśli w kopcu jest drzewo o wielkości 1, dokonujemy złączenia obu drzew (tej samej wielkości). Wymieramy jedno z tych drzew (o mniejszym korzeniu), i dodajemy drugie drzewo jako jego potomek. Tworzymy w ten sposób drzewo dwumianowe o wielkości 2.
* Podobnie, sprawdzamy czy drzewo o tej samej wielkości istnieje już w kopcu, jeśli nie, dodajemy i kończymy, jeśli tak dokonujemy złączenia w analogiczny sposób, przyczymprzy czym drugie drzewo zostaje dodane jako najbardziej lewy potomek, tak aby drzewo miało strukturę drzewa binomialnego.
* Powtarzamy analogicznie te kroki, aż skończymy (ostatecznie dojdziemy do ostatniego drzewa, i wtedy kopiec będzie chwilowo pusty).
 
Linia 40:
Operację meld (łączenia dwóch kopców), wykonujemy w identyczny sposób jak dodawanie dwóch liczb binarnych. Zaczynamy łączenie od najmniejszych drzew (najmniej znaczące bity w liczbie binarnej), i pamiętamy w razie potrzeby przeniesienie.
 
W rzeczywistości operację insert, można rozumieć jako operację meld na orginalnymoryginalnym kopcu i kopcu jedno elementowym (w jednym drzewem o wielkości 1).
 
W przypadku operacji deletemin (usunięcie najmniejszego elementu), najpierw wyszukujemy element (tak jak w findmin), usuwamy korzeń znalezionego drzewa wielomianowego i dokonujemy operacji meld z kopcem dwumianowym który powstałby z potomków tego drzewa (potomkowi ci to zbiór drzew dwumianowych, w których drzewa się nie powstarzjąpowtarzają z konstrukcji, mają również właściwość kopca, a więc jest to też kopiec dwumianowy).
 
{{Informatyka stub}}