Le tabelle di simboli e gli alberi binari di ricerca (BT) ianpiero abodi e Paolo amurati Dip. utomatica e Informatica Politecnico di Torino Tabelle di simboli Definizione: una tabella di simboli è una struttura dati formata da record con chiave con operazioni di base: inserimento di un nuovo record ricerca di un record con chiave data. Talora è detta dizionario... 2004/2005 Le tabelle di simboli e i BT 2 1
DT tabella di simboli Operazioni: inserimento di un nuovo elemento ricerca di un elemento con data chiave cancellazione di elemento specificato selezione del k-esimo elemento più piccolo ordinamento della tabella secondo la chiave unione di due tabelle... 2004/2005 Le tabelle di simboli e i BT 3 lgoritmo di ricerca = implementazione dell DT tabella di simboli. ecord di tipo Item che includono chiavi di tipo Key con operazioni less e eq. key per recuperare la chiave... 2004/2005 Le tabelle di simboli e i BT 4 2
Interfaccia void Tinit(int) ; int Tcount() ; void Tinsert(Item) ; Item Tsearch(Key) ; void Tdelete(Item) ; Item Tselect(int) ; void Tsort(void (*visit) (Item)) ;.. 2004/2005 Le tabelle di simboli e i BT 5 estione delle chiavi duplicate truttura primaria con record privi di duplicati, composti da chiave e link a record con la stessa chiave, gestione della duplicazione affidata al client truttura con chiavi duplicate, ricerca che restituisce un qualsiasi record contenente la chiave ecord con chiave e identificatore univoco (eliminazione della duplicazione)... 2004/2005 Le tabelle di simboli e i BT 6 3
sempio lienttabellaimboli.c equenza di chiavi in input generata casualmente o letta da standard input controllo se la chiave era già stata vista inserimento solo di chiavi non ancora viste nella tabella dei simboli tipi delle chiavi e operazioni su di esse specificati in Item.h... 2004/2005 Le tabelle di simboli e i BT 7 icerca indicizzata da chiave Tabelle ad accesso diretto: chiave k U = {0, 1,, M-1} tutte le chiavi sono interi distinti che fungono da indici di un array array st[0, 1,, M-1]: se key, essa è in st[key], altrimenti st[key] contiene NULLitem memorizzazione di un insieme K di K chiavi... 2004/2005 Le tabelle di simboli e i BT 8 4
1 2 4 U (universo delle chiavi) 0 7 0 1 2 6 9 3 4 5 3 5 6 8 7 8 M-1 TabellaccessoDiretto. st 2 3 5 8 c K (chiavi usate).. 2004/2005 Le tabelle di simboli e i BT 9 Vantaggi/svantaggi omplessità delle operazioni di inserimento, ricerca e cancellazione: T(n) = O(1) omplessità delle operazioni di inizializzazione, selezione e ordinamento: T(n) = O(M) Occupazione di memoria (n) = O( U ) = O(M) applicabile per M piccolo spreco di memoria per K << M... 2004/2005 Le tabelle di simboli e i BT 10 5
icerca sequenziale truttura dati: array lista concatenata Proprietà della struttura dati: ordinata non ordinata... 2004/2005 Le tabelle di simboli e i BT 11 TabellarrayOrdinato.c rray ordinato: inserimento con spostamento di una posizione degli elementi più grandi ricerca mediante scansione sequenziale, terminazione: chiave trovata o chiave più grande. rray non ordinato: inserimento in fondo ricerca mediante scansione sequenziale completa... 2004/2005 Le tabelle di simboli e i BT 12 6
Lista ordinata: inserimento in ordine TabellaListaNonOrdina ta.c ricerca mediante scansione sequenziale, terminazione: chiave trovata o chiave più grande. Lista non ordinata: inserimento in testa ricerca mediante scansione sequenziale completa... 2004/2005 Le tabelle di simboli e i BT 13 nalisi di complessità caso peggiore inserim. ricerca array indicizz. 1 1 array ordin. N N lista ordin. N N lista non ordin. 1 N.. 2004/2005 Le tabelle di simboli e i BT 14 7
earch hit: ricerca con successo earch miss: ricerca senza successo. caso medio inserim. search hit search miss array indicizz. 1 1 1 array ordin. N/2 N/2 N/2 lista ordin. N/2 N/2 N/2 lista non ordin. 1 N/2 N.. 2004/2005 Le tabelle di simboli e i BT 15 icerca binaria icbin.c osto quadratico per mantenere ordinato l array in inserimento Vantaggioso in situazioni statiche : array ordinato una sola volta all inizio ricerche, non inserzioni/cancellazioni fficienza legata alla capacità di accesso immediato alla cella dell array, svantaggioso usare liste concatenate... 2004/2005 Le tabelle di simboli e i BT 16 8
nalisi di complessità caso peggiore caso medio inserim. ricerca inserim. search hit search miss ric. bin. N lgn N/2 lgn lgn.. 2004/2005 Le tabelle di simboli e i BT 17 lberi binari di ricerca (BT) DT albero binario con proprietà: nodo x vale che: nodo y Left(x), key[y] key[x] nodo y ight(x), key[y] key[x] x Left(x) ight(x).. 2004/2005 Le tabelle di simboli e i BT 18 9
sempi 2 5 3 3 7 7 2 4 8 5 8 4.. 2004/2005 Le tabelle di simboli e i BT 19 Operazioni search minimum maximum predecessor successor insert sort select delete. TabellaBT.c.. 2004/2005 Le tabelle di simboli e i BT 20 10
earch icerca ricorsiva di un nodo con chiave v: percorrimento dell albero dalla radice terminazione: v uguale alla chiave della radice dell albero (search hit) oppure giunti ad un albero vuoto (search miss) ricorsione: dal nodo x su sottoalbero sinistro se v < della chiave in x su sottoalbero sinistro se v della chiave in x... 2004/2005 Le tabelle di simboli e i BT 21 sempio 15 k = 13 13 15 13 < 15 6 18 3 7 17 20 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 22 11
15 k = 13 13 6 13 > 6 6 18 3 7 17 20 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 23 15 k = 13 13 7 13 > 7 6 18 3 7 17 20 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 24 12
15 k = 13 13 = 13 6 18 3 7 17 20 2 4 13 9 trovato!.. 2004/2005 Le tabelle di simboli e i BT 25 Min e max Min: seguire il puntatore al sottoalbero sinistro finchè esiste Max: seguire il puntatore al sottoalbero destro finchè esiste.. 2004/2005 Le tabelle di simboli e i BT 26 13
sempio 15 min = 2 max = 20 6 18 3 7 17 20 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 27 uccessor uccessore di un nodo x:nodo con la più piccola chiave k > della chiave in x. Due casi: ight(x): succ(x) = min(ight(x)) ight(x): succ(x) = primo antenato di x il cui figlio sinistro è anche un antenato di x. p[x] x x p[x].. 2004/2005 Le tabelle di simboli e i BT 28 14
sempio 15 x 6 18 3 7 17 20 succ(x) 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 29 15 succ(x) 6 18 3 7 17 20 2 4 13 x 9.. 2004/2005 Le tabelle di simboli e i BT 30 15
Predecessor Predecessore di un nodo x: nodo con la più grande chiave k < della chiave in x. Due casi: Left(x): pred(x) = max(left(x)) Left(x): pred(x) = primo antenato di x il cui figlio destro è anche un antenato di x... 2004/2005 Le tabelle di simboli e i BT 31 sempio 15 x 6 18 3 7 17 20 2 4 13 pred(x) 9.. 2004/2005 Le tabelle di simboli e i BT 32 16
15 6 18 pred(x) 3 7 17 20 2 4 13 9 x.. 2004/2005 Le tabelle di simboli e i BT 33 Insert InsertIter.c Inserire in un albero binario di ricerca un nodo z con chiave v mantenimento della proprietà: se il BT è vuoto, creazione del nuovo albero inserimento ricorsivo nel sottoalbero sinistro o destro a seconda del confronto inserimento iterativo: prima si ricerca la posizione, poi si appende il nuovo nodo... 2004/2005 Le tabelle di simboli e i BT 34 17
sempio z 13 T 12 insert(t,13) 5 18 2 9 15 20 17.. 2004/2005 Le tabelle di simboli e i BT 35 z 13 T 12 insert(t,13) 5 18 2 9 15 20 17.. 2004/2005 Le tabelle di simboli e i BT 36 18
T 12 5 18 2 9 15 20 13 17.. 2004/2005 Le tabelle di simboli e i BT 37 ort ort.c ttraversamento: elenco dei nodi secondo una strategia: Pre-ordine: x, Left(x), ight(x) In-ordine: Left(x), x, ight(x) Post-ordine: Left(x), ight(x), x omplessità: T(n) = Θ(n). ttraversamento in-ordine: ordinamento crescente delle chiavi... 2004/2005 Le tabelle di simboli e i BT 38 19
sempio 15 6 18 3 7 17 20 2 4 13 9.. 2004/2005 Le tabelle di simboli e i BT 39 Visita in pre-ordine 15 1 15 6 2 6 9 18 3 3 6 7 17 10 20 11 4 2 5 4 7 13 8 9 3 2 4 7 13 9 18 17.. 2004/2005 Le tabelle di simboli e i BT 40 20 20
Visita in-ordine 2 8 15 3 4 6 10 18 2 3 5 7 17 9 20 11 1 2 3 4 7 13 6 9.. 2004/2005 Le tabelle di simboli e i BT 41 4 6 7 9 13 15 17 18 20 Visita in post-ordine 11 15 7 6 10 18 3 3 6 7 17 8 20 9 1 2 2 4 5 13 4 9 2 4 3 9 13 7 6 17 20 18.. 2004/2005 Le tabelle di simboli e i BT 42 15 21
omplessità Le operazioni hanno complessità T(n) = O(h): albero con n nodi completamente bilanciato altezza h = log 2 n albero con n nodi completamente sbilanciato ha altezza h = n O(log 2 n) T(n) O(n).. 2004/2005 Le tabelle di simboli e i BT 43 caso peggiore caso medio inserim. ricerca inserim. search hit search miss BT N N lgn lgn lgn.. 2004/2005 Le tabelle di simboli e i BT 44 22
Inserimento alla radice Inserimento dalle foglie a scelta e non obbligatorio Nodi più recenti nella parte alta del BT Operazioni ausiliarie: rotazione a D di radice e suo figlio rotazione a di radice e suo figlio D. Inserimento ricorsivo alla radice: inserimento nel sottoalbero appropriato rotazione per farlo diventare radice dell albero principale... 2004/2005 Le tabelle di simboli e i BT 45 otazione a destra di BT x = h->l x y h γ α x x->r = h y α β x->r β γ h->l = x->r link rot(link h) { link x = h->l; h->l = x->r; x->r = h; return x; }.. 2004/2005 Le tabelle di simboli e i BT 46 23
otazione a sinistra di BT h x = h->r x x->l = h α x γ β x->l γ α β h->r = x->l link rotl(link h) { link x = h->r; h->r = x->l; x->l = h; return x; }.. 2004/2005 Le tabelle di simboli e i BT 47 sempio otazione a sinistra attorno a 11 7 4 11 3 6 9 18 2 14 19 2 4 3 6 9 7 12 17 11 14 12 17.. 2004/2005 Le tabelle di simboli e i BT 48 18 20 19 22 20 22 24
sempio inserzione di inserzione di alla radice del sottoalbero opportuno.. 2004/2005 Le tabelle di simboli e i BT 49 rotazione a D.. 2004/2005 Le tabelle di simboli e i BT 50 25
26.. 2004/2005 Le tabelle di simboli e i BT 51 rotazione a D.. 2004/2005 Le tabelle di simboli e i BT 52 rotazione a
27.. 2004/2005 Le tabelle di simboli e i BT 53 rotazione a D.. 2004/2005 Le tabelle di simboli e i BT 54 rotazione a prog. 12.12.c
elect elezione della k-esima chiave più piccola (k=0 chiave minima): t è il numero di nodi del sottoalbero sinistro: t = k: ritorno la radice del sottoalbero t > k: ricorsione nel sottoalbero sinistro alla ricerca della k-esima chiave più piccola t < k: ricorsione nel sottoalbero destro alla ricerca della (k-t-1)-esima chiave più piccola... 2004/2005 Le tabelle di simboli e i BT 55 sempio 15 11 6 7 18 3 k = 4 quinta più piccola chiave t=7 7>4 scendo a 3 3 7 3 17 1 20 1 2 1 4 1 13 2 9 1.. 2004/2005 Le tabelle di simboli e i BT 56 28
15 11 6 7 18 3 k = 4 t=3 3<4 scendo a D cerco k=4-3-1=0 3 3 7 3 17 1 20 1 2 1 4 1 13 2 9 1.. 2004/2005 Le tabelle di simboli e i BT 57 15 11 k = 0 t=0 return 7 6 7 18 3 3 3 7 3 17 1 20 1 2 1 4 1 13 2 9 1.. 2004/2005 Le tabelle di simboli e i BT 58 29
Partition progr. 12.14.c iorganizza l albero avendo la k-esima chiave più piccola nella radice: poni il nodo come radice di un sottoalbero: t > k: ricorsione nel sottoalbero sinistro, partizionamento rispetto alla k-esima chiave più piccola t < k: ricorsione nel sottoalbero destro, partizionamento rispetto alla (k-t-1)-esima chiave più piccola esegui rotazione per farlo diventare radice dell albero... 2004/2005 Le tabelle di simboli e i BT 59 sempio Partizionamento rispetto alla 5a chiave più piccola (M, k=4) M T.. 2004/2005 Le tabelle di simboli e i BT 60 30
31.. 2004/2005 Le tabelle di simboli e i BT 61 M T rotazione a M T.. 2004/2005 Le tabelle di simboli e i BT 62 rotazione a D M T M T
32.. 2004/2005 Le tabelle di simboli e i BT 63 rotazione a L M T M T.. 2004/2005 Le tabelle di simboli e i BT 64 rotazione a D M T M T
M M T T rotazione a.. 2004/2005 Le tabelle di simboli e i BT 65 Delete Per cancellare da un albero binario di ricerca un nodo con data chiave v bisogna mantenere: la proprietà dei BT la struttura ad albero binario Passi: controllare se il nodo da cancellare è in uno dei sottoalberi. e sì, cancellazione ricorsiva nel sottoalbero se è la radice, eliminarlo e ricombinare i 2 sottoalberi. La nuova radice è il succ o il pred del nodo cancellato... 2004/2005 Le tabelle di simboli e i BT 66 33
ancellazione di una radice L N I M P.. 2004/2005 Le tabelle di simboli e i BT 67 N I M P succ(l).. 2004/2005 Le tabelle di simboli e i BT 68 34
partition rispetto a M M I N.. 2004/2005 Le tabelle di simboli e i BT 69 P ricostruzione dell albero con radice M M N I P.. 2004/2005 Le tabelle di simboli e i BT 70 35
36.. 2004/2005 Le tabelle di simboli e i BT 71 sempio progr 12.15.c cancellazione in sequenza di L,, I N L I N delete L.. 2004/2005 Le tabelle di simboli e i BT 72 I N delete N I
37.. 2004/2005 Le tabelle di simboli e i BT 73 delete N I N I.. 2004/2005 Le tabelle di simboli e i BT 74 N I N I