J'essaie de prouver qu'un tas binaire avec nœuds a exactement , étant donné que le tas est construit de la manière suivante:
Chaque nouveau nœud est inséré via percoler vers le haut . Cela signifie que chaque nouveau nœud doit être créé au prochain enfant disponible. Ce que je veux dire par là, c'est que les enfants sont remplis de haut en bas et de gauche à droite. Par exemple, le segment de mémoire suivant:
0
/ \
1 2
aurait dû être construit dans cet ordre: 0, 1, 2. (Les nombres ne sont que des index, ils ne donnent aucune indication sur les données réelles contenues dans ce nœud.)
Cela a deux conséquences importantes:
Il ne peut exister de nœud au niveau sans que le niveau soit complètement rempli
Parce que les enfants sont construits de gauche à droite, il ne peut y avoir aucun "espace vide" entre les nœuds au niveau , ou des situations comme les suivantes:
0 / \ 1 2 / \ \ 3 4 6
(Ce serait un tas illégal selon ma définition.) Ainsi, une bonne façon de penser à ce tas est une implémentation de tableau d'un tas, où il ne peut pas y avoir de "sauts" dans les indéces du tableau.
Donc, je pensais que l'induction serait probablement un bon moyen de le faire ... Peut-être quelque chose devant traiter même des cas étranges pour n. Par exemple, une induction utilisant le fait que même les tas construits de cette façon doivent avoir un nœud interne avec un enfant pour un n pair, et aucun de ces nœuds pour un n impair. Des idées?
la source
Réponses:
Si je comprends bien votre question, le tas obtenu n'est qu'un arbre binaire ordonné, où dans l'ordre je veux dire que le ème niveau ne peut être occupé qu'après que le niveau k - 1 a été complètement rempli, et chaque niveau est occupé de gauche à droite, sans sauter.k k−1
Ensuite, la preuve va comme ça.
la source
Voici une preuve logique plus simple.
la source