albero: un grafo particolare

91
A: G G, O A Dr. Gaetano Rossieo, Dr. Andrea Pazienza, Dr. Fabio Cassano // Dottorato in Informatica e Matematica (XXX e XXXI Ciclo) Prof.ssa Nicoletta Del Buono

Upload: andrea-pazienza

Post on 23-Jan-2018

222 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Albero: un Grafo particolare

ALBERO: UN GRAFO PARTICOLAREGRAFI, OTTIMIZZAZIONE ED APPLICAZIONI

Dr. Gaetano Rossiello,

Dr. Andrea Pazienza,

Dr. Fabio Cassano

24/05/2016

Dottorato in Informatica e Matematica (XXX e XXXI Ciclo)Prof.ssa Nicoletta Del Buono

Page 2: Albero: un Grafo particolare

Overview

1. Introduzione

2. Alberi Binari

3. Alberi n-ari

4. Alberi di Ricerca

Page 3: Albero: un Grafo particolare

INTRODUZIONE

Page 4: Albero: un Grafo particolare

Introduzione

Un albero è una struttura informatica fondamentale utile perrappresentare:

# Partizioni successive di un insieme in sottoinsiemidisgiunti

# Organizzazioni gerarchiche di dati

# Procedimenti decisionali enumerativi

Page 5: Albero: un Grafo particolare

Alberi

Un albero è un particolare tipo di grafo, definitomatematicamente con una coppia

T � (N,A)dove N è un insieme finito di nodi ed A è un insieme di coppienon ordinate (albero libero) tali che:

# il numero di archi è uguale al numero di nodi meno uno:|A| � |N | − 1

# T è connesso, ovvero

∀u , v ∈ N ∃ u0 , u1 , . . . , uk s .t . u � u0 , v � uk

e la coppia 〈ui , ui+1〉 è un arco di A, per i � 0, 1, . . . , k − 1

Page 6: Albero: un Grafo particolare

Alberi radicati

Un albero radicato è ottenuto da un albero libero designandoarbitrariamente un nodo r come radice e ordinando i nodi perlivelli.

Page 7: Albero: un Grafo particolare

Alberi

La radice r è a livello 0 e tutti i nodi u, tali che 〈u , r〉 ∈ A, sonofigli di r e stanno a livello 1 (r è padre). Nodi con lo stessopadre sono fratelli. Nodi terminali senza figli sono detti foglie.

Un albero ordinato è ottenuto da uno radicato stabilendo unordinamento tra nodi allo stesso livello.

Page 8: Albero: un Grafo particolare

Alberi

Se T è un albero ed n e m sono nodi di T si dice che:

# m è discendente di n se n è antenato di m cioè se n � moppure se n è genitore di un antenato di m

# una linea di T connette due nodi, uno dei quali è genitoredell’altro

# un cammino in T è la sequenza di linee che unisce duenodi, uno dei quali è antenato dell’altro: la lunghezza diun cammino è costituita dal numero di linee che locompongono

# la altezza di un nodo è la lunghezza del cammino piùlungo da quel nodo ad una foglia

# la profondità di un nodo è la lunghezza del cammino dallaradice a quel nodo

Page 9: Albero: un Grafo particolare

Albero di ordine k

Definiamo un albero di ordine k un albero in cui ogni nodo haal massimo k figli

Page 10: Albero: un Grafo particolare

Proprietà degli Alberi

In un albero valgono le sequenti proprietà:

# un albero è un grafo aciclico, in cui per ogni nodo c’è unsolo arco entrante (tranne che per la radice che non ne hanessuno)

# un albero è un grafo debolmente connesso# se esiste un cammino che va da un nodo u ad un altro nodo

v, tale cammino è unico# in un albero esiste un solo cammino che va dalla radice a

qualunque altro nodo# tutti i nodi di un albero T (tranne r) possono essere ripartiti

in insiemi disgiunti ciascuno dei quali individua un albero(dato un nodo u, i suoi discendenti costituiscono un alberodetto sottoalbero di radice u)

