Comment prouvez-vous que la hauteur attendue d'un arbre de recherche binaire construit de façon aléatoire avec nœuds est ? Il y a une preuve dans CLRS Introduction to Algorithms (chapitre 12.4), mais je ne la comprends pas.O ( log n )
10
Réponses:
Réfléchissons d'abord intuitivement à cela. Dans le meilleur des cas, l'arbre est parfaitement équilibré; dans le pire des cas, l'arbre est entièrement déséquilibré:
À partir du nœud racine , cet arbre de gauche a deux fois plus de nœuds à chaque profondeur successive, de sorte que l'arbre a n = ∑ h i = 0 2 i = 2 h + 1 - 1 nœuds et une hauteur h (qui est en ce cas 3). Avec un peu de maths, n ≤ 2 h + 1 - 1 → h ≤ ⌈ log 2 ( n + 1 ) - 1 ⌉ ≤ ⌊ l op n=∑hi=02i=2h + 1- 1 h , c'est-à-dire qu'il a unehauteur O ( log n ) . Pour l'arbre entièrement déséquilibré, la hauteur de l'arbre est simplement n - 1 → O ( n ) . Nous avons donc nos limites.n ≤ 2h + 1- 1 → h ≤ ⌈ log2( n + 1 ) - 1 ⌉ ≤ ⌊ l o g2n ⌋ O ( logn ) n - 1 → O ( n )
Si nous construisions un arbre équilibré à partir d'une liste ordonnée , nous choisirions l'élément central comme nœud racine. Si nous construisons au hasard un arbre, l'un des n nœuds est également susceptible d'être choisi et la hauteur de notre arbre est: h e i g h t t r e e = 1 + max ( h e i g h t l e f t s u b t r e{ 1 , 2 , … , n } n
Nous savons que dans un arbre de recherche binaire, le sous-arbre gauche ne doit contenir que des clés inférieures au nœud racine. Ainsi, si nous choisissons au hasard l'élément i t h , le sous-arbre gauche ai-1éléments et le sous-arbre droit an-iéléments, donc de manière plus compacte: h n =1+max( h i -
Comme je suis sûr que vous l'avez remarqué, j'ai légèrement dévié de la façon dont CLRS le prouve, car CLRS utilise deux techniques de preuve relativement courantes qui sont déconcertantes pour les non-initiés. La première consiste à utiliser des exposants (ou logarithmes) de ce que nous voulons trouver (dans ce cas, la hauteur), ce qui rend les mathématiques un peu plus propres; la seconde consiste à utiliser des fonctions d'indicateur (que je vais juste ignorer ici). Le CLRS définit la hauteur exponentielle comme , donc la récurrence analogue est Y n = 2 × max ( Y i - 1 , Y n - i )Ouin= 2hn Ouin= 2 × max ( Yi - 1, Yn - i) .
En supposant l'indépendance (que chaque tirage d'un élément (parmi les éléments disponibles) pour être la racine d'un sous-arbre soit indépendamment de tous les tirages précédents), nous avons toujours la relation: pour lequel j'ai fait deux étapes: (1) déplacer le1
À ce stade, CLRS tire une preuve d'inductionE[ Ouin] ≤ 14( n+33) ∑n - 1i = 0( i+33) = ( n+34) n3 Ouin= 2hn hn= journal2n3= 3 log2n → O ( logn ) nk k
la source
n^k
), la conclusion est la même car lek
est supprimé dans la notation big-O (la façon dont 3 a été supprimée). Mais si nous substituions quelque chose d'exponentiel (e^n
), ce serait toujours une borne supérieure correcte , mais pas une limite stricte . Nous savons que la hauteur attendue est au moins logarithmique, donc déterminer qu'elle est au plus logarithmique la rend serrée.