AlberiBinaridiRicerca Prof.G.M.Farinella [email protected] www.dmi.unict.it/farinella RiferimentiBibliografici • Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition, MIT Press, 2009. • Argomenti trattati in questa lezione: – III Data Structures, 12 Binary Search Trees Nellalezioneprecedente… • Insiemi dinamici che implementano le funzionalità di – Itemsearch(Keykey) – voidinsert(Keykey,Itemitem) – voiddelete(Keykey) Nellalezioneprecedente… • Implementazione – Arrayordinato: • ricercaO(logn) • inserimento/cancellazioneO(n) – Listanonordinata: • Ricerca/cancellazioneO(n) • inserimentoO(1) RiepilogoConcettidiBase:AlberiBinari Prof.G.M.Farinella [email protected] www.dmi.unict.it/farinella AlberiBinari • Un albero binario è un albero dove ogni nodo ha al massimo due figli. • Tutti i nodi tranne la radice hanno un nodo padre. • Le foglie dell’albero non hanno figli. Sottoalberi Sottoalberi Padre- Figlio • i èpadredik ej • j ek sonoidue figlidii • (i,j) èl’arcoche unisceiej Foglie,nodiinterniepercorsi • In nodo di un albero binario si dice nodo foglia se non ha figli (cioè se entrambi i sottoalberi di cui è radice sono vuoti). • Un nodo si dice nodo interno se ha almeno un figlio. • Un percorso dal nodo i al nodo j è la sequenza di archi che devono essere attraversati per raggiungere il nodo j dal nodo i. Profonditàealtezza • In un albero binario la profondità di un nodo è la lunghezza del percorso dalla radice al nodo (cioè il numero di archi tra la radice e il nodo). • La profondità maggiore di un nodo all’interno di un albero è l’altezza dell’albero. AlberoBinarioPieno • Unalberobinariosidicepienose: – tuttelefogliehannolastessaprofonditàh – tuttiinodiinternihannogrado2 • Unalberopienodinnodihaaltezza esattamente • Unalberopienodialtezzahha esattamente2*h+1-1nodi(2*h-1nodi interni+2*hfoglie). AlberoBinarioCompleto • Unalberobinariosidice completose: – tuttelefogliehanno profonditàhoh-1,dove hèl’altezzadell’albero – tuttiinodiinternihanno 2figli,eccettoalpiù uno. RappresentazionealberiBinari • Unalberobinariosipuò rappresentareconunalista concatenataincuisiusanoi campi: – p[x]perpuntarealpadredel nodox – left[x]perpuntarealfiglio sinistro – right[x]perpuntarealfiglio destro RappresentazionealberiBinari Seun figlio nonesiste,ilcorrispondente puntatoreèNIL. Laradice,root[T],hap[root[T]]=NIL. Seroot[T]=NIL,l’alberoèvuoto Perlefoglielef t[x]=right[x]=NIL AlberiBinaridiRicerca Prof.G.M.Farinella [email protected] www.dmi.unict.it/farinella AlberiBinaridiRicerca • Unalberobinario diricercaè unalberobinario conleseguenti caratteristiche: – neisuoinodisonoallocati gli elementi diuninsieme T,sucuièdefinitounordinamentototale Ovveropertuttiglielelementi a,b,cdiTvalgonoleseguenti: • • • • a ≤ a (riflessività) se a ≤ b e b ≤ a,allora a = b (antisimmetria) se a ≤ b e b ≤ c allora a ≤ c (transitività) a ≤ b oppure b ≤ a (totalità) – seyè unnodoappartenentealsottoalberosinistrodix,allorakey[y]≤key[x] – seyè unnodoappartenentealsottoalberodestrodix,allora key[y]≥key[x] • Tuttiglielementiallocatinelsottoalbero sinistrodixprecedono nell’ordinamento l’elemento allocatoinx • Tuttiglielementiallocatinelsottoalbero destrodixseguono nell’ordinamento l’elelemento allocatoinx Esempiodialberobinariodiricerca Qualioperazioni? • • • • • • Ricercadiunelemento RicercadelMinimo RicercadelMassimo RicercadelSuccessore/Predecessore Inserimentodiunelemento Cancellazionediunelemento • Bilanciamento(nontratteremoinquestocorso) Comeavvenirelaricercadiunelemento? Elementotrovato! • Datiiningressoilpuntatore allaradicedell’alberoeuna chiave,l’algoritmo restituisceilnodo conchiave ugualeak,oppure NILse non esiste. • Sfruttando laproprietà di ordinamento dell’albero binario diricerca,l’algoritmo discendel’albero inmodo ricorsivo. Nonènecessariovisitaretuttiinodi,masoloO(h) • Laricercapuòessere riscrittainformaiterativa x k=18 Key[x] x k=18 Key[x] x k=18 Key[x] x k=18 Key[x] x k=18 Key[x] x k=10 Key[x] x k=10 Key[x] x k=10 Key[x] x k=10 Key[x] x k=10 Key[x] RicercadelMinimoedelMassimo RicercadelMinimoedelMassimo Sisfruttalaproprietàdell'albero binariodiricerca. Partendodalnodo xsihache: - Sexhaunfigliosinistro,allorail minimoenelsottoalberosinistro, poichè perogninodo y inesso contenuto valekey[y]<key[x] - Sexnonhaunfigliosinistro,allora perogninodo ycontenuto nel sottoalberodestrovalekey[y]>key[x]. Quindi,ilminimoexstesso minimo massimo RicercadelMinimoedelMassimo Qualèlacomplessità? Lacomplessitàintempoperlaricercadelminimo edelmassimoepari all'altezzadell'albero, ossiaO(h). Ricercadelsuccessore • Ilsuccessorediunnodoxedefinitocomeilnodoycon lapiùpiccolachiavemaggioredikey[x]: succ(key[x])=min{yϵ T:key[x]<key[y]} • Supponiamochenell'alberoTcisianosolochiavi distinte • Sfruttandoleproprietàdell'alberobinariodiricercasi puòtrovareilsuccessoredixsenzadoverconfrontare lechiavineinodi Ricercadelsuccessore • Seilnodo haunfiglio destroil successoredixèilminimo del sottoalberodestro • Seilnodo non haunfiglio destroil successoredixèilpiùpiccolo ascendentedixilcuifiglio sinistroè anch'essounascendentedix. Inpratica:sirisalel'alberofinchè ilnodo diprovenienzastaasinistra. Ilnodo dipartenzarisultaessereil massimodelsottoalberosinistrodiy. Quindi yeilsuosuccessore. Esempio1 • Sexhaunfiglio destro,e sufficientecercare ilminimodel sottoalbero destro. Esempio2 • Sexnonhaun figliodestro,si risalel'alberofino atrovarelaradice delsottoalberodi cuixeilmassimo. IltemponecessariopertrovareilsuccessoreepariaO(h), dovehè l'altezzadell'albero. Sipercorreuncammino nonpiùlungo delladistanzamassimatralaradiceeunafoglia. Homework - Predecessore • Ilpredecessorediunnodoxedefinito comeilnodoyconlapiùgrandechiave minoredikey[x]: pred(key[x])=max{yϵ T:key[y]<key[x]} Siscriva lopseudocodice dell’algoritmo TREE-PREDECESSOR,il codice python,esi valuti il tempo computazionale InserimentoeRimozione • Inserendoorimuovendounelementolastruttura dell'alberocambia • L'alberodevemantenereleproprietàdiunalbero binariodiricerca • Lastrutturadell'alberovariaasecondadellasequenza didatiinseritiorimossi • L'inserimentoèun'operazionesemplice • Larimozioneèpiùcomplessa...manonimpossibile;-) Inserimento diunanuovachiave: RicercaPosizione +Inserimentodellafoglia IltemponecessarioeO(h):non piùdel camminomassimotralaradiceeunafoglia Serviràbilanciarel’albero! (nellaprossimalezione) Rimozione • Sipossonoverificaretrecasi… Seznonhafigli, simodicap[z]inmodo che punti nonpiùaz,maaNIL Sezhaununicofiglio, sitagliafuori z dall'albero,facendopuntarep[z]all'unico figlio diz Sezhaduefigli, siindividua ilsuosuccessore,ossiailminimo delsuo sottoalberodestro. Quindi yprende ilpostodiz,eidatiinyvengono copiatinellaposizione diz. Sezhaduefigli, siindividua ilsuosuccessore,ossiailminimo delsuo sottoalberodestro. Quindi yprende ilpostodiz,eidatiinyvengono copiatinellaposizione diz. Rimozione- considerazioni • Sesiamonelcaso1oppure2l'operazionedi rimozioneeimmediata • Sesiamonelcaso3enecessarioeseguirela proceduraTREE-SUCCESSOR(z),chehauna complessitàtemporaleO(h) • QuindilarimozionerichiedetempoO(h) Riepilogo • L’alberobinariodiricercaèunastrutturadatiispirataallaricerca – Lechiavideinodidelsottoalberosinistroleft[x]sono ≤key[x] – Lechiavideinodidelsottoalberodestroright[x]sono≥key[x] • Operazioni:ricerca,minimo,massimo,prev,next,inserimento,e cancellazione • ComplessitàRicerca,Inserimento,CancellazionesonoO(h)perunalberodi altezzah • Unalberobinariodiricercaconnnodigeneratoinmanieracasualeha un’altezzaO(log2 n)