Page 11: Albero: un Grafo particolare

La natura ricorsiva degli alberi

Un albero può essere definito ricorsivamente

# un albero è un insieme non vuoto di nodi ai quali sonoassociate delle informazioni

# tra i nodi esiste un nodo particolare che è la radice (livello0)

# gli altri nodi sono partizionati in sottoinsiemi che sono aloro volta alberi (livelli successivi)

Vale a dire un albero è

vuoto o costituito da un solo nodo (detto radice)

oppure è una radice cui sono connessi altri alberi

Page 12: Albero: un Grafo particolare

ALBERI BINARI

Page 13: Albero: un Grafo particolare

Alberi Binari

Un albero binario è un grafo orientato che o è vuoto o ècostituito da un solo nodo o è formato da un nodo n (dettoradice) e da due sottoalberi binari, che vengono chiamatirispettivamente sottoalbero sinistro e sottoalbero destro.

Sono particolari alberi ordinati in cui ogni nodo ha al più duefigli e si fa sempre distinzione tra il figlio sinistro, che vieneprima nell’ordinamento e il figlio destro. Nell’esempio glialberi sono etichettati con interi e con caratteri.

Page 14: Albero: un Grafo particolare

Tipi: alberobin, boolean, nodo

Operatori:CREABINALBERO: ( ) → alberobin

BINALBEROVUOTO: (albero) → boolean

INSBINRADICE: (nodo, albero) → albero

INSFIGLIOSINISTRO: (nodo, albero) → albero

INSFIGLIODESTRO: (nodo, albero) → albero

BINRADICE: (albero) → nodo

BINPADRE: (nodo, albero) → nodo

FIGLIOSINISTRO: (nodo, albero) → nodo

FIGLIODESTRO: (nodo, albero) → nodo

FIGLIOSINISTROVUOTO: (nodo, albero) → boolean

FIGLIODESTROVUOTO: (nodo, albero) → boolean

CANCSOTTOBINALBERO: (nodo, albero) → albero

Page 15: Albero: un Grafo particolare

Algoritmi di visita

Algoritmi che consentono di analizzare tutti i nodi dell’alberoin un ordine definito.

Risultano particolarmente importanti in problemi per i quali,ad esempio, si debba ricercare in quale nodo o a quale livello ècontenuto in etichetta un valore dato in input oppure quando sivoglia esplorare l’albero per verificarne la profondità.

La visita di un albero consiste nel seguire una rotta di viaggioche consenta di esaminare ogni nodo dell’albero esattamenteuna volta.

Page 16: Albero: un Grafo particolare

Algoritmi di visita in ampiezza (Breadth-First Search)

L’algoritmo di visita in ampiezza (BFS) si applica ad un alberonon vuoto e richiede dapprima la visita della radice dell’alberoe poi procede visitando i nodi per livelli successivi.

Un nodo sul livello i può essere visitato solo se tutti i nodi sullivello i − 1 sono stati visitati.

Page 17: Albero: un Grafo particolare

Algoritmi di visita in profondità (Depth-First Search)

I più comuni algoritmi di visita in profondità (DFS) sono tre:

# visita in pre-ordine: si applica ad un albero non vuoto erichiede dapprima l’analisi della radice dell’albero e, poi,la visita, effettuata con lo stesso metodo, dei duesottoalberi, prima il sinistro, poi il destro

# visita in post-ordine: si applica ad un albero non vuoto erichiede dapprima la visita, effettuata con lo stesso metodo,dei sottoalberi, prima il sinistro e poi il destro, e, in seguito,l’analisi della radice dell’albero

# visita simmetrica: richiede prima la visita del sottoalberosinistro (effettuata sempre con lo stesso metodo), poil’analisi della radice, e poi la visita del sottoalbero destro

Page 18: Albero: un Grafo particolare

Visita in pre-ordine

visita in pre-ordine: h a d l o q c p s

Page 19: Albero: un Grafo particolare

Visita in post-ordine

visita in post-ordine: d o q l a p s c h

