Lezione n°9 Prof.ssa Rossella Petreschi

Slides:



Advertisements
Presentazioni simili
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Advertisements

Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Alberi autoaggiustanti
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°10 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Inserzione e Cancellazione
La rappresentazione delle informazioni
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Reti, flussi e tagli Lezione n°11
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Logica binaria Moreno Marzolla
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
La funzione Path e le forme a cespuglio
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Lezione n°17 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Correzione 1° Esonero Lezione n°13
Rappresentazione di alberi binari
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Sulla complessità Lezione n°2
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°4 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Lezione n°11 Prof.ssa Rossella Petreschi
UNION FIND Lezione n°8 Prof.ssa Rossella Petreschi
ABBINAMENTO Lezione n°13
Rappresentazione di alberi
Lezione n°6 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Analisi ammortizzata Lezione n°3
Gestione dinamica di tabelle
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progettare algoritmi veloci usando strutture dati efficienti
Estensione di strutture dati e
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Alberi di ricerca Lezione n°4
Alberi e parentesi Lezione n°9
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
MergeSort Usa la tecnica del divide et impera:
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
Analisi ammortizzata Lezione n°2
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Lezione n°9 Prof.ssa Rossella Petreschi Lezione del 31/10/2014 del Corso di Algoritmica

Numeri di Catalano Il numero di alberi binari distinti con n nodi è pari al numero di Catalano di dimensione n: Cn = (2n su n)/(n+1), risultato dell’equazione ricorsiva Cn = ∑ Cs Cn-s-1, con 0 ≤ s ≤ n-1 e C0= C1=1 C2= 2 C3= 5 C4= 14 C5= 42 …………. 2

Quanti bit per un albero binario? Per rappresentare un qualunque albero binario con n nodi occorrono un numero di bit pari a log Cn= log[(2n su n)/ (n+1)] > > log[(22n)/ (2n(n+1))] per la (*) = 2n - O(logn) (*) (2n su n) = (2n)!/n! (2n-n)! = = (2n/2n) [2n (2n-1) (2n-2)…….1]/[n(n-1)(n-2)…1] [n(n-1)(n-2)…1]) = = (1/2n)[(2n2n)/(nn)][(2n-1)(2n-2)/(n-1)(n-1)]… [3x2/1] > > (1/2n)[(22n2/n2)][(2n-2)(2n-2)/(n-1)(n-1)]… [2x2/1] = = (1/2n) [22n2/n2] [22(n-1)2 /(n-1)2]… [22/12] = (1/2n) x (22n) 3

Alberi k-ari e ordinali alberi k-ari (o cardinali): ogni nodo ha k riferimenti ai figli, numerati da 0 a k (binari se da 0 a 2) alberi ordinali: ogni nodo memorizza solamente la lista dei figli, variabile da nodo a nodo. 4

Parentesi bilanciate . a b dd b e gg e hh a cc ff . Un albero ordinale può essere codificato da una sequenza di parentesi bilanciate nella seguente maniera: ogni nodo è codificato da una coppia di parentesi bilanciate e i suoi figli sono ricorsivamente codificati ciascuno con una sequenza bilanciata di parentesi. . a b dd b e gg e hh a cc ff . ( ( ( ( ) ) ( ( ) ) ( ) ) ( ) ( )) a c f b e h d g 5

Corrispondenza biunivoca Esiste una corrispondenza biunivoca tra Alberi binari (2-ari) di n nodi; Alberi ordinali di n+1 nodi ; Sequenze bilanciate di 2n parentesi E la cardinalità di questi tre insiemi è il numero di catalano di dimensione n : Cn = (2n su n)/(n+1) c . a b dd b e gg e hh a cc ff . ( ( ( ( ) ) ( ( ) ) ( ) ) ( ) ( ) ) NOTA: non si possono rappresentare direttamente alberi binari mediante parentesi perché non c’è modo di distinguere fs da fd a a c f b b e h d e f d g g h 6

Come rappresentare un albero binario Consideriamo che per ogni nodo u sia data la rappresentazione compressa del propria informazione u-info, quindi ci soffermiamo su come rappresentare le relazioni fra i nodi, ovvero su come rappresentare u-padre, u-fs e u-fd . Rappresentazione implicita: mantiene u-padre, u-fs e u-fd tramite una semplice regola matematica senza uso di memoria aggiuntiva. Esempio: rappresentazione dell’heap Utilizzabile solo per alcune classi di alberi binari Se pensiamo ad alberi binari qualunque, abbiamo: Rappresentazione esplicita:rappresentazione che impiega per ogni nodo u un numero di bits almeno pari a 3logn, dato che logn è il numero minimo di bits necessari per rappresentare un qualunque nodo. Rappresentazione succinta:rappresentazione che usa per rappresentare le relazioni fra i nodi dell’albero strutture dati che richiedono un totale di 2n + o(n) bits, ovvero una quantità di memoria pari a quanto si è dimostrato essere il minimo necessario. 7

Rappresentazione succinta per ampiezza b a b c d e f 1 1 1 0 1 0 0 1 1 0 0 0 0 nodo[0,…,n-1] pieno[0,…,2n] c d e f Se un nodo occupa la posizione i nell’array nodo, allora i bit corrispondenti ai suoi due figli occupano le posizioni 2i+1 e 2i+2 nell’array pieno Se un nodo occupa la posizione i nell’array nodo, allora pieno[2i+1]=1(pieno[ 2i+2]=1) iff il riferimento al fs (fd) non è null Oltre all’array nodo, dobbiamo conteggiare 2n+1 bits necessari per l’array pieno + lo spazio per navigare fra i due array, mantenendo tempo costante 8

Come navigare: Rank,Select a b c d e f 1 1 1 0 1 0 0 1 1 0 0 0 0 nodo[0,…,n-1] pieno[0,…,2n]; a b c d Rank(pieno,i): numero di 1 presenti nel segmento pieno[0,i] 0<=i<=2n Select(pieno,i): posizione dell’(i+1)-esimo 1 in pieno 0<=i<=Rank(pieno,2n) e f Identificazione in nodo[] del fs(nodo[i]) o del fd(nodo[i]) : f = 2i+1 (o d = 2i+2 ):posizione del fs (o fd) di i in pieno[]; Se pieno(f) non 0 (o pieno(d) non 0), Rank(pieno,f (oppure d)): numero di 1 presenti nel segmento pieno[0,f]opure pieno[0,d]; nodo[Rank(pieno, f (oppure d)) -1]:fs[nodo(i)] oppure fd[nodo(i)]. Identificazione in nodo[] del padre(nodo[i]): p = Select (pieno,i): bit 1 corrispondente a nodo[i] in pieno[]; nodo(p-1)/2: padre[nodo(i)]. 9