La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Dizionari alberi bilanciati. maggio 2002ASD2002 - Alberi bilanciati2 dizionari ADT che supportano le seguenti operazioni membership anche detta search.

Presentazioni simili


Presentazione sul tema: "Dizionari alberi bilanciati. maggio 2002ASD2002 - Alberi bilanciati2 dizionari ADT che supportano le seguenti operazioni membership anche detta search."— Transcript della presentazione:

1 dizionari alberi bilanciati

2 maggio 2002ASD Alberi bilanciati2 dizionari ADT che supportano le seguenti operazioni membership anche detta search insert delete o remove le liste e i BST sono dizionari

3 maggio 2002ASD Alberi bilanciati3 dizionari/2 tutte le implementazioni finora considerate hanno almeno unoperazione di costo lineare w.c.t. (worst case time, tempo nel caso peggiore) in molti casi un costo lineare è giudicato inaccettabile strutture più efficienti? alberi bilanciati tavole hash

4 maggio 2002ASD Alberi bilanciati4 introduzione al bilanciamento nozione intuitiva di bilanciamento tutti i rami di un albero hanno approssimativamente la stessa lunghezza ciascun nodo interno ha molti figli caso ideale per un albero k-ario ciascun nodo ha 0 o k figli la lunghezza di due rami qualsiasi differisce di al più una unità

5 maggio 2002ASD Alberi bilanciati5 -1 foglia + 1 nodo interno +2 foglie bilanciamento perfetto un albero binario perfettamente bilanciato di n nodi ha altezza se ogni nodo ha 0 o 2 figli n f = n i +1 n f = # foglie n i = # nodi interni n = n f + n i le foglie sono circa il 50% dei nodi

6 maggio 2002ASD Alberi bilanciati6 bilanciamento perfetto/2 facilmente generalizzabile ad alberi di arità k costo di ricerca/inserimento/eliminazione O(log n) ripetuti inserimenti/eliminazioni possono distruggere il bilanciamento degrado delle prestazioni

7 maggio 2002ASD Alberi bilanciati7 bilanciamento in altezza un albero è bilanciato in altezza se le altezze dei sottoalberi sinistro e destro di ogni nodo differiscono di al più ununità gli alberi bilanciati in altezza sono detti alberi AVL da Adelson-Velskii & Landis, primi proponenti

8 maggio 2002ASD Alberi bilanciati8 fattore di bilanciamento fattore di bilanciamento (FDB): altezza sottoalbero dx – altezza sottoalbero sx in un albero bilanciato in altezza |FDB| 1, per ogni nodo 28

9 maggio 2002ASD Alberi bilanciati9 alberi AVL?

10 maggio 2002ASD Alberi bilanciati10 alberi di Fibonacci alberi AVL col minimo numero di nodi (fissata laltezza) hFhFh AVL h

11 maggio 2002ASD Alberi bilanciati11 alberi di Fibonacci/2 AVL i AVL i +1 AVL i +2 alberi di Fibonacci alberi bilanciati di altezza i col minimo numero di nodi Relazioni AVL i +2 = AVL i + AVL i F i +2 = F i + F i +1 AVL i = F i +2 – 1

12 maggio 2002ASD Alberi bilanciati12 alberi di Fibonacci/3 un albero di Fibonacci ha tutti i fattori di bilanciamento dei nodi interni pari a ± 1 è lalbero bilanciato più vicino alla condizione di non bilanciamento un albero di Fibonacci con n nodi ha altezza < 1.44 lg(n +2) – dimostrato da Adelson-Velskii & Landis un AVL di n nodi ha altezza (lg n)

13 maggio 2002ASD Alberi bilanciati13 inserimento in AVL 1. inserire nuovo nodo come in un BST classico il nuovo nodo diviene una foglia 2. ricalcolare i fattori di bilanciamento che sono mutati in seguito allinserimento solo nel ramo interessato allinserimento (gli altri fattori non possono mutare), dal basso verso lalto 3. se nel ramo appare un fattore di bilanciamento pari a ±2 occorre ribilanciare tramite rotazioni

14 maggio 2002ASD Alberi bilanciati14 rotazioni negli AVL casi possibili DD: inserimento nel sottoalbero destro di un figlio destro (del nodo che si sbilancia) SD: inserimento nel sottoalbero sinistro di un figlio destro (del nodo che si sbilancia) DS: inserimento nel sottoalbero destro di un figlio sinistro (del nodo che si sbilancia) SS: inserimento nel sottoalbero sinistro di un figlio sinistro (del nodo che si sbilancia)

