Esercizi Capitolo 6 - Alberi binari di ricerca



Documenti analoghi
Esercizi Capitolo 6 - Alberi binari di ricerca

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Esercizi Capitolo 5 - Alberi

Alberi binari di ricerca

Esercizi Capitolo 2 - Analisi di Algoritmi

Esercizi per il corso di Algoritmi e Strutture Dati

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

Alberi binari di ricerca

Algoritmi e Strutture Dati

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Esercizi Capitolo 14 - Algoritmi Greedy

4.1 Modelli di calcolo analisi asintotica e ricorrenze

La struttura dati ad albero binario

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e strutture dati. Codici di Huffman

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015

Programmazione dinamica

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

Introduzione ai tipi di dato astratti: applicazione alle liste

G3. Asintoti e continuità

Algoritmi di Ricerca. Esempi di programmi Java

Lezione 8. La macchina universale

Alberi auto-aggiustanti

Plate Locator Riconoscimento Automatico di Targhe

B+Trees. Introduzione

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Soluzione dell esercizio del 2 Febbraio 2004

Esempi di algoritmi. Lezione III

1. PRIME PROPRIETÀ 2

FUNZIONI ELEMENTARI - ESERCIZI SVOLTI

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

10 - Programmare con gli Array

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Semantica Assiomatica

LE FUNZIONI A DUE VARIABILI

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees

risulta (x) = 1 se x < 0.

