Изменения

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

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

38 байт добавлено, 22:50, 7 июня 2012
merge
Node merge(H1, H2) {
if H1 == null
return H2;
if H2 == null
return H1;
// H - результат слияния
curH2 = H2.head;
while curH1 != null && curH2 != null
if curH1.degree < curH2.degree curH.sibling = curH1; curH = curH1; curH1 = curH1.sibling; else curH.sibling = curH2; curH = curH2; curH2 = curH2.sibling;
if curH1 == null
while curH2 != null curH.sibling = curH2; curH2 = curH2.sibling;
else
while curH1 != null curH.sibling = curH1; curH1 = curH1.sibling;
// объединение деревьев одной степени
curH = H.head;
while curH.sibling != null
if curH.degree == curH.sibling.degree p[curH] = curH.sibling; tmp = curH.sibling; curH.sibling = curH.sibling.child; curH = tmp; continue;
curH = curH.sibling;
return H;
Анонимный участник

Навигация