Page 20: Albero: un Grafo particolare

Visita simmetrica

visita simmetrica: d a o l q h p c s

Page 21: Albero: un Grafo particolare

Visita in ampiezza

visita in ampiezza: h a c d l p s o q

Page 22: Albero: un Grafo particolare

Indovina il giusto algoritmo di visita

Page 23: Albero: un Grafo particolare

Formulazione ricorsiva degli algoritmi di visita

Gli algoritmi si possono facilmente formulare in modoricorsivo. Ad esempio:

Visita in preordine l’albero binario T

IF l’albero non è vuoto

analizza la radice di Tvisita in preordine il sottoalbero sinistro di Tvisita in preordine il sottoalbero destro di T

ENDIF

Page 24: Albero: un Grafo particolare

Applicazioni: Alberi di analisi (Parse Tree)

(3/(x2∗ y + 3 ∗ x)) ∗ (z − 1)

Page 25: Albero: un Grafo particolare

Rappresentazioni

# Vettore sequenziale

# Collegata mediante cursori (array)

# Collegata mediante variabili dinamiche

Page 26: Albero: un Grafo particolare

Rappresentazioni: Vettore sequenziale

# Radice in prima posizione

# Figlio sinistro in posizione 2 ∗ i

# Figlio destro in posizione 2 ∗ i + 1

Page 27: Albero: un Grafo particolare

Rappresentazioni: Vettore sequenziale

Problemi della rappresentazione con vettore sequenziale

# Vettori sparsi per alberi binari non completi

# Dimensione fissa per rappresentare i nodi

# Operazioni di inserimento e cancellazione dei nodirichiede molti shift nel vettore

Page 28: Albero: un Grafo particolare

Rappresentazioni: Collegata mediante cursori

Page 29: Albero: un Grafo particolare

Rappresentazioni: Collegata mediante variabili dinamiche

Page 30: Albero: un Grafo particolare

Ricerca binaria mediante albero binario

Page 31: Albero: un Grafo particolare

ALBERI n-ARI

Page 32: Albero: un Grafo particolare

Alberi n-ari

Un albero è un grafo orientato che o è vuoto oppure ha leseguenti caratteristiche:

# esiste un nodo r, detto radice, senza predecessori, con n(n > 0) nodi successori a1 , a2 , . . . , an ;

# tutti gli altri nodi sono ripartiti in n sottoalberimutuamente disgiunti T1 , T2 , ..., Tn aventi rispettivamentea1 , a2 , . . . , an come radice.

L’albero n-ario è un tipo astratto di dati utilizzato perrappresentare relazioni gerarchiche tra oggetti.

Nella definizione data abbiamo assunto che sui figli di ogninodo sia definita una relazione d’ordine (alberi ordinati).

Page 33: Albero: un Grafo particolare

Specifica Sintattica

Tipi: albero, boolean, nodo

Operatori:CREAALBERO: ( ) → albero

ALBEROVUOTO: (albero) → boolean

INSRADICE: (nodo, albero) → albero

RADICE: (albero) → nodo

PADRE: (nodo, albero) → nodo

FOGLIA: (nodo, albero) → boolean

PRIMOFIGLIO: (nodo, albero) → nodo

ULTIMOFRATELLO: (nodo, albero) → boolean

SUCCFRATELLO: (nodo, albero) → nodo

INSSOTTOALBERO: (nodo, albero, albero) → albero

CANCSOTTOALBERO: (nodo, albero) → albero

Page 34: Albero: un Grafo particolare

Algoritmi di visita

Esistono modi diversi per effettuare una visita corrispondentiall’ordine con cui si intende seguire la struttura.

Sia T un albero non vuoto di radice r. Se r non è foglia ed ha k(k > 0) figli, siano T1 , T2 , . . . , Tk i sottoalberi di T aventi comeradici i figli di r. Gli ordini di visita sono:

# previsita (preordine): consiste nell’esaminare r e poieffettuare la previsita di T1 , T2 , . . . , Tk ;

