Какова реальная цель звания в левой куче?
Левая куча поддерживает ключ и ранг для каждого узла. Ранг узла - это количество узлов вдоль кратчайшего пути к листу.
Целому дереву необходимо поддерживать два свойства:
- node.key
- node.left.rank> = node.right.rank
Я могу понять первое свойство, так как это куча, и это естественно.
Но какова цель второго свойства? Почему нужно держать правую короче левой?
Для балансировки?
1 ответ
Решение
В цитируемой вами статье сказано:
Эти условия гарантируют, что левое дерево является кучей (элемент с минимальным ключом находится на вершине кучи) и что кратчайший путь к конечному узлу получается путем перехода по правой ссылке
Состояние, о котором вы спрашивали, и
P.rank = 1 + min( (P.left).rank, (P.right).rank );
Обеспечивает второе.
Поскольку операция объединения выполняется вдоль правых узлов, это обеспечивает логарифмическую производительность объединения.