Alberi di ricerca binari

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Strutture dati per insiemi disgiunti
Ordinamento ottimo Ricerca
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Grafi e Alberi
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Code con priorità Ordinamento
Heap binomiali.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
1 Strutture dati avanzate Vedremo alcune strutture dati che permettono di eseguire in modo particolarmente efficiente un determinato insieme di operazioni.
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
CORSO DI PROGRAMMAZIONE II Operazioni su alberi ordinati e non
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Dizionari alberi bilanciati.
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati 20 aprile 2001
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Algoritmi e Programmazione Avanzata
Algoritmi e Programmazione Avanzata
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Heap Ordinamento e code di priorità Ugo de Liguoro.
B trees.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
alberi completamente sbilanciati
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Algoritmi e Strutture Dati
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Alberi rosso-neri Le operazioni sugli alberi binari di ricerca hanno complessità proporzionale all’altezza h dell’albero. Gli alberi rosso-neri sono alberi.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Heap di Fibonacci.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Transcript della presentazione:

Alberi di ricerca binari Algoritmi e Programmazione Avanzata Alberi di ricerca binari Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Alberi di ricerca binari

Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura dati che supporta in modo efficiente le operazioni SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT, DELETE. Sono utili come implementazione di dizionari o di code prioritarie. A.A. 2004/2005 APA-bst

Definizione Albero binario di ricerca: Albero: struttura gerarchica con una radice. Esiste un solo percorso dalla radice a ciascun nodo. Tale percorso definisce delle relazioni padre-figlio Binario: ogni nodo ha al più 2 figli (left e right) e (salvo la radice) esattamente un padre (p) Ricerca: i nodi hanno un campo chiave key, e sono ordinati in base ad esso A.A. 2004/2005 APA-bst

Relazione di ordinamento (I) Per ciascun nodo x vale che: Per tutti i nodi y nel sottoalbero sinistro di x, key[y]key[x] Per tutti i nodi y nel sottoalbero destro di x, key[y]key[x] A.A. 2004/2005 APA-bst

Relazione di ordinamento (II) x  x  x A.A. 2004/2005 APA-bst

La relazione di ordinamento è verificata: Esempio I La relazione di ordinamento è verificata: l'albero è un BST 5 3 7 2 5 8 A.A. 2004/2005 APA-bst

La relazione di ordinamento è verificata: Esempio La relazione di ordinamento è verificata: l'albero è un BST 2 3 7 5 8 5 A.A. 2004/2005 APA-bst

La relazione di ordinamento NON è verificata: Esempio La relazione di ordinamento NON è verificata: l'albero NON è un BST 2 3 7 9 8 5 A.A. 2004/2005 APA-bst

Alberi bilanciati Un albero binario si dice bilanciato se per ogni suo nodo vale che il numero di nodi nel sottoalbero di sinistra differisce al più di una unità dal numero di nodi nel sottoalbero di destra. A.A. 2004/2005 APA-bst

Esempio I Albero bilanciato 5 3 7 2 5 8 A.A. 2004/2005 APA-bst

Esempio II Albero NON bilanciato 2 3 7 9 8 5 A.A. 2004/2005 APA-bst

Complessità I BST sono definiti in modo tale che le operazioni abbiano una complessità proporzionale all’altezza h dell’albero. Per un albero completo e bilanciato con n nodi, la complessità è quindi (log n) nel caso peggiore. Per un albero totalmente sbilanciato, invece, si ricade nel caso peggiore O(n). Per un albero casuale ci si aspetta (log n). A.A. 2004/2005 APA-bst

Attraversamenti Dato un BST, è possibile definire delle operazioni di attraversamento, ossia di visita di tutti i nodi, secondo 3 ordini diversi: Preorder: prima il nodo, poi i due sottoalberi Inorder: prima il sottoalbero sinistro, poi il nodo, poi il sottoalbero destro Postorder: prima i due sottoalberi, poi il nodo A.A. 2004/2005 APA-bst