# postvisita (postordine): consiste nel fare prima lapostvisita di T1 , T2 , . . . , Tk e poi nell’esaminare la radice r;

# invisita (ord. simmetrico): consiste nel fare, nell’ordine lainvisita di T1 , T2 , . . . , Ti , nell’esaminare r, e poi effettuare,nell’ordine, la invisita di Ti+1 , . . . , Tk , per un prefissatoi ≥ 1.

Page 35: Albero: un Grafo particolare

Sia un albero che ha degli interi nei nodi:

La visita in preordine ha l’effetto di visitare i nodi secondo lasequenza: 5 4 8 9 12 11 3 15 6 21 20

La vista in postordine produce: 8 12 11 3 9 4 15 21 20 6 5

La invisita (i � 1) produce: 8 4 12 9 11 3 5 15 21 6 20

Page 36: Albero: un Grafo particolare

Equivalenza di alberi n-ari e binari

Si può trovare una equivalenza ai fini della pre-visita.

In questo modo, è sempre possibile rappresentare un alberon-ario ordinato T con un albero binario B avente gli stessi nodie la stessa radice: in B ogni nodo ha come figlio sinistro il primofiglio in T e come figlio destro il fratello successivo in T.

Page 37: Albero: un Grafo particolare

Equivalenza di alberi n-ari e binari

Risulta facile notare che le sequenze di nodi esaminati su T e suB coincidono se T e B sono visitati in previsita.

Page 38: Albero: un Grafo particolare

Rappresentazioni di alberi n-ari

# Rappresentazione con vettore di padri

# Rappresentazione attraverso liste di figli

# Rappresentazione mediante lista PrimoFiglio/fratello

# Rappresentazione collegata mediante lista dinamica

Page 39: Albero: un Grafo particolare

Rappresentazione con vettore di padri

Immaginando di numerare i nodi di T da 1 a n, la più semplicerealizzazione (sequenziale) consiste nell’usare un vettore checontiene, per ogni nodo i (1 ≤ i ≤ n) il cursore al padre.

È facile, così, visitare i nodi lungo percorsi che vanno da foglie aradice. È, invece, più complesso inserire e cancellare sottoalberi.

Page 40: Albero: un Grafo particolare

Rappresentazione attraverso liste di figli

Comprende:

# il vettore dei nodi, in cui, oltre alle eventuali etichette deinodi, si memorizza il riferimento iniziale di una listaassociata ad ogni nodo;

# una lista per ogni nodo, detta lista dei figli. La listaassociata al generico nodo i contiene tanti elementi quantisono i successori di i; ciascun elemento è il riferimento aduno dei successori.

Per l’esempio precedente si avrebbe:

Page 41: Albero: un Grafo particolare

Rappresentazione mediante lista PrimoFiglio/fratello

Prevede la gestione di una lista e questo può essere fattoimponendo che tutti gli alberi condividano un’area comune (adesempio un vettore nella realizzazione con cursori) e che ognicella contenga esattamente due cursori: uno al primo figlio eduno al fratello successivo.

La realizzazione è simile a quella proposta per gli alberi binaricon l’unica differenza che il cursore nel terzo campo punta alfratello.

Page 42: Albero: un Grafo particolare

Rappresentazione mediante lista PrimoFiglio/fratello

Naturalmente è possibile anche prevedere un cursore algenitore:

Page 43: Albero: un Grafo particolare

Rappresentazione collegata mediante lista dinamica

Da un punto di vista formale l’albero n-ario può essererappresentato mediante lista secondo le seguenti regole:

# se l’albero è vuoto la lista che lo rappresenta è vuota;

# altrimenti, l’albero è composto da una radice e da ksottoalberi T1 , T2 , . . . , Tk e la lista è fatta da k + 1 elementi:il primo rappresenta la radice, mentre gli altri sono glialberi T1 , T2 , . . . , Tk (con k ≥ 0);

Page 44: Albero: un Grafo particolare

Rappresentazione collegata mediante lista dinamica

Ad esempio, l’albero corrisponde a

Page 45: Albero: un Grafo particolare

