Secondo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Documenti analoghi
Secondo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Terzo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Terzo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Quarto allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Primo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Se sceglierai di utilizzare il template, dovrai implementare la seguente funzione:

Verifiche (verifiche)

Crittografia LWF (lwf)

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Fondamenti di Informatica L-A. Esercitazione 6

Allenamento alle Olimpiadi di Informatica

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Matroidi, algoritmi greedy e teorema di Rado

Il problema dello zaino

Allenamento - Selezione scolastica

Complessità Computazionale. Introduzione

Corso di Perfezionamento

Pokémon Park (pokemon)

PROGRAMMAZIONE DINAMICA. Prof. Reho Gabriella Olimpiadi di Informatica

Algoritmi e Strutture Dati. Lezione 1

Cognome e Nome: Numero di Matricola: Spazio riservato alla correzione

Note per la Lezione 6 Ugo Vaccaro

Algoritmi di Ordinamento

Liceo B.Russell Classe 2 I VETTORI. ORDINAMENTO DI UN VETTORE: Metodo ingenuo o sequenziale

Definizioni. Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente: soluzione ottima in un dominio contiguo. Il paradigma greedy

PROVETTE D ESAME. Algoritmi e Strutture Dati

Olimpiadi Italiane di Informatica. Selezione Territoriale 14 Aprile Testi e soluzioni ufficiali dei problemi

Corso di Fondamenti di Informatica Algoritmi su array / 1

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

Grafi pesati Minimo albero ricoprente

Esercizi di Algoritmi e Strutture Dati

Olimpiadi Italiane di Informatica

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Complessità algoritmi su strutture dati

Esercitazione 6 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Note per la Lezione 18 Ugo Vaccaro

Indici con gli alberi

Esercitazione 3. Osserviamo che, dato un grafo con pesi distinti, questo ammette un unico MST.

Algoritmi e Strutture Dati. Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*)

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

strutture e file di testo/binari Esercizio - lettura/filtro/scrittura PEOPLE.TXT PARTNERS.DAT Due persone sono compatibili

FONDAMENTI DI INFORMATICA II (2h, punti 30/30) 26 Luglio 2011

Algoritmi e Strutture Dati. Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal

Strutture dati e algoritmi. Sommario

Progettazione di Algoritmi

Informatica (A-K) 5. Algoritmi e pseudocodifica

VISITA IL SITO PER ALTRO MATERIALE E GUIDE

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Heap e code di priorità

Corso di Tecniche di Programmazione

Progettazione di Algoritmi

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Capitolo 3: Gli alberi. Alberi n-ari

Problemi, istanze, soluzioni

Il passo del gambero. Nel labirinto. Nel labirinto. La soluzione di problemi con la tecnica del Backtracking

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà. Bubblesort

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Fondamenti di Programmazione

Silvia Rossi. Cenni sulla complessità. Informatica. Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Programmazione I

Definizione FONDAMENTI DI INFORMATICA. Esempio di algoritmo: determinare il maggiore di due numeri interi x, y. Proprietà degli algoritmi

Introduzione alla programmazione

Algoritmi, Strutture Dati e Programmi. UD 5.a: Searching (parte 1)

Laboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà

Complessità algoritmi su strutture dati (riassunto)

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Fondamenti di Informatica

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

Matematica - SMID : Programmazione 20 Febbraio 2007 FOGLIO RISPOSTE

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Programmazione Procedurale in Linguaggio C++

Algoritmi e Strutture Dati. Luciano Gualà

Progettazione di algoritmi. Reti di flusso (2)

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Programmazione Procedurale in Linguaggio C++

LABORATORIO DI ALGORITMI E STRUTTURE DATI A-L. Ingegneria e scienze informatiche Cesena A.A: 2016/2017 Docente: Greta Sasso

Il passo del gambero. La soluzione di problemi con la tecnica del Backtracking. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez.

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Esercizi C su array e matrici

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Corso di Fondamenti di Informatica Prof Aldo Franco Dragoni Prova Scritta 25/07/2011

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Un problema di programmazione dei lavori

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

FONDAMENTI DI INFORMATICA

Progettazione di Algoritmi

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Transcript:

Secondo allenamento Olimpiadi Italiane di Informatica - Selezione territoriale Luca Chiodini luca@chiodini.org - l.chiodini@campus.unimib.it 2 marzo 2017

Programma 1. Lettura e analisi di un problema 2. Soluzione naïve 3. Spiegazione teorica 4. Soluzione ottima 2

Lettura e analisi di un problema

Rifornimenti ai distributori (prima gara OIS 2015) 4

Rifornimenti ai distributori (prima gara OIS 2015) Gabriele ha appena preso la patente, e decide di invitare tutti i suoi amici a fare una gita. Dato che il viaggio è lungo ben K chilometri, sa che forse dovrà fermarsi a fare il pieno di benzina: a tal proposito Gabriele ha segnato a che distanza dalla partenza ci sono gli N distributori che si trovano lungo il tragitto. Sapendo che la sua macchina fa al massimo M chilometri con un pieno, e che alla partenza ha già il serbatoio pieno, aiuta Gabriele a pianificare i rifornimenti di modo da fare benzina il minor numero possibile di volte. 4

