1 / 99

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Alberi Binari di Ricerca. Alberi binari di ricerca. Motivazioni gestione e ricerche in grosse quantità di dati liste ed array non sono adeguati perché inefficienti in tempo O ( n ) o in spazio Esempi : Mantenimento di archivi ( DataBase )

yale
Download Presentation

Algoritmi e Strutture Dati

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmi e Strutture Dati Alberi Binari di Ricerca

  2. Alberi binari di ricerca Motivazioni • gestione e ricerche in grosse quantità di dati • liste ed arraynon sono adeguati perché inefficienti in tempo O(n) o in spazio Esempi: • Mantenimento di archivi (DataBase) • In generale, mantenimento e gestione di corpi di dati su cui si effettuano molte ricerche.

  3. Alberi binari di ricerca Definizione:Unalbero binario di ricercaè un albero binario che soddisfa la seguente proprietà: se X è un nodo e Y è un nodo nel sottoalbero si-nistro di X, allora key[Y] key[X]; se Y è un nodo nel sottoablero destro di X allora key[Y]  key[X] T 6 8 2 1 4 3

  4. T 6 8 2 1 4 3 Alberi binari di ricerca Assumiamo che i valori nei nodi dell’albero siano tutti distinti. Assumiamo che i valori nei nodi (le chiavi) pos-sano essere ordinati. Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X

  5. Alberi binari di ricerca: esempio T Ricerca del valore 4 6 8 2 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 1 4 3

  6. Alberi binari di ricerca: esempio T 4 < 6 Ricerca del valore 4 6 8 2 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 1 4 3

  7. Alberi binari di ricerca: esempio T Ricerca del valore 4 4 sta nel sottoalbero sinistro di 6 6 2 8 1 4 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 3

  8. Alberi binari di ricerca: esempio T Ricerca del valore 4 4 > 2 6 8 2 1 4 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 3

  9. Alberi binari di ricerca: esempio T Ricerca del valore 4 4 sta nel sottoalbero destro di 2 6 8 2 1 4 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 3

  10. Alberi binari di ricerca: esempio T Ricerca del valore 4 4 = 4 : Trovato! 6 8 2 1 4 Proprietà degli ABR Per ogni nodo X, i valori nei nodi del sottoalbero sinistro sono tutti minori del valore nel nodo X, e tutti i valori nei nodi del sotto-albero destro sono maggiori del valore di X 3

  11. Alberi binari di ricerca In generale, la ricerca è confinata ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia h=altezza dell’albero Tempo di ricerca =O(h)

  12. Padre Key Figlio_ destro Figlio_ sinistro L’ADT albero binario di ricerca • È una specializzazione dell’ADT albero binario • Gli elementi statici sono essenzialmente gli stessi, l’unica differenza è che si assume che i dati contenuti (le chiavi) siano ordinabili secondo qualche relazione d’ordine. typedef *nodo ARB; struct { ARB padre; elemento key; ARB figlio_destro, figlio_sinsitro; } nodo;

  13. L’ADT albero binario di ricerca • Selettori: • root(T) • figlio_destro(T) • figlio_sinistro(T) • key(T) • Costruttori/Distruttori: • crea_albero() • ARB_inserisci(T,x) • ARB_cancella (T,x) • Proprietà: • vuoto(T) • Operazioni di Ricerca • ARB_ricerca(T,k) • ARB_minimo(T) • ARB_massimo(T) • ARB_successore(T,x) • ARB_predecessore(T,x)

  14. Ricerca in Alberi binari di ricerca ARB_ricerca(T,k) IF T = NIL OR k = Key[T] THEN return T IF k < Key[T] THEN ARB_ricerca(figlio_sinistro[T],k) ELSE ARB_ricerca(figlio_destro[T],k)

  15. Ricerca in Alberi binari di ricerca In generale, la ricerca è confinata ai nodi posizionati lungo un singolo percorso (path) dalla radice ad una foglia h=altezza dell’albero =O(log N)dove N è il numero di nodi nell’albero Tempo di ricerca =O(h) = O(log N) Solo se l’albero è balanciato, cioè la lunghezza del percorso minimo è vicino a quella del percorso massimo

  16. ARB: ricerca del minimo e massimo Il Minimo di 2 è 1 Il Massimo di 2 è 4 T 6 8 2 1 4 12 9 3 15

  17. ARB: ricerca del minimo e massimo Il Minimo di 8 è 8 Il Massimo di 8 è 15 T 6 8 2 1 4 12 9 3 15

  18. ARB: ricerca del minimo e massimo Il Minimo di T è 1 Il Massimo di T è 15 T 6 8 2 1 4 12 9 3 15

  19. ARB: ricerca del minimo e massimo T 6 8 2 1 4 12 9 3 15

  20. ARB: ricerca del minimo e massimo ARB ABR-Minimo(x:ARB) WHILE figlio-sinistro[x]  NIL DO x = figlio-sinistro[x] return x ARB ABR-Massimo(x: ARB) WHILE figlio-destro[x]  NIL DO x = figlio-destro[x] return x

  21. ARB: ricerca del minimo e massimo ARB ABR-Minimo(x:ARB) WHILE figlio-sinistro[x]  NIL DO x = figlio-sinistro[x] return x ARB ABR-Massimo(x: ARB) WHILE figlio-destro[x]  NIL DO x = figlio-destro[x] return x ARB ARB_Minimo(x:ARB) IF vuoto(figlio_sinistro[x]) Then return x Else ARB_Minimo(figlio_sinistro[x])

  22. ARB: ricerca del successore Il successore di un nodo X è il più pic-colo nodomaggiore del nodo X T 6 8 2 1 4 12 9 3 15

  23. ARB: ricerca del successore Il successore di un nodo X è il più picco-lo nodomaggiore del nodo X Ricerca del successore delnodo 2 T 6 8 2 1 4 12 9 3 15

  24. ARB: ricerca del successore Il successore di un nodo X è il più picco-lo nodomaggiore del nodo X Ricerca del successore delnodo 2 =nodo 3 T 6 8 2 1 4 12 9 3 15

  25. ARB: ricerca del successore Se x ha un figlio de-stro, il successore è il minimo nodo di quel sottoalbero Ricerca del successore delnodo 2 =nodo 3 T 6 8 2 1 4 12 9 3 15

  26. ARB: ricerca del successore Ricerca del successore delnodo 1 T 6 8 2 1 4 12 9 3 15

  27. ARB: ricerca del successore Ricerca del successore delnodo 1 =nodo 2 T 6 8 2 1 4 12 9 3 15

  28. ARB: ricerca del successore Se x NON ha un figlio destro, e x è figlio si-nistro del padre, il suc-cessore è il padre. Ricerca del successore delnodo 1 =nodo 2 T 6 8 2 1 4 12 9 3 15

  29. ARB: ricerca del successore Ricerca del successore delnodo 4 T 6 8 2 1 4 12 9 3 15

  30. ARB: ricerca del successore Ricerca del successore delnodo 4 =nodo 6 T 6 8 2 1 4 12 9 3 15

  31. ARB: ricerca del successore Se x NON ha un figlio destro, ed è figlio destro del padre, il successore è il primo avo tale che x sta nel sottoalbero sinistro. Ricerca del successore delnodo 4 =nodo 6 T 6 8 2 1 4 12 9 3 15

  32. ARB: ricerca del successore ABR-Successore(x) IF figlio-destro[x]  NIL THEN return ABR-Minimo(figlio-destro[x]) y = padre[x] WHILE y NIL AND x = figlio-destro[y] DO x = y y = padre[y] return y

  33. ARB: ricerca del successore ABR-Successore(x) IF figlio-destro[x]  NIL THEN return ABR-Minimo(figlio-destro[x]) y = padre[x] WHILE y NIL AND x = figlio-destro[y] DO x = y y = padre[y] return y Questo algoritmo assume che ogni nodo abbia il puntatoreal padre

  34. ARB: ricerca del successore II y z T 6 NIL 8 2 1 4 12 9 3 15

  35. ARB: ricerca del successore II y T 6 z 8 2 1 4 12 9 3 15

  36. ARB: ricerca del successore II T 6 y 8 2 z 1 4 12 9 3 15

  37. ARB: ricerca del successore II y z T 6 NIL 8 2 1 4 12 9 3 15

  38. ARB: ricerca del successore II y T 6 z 8 2 1 4 12 9 3 15

  39. ARB: ricerca del successore II y T 6 8 2 z 1 4 12 9 3 15

  40. ARB: ricerca del successore II y z T 6 NIL 8 2 1 4 12 9 3 15

  41. ARB: ricerca del successore II y T 6 NIL z 8 2 1 4 12 9 3 15

  42. ARB: ricerca del successore II y T 6 NIL 8 2 z 1 4 12 9 3 15

  43. ARB: ricerca del successore II y T 6 NIL 8 2 1 4 12 z 9 3 15

  44. ARB: ricerca del successore II • Inizializzo il successore a NIL • Partendo dalla radice dell’albero: • ogni volta che seguo un ramo sinistro per rag-giungere il nodo, aggiorno il successore al nodo padre; • ogni volta che seguo un ramo destro per rag-giungere il nodo, NONaggiorno il successore al nodo padre;

  45. ARB: ricerca del successore ARB ABR-Successore’(x: ARB) IF figlio-destro[x]  NIL THEN return ABR-Minimo(figlio-destro[x]) z =Root[T] y = NIL WHILE z x DO IF key[z] < key[x] THEN z = figlio-destro[z] ELSE y = z z = figlio-sinistro[z] return y

  46. ARB: ricerca del successore ricorsiva ARB ABR-Successore(x: ARB) return ABR-Successore_ric(key[x],root[x],NIL) ABR-Successore_ric(key,T,P_T) IF T  NIL THEN IF key > key[T] THEN return ABR-Successore_ric(key, figlio-destro[T],P_T) ELSE IF key < key[T] THEN return ABR-Successore_ric(key, figlio-sinistro[T],T) ELSE IF figlio-destro[T]  NIL THEN return ABR-Minimo(figlio-destro[x]) return P_T

  47. ARB: costo delle operazioni Teorema. Le operazioni di Ricerca, Minimo, Massimo, Successore e Predecessore sull’insieme dinamico Albero Binario di Ricercapossono essere eseguite in tempo O(h) dove h è l’altezza dell’albero

  48. ARB: Inserimento di un nodo (caso I) z T 5 6 8 2 1 4 12 9 3 15

  49. ARB: Inserimento di un nodo (caso I) z y T 5 5 < 6 6 Ricerca posizione del nuovo nodo 8 2 1 4 12 9 3 15

  50. ARB: Inserimento di un nodo (caso I) z T 5 5 > 2 6 y Ricerca posizione del nuovo nodo 8 2 1 4 12 9 3 15

More Related