GESTIONE INFORMATICA DEI DATI AZIENDALI

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Consideriamo due polinomi

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Gli ordini di visita di un albero binario di 9 nodi sono i seguenti: A, E, B, F, G, C, D, I, H (anticipato)

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Sequenziamento a minimo costo di commutazione in macchine o celle con costo lineare e posizione home (In generale il metodo di ottimizzazione

2. Leggi finanziarie di capitalizzazione

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

4 3 4 = 4 x x x 10 0 aaa

TSP con eliminazione di sottocicli

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Esercizi sull Association Analysis

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

TSP con eliminazione di sottocicli

Prova di Laboratorio di Programmazione

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Algoritmi e strutture dati

Corso di Informatica

LISTE, INSIEMI, ALBERI E RICORSIONE

I tipi di dato astratti

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

VC-dimension: Esempio

Dimensione di uno Spazio vettoriale

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Funzioni in C. Violetta Lonati

Appunti sulla Macchina di Turing. Macchina di Turing

Il valore assoluto. F. Battelli Università Politecnica delle Marche, Ancona. Pesaro, Precorso di Analisi 1, Settembre 2005 p.

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Capitolo 2. Operazione di limite

Interesse, sconto, ratei e risconti

Comparatori. Comparatori di uguaglianza

Ricerca binaria. Operazione dominante: confronto

Algoritmi e diagrammi di flusso

Teoria dei Giochi. Anna Torre

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Parte 6. Applicazioni lineari

( x) ( x) 0. Equazioni irrazionali

Convertitori numerici in Excel

Appunti di Algoritmi e Strutture Dati. Grafi. Gianfranco Gallizia

Corso di Matematica per la Chimica

Teoria in sintesi 10. Attività di sportello 1, 24 - Attività di sportello 2, 24 - Verifica conclusiva, 25. Teoria in sintesi 26

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Calcolo Numerico

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

e-dva - eni-depth Velocity Analysis

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Algoritmi e Strutture Dati

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

4. Operazioni binarie, gruppi e campi.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Corso di Tecniche di Programmazione

regola(1,[e,f],b) regola(2,[m,f],e) regola(3,[m],f) regola(4,[b,f],g) regola(5,[b,g],c) regola(6,[g,q],a)

Intorni Fissato un punto sull' asse reale, si definisce intorno del punto, un intervallo aperto contenente e tutto contenuto in

Studente: SANTORO MC. Matricola : 528

Transcript:

Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni tramite collegamenti ipertestuali. Altrimenti, fate riferimento ai titoli degli esercizi. Ovviamente, si consiglia di provare a risolvere gli esercizi personalmente, prima di guardare la soluzione. Per molti di questi esercizi l ispirazione è stata presa dal web. In alcuni casi non è possibile risalire alla fonte originale. Gli autori originali possono richiedere la rimozione di un esercizio o l aggiunta di una nota di riconoscimento scrivendo ad alberto.montresor@unitn.it. Problemi. Versione ricorsiva di insertnode() (Esercizio 6.2 del libro) Si scriva una versione ricorsiva della procedura insertnode(). Soluzione: Sezione 2..2 Verifica ABR (Esercizio 6.3 del libro) Si scriva una funzione che verifichi se un albero binario è un albero di ricerca usando gli operatori degli alberi binari. Soluzione: Sezione 2.2.3 Concatenazione (Esercizio 6.6 del libro) Dati due alberi binari di ricerca T e T 2 tali che le chiavi in T sono tutte minori delle chiavi in T 2, scrivere una procedura che restituisce un albero di ricerca contenente tutte le chiavi in tempo O(h), dove h è l altezza massima dei due alberi. Soluzione: Sezione 2.3.4 Realizzazione di insiemi con alberi Red-Black (Esercizio 6.8 del libro) Si assuma di rappresentare gli insiemi con alberi Red-Black. Quali sono le complessità delle operazioni union(), difference() e intersection()? Soluzione: Sezione 2.4.5 Colorazione Red-Black (Esercizio 6.9 del libro) Quali degli alberi in Fig. possono essere colorati rispettando i vincoli degli alberi Red-Black, e quali no? Si assuma che tutti questi nodi siano interni, e che i nodi foglia nil non siano rappresentati.

PROBLEMI 2 (a) (b) (c) (d) 7 8 7 8 6 7 8 9 9 0 2 9 0 2 0 3 3 4 Figura : Alberi da colorare Soluzione: Sezione 2.5.6 Differenze tra ABR e alberi heap Qual è la differenza fra la proprietà degli ABR e la proprietà min-heap? È possibile utilizzare la seconda per elencare in modo ordinato le chiavi di un albero di n nodi in tempo O(n)? Soluzione: Sezione 2.6.7 Proprietà degli ABR Dimostrate che se un nodo in un ABR ha due figli, allora il suo successore non ha un figlio sinistro e il suo predecessore non ha un figlio destro. Soluzione: Sezione 2.7.8 Distribuzione di valori in un albero binario di ricerca completo Si consideri un albero binario completo T con 0 nodi. Etichettatare i nodi di T con i seguenti numeri: (2, 7, 32, 5, 23, 37, 8, 2, 7, 33), in modo tale che T sia un albero binario di ricerca. Soluzione: Sezione 2.8.9 Distanza minima Dati due numeri interi x ed y definiamo la distanza tra x ed y come d(x, y) = x y. Sia T un albero binario di ricerca le cui chiavi sono numeri interi. Si descriva un algoritmo per determinare due elementi di T aventi distanza minima. Soluzione: Sezione 2.9 Bertossi, Montresor. Algoritmi e Strutture di Dati. c 200 De Agostini Scuola

2 SOLUZIONI 3 2 Soluzioni 2. Versione ricorsiva di insertnode() (Esercizio 6.2 del libro) La versione ricorsiva illustrata nell algoritmo seguente ha ovviamente costo computazionale O(h), dove h è l altezza dell albero. La chiamata iniziale è insertnoderecursive(t, nil, x, v). TREE insertnoderecursive(tree T, TREE p, ITEM x, ITEM v) if T = nil then TREE n Tree(x, v) link(p, n, x) if p = nil then return n else if x < T.key then insertnoderecursive(t.left, T, x, v) else if x > T.key then insertnoderecursive(t.right, T, x, v) else T.value v return T % Primo nodo ad essere inserito % Chiave già presente % Ritorna albero non modificato 2.2 Verifica ABR (Esercizio 6.3 del libro) L algoritmo confronta il valore locale con quello dei figli destro e sinistro, prestando attenzione ad eventuali figli mancanti. Se localmente la proprietà è verificata, viene verificata nei sottoalberi sinistro e destro. Il costo è quello di una visita, quindi O(n). boolean verifyabr(tree t) if t = nil then return true if (t.left nil and t.value < t.left.value) or (t.right nil and t.value > t.right.value) then return false return verifyabr(t.left) and verifyabr(t.right) 2.3 Concatenazione (Esercizio 6.6 del libro) Si cerca il massimo valore v contenuto in T, e si attacca la radice di T 2 come figlio destro di v, attraverso l operazione link() definita nel libro. Si noti che v non può avere un figlio destro, altrimenti questo sarebbe il massimo. Il costo dell operazione è dato dalla ricerca del minimo, che è O(h) dove h è l altezza massima fra i due alberi. concatenate(tree T, TREE T 2 ) TREE v max(t ) link(v, T 2, T 2.value) 2.4 Realizzazione di insiemi con alberi Red-Black (Esercizio 6.8 del libro) Detti n e n 2 le dimensioni degli alberi da unire ed n la dimensione dell albero risultante, gli algoritmi potrebbero essere realizzati nel modo seguente: Bertossi, Montresor. Algoritmi e Strutture di Dati. c 200 De Agostini Scuola

2 SOLUZIONI 4 union(): si effettua un operazione di merge visitando iterativamente e in ordine entrambi gli alberi. Siano x e x 2 i valori sotto esame dei due alberi: se x < x 2, si avanza nell albero T ; se x > x 2, si avanza nell albero T 2 ; se invece sono uguali, si avanza in entrambi gli alberi. In tutti e tre i casi, il valore minimo viene inserito nell albero unione. La prima coppia sotto esame è data dai due valori minimi. intersection(): si effettua un operazione di merge visitando iterativamente e in ordine entrambi gli alberi. Siano x e x 2 i valori sotto esame dei due alberi: se x < x 2, si avanza nell albero T ; se x > x 2, si avanza nell albero T 2 ; se invece sono uguali, si inserisce il valore nell albero intersezione e si avanza in entrambi gli alberi. La prima coppia sotto esame è data dai due valori minimi. difference(): si effettua un operazione di merge visitando iterativamente e in ordine entrambi gli alberi. Siano x e x 2 i valori sotto esame dei due alberi: se x < x 2, si avanza nell albero T e si inserisce x nell albero differenza; se x > x 2, si avanza nell albero T 2 ; se invece sono uguali, si avanza in entrambi gli alberi senza inserire. La prima coppia sotto esame è data dai due valori minimi. In tutti e tre i casi, l algoritmo richiede di visitare, nel caso pessimo, tutti i nodi dei due alberi e di inserire, quando necessario, un valore nell albero risultato; il costo è quindi n + n 2 + n log n. 2.5 Colorazione Red-Black (Esercizio 6.9 del libro) L albero a) può rispettare le proprietà, colorando di rosso il nodo 3 e di nero tutti gli altri. L albero b) non può essere colorato, in quanto ha un cammino radice-foglia di 5 nodi e uno di 2 nodi. Il secondo può avere al massimo due nodi neri, mentre il secondo ne deve avere almeno 3, perché il primo nodo è nero e non ci possono essere due rossi in fila. Questa sarebbe una violazione della regola sull altezza nera. Gli alberi c) e d) rispettano le regole, colorando di rosso i nodi 2, 3 e 4. 2.6 Differenze tra ABR e alberi heap In un min-heap, la chiave di un nodo è più piccola di entrambe le chiavi dei suoi figli. In albero binario di ricerca, la chiave di un nodo è più grande o uguale alla chiave del suo figlio sinistro, e più piccola o uguale alla chiave del suo figlio destro. Entrambe le proprietà sono ricorsive. È importante notare che la proprietà di heap non ci aiuta a cercare un valore, perché non ci dice da che parte andare, visto che i valori sinistro e destro non hanno ordine particolare. Se la proprietà di heap ci permettesse di visitare lo heap in tempo O(n), visto che la costruzione di uno heap richiede tempo O(n) avremmo risolto il problema dell ordinamento in tempo lineare, cosa contraria al limite inferiore Ω(n log n) per l ordinamento basato su confronti. 2.7 Proprietà degli ABR Discutiamo il caso del successore; il predecessore è simmetrico. Se un nodo ABR ha due figli, ha un figlio destro e quindi il suo successore si trova sicuramente nel sottoalbero destro e ne rappresenta il minimo. Se tale elemento avesse un figlio sinistro, questo sarebbe inferiore al minimo, il che è assurdo. 2.8 Distribuzione di valori in un albero binario di ricerca completo Cenni per una soluzione generale: Data la forma dell albero e gli n numeri da inserire, è possibile conoscere il numero di nodi che si trovano a destra e a sinistra della radice. Basta quindi ordinare la sequenza, e individuare il perno che fungerà da radice. Per esempio, supponendo che ci siano n s nodi a sinistra e n d nodi a destra, con n s + n d + = n, si ottiene che la radice è il nodo (n s + )-esimo. Si applica poi il meccanismo ricorsivamente ai sottoalberi destro e sinistro. Bertossi, Montresor. Algoritmi e Strutture di Dati. c 200 De Agostini Scuola