Rifornimenti ai distributori (prima gara OIS 2015) Il file input.txt è composto da due righe. La prima riga contiene i tre interi N, M, K separati da uno spazio. La seconda riga contiene N interi separati da uno spazio, le distanze D i dei distributori in ordine crescente. input.txt output.txt 5 50 100 1 29 35 50 77 83 5

Rifornimenti ai distributori (prima gara OIS 2015) Il file input.txt è composto da due righe. La prima riga contiene i tre interi N, M, K separati da uno spazio. La seconda riga contiene N interi separati da uno spazio, le distanze D i dei distributori in ordine crescente. input.txt output.txt 5 50 100 1 29 35 50 77 83 input.txt output.txt 10 30 100 6 1 31 33 38 62 69 93 97 98 99 5

Rifornimenti ai distributori (prima gara OIS 2015) Esempio È possibile che la risposta al problema sia 0? È possibile che non ci sia risposta al problema? 6

Rifornimenti ai distributori (prima gara OIS 2015) Esempio È possibile che la risposta al problema sia 0? È possibile che non ci sia risposta al problema? Assunzioni 1 N 100 000. 1 M K 1 000 000. 1 D i < D i+1 < K per ogni i = 0... N 2. È sempre possibile raggiungere la destinazione: la distanza tra due distributori successivi non supera mai M, il numero di chilometri che la macchina è in grado di percorrere con un pieno. 6

Soluzione naïve

Rifornimenti ai distributori - Soluzione naïve In questo genere di problemi, un approccio che funziona sempre è il cosiddetto metodo forza bruta (detto informalmente: le provo tutte ). Come si può applicare in questo problema? 29 35 50 77 83 8

Rifornimenti ai distributori - Soluzione naïve In questo genere di problemi, un approccio che funziona sempre è il cosiddetto metodo forza bruta (detto informalmente: le provo tutte ). Come si può applicare in questo problema? 29 35 50 77 83 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 8

Rifornimenti ai distributori - Soluzione naïve Dato un vettore V, dove V i = 1 sse è previsto un rifornimento in quel distributore, siamo in grado di stabilire se con quei rifornimenti arriviamo in fondo? M = 50 K = 100 29 35 50 77 83 1 0 1 1 0 9

Rifornimenti ai distributori - Soluzione naïve Dato un vettore V, dove V i = 1 sse è previsto un rifornimento in quel distributore, siamo in grado di stabilire se con quei rifornimenti arriviamo in fondo? M = 50 K = 100 29 35 50 77 83 1 0 0 0 1 10

Rifornimenti ai distributori - Soluzione naïve Dato un vettore V, dove V i = 1 sse è previsto un rifornimento in quel distributore, siamo in grado di stabilire se con quei rifornimenti arriviamo in fondo? M = 50 K = 100 29 35 50 77 83 0 0 0 1 1 11

Rifornimenti ai distributori - Soluzione naïve Dato un vettore V, dove V i = 1 sse è previsto un rifornimento in quel distributore, siamo in grado di stabilire se con quei rifornimenti arriviamo in fondo? M = 50 K = 100 29 35 50 77 83 0 1 0 0 0 12

Rifornimenti ai distributori - Soluzione naïve Soluzione La soluzione consiste quindi nel cercare tra tutte le possibili configurazioni valide quella che usa il minor numero di distributori. 13

Rifornimenti ai distributori - Soluzione naïve Soluzione La soluzione consiste quindi nel cercare tra tutte le possibili configurazioni valide quella che usa il minor numero di distributori. Complessità computazionale Qual è la complessità computazionale della soluzione? 13

