Kopiec dwumianowy: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
→Struktura kopca dwumianowego: insert jako meld |
Karmelki90 (dyskusja | edycje) 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
<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,
* 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
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
{{Informatyka stub}}
|