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
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.