Сортировка кучей - максимальная куча

У меня есть список чисел в [17,98,89,42,67,54,89,25,38], который нужно вставить в пустую кучу слева направо. какой будет результирующая куча?


person k roy    schedule 07.09.2017    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он слишком специфичен и бесполезен для других читателей.   -  person Thilo    schedule 07.09.2017
comment
Я думаю, вы можете получить всю необходимую информацию в Wiki: en.wikipedia.org/wiki/Heapsort   -  person oleg.cherednik    schedule 07.09.2017
comment
homeworkoverflow.com ?   -  person Caius Jard    schedule 07.09.2017
comment
Я знаю, что такое сортировка кучей. Я просто хотел знать, существует ли какой-либо особый вид сортировки кучи, где левый дочерний элемент должен быть ниже правого дочернего элемента для любого заданного узла. Мой запрос был связан с этим. @Тило   -  person k roy    schedule 07.09.2017
comment
Вы не упомянули об этом в вопросе. Уточните у своего инструктора, как они хотят, чтобы их куча работала, но общая максимальная куча просто имеет родительские узлы больше, чем все дочерние узлы (без особой связи между левым и правым).   -  person Thilo    schedule 07.09.2017
comment
Не существует особого вида двоичной кучи, в которой левый дочерний элемент должен быть меньше правого дочернего элемента. Если вы попытаетесь применить это правило, ваша куча будет очень дорогой в обслуживании, и вы не сможете выполнить гарантии O(log n) для insert и remove-max операции. Для вашего основного вопроса возьмите лист бумаги и карандаш и выполните операции вставки вручную, рисуя дерево после каждого шага. Это займет у вас около 10 минут.   -  person Jim Mischel    schedule 07.09.2017


Ответы (1)


Хотя это не алгоритм сортировки кучи (сортирует набор данных с использованием кучи), создание кучи требует некоторой работы по сравнению, чтобы убедиться, что она остается кучей (вам нужна максимальная куча, поэтому все дочерние элементы меньше, чем их родитель ). Способ построить максимальную кучу состоит в том, чтобы поместить самый новый элемент в следующее доступное место (крайнее левое место в дереве, не заполненное в самой глубокой строке, или начать новую строку с самого левого места). Как только элемент вставлен, он заменяется своим родителем, если он больше, чем его родитель, пока он либо не станет корнем дерева, либо не найдет родителя больше, чем он сам. Это делается до тех пор, пока все элементы не будут вставлены, а у него, по сути, элемент max является корнем.

Важно отметить, что для минимальной кучи минимальным элементом является корень, поэтому вместо того, чтобы все родители были больше, чем их дочерние элементы, все дочерние элементы становятся больше, чем их родитель. При построении минимальной кучи по-прежнему добавляйте новые вершины в то же место, но меняйте местами новый потомок с их родителем, если дочерний элемент меньше родителя, а не больше.

Были прикреплены два изображения с полученными максимальными и минимальными кучами. Обратите внимание, что 89a соответствует первым 89, а 89b соответствует секундам, для пояснения. Максимальная куча Мин. куча

person Cullan Bedwell    schedule 20.04.2019