11/21/2014E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo 2010 7 –

Slides:



Advertisements
Presentazioni simili
Algoritmi di ordinamento
Advertisements

Unità G3 Algoritmi notevoli. Ordinamento Un insieme di dati {a0, a1, a2, …, an} si dice ordinato in ordine crescente se a0 a1 a2 a3 … an I dati sono generalmente.
Generazione di numeri casuali in Dev C++
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Le funzioni.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Algoritmi e Dimostrazioni Stefano Berardi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Algoritmi e Strutture Dati (Mod. B)
Teoria degli INSIEMI A cura Prof. Salvatore MENNITI.
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Algoritmo SelectSort Invariante di ciclo: ad ogni passo
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Passo 3: calcolo del costo minimo
Massimo Comun Divisore
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Esercizi su File e Liste
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Complessità di un algoritmo
Cammini minimi da un sorgente
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Teoria degli algoritmi e della computabilità Terza giornata: Ricerca e ordinamento ottimi. P vs NP, algoritmi di approssimazione, e il potere della randomizzazione.
Dispensa a cura del prof. CAVAGNA GIANCARLO Luglio 2002
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Algoritmi CHE COS’è UN ALGORITMO di ORDINAMENTO?
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
1/11/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
s STRINGHE DI CARATTERI a p e \0
3/31/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i]
1 Un esempio con iteratore: le liste ordinate di interi.
Algoritmi e Strutture Dati Luciano Gualà
4/4/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Un.
ALGORITMI DI RICERCA Nella programmazione s’incontra spesso la necessità di ricercare un elemento (chiave) in un elenco, oppure di ordinare gli elementi.
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
4/19/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
03/19/09E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2009 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo 2009 Codici.
CORSO DI PROGRAMMAZIONE II
Olimpiadi di Informatica 2010 Giornate preparatorie
4/25/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Scrivere e compilare programmi
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 6 – Invariante.
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Transcript della presentazione:

11/21/2014E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi greedy: il massimo numero di intervalli disgiunti. (versione 21/11/2014)

Il problema. Dato un insieme di intervalli, in generale non tutti disgiunti fra di loro, trovarne un sottoinsieme costituito da intervalli tutti disgiunti e tale che il numero di intervalli sia il massimo. Esempio: Il problema Nimbus dalle Olimpiadi di Informatica. Al celebre maghetto Harry Potter è stata regalata una scopa volante modello Nimbus3000 e tutti i suoi compagni del Grifondoro gli chiedono di poterla provare. Il buon Harry ha promesso che nei giorni a venire soddisferà le richieste di tutti, ma ogni ragazzo è impaziente e vuole provare la scopa il giorno stesso. Ognuno propone ad Harry un intervallo di tempo della giornata durante il quale, essendo libero da lezioni di magia, può fare un giro sulla scopa, e per convincerlo gli offre una fantastica caramellaTuttigusti+1. Tenendo presente che una sola persona alla volta può salire sulla Nimbus3000 in ogni istante di tempo, Harry decide di soddisfare, tra tutte le richieste dei ragazzi, quelle che gli procureranno la massima quantità di caramelle (che poi spartirà coi suoi amici Ron e Hermione). Aiutalo a trovare la migliore soluzione possibile. 21/11/ E. Giovannetti - AlgELab Lez.462

L’algoritmo risolvente. Scandiamo l’insieme di intervalli: ad ogni passo aggiungiamo all’insieme soluzione un nuovo intervallo, disgiunto da quelli già aggiunti nei passi precedenti. Secondo quale criterio scegliamo l’intervallo (ovviamente fra quelli disgiunti dai precedentemente inclusi nella soluzione) da aggiungere ogni volta, per fare in modo che alla fine il numero di intervalli sia massimo ? 21/11/ E. Giovannetti - AlgELab Lez.463

L’algoritmo risolvente. Proviamo con criteri diversi. scegliamo ogni volta l’intervallo che comincia prima: l’insieme finale ha 4 elementi; 21/11/ E. Giovannetti - AlgELab Lez.464

L’algoritmo risolvente. Proviamo con criteri diversi. scegliamo ogni volta l’intervallo che comincia prima: l’insieme finale ha 4 elementi; scegliamo ogni volta l’intervallo più corto: l’insieme finale ha 3 elementi; 21/11/ E. Giovannetti - AlgELab Lez.465

L’algoritmo risolvente. Proviamo con criteri diversi. scegliamo ogni volta l’intervallo che comincia prima: l’insieme finale ha 4 elementi; scegliamo ogni volta l’intervallo più corto: l’insieme finale ha 3 elementi; scegliamo ogni volta l’intervallo che finisce prima: l’insieme finale ha 5 elementi. Si dimostra che l’ultimo è effettivamente il criterio corretto, che assicura l’ottimalità della soluzione (cioè che il numero di intervalli scelti sia massimo). 21/11/ E. Giovannetti - AlgELab Lez.466