Rappresentazione collegata mediante lista dinamica

La rappresentazione con lista dinamica è comunque complessa:in generale, la radice dell’albero viene memorizzata nel primoelemento della lista che contiene il riferimento ad una lista dielementi, uno per ogni sottoalbero.

Ciascuno di questi elementi contiene, a sua volta, il riferimentoiniziale alla lista che rappresenta il corrispondente sottoalbero.

Una possibile realizzazione prevede record e puntatori, ma ilrecord va inteso con varianti: per esempio, si può prevedere unrecord con tre campi, uno per la parte informazione e due per ipuntatori.

Page 46: Albero: un Grafo particolare

Rappresentazione collegata mediante lista dinamica

Per ogni record sarà sempre significativo uno dei campipuntatore, ma quando l’atomo rappresenta un nodo effettivodell’albero sarà utilizzata l’etichetta e un puntatore, quandorappresenta un atomo "di servizio" saranno utilizzati duepuntatori.

Page 47: Albero: un Grafo particolare

Union-Find

L’MFSet (Merge-Find Set), altrimenti conosciuto come strutturadati union-find, è una struttura dati derivante dal concetto diInsieme delle parti, per cui dato un insieme finito di elementi avolte risulta utile partizionarli in insiemi disgiunti, detticomponenti. È possibile rappresentarlo mediante una forestadi alberi radicati in cui ciascun albero rappresenta unacomponente.

Due operazioni possibili su questa struttura dati:

# Ricerca (o trova): determina in quale insieme si trova unparticolare elemento, o se due elementi appartengono allostesso insieme;

# Unione (o fondi): combina o fonde due insiemi in un unicoinsieme.

L’altra operazione su MFSet è Crea, tramite la quale è possibiledato un insieme crearne l’insieme delle parti di ciascunelemento.

Page 48: Albero: un Grafo particolare

Realizzazione di MFSet

Le componenti iniziali di MFset sono i nodi. Attraversooperazioni successive di "fondi e trova" si crea la struttura.

L’operatore fondi combina due alberi nello stesso albero. Sirealizza imponendo che una delle due radici diventi nuovofiglio dell’altra.

L’operatore trova verifica se due elementi sono nel medesimoalbero. Si realizza accedendo ai nodi contenenti gli elementi erisalendo da tali nodi, attraverso i padri, fino ad arrivare alleradici.

Con l’utilizzo di questi operatori è possibile risolvere moltiproblemi, come ad esempio l’implementazione dell’algoritmodi Kruskal.

Page 49: Albero: un Grafo particolare

Realizzazione di MFSet

Page 50: Albero: un Grafo particolare

Applicazioni di alberi n-ari: Rappresentazione del DOM

Il Document Object Model (spesso abbreviato comeDOM),letteralmente modello a oggetti del documento, è una forma dirappresentazione dei documenti strutturati come modelloorientato agli oggetti.

DOM è lo standard ufficiale per la rappresentazione didocumenti strutturati in maniera da essere neutrali sia per lalingua che per la piattaforma.

Un classico esempio di albero DOM è quello generato da unbrowser web nell’interpretazione di un documento HTML.

Page 51: Albero: un Grafo particolare

Rappresentazione del DOM

Esempio di pagina HTML

<!-- My document -->

<html>

<head>

<title>My Document</title>

</head>

<body>

= Header =

<p>

Paragraph

</p>

</body>

</html>

Page 52: Albero: un Grafo particolare

Rappresentazione del DOM

È da notare che in questo esempio anche i cosiddetti caratteriblank (spazi, tabulazioni, ecc.) sono considerati elementidell’albero, nonostante questi non vengano poi mostrati dalbrowser (a meno che non si trovino all’interno di un tag pre).

Page 53: Albero: un Grafo particolare

Rappresentazione del DOM

Nativamente supportato dai browser per modificare glielementi di un documento HTML. DOM è un modo peraccedere e aggiornare dinamicamente il contenuto, la strutturae lo stile dei documenti.