2 SOLUZIONI 5 2.9 Distanza minima Si effettua una in-visita dell albero, ovvero si analizza l albero seguendo l ordine crescente; per ogni numero incontrato, si calcola la distanza con il valore precedente e la si confronta con il minimo trovato finora (opportunamente inizializzata al valore + ). Il costo è pari al costo di visita dell albero, ovvero O(n), dove n è il numero di nodi. mindist(tree t) TREE u t.min() integer min + integer prev while u nil do if u.value prev < min then min u.value prev u u.successornode() return min Bertossi, Montresor. Algoritmi e Strutture di Dati. c 200 De Agostini Scuola

3 PROBLEMI APERTI 6 3 Problemi aperti 3. Rotazioni: conservazione delle proprietà di ordine Dimostrare che gli algoritmi di rotazione in alberi binari di ricerca preservano sempre l ordinamento inordine dei nodi di un albero binario. 3.2 Cancellazione Dato in input un albero binario di ricerca T e due chiavi x, y presenti nell albero, si provi (o si produca un controesempio) che cancellando prima x e poi y si ottiene lo stesso albero che si ottiene cancellando prima y e poi x. 3.3 Albero ABR di altezza minima Sia dato un vettore A di n elementi ordinati in ordine crescente. (a) Scrivere un algoritmo ricorsivo (del tipo divide et impera) che costruisca l albero binario di ricerca di altezza minima che ha per chiavi gli n elementi del vettore. (b) Scrivere l equazione di ricorrenza per il tempo di esecuzione dell algoritmo definito al passo precedente. Bertossi, Montresor. Algoritmi e Strutture di Dati. c 200 De Agostini Scuola