Я обновляю теорию алгоритмов (из Cormen).
В главе для двоичных попыток есть упражнение, которое спрашивает:
Можно ли использовать свойство min-heap для распечаткиключи дерева n-узлов в отсортированном порядке за O (n) раз?Покажите, как, или объясните, почему нет.
Я думал, что да, это возможно.
В минимальной куче элемент в узле меньше, чем оба его потомка.
Так что коренькуча всегда является меньшим элементом из всех n элементов, а левый дочерний элемент корня меньше, чем все элементы в левом поддереве, а правый дочерний элемент корня меньше всех элементов в правом поддереве и т. д.
Поэтому, если мы продолжаем извлекать корень, распечатываем его, а затем обновляем корень с меньшим из его дочерних элементов, мы сохраняем свойство min-heap и печатаем в отсортированном порядке.(Я имею в виду минимальную кучу, которая не основана на массиве).
Так что это можно сделать за O (n) раз, так как для обновления корня мы просто сравниваем 2 дочерних элемента и обновляем указатель корня, чтобы он был меньшим из 2.
Но япроверено здесь в решении:
Решения для дополнения Cormen
И 1) это говорит о максимальных кучах 2) оно говорит, что не может быть сделано за O (n) время:
В куче ключом узла являются оба его дочерних ключа.В бинарном дереве поиска ключом узла является ключ его левого потомка, но ключ его правого потомка.Свойство heap, в отличие от свойства binary-searth-tree, не помогает печатать узлы в отсортированном порядке, поскольку не сообщает, какое поддерево узла содержит элемент для печати перед этим узлом.В куче самый большой элемент, меньший, чем узел, может находиться в любом поддереве.Обратите внимание, что если бы свойство heap могло использоваться для печати ключей в отсортированном порядке за O (n) время, у нас был бы алгоритм O (n) времени для сортировки, потому что построение кучи занимает только O (n) время.Но мы знаем (Глава 8), что сортировка сравнения должна занимать (n lg n) время.
С моей точки зрения, я могу понять, что с помощью max-heap невозможно распечататьих в O (n).
Но разве невозможно сделать это, используя свойство min-heap по объяснению, которое я объяснил?
Кроме того, почему решение игнорирует min-heap.Это опечатка или ошибка?
Я что-то здесь неправильно понимаю?