Изменения

Перейти к: навигация, поиск

Биномиальная куча

2321 байт добавлено, 13:09, 10 марта 2012
merge
=== merge ===
Эта операция, соединяющая две биномиальные кучи в одну, используется в качестве подпрограммы большинством остальных операций.
 
[[Файл:binHeapExample2_2.png|thumb|600px|Пример слияние двух деревьев одинакового порядка]]
 
Вот в чем состоит ее суть: пусть есть две биномиальные кучи с <tex>H</tex> и <tex>H'</tex>. Размеры деревьев в кучах соответствуют двум двоичным числам <tex>m</tex> и <tex>n</tex>, то есть при наличии дерева соответствующего порядка в этом разряде числа стоит единица, иначе ноль. При сложении столбиком в двоичной системе происходят переносы, которые соответствуют слияниям двух биномиальных деревьев Bk-1 в дерево Вk. Надо только посмотреть, в каком из сливаемых деревьев корень меньше, и считать его верхним(пример работы этого действия приведен на рисунке).
 
 
 
Работа этой процедуры начинается с соединения корневых списков куч в единый список, в котором корневые вершины идут в порядке возрастания их степеней.
 
В получившемся списке могут встречаться пары соседних вершин одинаковой степени. Поэтому мы начинаем соединять деревья равной степени и делаем это до тех пор, пока деревьев одинаковой степени не останется. Этот процесс соответствует сложению двоичных чисел столбиком, и время его работы пропорционально числу корневых вершин, то есть операция выполняется за <tex>O(\log(n))</tex>.
=== insert ===
333
правки

Навигация