Dimostrazione di correttezza: l’invariante del ciclo. Situazione a un generico passo intermedio (Invariante): S è l’insieme di tutti gl’intervalli finora esaminati; A 1, A 2, …, A k è la sequenza di intervalli disgiunti già scelti: essa è, per l’insieme S, una sequenza massimale, e inoltre fra le sequenze massimali è quella che finisce per prima (cioè quella il cui istante finale dell’ultimo intervallo è il minimo); ogni intervallo  S termina dopo tutti gl’intervalli  S. 21/11/ E. Giovannetti - AlgELab Lez.467 S: insieme dei già esaminati A1A1 AkAk A2A2

Dimostrazione di correttezza: la base. Inizialmente S è l’insieme vuoto e la sequenza massimale per S è la sequenza vuota: l’invariante è vacuamente vero. 21/11/ E. Giovannetti - AlgELab Lez.468

Dimostrazione di correttezza: il passo. Sia A l’intervallo che termina prima fra quelli ancora da esaminare (cioè  S). Consideriamo allora l’insieme S’ = S  {A} e cerchiamo di stabilire qual è per S’ la sequenza massimale che finisce prima. 21/11/ E. Giovannetti - AlgELab Lez.469 S: insieme dei già esaminati A1A1 AkAk A2A2 A

Dimostrazione del passo: caso 1. caso 1) A inizia prima della fine della sequenza A 1, A 2, …, A k. Allora se cerco di costruire una nuova sequenza avente A come ultimo elemento sono costretto a togliere almeno uno degli elementi A 1, A 2, …, A k, e quindi non ci guadagno nulla (non aumento il numero di elementi); inoltre la nuova sequenza A termina dopo ogni elemento di S, quindi dopo A k, quindi sarebbe una sequenza che termina dopo A 1, A 2, …, A k. 21/11/ E. Giovannetti - AlgELab Lez.4610 S: insieme dei già esaminati A1A1 AkAk A2A2 A

Dimostrazione del passo: conclusione del caso 1. caso 1) A inizia prima della fine della sequenza A 1, A 2, …, A k. Conclusione: per S’ la sequenza massimale che finisce prima è ancora A 1, A 2, …, A k. Quindi nel corpo del ciclo l’elemento A non viene aggiunto alla soluzione ma viene tolto dagli elementi ancora da esaminare (semplicemente incrementando l’indice dell’array degli intervalli, ordinato secondo l’istante finale). 21/11/ E. Giovannetti - AlgELab Lez.4611 S’ A1A1 AkAk A2A2 A

Dimostrazione del passo: caso 2. caso 2) A inizia dopo la fine della sequenza A 1, A 2, …, A k. Allora la sequenza A 1, A 2, …, A k, A: è per S’ una sequenza massimale, perché una seq. massimale per S’ non può avere più di k+1 elementi (altrimenti per S ci sarebbe una sequenza massimale con più di k elementi); è per S’ la sequenza massimale che finisce prima, perché A è l’intervallo che finisce prima fra i non appartenenti a S. 21/11/ E. Giovannetti - AlgELab Lez.4612 S: insieme dei già esaminati A1A1 AkAk A2A2 A S’

Dimostrazione: il terzo punto dell’invariante. Per come è stato scelto A, in entrambi i casi ogni intervallo non appartenente a S’ termina non prima di tutti gl’intervalli appartenenti a S’. Quindi anche il terzo punto dell’invariante si conserva. 21/11/ E. Giovannetti - AlgELab Lez.4613

L’algoritmo ordina l’insieme degli intervalli in una sequenza S ordinata secondo l’istante finale (cioè, geometricamente, secondo l’estremo destro del segmento); inizializza la soluzione Sol come sequenza vuota; scandisci S nell’ordine, e per ogni suo elemento A: se inizia dopo la fine dell’ultimo elemento di Sol, aggiungilo al fondo di Sol; (altrimenti non aggiungerlo). 21/11/ E. Giovannetti - AlgELab Lez.4614

Il codice C++ per il problema Nimbus using namespace std; struct Intervallo { int inizio, fine; }; int compare(const void *a, const void *b) { const Intervallo *pa = (const Intervallo *) a; const Intervallo *pb = (const Intervallo *) b; return pa->fine - pb->fine; } int N; Intervallo intervalli[1000]; 21/11/ E. Giovannetti - AlgELab Lez.4615

Il codice C++ per il problema Nimbus. int main() { … // input degl’intervalli // ordino per istante di fine: qsort(intervalli, N, sizeof(Intervallo), compare); // in questo problema si chiedeva solo il numero massimo degli intervalli disgiunti, non quali fossero. int max = 1; int fine = intervalli[0].fine; for(int i = 1; i < N; i++) { if(intervalli[i].inizio > fine) { max++; fine = intervalli[i].fine; } // output max; } 21/11/ E. Giovannetti - AlgELab Lez.4616

Complessità. La complessità temporale è quella dell’ordinamento, seguito da una scansione lineare. Quindi O(n log n) + O(n) = O(n log n). 21/11/ E. Giovannetti - AlgELab Lez.4617