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