DOM permette di visualizzare un documento ben formato sottoforma di albero: la maggior parte dei parser e i processori sonostati sviluppati per usare la struttura ad albero. Questaimplementazione richiede che l’intero contenuto di undocumento venga analizzato e salvato in memoria.

DOM è utilizzato principalmente per recuperare informazionida documenti con una strutturazione non standard, cioè dovegli elementi devono essere trovati in modo casuale.

Page 54: Albero: un Grafo particolare

ALBERI DI RICERCA

Page 55: Albero: un Grafo particolare

Alberi di connessione minimi su grafi

# Algoritmo di Kruskal

# Algoritmo di Prim

Page 56: Albero: un Grafo particolare

Alcune definizioni

Si definisce taglio (S,V − S) di un grafo non orientatoG � (V, E), una partizione di V .

Si dice che un arco (u , v) ∈ E attraversa il taglio (S,V − S) seuna delle due estremità si trova in S e l’altra in V − S

Si dice che un taglio rispetta un insieme A di archi se nessunarco di A attraversa il taglio.

Un arco è un arco leggero per un taglio se il suo peso è ilminimo fra i pesi degli archi che attraversano il taglio

Page 57: Albero: un Grafo particolare

Teorema dell’arco sicuro

TEOREMA 1:

Sia G � (V, E) un grafo connesso, non orientato con unafunzione di peso w a valori reali e definita in E. Sia A unsottoinsieme di E che è contenuto in qualche albero diconnessione minimio per G; sia (S,V − S) un taglio qualsiasi diG che rispetta A e sia (u , v) un arco leggero che attraversa(S,V − S).Allora l’arco (u , v) è un arco sicuro per A.

Page 58: Albero: un Grafo particolare

Algoritmo di tipo "Greedy" o "Goloso"

Un algoritmo greedy è un algoritmo che cerca di ottenere unasoluzione ottima da un punto di vista globale attraverso la sceltadella soluzione più golosa (o greedy) ad ogni passo locale.

Questa tecnica consente, dove applicabile (infatti non sempre siarriva ad una soluzione ottima), di trovare soluzioni ottimaliper determinati problemi in un tempo polinomiale.

Page 59: Albero: un Grafo particolare

Algoritmo di Kruskal

# L’algoritmo di Kruskal trova un arco sicuro da aggiungerealla foresta in costruzione scegliendo, fra tutti gli archi checollegano due alberi qualsiasi nella foresta, un arco (u , v)di peso minimo.

# L’algoritmo di Kruskal è greedy (goloso) perchè ad ognipasso aggiunge alla alla foresta un arco con il minor pesopossibile.

# Sfruttiamo i concetti di FIND e UNION definitiprecedentemente

Page 60: Albero: un Grafo particolare

Algoritmo di Kruskal

ALGORITMO MST DI KRUSKAL (G, w)A � 0ordina gli archi di G.E in senso non decrescente rispetto

al peso wFOR ogni arco (u , v) ∈ G.E, preso in ordine di peso non

decrescente

IF FIND(u) , FIND(v)A � A ∪ (u , v)UNION (u , v)

RETURN A

Il tempo di esecuzione dell’algoritmo dipende dalla strutturadati utilizzata per memorizzare i nodi e i vertici.

Page 61: Albero: un Grafo particolare

Esempio

Page 62: Albero: un Grafo particolare

Algoritmo di Prim

# E’ molto simile all’algoritmo di Dijkstra

# Si parte da un nodo qualunque

# Ad ogni passo viene aggiunto un arco leggero che collegal’albero analizzato A con un vertice isolato

# Algoritmo greedy

# Tutti i rami non esplorati vengono inizializzati ad∞

Page 63: Albero: un Grafo particolare

Algoritmo di Prim

Si sfrutta il concetto di coda di min-priorità Q (basata su uncampo ke y) dove risiedono tutti i vertici che non si trovanonell’albero. Per ogni vertice v, il valore v.ke y rappresenta ilpeso minimo di un arco qualsiasi che collega v ad un verticenell’albero.

