logo

Albero AVL

L'albero AVL è stato inventato da GM Adelson - Velsky e EM Landis nel 1962. L'albero è chiamato AVL in onore dei suoi inventori.

L'AVL Tree può essere definito come un albero di ricerca binario bilanciato in altezza in cui a ciascun nodo è associato un fattore di equilibrio calcolato sottraendo l'altezza del suo sottoalbero destro da quella del suo sottoalbero sinistro.

Si dice che l'albero sia bilanciato se il fattore di equilibrio di ciascun nodo è compreso tra -1 e 1, altrimenti l'albero sarà sbilanciato e dovrà essere bilanciato.

Fattore di equilibrio (k) = altezza (sinistra(k)) - altezza (destra(k))

Se il fattore di equilibrio di qualsiasi nodo è 1, significa che il sottoalbero di sinistra è un livello più alto del sottoalbero di destra.

Se il fattore di equilibrio di qualsiasi nodo è 0, significa che il sottoalbero sinistro e il sottoalbero destro hanno la stessa altezza.

Se il fattore di equilibrio di qualsiasi nodo è -1, significa che il sottoalbero di sinistra è un livello inferiore rispetto al sottoalbero di destra.

Un albero AVL è riportato nella figura seguente. Possiamo vedere che il fattore di equilibrio associato a ciascun nodo è compreso tra -1 e +1. pertanto, è un esempio di albero AVL.

Albero AVL

Complessità

Algoritmo Caso medio Il caso peggiore
Spazio SU) SU)
Ricerca o(log n) o(log n)
Inserire o(log n) o(log n)
Eliminare o(log n) o(log n)

Operazioni sull'albero AVL

Dato che l'albero AVL è anche un albero di ricerca binario, tutte le operazioni vengono eseguite nello stesso modo in cui vengono eseguite in un albero di ricerca binario. La ricerca e l'attraversamento non portano alla violazione della proprietà dell'albero AVL. Tuttavia, l'inserimento e l'eliminazione sono operazioni che possono violare questa proprietà e pertanto devono essere rivisitate.

SN Operazione Descrizione
1 Inserimento L'inserimento nell'albero AVL viene eseguito nello stesso modo in cui viene eseguito in un albero di ricerca binario. Tuttavia, ciò potrebbe portare a una violazione della proprietà dell'albero AVL e pertanto potrebbe essere necessario bilanciare l'albero. L'albero può essere bilanciato applicando rotazioni.
2 Cancellazione La cancellazione può anche essere eseguita nello stesso modo in cui viene eseguita in un albero di ricerca binario. L'eliminazione può anche disturbare l'equilibrio dell'albero, pertanto vengono utilizzati vari tipi di rotazioni per riequilibrare l'albero.

Perchè l'albero AVL?

L'albero AVL controlla l'altezza dell'albero di ricerca binario impedendogli di essere distorto. Il tempo impiegato per tutte le operazioni in un albero di ricerca binario di altezza h è OH) . Può però essere esteso a SU) se il BST diventa distorto (cioè il caso peggiore). Limitando questa altezza al log n, l'albero AVL impone un limite superiore su ciascuna operazione O(log n) dove n è il numero di nodi.

Rotazioni AVL

Eseguiamo la rotazione nell'albero AVL solo nel caso in cui il Balance Factor sia diverso da -1, 0 e 1 . Esistono fondamentalmente quattro tipi di rotazioni che sono le seguenti:

  1. L Rotazione L: il nodo inserito si trova nel sottoalbero sinistro del sottoalbero sinistro di A
  2. R Rotazione R: il nodo inserito si trova nel sottoalbero destro del sottoalbero destro di A
  3. Rotazione L R: il nodo inserito si trova nel sottoalbero destro del sottoalbero sinistro di A
  4. Rotazione R L: il nodo inserito si trova nel sottoalbero sinistro del sottoalbero destro di A

Dove il nodo A è il nodo il cui Fattore di equilibrio è diverso da -1, 0, 1.

Le prime due rotazioni LL e RR sono rotazioni singole e le due rotazioni successive LR e RL sono rotazioni doppie. Perché un albero sia sbilanciato l'altezza minima deve essere almeno 2, comprendiamo ogni rotazione

