Il problema del dizionario

Slides:



Advertisements
Presentazioni simili
Ordinamento ottimo Ricerca
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
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
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità 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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
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 Usa la tecnica del.
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.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
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
Algoritmi e Strutture Dati 20 aprile 2001
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Algoritmi e Strutture Dati
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.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Alberi di ricerca binari
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.
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.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
B trees.
Algoritmi e Strutture Dati Luciano Gualà
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.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
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 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
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.
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:

Il problema del dizionario Oggetto key … … … … chiave dati “satellite” x = puntatore all’oggetto Dizionario = insieme dinamico di oggetti che consente di effettuare le operazioni di ricerca, inserimento, cancellazione. Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale che key[x] = k Insert(S,x) – inserisce in S l’elemento puntato da x Delete(S,x) - rimuove da S l’oggetto puntato da x Ci chiediamo qual è la migliore realizzazione possibile per un dizionario.

(chiave) (dati satellite) Esempio Dizionario per la gestione del corso di algoritmi Nome Voto Parziale (chiave) (dati satellite) Bravino 23 Lasfanga 21 Svogliatelli 15 Secchioni 30 Modesto 9 … Metodo più semplice  array non ordinato In questo caso: Insert  costa O(1) - inserisco dopo Modesto Search  costa O(n) – devo scorrere la tabella Delete  costa O(n) - delete = search + trasferimento

Possiamo ridurre il tempo di esecuzione della operazione di ricerca? Il problema della ricerca di un elemento in un array non ordinato ha delimitazione inferiore (n) INFATTI Ogni algoritmo deve, nel caso peggiore, guardare tutti gli elementi dell’insieme per accertarsi o meno della presenza dell’elemento cercato. L’operazione di ricerca costa meno in un array ordinato. Posso usare il metodo di ricerca per dimezzamenti successivi

 Il metodo di ricerca per dimezzamenti successivi è ottimale. La ricerca per dimezzamenti successivi ha un costo O(log(n)). Posso fare meglio? NO! Ogni algoritmo per la ricerca di un elemento in un insieme di n elementi richiede (log(n)) confronti. Infatti: - Ogni algoritmo deve restituire la posizione dell’elemento tra le n possibili; Ad ogni algoritmo posso associare un albero di decisione; L’albero di decisione deve avere n foglie; L’altezza dell’albero fornisce un lower bound alla complessità di un generico algoritmo; Il numero di foglie di un albero di altezza h è al più 2h Quindi: n < 2h  h > log2(n) Per un generico algoritmo T(n) = ( log2(n))  Il metodo di ricerca per dimezzamenti successivi è ottimale.

RICAPITOLANDO: gestione “banale” del dizionario Array Ordinato Search – O(log(n)) Insert – O(n) Ho bisogno di: O(log(n)) confronti  per trovare la giusta posizione in cui inserire l’elemento O(n) trasferimenti  per mantenere l’array ordinato (Ricorda che O(n) + O(log(n)) = O(n)) Delete - O(n) (come per Insert) Array non Ordinato Search – O(n) Insert – O(1) Delete - O(n) Lista non Ordinata Search – O(n) Insert – O(1) Delete - O(n) Lista Ordinata Search – O(n) Costerebbe comunque n (non posso fare dim. successivi) Insert – O(n) Devo mantenere ordinata la lista Delete - O(n)

Alberi binari di ricerca (ABR) key p left right Nodo chiave x = puntatore al nodo Albero binario insieme di nodi (record) caratterizzato da quattro campi: key[x] (chiave), p[x] (puntatore al padre), left[x] (puntatore al figlio sinistro), right[x] (puntatore al figlio destro). root[T]  Puntatore alla radice dell’albero x = puntatore nodo left[x] = NIL (il nodo non ha figlio sinistro) right[x] = NIL (il nodo non ha figlio destro) Un albero binario di ricerca (ABR) è una albero binario in cui le chiavi dei vari nodi soddisfano la seguente proprietà: PROPRIETA’ dell’ABR Sia x un nodo generico di un ABR. Se y è un nodo del sotto-albero sinistro di x allora: key[y] < key[x] Se y è un nodo del sotto-albero destro di x allora: key[y] > key[x]

Alberi binari di ricerca Ordinamento decrescente 15 Ordinamento crescente 6 18 3 7 17 20 massimo 2 4 13 minimo 9

Le proprietà di un ABR determinano un ordinamento totale … massimo minimo Verifichiamo… 15 6 18 3 7 17 20 massimo 2 4 13 minimo 9

key[left[root[T]]] < key[root[T]] < key[right[root[T]]] Visita di un ABR Visita in ordine simmetrico – dato un nodo x, elenco prima il sotto-albero sinistro di x, poi il nodo x, poi il sotto-albero destro. Inorder-tree-walk(x) If (x  NIL) then Inorder-tree-walk(left[x]) stampa key[x] Inorder-tree-walk(right[x]) Verifica di correttezza – Supponiamo,per semplicità, che l’albero sia completo. Indichiamo con h l’altezza dell’albero. Vogliamo mostrare che Inorder-tree-walk(x) restituisce la sequenza ordinata h=1  Successione parametri chiamate root[T] Left[root(T)] right[root(T)] NIL NIL NIL NIL key[left[root[T]]] < key[root[T]] < key[right[root[T]]]

Verifica correttezza (continua …) h = generico (ipotizzo che la procedura sia corretta per h-1) root[T] Left[root(T)] right[root(T)] Albero di altezza h-1. Tutti i suoi elementi sono minori o uguali della radice Albero di altezza h-1. Tutti i suoi elementi sono maggiori o uguali della radice Analisi complessità La complessità della procedura considerata è T(n) = (n). Matematicamente …… T(n) = 2 T(n/2) + c Intuitivamente …… La procedura è chiamata un numero di volte pari al numero di nodi dell’albero (e ad ogni chiamata effettua un numero costante di operazioni).