Attraversamento Preorder Preorder-Tree-Walk(x) 1 if x  NIL 2 then print key[x] 3 Preorder-Tree-Walk(left[x]) 4 Preorder-Tree-Walk(right[x]) A.A. 2004/2005 APA-bst

Attraversamento Inorder Inorder-Tree-Walk(x) 1 if x  NIL 2 then Inorder-Tree-Walk(left[x]) 3 print key[x] 4 Inorder-Tree-Walk(right[x]) A.A. 2004/2005 APA-bst

Attraversamento Postorder Postorder-Tree-Walk(x) 1 if x  NIL 2 then Postorder-Tree-Walk(left[x]) 3 Postorder-Tree-Walk(right[x]) 4 print key[x] A.A. 2004/2005 APA-bst

Osservazioni Nel caso di un BST T, l’attraversamento Inorder (ottenuto chiamando Inorder-Tree-Walk(root[T])) stampa gli elementi nell’ordine crescente del campo key. Tutti gli attraversamenti hanno complessità (n), in quanto ciascun nodo viene considerato esattamente una volta. A.A. 2004/2005 APA-bst

Esempio 15 6 18 3 7 17 20 2 4 13 9 A.A. 2004/2005 APA-bst

Esercizio Si fornisca il risultato della visita in Preorder, Inorder, Postorder sul BST visto in precedenza. A.A. 2004/2005 APA-bst

Soluzione (Inorder) 15 6 18 17 20 3 7 2 4 13 9 1 2 3 4 5 6 7 8 9 10 11 A.A. 2004/2005 APA-bst

Soluzione (Preorder) 15 6 18 17 20 3 7 2 4 13 9 1 2 3 4 5 6 7 8 9 10 11 A.A. 2004/2005 APA-bst

Soluzione (Postorder) 1 2 3 4 5 6 7 8 9 10 11 15 6 18 17 20 3 7 2 4 13 9 A.A. 2004/2005 APA-bst

Esercizio proposto Si definiscano le strutture dati per la rappresentazione di un BST. Si definiscano i prototipi e si implementino le funzioni di visita dell’albero. A.A. 2004/2005 APA-bst

Operazioni di ricerca nei BST I BST sono particolarmente ottimizzati per le funzioni di ricerca: Search, Minimum/Maximum, Predecessor/Successor. La loro complessità è O(h), in funzione dell’altezza h dell’albero. A.A. 2004/2005 APA-bst

Tree-Search Tree-Search(x, k) 1 if x = NIL or k = key[x] 2 then return x 3 if k < key[x] 4 then return Tree-Search(left[x], k) 5 else return Tree-Search(right[x], k) A.A. 2004/2005 APA-bst

Esempio 15 6 18 17 20 3 7 2 4 13 9 Tree-Search(13) A.A. 2004/2005 APA-bst

Tree-Search iterativa Tree-Search-iterativa(x, k) 1 while x  NIL and k  key[x] 2 do if k < key[x] 3 then x  left[x] 4 else x  right[x] 5 return x A.A. 2004/2005 APA-bst

Tree-Search-iterativa(13) Esempio 15 6 18 17 20 3 7 2 4 13 9 Tree-Search-iterativa(13) A.A. 2004/2005 APA-bst

Minimo e massimo (versioni iterative) Tree-Minimum(x) 1 while left[x]  NIL 2 do x  left[x] 3 return x Tree-Maximum(x) 1 while right[x]  NIL 2 do x  right[x] A.A. 2004/2005 APA-bst

Successore Dato un nodo, determinare il nodo immediatamente successivo. Vi sono 2 casi: Il minimo del sottoalbero di destra p[x] x p[x] x Il primo padre di cui il nodo è nel sottoalbero sinistro A.A. 2004/2005 APA-bst

Successore Tree-Successor(x) 1 if right[x]  NIL 2 then return Tree-Minimum(right[x]) 3 y  p[x] 4 while y  NIL and x = right[y] 5 do x  y 6 y  p[y] 7 return y A.A. 2004/2005 APA-bst