Inizialmente si assegna v.ke y � ∞.

Quando l’algoritmo termina la coda min-priorità Q è vuota.

Page 64: Albero: un Grafo particolare

Algoritmo di Prim

Sia r la radice dell’albero: il nodo di partenza sul grafo.Considerato un nodo v, allora v.p identifica il padre di vnell’albero

MST-Prim (G,w, r)

r.ke y � 0Q � G.VWHILE Q , 0

u= EXTRACT-MIN(Q)

FOR ogni v ∈ G.adj[u]IF v ∈ Q ∧ w(u , v) < v.ke y

v.p � uv.ke y � w(u , v)

Page 65: Albero: un Grafo particolare

Algoritmo di Prim: Esempio 1

Page 66: Albero: un Grafo particolare

Algoritmo di Prim: Esempio 2

Page 67: Albero: un Grafo particolare

Alberi Binari di ricerca

Un albero binario di ricerca (o BST) è un particolare tipo dialbero binario rappresentato da una struttura dati concatenatain cui ogni nodo è un oggetto. Ogni nodo ha:

# Una chiave k

# Attributi puntatori a nodi left, right e parent

# Attributi satelliti

Page 68: Albero: un Grafo particolare

Proprietà degli alberi binari di ricerca

Sia x un nodo in un albero binario di ricerca.

Se y è un nodo nel sottoalbero sinistro di x, alloray.ke y ≤ x.ke y

Se y è un nodo nel sottoalbero destro di x, allora y.ke y ≥ x.ke y

Page 69: Albero: un Grafo particolare

Attraversamento degli alberi binari di ricerca

La particolare struttura dell’albero binario consentel’attraversamento dello stesso mediante un algoritmo ricorsivosia inorder che preorder e postorder.

Se x è la radice di un sottoalbero di n nodi, la visita inorder(x)richiede Θ(n)

Page 70: Albero: un Grafo particolare

Interrogazione degli alberi

Gli alberi binari supportano le operazioni di:

# Search

# Minimum

# Maximum

# Successor

# Predecessor

Page 71: Albero: un Grafo particolare

Search - Ricerca

Sia x la radice dell’albero e k la chiave da cercare:

RECURSIVE TREE-SEARCH(x,k)

IF x �� nil ∨ k �� x.ke yRETURN x

IF k , x.ke yRETURN TREE-SEARCH(x.le f t , k)

ELSE RETURN TREE-SEARCH(x.ri ght , k)

In altre parole, sfruttando le proprietà dell’albero, lo si esplorafino al raggiungimento dell’elemento (se esiste). Questaoperazione richiede O(h) tempo, dove h è l’altezza dell’albero.

Page 72: Albero: un Grafo particolare

Minimum - Ricerca del minimo

Un elemento con chiave minimia può essere sempre trovato, apartire dalla radice, seguendo i puntatori le f t dei figli a sinistrafino a quando non si trova il valore nil.

TREE-MINIMUM(x)

WHILE x.le f t , nilx � x.le f t

RETURN x

Page 73: Albero: un Grafo particolare

Maximum - Ricerca del massimo

Un elemento con chiave massima può essere sempre trovato, apartire dalla radice, seguendo i puntatori ri ght dei figli a destrafino a quando non si trova il valore nil.

TREE-MAXIMUM(x)

WHILE x.ri ght , nilx � x.ri ght

RETURN x

Page 74: Albero: un Grafo particolare

Successor - Ricerca del successore

Spesso è importante trovare il successore di un nodo. Se tutte lechiavi sono distinte, il successore di un nodo x è quello con lapiù piccola chiave che è maggiore di x.key.

TREE-SUCCESSOR(x)

IF x.ri ght , nilRETURN TREE-MINIMUM(x)

y � x.pWHILE y , nil ∧ x �� y.ri ght

x � yy � y.p

RETURN y

Page 75: Albero: un Grafo particolare

Predecessor - Ricerca del predecessore

Analogamente al punto precedente si trova il predecessore diun dato nodo.

