Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

21 downloads 284 Views 124KB Size Report
Algoritmi e Strutture Dati. &. Laboratorio di Algoritmi e Programmazione. Esercizi II parte. Esercizio 1. Discutere la correttezza di ciascuna delle seguenti ...
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validit`a delle risposte date. 1. La ricerca di una chiave in un albero R/B ha complessit`a asintotica lineare nel numero dei nodi dell’albero. 2. La ricerca di una chiave in un max-heap binario ha complessit`a asintotica lineare nel numero dei nodi dell’albero. 3. L’inserimento di una chiave in un BST ha complessit`a asintotica lineare nel numero dei nodi dell’albero. 4. La ricerca di una chiave in un array ordinato ha complessit`a asintotica logaritmica nel numero di elementi dell’array.

Soluzione 1. La ricerca di una chiave in un albero R/B ha complessit`a asintotica lineare nel numero dei nodi dell’albero. No, la complessit` a asintotica `e lineare nell’altezza (come `e stato dimostrato per tutti i BST) e negli alberi R/B tale altezza `e logaritmica nel numero dei nodi. 2. La ricerca di una chiave in un max-heap binario ha complessit`a asintotica lineare nel numero dei nodi dell’albero. S`ı, la condizione di max-heap, nel caso peggiore in cui la chiave cercata non `e presente ed `e minore di tutte le chiavi presenti, richiede la visita di tutti gli elementi. 3. L’inserimento di una chiave in un BST ha complessit`a asintotica lineare nel numero dei nodi dell’albero. S`ı, la complessit` a dell’operazione di inserimento `e lineare nell’altezza che `e, nel caso peggiore, lineare nel numero di nodi. 4. La ricerca di una chiave in un array ordinato ha complessit`a asintotica logaritmica nel numero di elementi dell’array. S`ı, perch`e possiamo applicare l’algoritmo di ricerca binaria.

Esercizio 2 1. In quanto tempo `e possibile trovare una chiave in un albero R/B di n elementi? Giustificare la risposta. 2. Dato il seguente albero BST 15 /

\

/

\

8 / 5 / 2

37 / \

\ 13 \ 7

\ 14

20 \ 28

45 / 40

si consideri l’inserimento della chiave 16 seguito dalla cancellazione della chiave 8 e si disegni l’albero risultante.

Soluzione 1. La risposta corretta `e Θ(lg n), dato che un albero R/B `e un BST bilanciato. 2. L’albero finale `e: 15 / / 13 / 5 / \ 2

\ \

\ 14 7

/ 20 / \ 16 28

37 \ 45 / 40

Esercizio 3 Sia T un albero generale i cui nodi hanno chiavi intere e gli attributi: chiave, figlio, fratello. Scrivere un algoritmo che trasforma T raddoppiando i valori di tutte le chiavi sui livelli dispari dell’albero.

Soluzione Si tratta di realizzare una visita dell’albero che tiene conto del livello del nodo considerato. La chiamata esterna sar`a trasforma(root[T],false), assumendo che la radice si trovi sul livello 0 (pari). trasforma(x,raddoppia) if x =/= NIL then if raddoppia then chiave[x] 1 then root