Esempio Tree-Successor(7) 15 6 18 17 20 3 7 2 4 13 9 A.A. 2004/2005 APA-bst

Esempio Tree-Successor(7) 15 6 18 17 20 3 7 2 4 13 9 A.A. 2004/2005 APA-bst

Esempio Tree-Successor(4) 15 6 18 17 20 3 7 2 4 13 9 A.A. 2004/2005 APA-bst

Esempio Tree-Successor(4) 15 6 18 17 20 3 7 2 4 13 9 A.A. 2004/2005 APA-bst

Predecessore Tree-Predecessor(x) 1 if left[x]  NIL 2 then return Tree-Maximum(left[x]) 3 y  p[x] 4 while y  NIL and x = left[y] 5 do x  y 6 y  p[y] 7 return y A.A. 2004/2005 APA-bst

Complessità La complessità di tutte le procedure di ricerca è O(h). A.A. 2004/2005 APA-bst

Inserimento e cancellazione Queste operazioni richiedono di modificare la struttura dati, aggiungendo o togliendo nodi, mantenendo la proprietà di ordinamento propria del BST. A.A. 2004/2005 APA-bst

Inserimento Dato un BST, inserire un nodo z di chiave v: Si crea un nuovo nodo z, con left[z]=right[z]=NIL Si trova la posizione in cui inserirlo, simulando la ricerca di key[z] Si aggiornano i puntatori Il nuovo nodo è sempre inserito come una nuova foglia. A.A. 2004/2005 APA-bst

Ricerca key[z] nell’albero Tree-Insert (I) Tree-Insert(T, z) 1 y  NIL 2 x  root[T] 3 while x  NIL 4 do y  x 5 if key[z]<key[x] 6 then x  left[x] 7 else x  right[x] Ricerca key[z] nell’albero y x=NIL z A.A. 2004/2005 APA-bst

Inserisce z come figlio di y Tree-Insert (II) Inserisce z come figlio di y 8 p[z]  y 9 if y = NIL 10 then root[T]  z 11 else if key[z] < key[y] 12 then left[y]  z 13 else right[y]  z y x=NIL z A.A. 2004/2005 APA-bst

Esempio Tree-Insert(13) 12 5 18 2 9 15 20 17 13 z A.A. 2004/2005 APA-bst

Esempio Tree-Insert(13) 12 5 18 y 2 9 15 20 x 17 13 13 z A.A. 2004/2005 APA-bst

Esempio Tree-Insert(13) 12 5 18 y 2 9 15 20 17 13 z A.A. 2004/2005 APA-bst

Cancellazione La cancellazione è l’operazione più complessa sui BST, in quanto il nodo da cancellare potrebbe avere 0, 1 o 2 figli, e occorre “ricollegare” i nodi rimasti in assenza di quello cancellato. A.A. 2004/2005 APA-bst

Se ‘z’ non ha figli, è sufficiente rimuoverlo Casi possibili: 0 figli 12 15 15 12 5 16 5 16 3 12 20 3 12 20 z 10 13 18 23 10 18 23 6 6 7 7 Se ‘z’ non ha figli, è sufficiente rimuoverlo A.A. 2004/2005 APA-bst

Casi possibili: 1 figlio 15 12 15 12 z 5 16 5 3 12 20 3 12 20 13 10 13 18 23 10 18 23 6 6 Se ‘z’ ha un figlio, questo diviene il nuovo figlio del padre di ‘z’ 7 7 A.A. 2004/2005 APA-bst

Casi possibili: 2 figli (I) 15 12 12 15 z z 5 16 5 16 3 12 20 3 12 20 13 10 13 18 23 10 18 23 6 6 7 7 Se ‘z’ ha 2 figli, si elimina il suo successore e si copia il successore nella posizione di ‘z’ A.A. 2004/2005 APA-bst

Tree-Delete (I) Tree-Delete(T, z) 1 if left[z]=NIL or right[z]=NIL 12 Tree-Delete (I) y x Tree-Delete(T, z) 1 if left[z]=NIL or right[z]=NIL 2 then y  z 3 else y  Tree-Successor(z) 4 if left[y]  NIL 5 then x  left[y] 6 else x  right[y] y: nodo da eliminare x: unico figlio di y A.A. 2004/2005 APA-bst