15 maggio 2002ASD Alberi bilanciati15 rotazione semplice (caso DD) gli antenati di P non sono interessati allinserimento perché in seguito alla rotazione recuperano il loro fattore di bilanciamento precedente

16 maggio 2002ASD Alberi bilanciati16 rotazione doppia (caso SD) h hh +1 0 P Q h h+1 h +2 P Q h h-1 h +2 P Q +1 h Q hh 0 h h-1 0 R P hh h h-1 +2 P R 0Q gli antenati di P non sono interessati allinserimento

17 maggio 2002ASD Alberi bilanciati17 rappresentazione nodo class AvlNode { Comparable element; AvlNode left; AvlNode right; int height; AvlNode(Comparable el) { this(el, null, null); } AvlNode(Comparable el, AvlNode lt,AvlNode rt) { element = el; left = lt; right = rt; height = 0; }

18 maggio 2002ASD Alberi bilanciati18 algoritmo inserimento /1 AvlNode insert(Comparable x, AvlNode t) { if(t == null) t = new AvlNode(x, null, null); else if(x.compareTo(t.element) < 0) { t.left = insert(x, t.left); if(height(t.left) - height(t.right) == 2) if(x.compareTo(t.left.element) < 0) t = rotateWithLeftChild(t); // SS else t = doubleWithLeftChild(t); // DS } else …

19 maggio 2002ASD Alberi bilanciati19 algoritmo inserimento /2 …else if(x.compareTo(t.element) > 0) { t.right = insert(x, t.right); if(height(t.right) - height(t.left) == 2) if(x.compareTo(t.right.element) > 0) t = rotateWithRightChild(t); // DD else t = doubleWithRightChild(t); // SD } else ; // Duplicate; do nothing t.height=max(height(t.left),height(t.right))+1; return t; } restituisce la nuova radice

20 maggio 2002ASD Alberi bilanciati20 rotazione semplice (SS) AvlNode rotateWithLeftChild(AvlNode k2) { AvlNode k1 = k2.left; k2.left = k1.right; k1.right = k2; k2.height = max(height(k2.left), height(k2.right)) + 1; k1.height = max(height(k1.left), k2.height ) + 1; return k1; }

21 maggio 2002ASD Alberi bilanciati21 rotazione doppia (SD) AvlNode doubleWithRightChild(AvlNode k1){ k1.right=rotateWithLeftChild(k1.right); return rotateWithRightChild(k1); }

22 maggio 2002ASD Alberi bilanciati22 inserimento negli AVL/costo passo 1: proporzionale allaltezza dellalbero (lg n) passo 2: proporzionale allaltezza dellalbero (lg n) passo 3: O (lg n) in totale: (lg n)

23 maggio 2002ASD Alberi bilanciati23 cancellazione negli AVL 1. cancellare nodo come in un BST classico 2. ricalcolare i fattori di bilanciamento che sono mutati in seguito alla cancellazione solo nel ramo interessato allinserimento (gli altri fattori non possono mutare), dal basso verso lalto 3. per ogni nodo con fattore di bilanciamento pari a ±2 occorre operare una rotazione semplice o doppia O(lg n) rotazioni nel caso peggiore

24 maggio 2002ASD Alberi bilanciati24 rotazione semplice eliminazione foglia da sottoalbero sinistro di P il figlio destro ha FDB +1; a), b) e c) il figlio destro ha FDB 0; d), e) ed f)

25 maggio 2002ASD Alberi bilanciati25 rotazione doppia eliminazione foglia da sottoalbero sinistro di P FDB(Q) = –1 e FDB(R)= –1; g), h) ed i) rotazione R-Q (P resta a +2, R e Q vanno a +1) e rotazione P-R

26 maggio 2002ASD Alberi bilanciati26 rotazione doppia/2 eliminazione foglia da sottoalbero sinistro di P FDB(Q) = -1, FDB(R)=+1, j), k) ed l) rotazione R-Q (P resta a +2, R va a +2 e Q va a 0) e rotazione P-R

27 maggio 2002ASD Alberi bilanciati27 cancellazione negli AVL/costo nel caso peggiore occorre effettuare rotazioni (semplici o doppie) lungo tutto il ramo passo 1: proporzionale allaltezza dellalbero (lg n) passo 2: proporzionale allaltezza dellalbero (lg n) passo 3: (lg n) · (1) in totale: (lg n)

28 maggio 2002ASD Alberi bilanciati28 cancellazione negli AVL/esempio animazione animazione tratta dal sito Web


Scaricare ppt "Dizionari alberi bilanciati. maggio 2002ASD2002 - Alberi bilanciati2 dizionari ADT che supportano le seguenti operazioni membership anche detta search."

Presentazioni simili


Annunci Google