MIGO ET COMPLEXITE1 ARBRES EQUILIBRES Définition : On dit qu’un arbre binaire est H équilibré si en tout nœud de l’arbre, les hauteurs des sous-arbres gauche et droit diffèrent au plus de 1. Exemple :
MIGO ET COMPLEXITE2 Fonction DESEQUILIBRE sur les arbres binaires Déséquilibre (Ø)= 0 Déséquilibre ( )= hauteur (G) – hauteur (D) Remarque : Un arbre T est H-équilibré si pour tout sous-arbre S de T on a : Déséquilibre (s)Є -1,0,1
MIGO ET COMPLEXITE3 Proposition Tout arbre H-équilibré ayant n nœuds a une hauteur h vérifiant : log 2 (n+1) ≤ h + 1 <1,44 log 2 (n+2) Preuve a)Arbre H-équilibré de hauteur h contenant le plus de nœuds ? Celui dont tous les niveaux sont complètement remplis Déséquilibre o en chaque nœud N max (h) : nombre de nœuds d’un tel arbre N max (h) = 1+2N max (h-1) N max (o) = 1
MIGO ET COMPLEXITE4 Nmax (h) = 2 h+1 – 1 Donc pour tout arbre H-équilibré ayant n nœuds et de hauteur h : n ≤ 2 h+1 – 1 n+1 ≤ 2 h+1 Log2 (n+1) ≤ h+1 b) Arbres H-équilibrés de hauteur h contenant le moins de nœuds ? ▪ si déséquilibre = -1 ou +1 dans tous les noeuds N min (h) : nombre de nœuds d’un tel arbre N min (o)=1, N min (1) = 2 N min (h) = 1+N min (h-1) + N min (h-2)
MIGO ET COMPLEXITE5 Soit F(h) = N min (h) + 1 On a : F(h) = F(h-1) + F (h-2) F(o)є = 2 ; F(1) = 3 Equation de récurrence de Fibonacci F (h) = r h F (h-1) = r h-1 ; F(h-2) = r h-2 r h = r h-1 + r h-2 r h-2 (-r 2 + r + 1) = 0 ≠ 0 r 2 -r-1=0 ∆ = = 5 r1 = 1+√5 = Ø, r2 = 1- √5 = Ø 2 2
MIGO ET COMPLEXITE6 La solution est de la forme F(h) = λ1 Ø h + λ 2 (Ø)h F(o) = 2 2 = λ1 + λ2 (1) F (1) = 3 3 = λ1 Ø + ג 2 Ø 3 = λ1 (1+√5) + λ2 (1-√5) = λ1 (1+√5) + λ2 (1-√5) 6 = λ1 + ג2 + √5 (λ1 - ג2 ) 6 = 2 + √5 (ג1 - ג2 ) 4 = ג1 - ג2 (2) (1)+ (2) : = 2 ג1 √5 λ1 = = √5 + 2 √5 √5
MIGO ET COMPLEXITE7 Ø = 1 + √5 2 Ø-1 = √5 2 λ1 = 2Ø-1+2 = 2Ø+1 2Ø-1 2Ø-1 λ2 = 2- ג1 = 2-(√5 + 2) Ø h + (√5 – 2) √5 √5 F(h)= 1 (√5 + 2) Ø h + (√5 – 2) Ø h √5
MIGO ET COMPLEXITE8 F (h) = 1 (Ø h+3 – Ø h+3 ) √5 N min (h)+1 = 1 ( Ø h+3 – Ø h+3 ) √5 Donc pour tout arbre H-équilibré à n noeuds et de hauteur h N+1 >1 ( Ø h+3 – Ø h+3 ) √5 Or : -1 <Ø h+3 = (1- √5 ) h+3 <1 2 n+1>1 (Ø h+3 – 1) √5 1+ √5(n+1) ≥ Ø h+3 Log Ø 1+√5(n+1) ≥ h+3 Log Ø √5(n+2) ≥ h+3
MIGO ET COMPLEXITE9 Log Ø (x) = (log 2 (Ø)) -1 log 2 (Ø) h+3 < log Ø ( √5) + log Ø (n+2) < log 2 (n+2) log 2 (Ø) Remarque : √5 < Ø 2 = (1+√5) 2 2 log Ø (√5) < log Ø (Ø 2 ) < 2 1 ~1,44 Log2 Ø h+1 < 1,44 log2 (n+2)
MIGO ET COMPLEXITE10 Arbres AVL Adelson – Velskii – Landis Définition Un AVL est un arbre binaire de recherche H-équilibré Equilibrage ? Rotations Rotation droite, rotation gauche A = q p p q u w v u vw rd (A) rz (A) A, u, v, w : arbres binaires de recherche
MIGO ET COMPLEXITE11 Rotation gauche-droite A = r p q r T q p T w rgd (A) A, T, u, v, w : arbres binaires de recherche uv w uy Remarque : rotation gauche-droite = la composée d’une rotation gauche sur le sous-arbre gauche de A suivie d’une rotation droite sur A
MIGO ET COMPLEXITE12 Function RD (A : ARBRE) : ARBRE ; Var Aux : ARBRE ; Begin Aux : = A.g ; A.g : = Aux.d ; Aux.d = A ; RD : = Aux end RD ; Function RGD (A : ARBRE) : ARBRE ; Begin A.g : = RG (A.g) ; RGD : = RD (A) end RGD ;
MIGO ET COMPLEXITE13 Adjonction dans un AVL et rééquilibrages 12 Exemple : 12, 3, 2, 5, 4, 7, 9, 11, 14, 10 E 1 :E 2 : 12 3 E 3 : rd E 4 : E 5 : rd
MIGO ET COMPLEXITE14 E 6 : rg 4 2 E 7 : rgd E 8 et E 9 :
MIGO ET COMPLEXITE rgd Principe général Soit T= un AVL Supposons que l’adjonction de l’élément x ait lieu sur une feuille de G et qu’elle fasse augmenter de 1 la hauteur de G et que G reste un AVL 1)Si le déséquilibrage de T valait 0 avant l’adjonction, il vaut 1 après. T reste un AVL et sa hauteur a augmenté de 1
MIGO ET COMPLEXITE16 2) Si le déséquilibrage de T valait -1 avant l’adjonction, il vaut 0 après. T reste un AVL et sa hauteur n’est pas modifiée 3) Si le déséquilibre de T valait +1 avant l’adjonction, il vaut +2 après. T n’est plus H-équilibré il faut le restructurer en AVL adj dans sous-arbre 2 cas possibles gauche de G adj dans sous-arbre droit de G
MIGO ET COMPLEXITE17 b a.. rd a..... b... a.. b... c rgd.. a c b
MIGO ET COMPLEXITE18 ALGORITHME D’ADJONCTION DANS UN AVL Ajoutavl : Arbre x Valeur Arbre ajoutavl (Ø,x) = x x ≤ r ajoutavl (, x) = rééquilibrage ( ) x>r ajoutavl (, x) = rééquilibrage ( ) Rééquilibrage :Arbre Arbre Déséquilibre : Arbre {-2,-1,0,1,2}
MIGO ET COMPLEXITE19 Déséquilibre (T)=0 (ou 1 ou -1)rééquilibrage (T) = T Déséquilibre (T)=+2 et Déséquilibre (g (T))=+1 rééquilibrage (T) = rd (T) Déséquilibre (T)=-2 et Déséquilibre (d (T))=-1 rééquilibrage (T)=rg (T) Déséquilibre (T)=+2 et Déséquilibre (g(T))=-1 rééquilibrage (T)=rgd (T) Déséquilibre (T)=-2 et Déséquilibre (d(T))=+1 rééquilibrage (T)= rdg (T) Implémentation type AVL = NŒUD ; NŒUD = record deseq : ; val : VALEUR ; g, d : AVL end ;
MIGO ET COMPLEXITE20 Procédure AJOUTAVL (var T : AVL ; x : VALEUR) ; Var Y, A, AA, PP : AVL ; { AA est le père de A ; PP père de P } begin { création du noeud à ajouter } new (Y) : Y.val : = x ; Y.deseq :=0 ; y.g=nil ; y.d : = nil ; if T = nil then T:=Y Else Begin { descente à la recherche de la feuille, en mémorisant le dernier noeud pointé par A dont le déséquilibre est + 1 } A : = T ; AA : = nil ; P : =T ; PP:= nil; while P <> nil do begin if P. deseq <> 0 then begin A : = P ; AA : = PP : P ; If x ≤P.val then P : = P.g else P:z P.d PP; end { adjonction } If x ≤ PP.val then PP.g : = Y else PP.d : = Y ; {modification du déséquilibre sur le chemin de A à Y}
MIGO ET COMPLEXITE21 P = A; while P <> Y do if x ≤ P.val then begin P.deseq : = P.deseq + 1 ; P : = P.g end else begin P.deseq : = P.deseq - 1 ; P : = P.d end ; { rééquilibrage } Case A.deseq of O, +1,-1 : return ; +2: Case A.g deseq of +1:begin A:=RD(A) ; A deseq :=0 ; A.d.deseq:=0 ; End ; -1:begin A:=RDG (A); Case A.deseq oF +1:begin A.g.deseq :=O ; A.d.deseq :=-1 end ; -1:begin A.g.deseq :=-1 ; A.d.deseq :=0 end ; 0:begin A.g.deseq :=O ; A.d.deseq :=0 end ; End ; A.deseq :=0; End ;
MIGO ET COMPLEXITE22 -2:{ cas symétrique du cas +2 }... End { fin du cas } If AA = mil then T:=A Else if A.val ≤AA.val then AA.g : = A else AA.d:=A End ; +2: Case A.g deseq of +1:begin A:=RD(A) ; A deseq :=0 ; A.d.deseq:=0 ; End ; { descente } End AJOUT VAL ;