13.07.2015 Views

Algoritmi e Strutture Dati -- Esercizi - Università degli Studi di Salerno

Algoritmi e Strutture Dati -- Esercizi - Università degli Studi di Salerno

Algoritmi e Strutture Dati -- Esercizi - Università degli Studi di Salerno

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.

ESERCIZIO 16.1-2 21<strong>Esercizi</strong>o 16.1-2Anziché selezionare sempre l’attività che finisce per prima, supponete <strong>di</strong> selezionare quella cheinizia per ultima tra quelle compatibili con tutte le attività precedentemente selezionate. Dimostrateche questo algoritmo fornisce una soluzione ottima.Soluzione. Consideriamo le n attività A = (a 1 , · · · , a n ) or<strong>di</strong>nate in or<strong>di</strong>ne decrescente per tempo <strong>di</strong>inizio. Proviamo che esiste sempre una soluzione ottima che consiste dell’attività a 1 e dalla soluzioneottima per l’istanza A ′ che si ottiene da A eliminando a 1 e tutte le attività in conflitto con a 1 .Supponiamo che esista una soluzione S per A che non contiene a 1 e sia a j l’attività che inizia perultima tra quelle <strong>di</strong> S. Allora la soluzione S ⋆ = S \ {a j } ∪ {a 1 } è ammissibile, contiene a 1 ed è ottima.Sia ora S una soluzione ottima che contiene a 1 e supponiamo che S − {a 1 } non sia ottima per A ′ .Allora, se S ′ è una soluzione ottima per A ′ , abbiamo che S ′ ∪ {a 1 } è una soluzione per A <strong>di</strong> car<strong>di</strong>nalitàmaggiore <strong>di</strong> S.Una soluzione alternativa al problema si ottiene facendo la seguente osservazione. Denotiamo conN il tempo massimo <strong>di</strong> fine <strong>di</strong> un’attività. Per un’istanza A costruiamo l’istanza Ā che, per ognia i ∈ A, contiene l’attività ā i definita come segue: se a i = [s i , f i ) allora ā i = [N − f i , N − s i ). Èfacile osservare che se S è una soluzione ottima per A allora ¯S è una soluzione ottima per Ā. Infineosserviamo che scegliere le attività in A in or<strong>di</strong>ne crescente <strong>di</strong> tempo <strong>di</strong> fine corrisponde a scegliere leattività in or<strong>di</strong>ne decrescente <strong>di</strong> tempo <strong>di</strong> inizio in Ā. Poiché sappiamo che il primo algoritmo (or<strong>di</strong>necrescente per tempo <strong>di</strong> fine) restituisce una soluzione ottima per A, allora il secondo algoritmo (or<strong>di</strong>nedecrescente per tempo <strong>di</strong> inizio) fornisce una soluzione ottima per Ā.Versione: 1.1 del 20 gennaio 2006.

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

Saved successfully!

Ooh no, something went wrong!