TREE-PREDECESSOR(x)

IF x.le f t , nilRETURN TREE-MAXIMUM(x)

y � x.pWHILE y , nil ∧ x �� y.le f t

x � yy � y.p

RETURN y

Page 76: Albero: un Grafo particolare

Alberi Rosso-Neri

Gli alberi rosso-neri sono dei classici alberi binari di ricerca, conl’aggiunta di un’informazione relativa al colore del nodo inanalisi.

A livello implementativo, tale informazione si rappresenta conun bit.

Page 77: Albero: un Grafo particolare

Struttura di un nodo

Ogni nodo ha le seguenti caratteristiche:

# color# key# *left# *right# *parent

Se manca un figlio o il padre di un nodo, il corrispondentepuntatore contiene il valore NIL.

Page 78: Albero: un Grafo particolare

Proprietà degli alberi Rosso-Neri

Un albero rosso-nero è approsimativamente sempre bilanciato.Ha delle importanti proprietà:

1. Ogni nodo o è di colore rosso o di colore nero;

2. La radice è sempre nera;

3. Ogni foglia (NIL) è nera;

4. Se un nodo è rosso, allora i suoi figli sono neri;

5. Per ogni nodo, tutti i cammini semplici che vanno dal nodoalle foglie sue discendenti contengono lo stesso numero dinodi neri.

Page 79: Albero: un Grafo particolare

Come e perchè

Questi tipi di alberi sono particolarmente efficaci quando siimplementano strutture dati tipo array associativi o insiemi.

Sono particolarmente utili per le applicazioni real time.

Si definiscono due principali operazioni:

# Inserimento

# Cancellazione

# Rotazione

Page 80: Albero: un Grafo particolare

Rotazione

Inserimento e cancellazione richietono un tempo O(log n);tuttavia ogni operazione potrebbe violare una delle 5 proprietàdescritte in precedenza.

Per ripristinare le proprietà di un albero che ha subito uninserimento o una cancellazione si usa metodo della rotazione.

Page 81: Albero: un Grafo particolare

Rotazione: concetto base

Page 82: Albero: un Grafo particolare

Esempio: rotazione a sinistra di x

IPOTESI: il figlio destro di y non è NIL.

La rotazione a sinistra "fa perno" sul collegamento tra x ed y. Ilnodo y diventa la nuova radice del sottoalbero, con x comefiglio sinistro di y e il figlio sinistro di y come figlio destro di x.Le rotazioni vengono eseguite nel tempo O(1)!

Page 83: Albero: un Grafo particolare

Esempio: rotazione a sinistra di x

Page 84: Albero: un Grafo particolare

Inserimento

L’inserimento all’interno di un albero rosso-nero avviene in untempo O(log n). La procedura per l’inserimento è la stessa vistanel caso di alberi binari, con l’unica accortezza da mantenere:

1. Si assegna T.nil come figli destri e sinistri del nodo

2. Si assegna al nodo il colore ROSSO

3. Si eseguono delle procedure di verifica delle proprietàdegli albero Rosso-Neri

Page 85: Albero: un Grafo particolare

Metodi per il mantenimeto delle proprietà

# Ricolorazione: cambiamento dei colori dei nodi figlio epadre dell’albero

# Ristrutturazione: cambiamento opportuno mediante larotazione della posizione dei nodi

Page 86: Albero: un Grafo particolare

Ricolorazione

Page 87: Albero: un Grafo particolare

Ricolorazione 2

Page 88: Albero: un Grafo particolare

Ristrutturazione

Page 89: Albero: un Grafo particolare

Esempio

Page 90: Albero: un Grafo particolare

Esempio

Page 91: Albero: un Grafo particolare

References

A. Bertossi e A. MontresorAlgoritmi e Strutture di DatiCittàStudi, Seconda edizione

C. Demetrescu, I. Finocchi, G. F. ItalianoAlgoritmi e Strutture di DatiMcGraw-HillThomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,Clifford SteinIntroduzione agli algoritmi e strutture datiMcGraw-Hill, Terza edizione