COMPITO DI ALGORITMI E STRUTTURE DATI Esercizio 1 Si

COMPITO DI ALGORITMI E STRUTTURE DATI
Esercizio 1
Si consideri il problema di gestire insiemi disgiunti di numeri interi e si proponga una
struttura dati per rappresentare gli insiemi che consenta di eseguire efficientemente
le seguenti operazioni:
M ake(x): che preso in input x costruisce l’insieme contente solo x;
M ay U nion(x, y): che presi in input due elementi x ed y unisce gli insiemi a
cui appartengono x ed y se e soltanto se tutti gli elementi dell’insieme di x
sono minori o uguali degli elementi dell’insieme di y;
F ind(x): che restituisce il rappresentante dell’insieme a cui appartiene x;
Sort(x): che restituisce tutti gli elementi dell’insieme a cui appartiene x in
ordine crescente.
1-a: Si descriva la struttura dati scelta e si fornisca lo pseudocodice delle
operazioni sopra elencate;
1-b: Si dimostri la correttezza delle procedure proposte e si valuti la complessità di una singola esecuzione di ogni procedura;
1-c: Si valuti la complessità di n operazioni complessive di cui m operazioni
M ake ed s operazioni Sort.
Esercizio 2
Si consideri un grafo orientato G = hV, Ei in cui ogni nodo ha un campo aggiuntivo
colore che può assumere valore V erde oppure Rosso. Un cammino alternato in
G è un cammino i cui archi collegano nodi di colore diverso. Un cammino quasi
alternato in G è un cammino i cui archi collegano nodi di colore diverso, tranne al
più un arco che può collegare nodi dello stesso colore. Dati due nodi u e v di G si
vogliono determinare:
- un cammino alternato di lunghezza minima da u a v;
- un cammino quasi alternato di lunghezza minima da u a v.
2-a: si scriva lo pseudocodice di due algoritmi che risolvano i due problemi
proposti;
2-b: si dimostri la correttezza e si valuti la complessità degli algoritmi proposti.
Date: 03 Settembre 2007.
1