Corso di INFORMATICA - Ingegneria Aerospaziale Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 Alberi 5 Bibliografia Tipi di dato e Strutture dati elementari 2 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Algoritmi e Strutture dati Programmi = Algoritmi + Strutture dati Qual’è l’uovo e quale la gallina? Tipi di dato e Strutture dati elementari 3 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Tipi di dato vs Strutture dati Tipo di dato [astratto] Individua un insieme di oggetti e specifica le operazioni di interesse su di esso (ad esempio inserisci, cancella, cerca, . . . ) La specifica indica cosa un’operazione deve fare, non come può essere realizzata e come gli oggetti dell’insieme debbano essere organizzati. Struttura dati Organizzazione dei dati che permette di supportare le operazioni di un tipo di dato in modo efficiente, usando meno risorse di calcolo possibile in termini di spazio e tempo. Tipi di dato e Strutture dati elementari 4 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Tecniche di rappresentazione Rappresentazioni indicizzate I dati sono contenuti in locazioni di memoria consecutive, accedibili mediante indice (tipicamente, array). Rappresentazioni collegate I dati sono contenuti in locazioni di memoria non necessariamente contigue, collegate tra loro mediante puntatori. Tipi di dato e Strutture dati elementari 5 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Tecniche di rappresentazione: esempi Tipi di dato e Strutture dati elementari 6 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Rappresentazioni indicizzate vs collegate Pro Contro Rappresentazioni indicizzate Accesso diretto ai dati mediante indici (tempo costante) Dimensione fissa (riallocazione array richiede tempo lineare) Rappresentazioni collegate Dimensione variabile (aggiunta e rimozione record in tempo costante) Accesso lineare ai dati (tempo lineare) Tipi di dato e Strutture dati elementari 7 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Rappresentazioni indicizzate vs collegate: esempi Tipi di dato e Strutture dati elementari 8 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Introduzione Considerazioni La scelta va fatta caso per caso a seconda dei requisiti di: Variabilità dimensionale dei dati da trattare Frequenza delle operazioni di lettura/scrittura sulla struttura dati Vedremo solo rappresentazioni indicizzate! Tipi di dato e Strutture dati elementari 9 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Il tipo di dato PILA Definizione Insieme finito di elementi tra i quali è definito un ordinamento totale (lista) e, in particolare, le operazioni di inserimento ed estrazione si compiono dallo stesso estremo. I dati vengono gestiti secondo la logica LIFO - Last In First Out -: l’ultimo ad essere stato inserito sarà il primo ad essere processato Possibili utilizzi: Stack di attivazione di programmi Tipi di dato e Strutture dati elementari 10 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Tipo di dato astratto PILA Dati Una sequenza S di n elementi Operazioni isEmpty() → result Restituisce VERO se S è vuota, FALSO altrimenti push(elem e) Aggiunge e come ultimo elemento (affiorante) di S pop() → elem Toglie da S l’ultimo elemento (affiorante) e lo restituisce top() → elem Restituisce l’ultimo elemento (affiorante) di S, senza toglierlo da S Tipi di dato e Strutture dati elementari 11 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Struttura dati per il tipo PILA Array di n elementi Indice dell’elemento affiorante Tipi di dato e Strutture dati elementari 12 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Esempio di PILA Tipi di dato e Strutture dati elementari 13 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Operazioni su PILE: isEmpty() Algoritmo SE top < minimo indice array ALLORA VERO ALTRIMENTI FALSO Tipi di dato e Strutture dati elementari 14 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Operazioni su PILE: push(e) Algoritmo SE top < massimo indice array ALLORA array(top+1) = e top = top + 1 ALTRIMENTI ERRORE Tipi di dato e Strutture dati elementari 15 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Operazioni su PILE: pop() Algoritmo SE top > minimo indice array ALLORA Elem e = array(top) top = top - 1 RETURN e ALTRIMENTI ERRORE Tipi di dato e Strutture dati elementari 16 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Operazioni su PILE: top() Algoritmo RETURN array(top) Tipi di dato e Strutture dati elementari 17 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Esercizi Esercizio 1 Quanti elementi sono “in pila”? Esercizio 2 Tipi di dato e Strutture dati elementari 18 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Esercizi Esercizio 1 Quanti elementi sono “in pila”? top - minimo indice array + 1 Esercizio 2 Tipi di dato e Strutture dati elementari 18 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Esercizi Esercizio 1 Esercizio 2 Data la seguente sequenza di operazioni su una pila vuota di 10 elementi, rappresentare lo stato finale della pila. push(’O’) push(’L’) push(’O’) pop() push(’A’) top() push(’P’) Tipi di dato e Strutture dati elementari 18 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Pile Esercizi Esercizio 1 Esercizio 2 Data la seguente sequenza di operazioni su una pila vuota di 10 elementi, rappresentare lo stato finale della pila. push(’O’) push(’L’) push(’O’) pop() push(’A’) top() push(’P’) Tipi di dato e Strutture dati elementari 18 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Il tipo di dato CODA Definizione Insieme finito di elementi tra i quali è definito un ordinamento totale (lista) e, in particolare, le operazioni di inserimento ed estrazione si compiono dai due estremi opposti. I dati vengono gestiti secondo la logica FIFO - First In First Out -: il primo che è stato inserito sarà anche il primo ad essere processato Possibili utilizzi: Gestione accessi concorrenti ad una unica risorsa condivisa (priorità) Buffer di memorizzazione dati Tipi di dato e Strutture dati elementari 19 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Tipo di dato astratto CODA Dati Una sequenza S di n elementi Operazioni isEmpty() → result Restituisce VERO se S è vuota, FALSO altrimenti enqueue(elem e) Aggiunge e come ultimo elemento di S dequeue() → elem Toglie da S il primo elemento e lo restituisce first() → elem Restituisce il primo elemento di S, senza toglierlo da S Tipi di dato e Strutture dati elementari 20 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Struttura dati per il tipo CODA Array di n elementi Indice del primo elemento Indice dell’ultimo elemento Tipi di dato e Strutture dati elementari 21 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Esempio di CODA Tipi di dato e Strutture dati elementari 22 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Operazioni su CODE: isEmpty() Algoritmo SE ((primo == ultimo) E (array(primo) = NULL)) ALLORA VERO ALTRIMENTI FALSO Tipi di dato e Strutture dati elementari 23 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Operazioni su PILE: enqueue(e) Algoritmo SE ultimo < massimo indice array ALLORA ultimo = ultimo + 1 array(ultimo) = e ALTRIMENTI ERRORE Tipi di dato e Strutture dati elementari 24 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Operazioni su CODE: dequeue() Algoritmo SE primo ≥ minimo indice array ALLORA Elem e = array(primo) primo = primo + 1 RETURN e ALTRIMENTI ERRORE Tipi di dato e Strutture dati elementari 25 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Operazioni su CODE: first() Algoritmo RETURN array(primo) Tipi di dato e Strutture dati elementari 26 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Esercizi Esercizio 1 Quanti elementi sono “in coda”? Esercizio 2 Tipi di dato e Strutture dati elementari 27 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Esercizi Esercizio 1 Quanti elementi sono “in coda”? ultimo - primo + 1 Esercizio 2 Tipi di dato e Strutture dati elementari 27 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Esercizi Esercizio 1 Esercizio 2 Data la seguente sequenza di operazioni su una coda vuota di 10 elementi, rappresentare lo stato finale della coda. enqueue(’P’) enqueue(’A’) dequeue() first() enqueue(’O’) enqueue(’L’) enqueue(’O’) Tipi di dato e Strutture dati elementari 27 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Code Esercizi Esercizio 1 Esercizio 2 Data la seguente sequenza di operazioni su una coda vuota di 10 elementi, rappresentare lo stato finale della coda. enqueue(’P’) enqueue(’A’) dequeue() first() enqueue(’O’) enqueue(’L’) enqueue(’O’) Tipi di dato e Strutture dati elementari 27 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Il tipo di dato ALBERO Definizione Un albero è una coppia T = (N, A) costituita da: un insieme N di elementi detti nodi, un insieme A ⊆ N×N di coppie di nodi dette archi. Un albero è un particolare tipo di grafo, connesso e senza cicli. Possibili utilizzi: Organizzazione gerarchica dei dati Ricerche Tipi di dato e Strutture dati elementari 28 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Il tipo di dato ALBERO Ulteriori proprietà/definizioni: ogni nodo (tranne la radice) ha un solo genitore (o padre), raggiungibile attraverso un arco un nodo può avere zero o più figli, raggiungibili attraverso altrettanti archi orientati; il loro numero viene chiamato grado del nodo un nodo senza figli è chiamato foglia, mentre nodi che non sono nè foglie nè radice sono chiamati nodi interni la profondità (o livello) di un nodo è il numero di archi che è necessario attraversare per raggiungerlo a partire dalla radice Tipi di dato e Strutture dati elementari 29 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Esempio di ALBERO Tipi di dato e Strutture dati elementari 30 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Tipo di dato astratto ALBERO Dati Un insieme di nodi (di tipo nodo) e un insieme di archi Operazioni numNodi() → intero Restituisce il numero di nodi presenti nell’albero grado(nodo v) → intero Restituisce il numero di figli del nodo v padre(nodo v) → nodo Restituisce il padre del nodo v nell’albero, o null se v è la radice figli(nodo v) → hnodo, nodo, nodo, ..., nodoi Restituisce, uno dopo l’altro, i figli del nodo v Tipi di dato e Strutture dati elementari 31 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Tipo di dato astratto ALBERO Operazioni aggiungiNodo(nodo u) → nodo Inserisce un nuovo nodo v come figlio di u nell’albero e lo restituisce. Se v è il primo nodo ad essere inserito nell’albero, esso diventa la radice (e u viene ignorato) aggiungiSottoalbero(Albero a, nodo u) Inserisce nell’albero il sottoalbero a in modo che la radice di a diventi figlia di u rimuoviSottoalbero(nodo v) → Albero Stacca e restituisce l’intero sottoalbero radicato in v Tipi di dato e Strutture dati elementari 32 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Strutture dati per il tipo ALBERO Molte strutture dati efficienti sono basate su alberi, in particolare su alcune classi di alberi che presentano vincoli strutturali che facilitano la rappresentazione o consentono di realizzare operazioni su collezioni di elementi in modo efficiente. I principali vincoli strutturali riguardano il grado dei nodi e la profondità: un albero d-ario è un albero in cui tutti i nodi tranne le foglie hanno grado massimo pari a d; per d=2 diremo che l’albero è binario un albero d-ario in cui tutte le foglie sono sullo stesso livello è completo. Solo gli alberi d-ari completi possono essere rappresentati con le strutture indicizzate che conosciamo (vettori/array)! Tipi di dato e Strutture dati elementari 33 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Ipotesi Albero d-ario completo, con d≥2, con n nodi numerati da 1 ad n Un vettore posizionale è un array P di dimensione n tale che: P(v) contiene l’informazione associata al nodo v P(d·v+i) contiene l’informazione associata all’i-esimo figlio di v, con 0≤i≤(d-1) Esempio Dato un nodo v di un albero binario (d=2) completo: il figlio sinistro di v sarà in posizione 2v il figlio destro di v sarà in posizione 2v+1 Tipi di dato e Strutture dati elementari 34 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Struttura dati per il tipo ALBERO Array di n + 1 elementi Per semplicità di indicizzazione la posizione 0 dell’array non è utilizzata Tipi di dato e Strutture dati elementari 35 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Parte dalla radice e procede visitando i nodi di figlio in figlio fino a raggiungere una foglia. Retrocede poi al primo antenato che ha ancora figli non visitati (se esiste) e ripete il procedimento a partire da uno di quei figli. Algoritmo: visitaDFS(nodo r) Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in profondità Algoritmo: visitaDFS(nodo r) Pila S S.push(r) CICLO SE S.isEmpty() ALLORA EXIT u ← S.pop() SE (u 6= NULL) ALLORA visita il nodo u S.push(figlio destro di u) S.push(figlio sinistro di u) FINE CICLO Tipi di dato e Strutture dati elementari 36 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Parte dalla radice e procede visitando i nodi per livelli successivi. Un nodo sul livello i può essere visitato solo se tutti i nodi sul livello i-1 sono stati visitati. Algoritmo: visitaBFS(nodo r) Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Algoritmi di visita degli alberi Visita in ampiezza Algoritmo: visitaBFS(nodo r) Coda C C.enqueue(r) CICLO SE C.isEmpty() ALLORA EXIT u ← C.dequeue() SE (u 6= NULL) ALLORA visita il nodo u C.enqueue(figlio sinistro di u) C.enqueue(figlio destro di u) FINE CICLO Tipi di dato e Strutture dati elementari 37 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Alberi binari di ricerca Definizione Alberi binari che soddisfano le seguenti proprietà: ogni nodo v contiene un elemento elem(v) cui è associata una chiave chiave(v) presa da un dominio totalmente ordinato le chiavi nel sottoalbero sinistro di v sono ≤ chiave(v) le chiavi nel sottoalbero destro di v sono ≥ chiave(v) Esempio Tipi di dato e Strutture dati elementari 38 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Alberi binari di ricerca Algoritmo: cerca(chiave k)→ elem Esempio: cerca(12) v ← radice di T CICLO SE v = NULL ALLORA EXIT SE (k = chiave(v)) ALLORA RETURN elem(v) ALTRIMENTI SE (k < chiave(v)) ALLORA v ← figlio sinistro di v ALTRIMENTI v ← figlio destro di v FINE CICLO Tipi di dato e Strutture dati elementari 39 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Alberi binari di ricerca Algoritmo: cerca(chiave k)→ elem Esempio: cerca(12) v ← radice di T CICLO SE v = NULL ALLORA EXIT SE (k = chiave(v)) ALLORA RETURN elem(v) ALTRIMENTI SE (k < chiave(v)) ALLORA v ← figlio sinistro di v ALTRIMENTI v ← figlio destro di v FINE CICLO Tipi di dato e Strutture dati elementari 39 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Alberi binari di ricerca Algoritmo: cerca(chiave k)→ elem Esempio: cerca(12) v ← radice di T CICLO SE v = NULL ALLORA EXIT SE (k = chiave(v)) ALLORA RETURN elem(v) ALTRIMENTI SE (k < chiave(v)) ALLORA v ← figlio sinistro di v ALTRIMENTI v ← figlio destro di v FINE CICLO Tipi di dato e Strutture dati elementari 39 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Alberi Alberi binari di ricerca Algoritmo: cerca(chiave k)→ elem Esempio: cerca(12) v ← radice di T CICLO SE v = NULL ALLORA EXIT SE (k = chiave(v)) ALLORA RETURN elem(v) ALTRIMENTI SE (k < chiave(v)) ALLORA v ← figlio sinistro di v ALTRIMENTI v ← figlio destro di v FINE CICLO Tipi di dato e Strutture dati elementari 39 / 40 Corso di INFORMATICA - Ingegneria Aerospaziale Bibliografia Bibliografia Algoritmi e strutture dati C. Demetrescu, I. Finocchi, G. Italiano - McGraw-Hill Teoria e progetto di algoritmi fondamentali G. Ausiello, A. Marchetti Spaccamela, M. Protasi - Franco Angeli Tipi di dato e Strutture dati elementari 40 / 40