Изменения

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

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

23 байта добавлено, 22:03, 20 мая 2013
Нет описания правки
if y == NULL return x
if y.key < x.key :
x<-> y //Воспользуемся тем, что куча левосторонняя. Правая ветка — самая короткая и не длиннее //логарифма. Пойдем направо и сольем правое поддерево с у. x.R<-merge(x.R, y) //Могло возникнуть нарушение левостороннести кучи. If dist(x.R) > dist(x.L): x.L<->x.R update dist(x) //dist(x) = min(dist(x.L), dist(x.R)) + 1 return x; //Каждый раз идет в уже существующей вершине только в правое поддерево — не более логарифма вызовов (по лемме).
Так как левосторонняя Левосторонняя куча относится к сливаемым кучам, : остальные операции легко реализуются с помощью операции слияния.
===insert===
Вставка новой вершины в дерево. Новое левостороннее дерево, состоящее из одной вершины, сливается с исходным.
Анонимный участник

Навигация