Java confronta le stringhe

1. Rotazione RR

Quando BST diventa sbilanciato, a causa dell'inserimento di un nodo nel sottoalbero destro del sottoalbero destro di A, allora eseguiamo la rotazione RR, la rotazione RR è una rotazione antioraria, che viene applicata sul bordo sotto un nodo avente fattore di bilanciamento -2

Rotazioni AVL

Nell'esempio sopra, il nodo A ha un fattore di equilibrio -2 perché un nodo C è inserito nel sottoalbero destro di A sottoalbero destro. Eseguiamo la rotazione RR sul bordo sotto A.

2. Rotazione LL

Quando BST diventa sbilanciato, a causa dell'inserimento di un nodo nel sottoalbero sinistro del sottoalbero sinistro di C, allora eseguiamo la rotazione LL, la rotazione LL è la rotazione in senso orario, che viene applicata sul bordo sotto un nodo avente fattore di bilanciamento 2.

Rotazioni AVL

Nell'esempio sopra, il nodo C ha un fattore di equilibrio 2 perché un nodo A è inserito nel sottoalbero sinistro del sottoalbero sinistro C. Eseguiamo la rotazione LL sul bordo sotto A.

3. Rotazione LR

Le doppie rotazioni sono leggermente più difficili della rotazione singola, come già spiegato sopra. Rotazione LR = Rotazione RR + Rotazione LL, ovvero la prima rotazione RR viene eseguita sul sottoalbero e poi la rotazione LL viene eseguita sull'albero completo, per albero completo si intende il primo nodo del percorso del nodo inserito il cui fattore di equilibrio è diverso da -1 , 0 o 1.

Cerchiamo di comprendere ogni singolo passaggio molto chiaramente:

Java comparabile
Stato Azione
Rotazioni AVL Un nodo B è stato inserito nel sottoalbero destro di A, nel sottoalbero sinistro di C, per cui C è diventato un nodo sbilanciato con fattore di bilanciamento 2. Questo caso è la rotazione L R dove: Il nodo inserito è nel sottoalbero destro del sottoalbero sinistro di C
Rotazioni AVL Poiché rotazione LR = rotazione RR + LL, quindi RR (in senso antiorario) sul sottoalbero con radice in A viene eseguito per primo. Eseguendo la rotazione RR, node UN , è diventato il sottoalbero sinistro di B .
Rotazioni AVL Dopo aver eseguito la rotazione RR, il nodo C è ancora sbilanciato, cioè ha un fattore di equilibrio 2, poiché il nodo A inserito è a sinistra di sinistra di C
Rotazioni AVL Ora eseguiamo la rotazione LL in senso orario sull'intero albero, cioè sul nodo C. nodo C è ora diventato il sottoalbero destro del nodo B, A è il sottoalbero sinistro di B
Rotazioni AVL Il fattore di equilibrio di ciascun nodo ora è -1, 0 o 1, ovvero BST ora è bilanciato.

4. Rotazione RL

Come già discusso, le doppie rotazioni sono leggermente più difficili della rotazione singola, come già spiegato sopra. Rotazione R L = Rotazione LL + Rotazione RR, ovvero la prima rotazione LL viene eseguita sul sottoalbero e poi la rotazione RR viene eseguita sull'albero completo, per albero completo si intende il primo nodo del percorso del nodo inserito il cui fattore di equilibrio è diverso da -1 , 0 o 1.

