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)