Я пытаюсь доказать, что двоичная куча с узлами имеет точно exactly nвыходит, учитывая, что куча строится следующим образом:
Каждый новый узел вставляется через percolate up . Это означает, что каждый новый узел должен быть создан на следующем доступном дочернем узле. Под этим я подразумеваю, что дети заполнены вниз и слева направо. Например, следующая куча:
0
/ \
1 2
должен был бы быть построен в следующем порядке: 0, 1, 2. (числа являются просто индексами, они не дают указания на фактические данные, хранящиеся в этом узле.)
Это имеет два важных значения:
На уровне не может быть узла, если уровень k не заполнен полностью
Поскольку дочерние элементы создаются слева направо, между узлами на уровне не может быть «пустых мест» или ситуаций, подобных следующим:
0 / \ 1 2 / \ \ 3 4 6
(По моему определению это была бы недопустимая куча.) Таким образом, хороший способ думать об этой куче - реализация массива кучи, где не может быть никаких «переходов» в значениях массива.
Итак, я думал, что индукция, вероятно, будет хорошим способом сделать это ... Возможно, что-то, имеющее дело с даже нечетными случаями для n. Например, некоторая индукция использует тот факт, что четные кучи, построенные таким образом, должны иметь внутренний узел с одним дочерним элементом для четного n, и не иметь таких узлов для нечетного n. Идеи?
источник
Ответы:
Если я правильно понял ваш вопрос, полученная куча - это просто упорядоченное бинарное дерево, где в упорядоченном я имею в виду, что й уровень может быть занят только после того, как уровень k - 1 полностью заполнен, а каждый уровень занят слева. направо, не пропуская.k k−1
Тогда доказательство идет так.
источник
Вот более простое логическое доказательство.
источник