Tree-Delete (II) 7 if x  NIL 8 then p[x]  p[y] 9 if p[y] = NIL 12 Tree-Delete (II) y x 7 if x  NIL 8 then p[x]  p[y] 9 if p[y] = NIL 10 then root[T] = x 11 else if y = left[p[y]] 12 then left[p[y]]  x 13 else right[p[y]]  x Aggiorna padre di x y è la radice? x diviene radice Se no, collega x al padre di y A.A. 2004/2005 APA-bst

Tree-Delete (III) 14 if y  z 15 then key[z]  key[y] 16 fields[z]  fields[y] 17 return y Eventualmente, ricopia le informazioni del successore nel nodo da eliminare A.A. 2004/2005 APA-bst

Complessità La complessità di tutte le procedure di modifica dell’albero (inserimento e cancellazione) è O(h). A.A. 2004/2005 APA-bst

Bilanciamento Le operazioni hanno complessità O(h): in un albero completamente bilanciato h = log2 n in un albero completamente sbilanciato h = n Le operazioni sui BST hanno quindi complessità variabile tra O(log2 n) e O(n) A.A. 2004/2005 APA-bst

Esercizio Si vuole costruire un BST contenente gli elementi interi da 0 a 9. Si fornisca almeno una sequenza di chiamate alla funzione Insert che crei un BST bilanciato Si fornisca almeno una sequenza di chiamate alla funzione Insert che crei un BST sbilanciato A.A. 2004/2005 APA-bst

Insert() nell’ordine: 6, 3, 1, 0, 2, 5, 4, 8, 7, 9 Soluzione (I) 6 3 8 1 5 7 9 2 4 Insert() nell’ordine: 6, 3, 1, 0, 2, 5, 4, 8, 7, 9 A.A. 2004/2005 APA-bst

Insert() nell’ordine: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 Soluzione (II) 9 8 7 6 5 4 3 2 1 Insert() nell’ordine: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 A.A. 2004/2005 APA-bst

C: definizione di tipo typedef struct btnode *P_NODE; struct btnode{ int key; P_NODE left, right; }NODE; A.A. 2004/2005 APA-bst

Procedura inorder void inorder( P_NODE head) { if( head == NULL) return; inorder( head->left); printf( "%d ", head->key); inorder( head->right); } A.A. 2004/2005 APA-bst

Procedura search P_NODE search( int key, P_NODE head) { if((head == NULL)!!(head->key == key)) return( head); else if( head->key < key) return head->right; return head->left; } A.A. 2004/2005 APA-bst

Procedura insert (I) int insert( int key, P_NODE *phead) { if( *phead == NULL) { if((*phead=(P_NODE)malloc (sizeof(NODE))) == NULL) return( 0); else { (*phead)->key = key; (*phead)->left = NULL; (*phead)->right = NULL; return( 1); } A.A. 2004/2005 APA-bst

Procedura insert (II) else if( (*phead)->key == key) { printf("Elemento gia` presente \n"); return( 0); } if( (*phead)->key < key) return( insert( key, &((*phead)->right))); &((*phead)->left))); A.A. 2004/2005 APA-bst

Programma chiamante P_NODE head=NULL; … if( !insert( key, &head)) printf( "Errore in inserimento \n"); if( search( key, head)) printf( "Trovato\n"); else printf( "Non trovato\n"); inorder( head); A.A. 2004/2005 APA-bst

Alberi bilanciati Le procedure Insert e Delete sono in grado di mantenere la proprietà di ordinamento dei BST, ma non garantiscono affatto il bilanciamento. Esistono versioni più sofisticate degli alberi binari nelle quali viene garantito anche il bilanciamento. Esempio: alberi red-black (per i quali si dimostra che: h  2 log2(n+1)). A.A. 2004/2005 APA-bst