Rifornimenti ai distributori - Soluzione naïve Soluzione La soluzione consiste quindi nel cercare tra tutte le possibili configurazioni valide quella che usa il minor numero di distributori. Complessità computazionale Qual è la complessità computazionale della soluzione? Intuitivamente: abbiamo due possibilità per la prima posizione del vettore. Quindi, fissata la prima posizione, ne abbiamo altre due per la seconda posizione (e così via). In tutto quindi 2 2... 2 }{{} N volte 13

Rifornimenti ai distributori - Soluzione naïve Soluzione La soluzione consiste quindi nel cercare tra tutte le possibili configurazioni valide quella che usa il minor numero di distributori. Complessità computazionale Qual è la complessità computazionale della soluzione? Intuitivamente: abbiamo due possibilità per la prima posizione del vettore. Quindi, fissata la prima posizione, ne abbiamo altre due per la seconda posizione (e così via). In tutto quindi 2 2... 2 }{{} N volte Calcolo combinatorio: disposizioni con ripetizione di due elementi (0-1) su N posizioni = 2 N 13

Rifornimenti ai distributori - Soluzione naïve??? 1?? 0?? 14

Rifornimenti ai distributori - Soluzione naïve??? 1?? 0?? 11? 10? 15

Rifornimenti ai distributori - Soluzione naïve 1?? 11? 111 110??? 10? 0?? 16

Rifornimenti ai distributori - Soluzione naïve??? 1?? 0?? 11? 10? 01? 00? 111 110 101 100 011 010 001 000 17

Rifornimenti ai distributori - Soluzione naïve void genera_disposizioni(bool V[], int posizione) { if (posizione == N) { if (controlla(v)) // Conta rifornimenti e aggiorna minimo. } else { V[posizione] = false; genera_disposizioni(v, posizione + 1); V[posizione] = true; genera_disposizioni(v, posizione + 1); } } 18

Spiegazione teorica

Problemi greedy Greedy Alcuni problemi possono essere risolti facendo di volta in volta la scelta migliore localmente. Questa serie di scelte migliori locali, cioè dipendenti solo da quello che si sa al momento della scelta, si riflette alla fine nella soluzione migliore possibile. 20

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto Esistono M siti che vendono biglietti per lo stesso concerto a prezzi diversi. Devo comprare N biglietti (ovviamente spendendo il meno possibile). Cosa faccio? 21

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto Esistono M siti che vendono biglietti per lo stesso concerto a prezzi diversi. Devo comprare N biglietti (ovviamente spendendo il meno possibile). Cosa faccio? Seguo questo semplice algoritmo: Scelgo il sito dove i biglietti costano meno. Compro tutti i biglietti disponibili su quel sito per arrivare ad avere N biglietti Se ora ho N biglietti, ho finito. Se non ho ancora N biglietti, ripeto dall inizio il procedimento. 21

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto L algoritmo è ottimale? 22

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto L algoritmo è ottimale? Sì, perché non c è alcuna convenienza a scegliere i biglietti partendo da un sito in cui il costo non sia il minimo. È necessario applicare un algoritmo di ordinamento? 22

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto L algoritmo è ottimale? Sì, perché non c è alcuna convenienza a scegliere i biglietti partendo da un sito in cui il costo non sia il minimo. È necessario applicare un algoritmo di ordinamento? Sì (a meno che i dati non siano già ordinati) Qual è la complessità computazionale? 22

Esempio di problema greedy Esempio: acquisto di biglietti per un concerto L algoritmo è ottimale? Sì, perché non c è alcuna convenienza a scegliere i biglietti partendo da un sito in cui il costo non sia il minimo. È necessario applicare un algoritmo di ordinamento? Sì (a meno che i dati non siano già ordinati) Qual è la complessità computazionale? O(M log M + N) con ordinamento; O(N) se i dati sono già ordinati opportunamente. 22

Esempio di problema NON greedy 23

Esempio di problema NON greedy Determinare la somma massima ottenibile partendo dalla radice e arrivando a una foglia. 7 3 12 99 8 5 6 È un problema greedy? 23

Esempio di problema NON greedy Determinare la somma massima ottenibile partendo dalla radice e arrivando a una foglia. 7 3 12 99 8 5 6 È un problema greedy? No, perché la miglior scelta locale non porta alla miglior scelta globale. 23

Soluzione ottima

Rifornimenti ai distributori - Soluzione ottima Cosa si può osservare nell esempio di input? 29 35 50 77 83 25

Rifornimenti ai distributori - Soluzione ottima Cosa si può osservare nell esempio di input? 29 35 50 77 83 I distributori sono ordinati. Il problema è greedy? 25

Rifornimenti ai distributori - Soluzione ottima Dimostrazione Consideriamo l i-esimo distributore a cui arriviamo con il serbatoio che contiene ancora L litri di benzina (vale L M). Consideriamo inoltre l i + 1-esimo distributore. Possono verificarsi due casi: La distanza tra i due distributori vale D i+1 D i > L. È imperativo fermarsi nell i-esimo distributore, perché il successivo è troppo lontano. La distanza tra i due distributori vale D i+1 D i L. Non c è alcuna convenienza a fermarsi nell i-esimo distributore, visto che si può raggiungere il successivo e fare il pieno. 26

Rifornimenti ai distributori - Soluzione ottima Complessità computazionale Qual è la complessità computazionale dell algoritmo che abbiamo progettato? 27

Rifornimenti ai distributori - Soluzione ottima Complessità computazionale Qual è la complessità computazionale dell algoritmo che abbiamo progettato? O(N). 27

Rifornimenti ai distributori - Soluzione ottima Complessità computazionale Qual è la complessità computazionale dell algoritmo che abbiamo progettato? O(N). Consiglio implementativo Prestate attenzione all ultimo distributore: non basta fermarsi lì, ma è necessario arrivare a percorrere tutti i K chilometri. 27

Tocca a voi! Esercizio Implementare una soluzione per il problema distributori. Riferimenti Questa presentazione e soluzione in C++ dell esercizio: https://files.chiodini.org/oii_territoriali_2017/ Piattaforma di allenamento con correttore e forum: https://cms.di.unipi.it Guida alle selezioni territoriali del prof. Bugatti: http://www.imparando.net/sito/olimpiadi_di_informatica.htm 28