11.07.2015 Views

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2 Costruzione <strong>di</strong> ABRDimostrare che qualsiasi algoritmo basato su confronti per la costruzione <strong>di</strong> unABR con n no<strong>di</strong> ha complessità asintotica Ω(n log n).Soluzione Supponiamo che sia possibile costruire un ABR con n no<strong>di</strong>, utilizzandoconfronti, in tempo strettamente inferiore a Ω(n log n). Ricor<strong>di</strong>amoche, dato un ABR con n no<strong>di</strong>, è possibile ottenere la lista or<strong>di</strong>nata delle chiaviin esso contenute me<strong>di</strong>ante una visita simmetrica (detta anche visita inor<strong>di</strong>ne)dell’albero. La visita simmetrica ha costo Θ(n). Quin<strong>di</strong>, se potessimocostruire un ABR in tempo inferiore a Ω(n log n), riusciremmo anche aor<strong>di</strong>nare un insieme <strong>di</strong> n elementi, usando solo confronti, in tempo inferiorea Ω(n log n), il che è impossibile dato il limite inferiore alla complessità delproblema dell’or<strong>di</strong>namento me<strong>di</strong>ante confronti3 Visita <strong>di</strong> un ABRL’operazione <strong>di</strong> visita <strong>di</strong> un ABR con n no<strong>di</strong> può essere implementata determinandol’elemento minimo dell’ABR, e poi invocando n − 1 volte l’operazionesuccessor(). Fornire una giustificazione intuitiva del fatto che questo algoritmo<strong>di</strong> visita abbia complessità asintotica Θ(n).SoluzioneRicor<strong>di</strong>amo l’algoritmo per determinare il successore <strong>di</strong> un nodoalgorithm successor(nodo v) -> nodoif (v == null) thenreturn null;en<strong>di</strong>fif (v.right != null) thenreturn min(v.right);elsep = v.parentwhile (p != null && v == p.right) dov = p;p = v.parent;endwhilereturn p;en<strong>di</strong>fdove la procedura min() determina il nodo con chiave minima in un alberora<strong>di</strong>cato nel nodo v, ed è definita comealgorithm min(nodo v) -> nodowhile (v != null && v.left != null) dov = v.left;endwhile2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!