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