Изменения

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

Левосторонняя куча

35 байт убрано, 18:07, 17 ноября 2013
м
Нет описания правки
Слияние двух куч.
'''merge'''(x, y) : // x, y {{---}} корни двух деревьев
'''if''' x == <tex> \varnothing </tex>: '''return''' y
'''if''' y == <tex> \varnothing </tex>: '''return''' x
'''if''' y.key < x.key:
swap(x <tex>\leftrightarrow</tex> , y)
// Воспользуемся тем, что куча левосторонняя. Правая ветка {{---}} самая короткая и не длиннее логарифма.
// Пойдем направо и сольем правое поддерево с у.
// Могло возникнуть нарушение левостороннести кучи.
'''if''' dist(x.R) > dist(x.L):
swap(x.L <tex>\leftrightarrow</tex> , x.R)
dist(x) = min(dist(x.L), dist(x.R)) + 1 // пересчитаем расстояние до ближайшей свободной позиции
'''return''' x

Навигация