Stato Azione
Rotazioni AVL Un nodo B è stato inserito nel sottoalbero sinistro di C il sottoalbero destro di UN , per cui A è diventato un nodo sbilanciato con fattore di equilibrio - 2. Questo caso è la rotazione RL dove: Il nodo inserito è nel sottoalbero sinistro del sottoalbero destro di A
Rotazioni AVL Poiché rotazione RL = rotazione LL + rotazione RR, quindi LL (in senso orario) sul sottoalbero con radice C viene eseguito per primo. Eseguendo la rotazione RR, node C è diventato il sottoalbero destro di B .
Rotazioni AVL Dopo aver eseguito la rotazione LL, node UN è ancora sbilanciato, cioè ha un fattore di equilibrio -2, a causa del sottoalbero destro del nodo A del sottoalbero destro.
Rotazioni AVL Ora eseguiamo la rotazione RR (rotazione in senso antiorario) sull'intero albero, cioè sul nodo A. nodo C è ora diventato il sottoalbero destro del nodo B e il nodo A è diventato il sottoalbero sinistro di B.
Rotazioni AVL Il fattore di equilibrio di ciascun nodo ora è -1, 0 o 1, ovvero BST ora è bilanciato.

D: Costruisci un albero AVL con i seguenti elementi

H, I, J, B, A, E, C, F, D, G, K, L

1. Inserisci H, I, J

Rotazioni AVL

Inserendo gli elementi sopra indicati, soprattutto nel caso di H, il BST si sbilancia in quanto il Balance Factor di H è -2. Poiché il BST è inclinato a destra, eseguiremo la rotazione RR sul nodo H.

L’albero di bilancio risultante è:

Rotazioni AVL

2. Inserisci B, A

Rotazioni AVL

Inserendo gli elementi di cui sopra, specialmente nel caso di A, il BST diventa sbilanciato poiché il fattore di equilibrio di H e I è 2, consideriamo il primo nodo dell'ultimo nodo inserito, ovvero H. Poiché il BST di H è distorto a sinistra, eseguiremo la rotazione LL sul nodo H.

L’albero di bilancio risultante è:

Rotazioni AVL

3. Inserisci E

Rotazioni AVL

Inserendo E, BST si sbilancia poiché il Fattore di Equilibrio di I è 2, poiché se viaggiamo da E a I troviamo che è inserito nel sottoalbero sinistro del sottoalbero destro di I, eseguiremo la rotazione LR sul nodo I. LR = Rotazione RR + LL

3 a) Per prima cosa eseguiamo la rotazione RR sul nodo B

L'albero risultante dopo la rotazione RR è:

Rotazioni AVL

3b) Eseguiamo prima la rotazione LL sul nodo I

L'albero bilanciato risultante dopo la rotazione LL è:

Rotazioni AVL

4. Inserisci C, F, D

affettare l'array Java
Rotazioni AVL

Inserendo C, F, D, BST diventa sbilanciato in quanto il Fattore di Equilibrio di B e H è -2, poiché se viaggiamo da D a B troviamo che è inserito nel sottoalbero destro del sottoalbero sinistro di B, eseguiremo RL Rotazione sul nodo I. RL = LL + rotazione RR.

4a) Eseguiamo prima la rotazione LL sul nodo E

L'albero risultante dopo la rotazione LL è:

Rotazioni AVL

4b) Eseguiamo quindi la rotazione RR sul nodo B

L'albero bilanciato risultante dopo la rotazione RR è:

Rotazioni AVL

5. Inserisci G

Rotazioni AVL

Inserendo G, BST si sbilancia poiché il Fattore di Equilibrio di H è 2, poiché se viaggiamo da G a H, troviamo che è inserito nel sottoalbero sinistro del sottoalbero destro di H, eseguiremo la rotazione LR sul nodo I. LR = rotazione RR + LL.

5 a) Eseguiamo innanzitutto la rotazione RR sul nodo C

L'albero risultante dopo la rotazione RR è:

Rotazioni AVL

5 b) Eseguiamo quindi la rotazione LL sul nodo H

L'albero bilanciato risultante dopo la rotazione LL è:

Rotazioni AVL

6. Inserisci K

Rotazioni AVL

Inserendo K, BST diventa sbilanciato poiché il fattore di bilanciamento di I è -2. Poiché il BST è inclinato a destra da I a K, eseguiremo la rotazione RR sul nodo I.

L'albero bilanciato risultante dopo la rotazione RR è:

Rotazioni AVL

7. Inserisci L

All'inserimento l'albero L è ancora bilanciato poiché il fattore di equilibrio di ciascun nodo ora è -1, 0, +1. Quindi l'albero è un albero AVL bilanciato

Rotazioni AVL