43
Progettazione di Algoritmi a.a. 2015/16 Classe 3: matricole congrue 2 modulo 3

Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

  • Upload
    lamngoc

  • View
    221

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Progettazione di Algoritmi

a.a. 2015/16

Classe 3: matricole congrue 2 modulo 3

Page 2: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Presentazioni

• Marcella Anselmo

• Info: http://www.di.unisa.it/professori/anselmo/

• Orario ricevimento: • Martedì 16:00-17:00• Venerdì 14:00-16:00

• Il mio studio è il n° 57 al 4° piano (ultimo piano) della Stecca 7 (fra l'aula F8 e Farmacia).

Page 3: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Pagina del corso

• Pagina del corso: http://www.di.unisa.it/professori/anselmo/pjalgo1516.htm

Troverete: orario lezioni, ricevimento, programma, syllabus, avvisi, calendario aggiornato via via, slides, date di esame

Page 4: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Svolgimento del corso6 CFU di lezione frontale ed esercitazioni = 48 ore

• Il corso prevede 48 ore di lezione frontale che saranno svolte secondo l’orario previsto, oppure in eventuali ore di recupero, di cui si darà notizia in classe e sulla pagina web.

• Ultima lezione prevista: martedì 15 dicembre 2015, a meno di…

• Eventuali ore di recupero: venerdì dalle 15 alle 17 in aula F1 o in laboratorio P13.

• Per esempio: se vogliamo fare il ponte dell’Immacolata, la lezione del lunedì 7/12 dovrebbe essere recuperata (venerdì 4/12?)

Page 5: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Prerequisiti

Non vi sono propedeuticità formali, ma…..

Il corso è la naturale prosecuzione del corso di Introduzione agli Algoritmi e Strutture Dati (concetto di algoritmo, analisi delle risorse, strutture dati, algoritmi iterativi e ricorsivi, tecnica Divide et Impera…)

Lo studente dovrebbe avere acquisito la capacità di sviluppare ragionamenti di tipo logico (teorema, ipotesi, tesi, dimostrazioni per assurdo, induzione..)

Dovrebbe altresì aver appreso e padroneggiato i concetti di base di programmazione (cicli, iterazione, ricorsione,…)

Nonché padroneggiare nozioni di matematica acquisite nei precedenti anni scolastici (logaritmi, diseguaglianze, polinomi, sommatorie,… )

Page 6: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Modalità di frequenza

Lo svolgimento delle esercitazioni e la frequenza del corso sono fortemente consigliate.

Gli studenti devono essere preparati a trascorrere una congrua quantità di tempo nello studio al di fuori delle lezioni.

1CFU=25 ore di lavoro=8 ore frontali+17 ore studio individuale

Page 7: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Come studiare?

• Lezioni (domande «stupide» non esistono e sono quelle che fanno crescere)

• Slides, appunti, ma… libri!

• Esercizi (da soli, a gruppi,…)

• Ricevimento

• Organizzare gli esami dei vari corsi

• Non dimenticare obiettivi e motivazioni

Page 8: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Libri di testoI libri di testo di riferimento sono:

[KT] Kleinberg, Tardos.

Algorithm Design.

Pearson Addison Wesley.

[DPV] S. Dasgupta, C. H. Papadimitriou,

and U. V. Vazirani. Algorithms.

McGraw-Hill (cap. 9)

Altri libri di consultazione sono:[CLR1] T. H. Cormen, C. E. Leiserson, R. L. Rivest,

Introduzione agli Algoritmi, prima edizione, McGraw Hill.

[CLRS2] T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Introduzione agli Algoritmi, seconda edizione, McGraw Hill.

[DFI] C. Demetrescu, I. Finocchi, G.F. Italiano, Algoritmi e Strutture Dati , Mc-Graw Hill, 2004.

Page 9: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Esami (!)• L’esame consiste di una prova scritta e di una orale (cui si

accede solo dopo il superamento di quella scritta). La prova scritta consiste di una parte con domande a risposta multipla e alcuni quesiti aperti.

• Non sono previste prove intercorso, ma brevi test di valutazione dell’apprendimento (per me, per voi).

• Gli studenti interessati alle prove di esame devono prenotarsi su Esse3 entro il termine utile. Ricordo inoltre che è possibile e doveroso cancellare la propria prenotazione qualora si decida di non partecipare, per evitare un inutile spreco di risorse.

• Durante lo svolgimento del compito scritto NON è consentito consultare libri, appunti o altro materiale/fonte di nessun tipo.

Page 10: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Date esamiTantissime…

Pre-appello nel periodo 7 - 15 Gennaio 2016: 15

gennaio 2016, ore 9, aule P3 e P4.

2. Primo appello nel periodo 18 Gennaio 2016 - 5

Febbraio 2016: 4 febbraio 2016, ore 9, aule P3 e P4.

3. Secondo appello nel periodo 8 - 26 Febbraio 2016: 22

febbraio 2016, ore 9, aule P3 e P4.

4. Appello straordinario nel periodo 4 – 15 Aprile

2016.

5. Primo appello nel periodo 20 Giugno 2016 – 8 Luglio

2016.

6. Secondo appello nel periodo 11 – 29 Luglio 2016.

7. Appello nel periodo 1 - 19 Settembre 2016.

8. Appello straordinario in Novembre 2016.

Page 11: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Contenuto del corso (dal syllabus)Ore di Lezioni frontali: 48

1. Introduzione alla analisi asintotica degli algoritmi. (2 ore frontali)

2. La tecnica di progetto di algoritmi Divide et Impera e relativi esempi diapplicazione: Mergesort, Quicksort. Ricorrenze. (4 ore frontali)

3. La tecnica di progetto di algoritmi Programmazione Dinamica e relativi esempi diapplicazione: Calcolo di numeri di Fibonacci, Combinazioni; Problemidiottimizzazione: Scheduling di risorse, Zaino intero, Problemi su stringhe, Camminiminimi su grafi. (12 ore frontali).

4. La tecnica di progetto di algoritmi Greedy e relativi esempi di applicazione:Scheduling di intervalli; Scheduling con deadline; Compressione Dati e Codici diHuffman. (10 ore frontali).

5. Algoritmi su grafi. Connettività e visita di grafi; DAG e ordinamento topologico.Calcolo di Cammini Minimi (algoritmo di Dijkstra). Calcolo di alberi ricoprenti minimi(algoritmi di Prim e Kruskal). (8 ore frontali).

6. Calcolo di flusso su grafi e loro applicazioni. (6 ore frontali).

7. Algoritmi intelligenti di ricerca esaustiva: backtracking e branch-and-bound. (6 orefrontali). [DPV, cap. 9]

Page 12: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Algoritmi e Progettazione di Algoritmi

Primo anno di attivazione

Differenze principali:• presupposti: conoscenza di IASD, MMI, (oltre gli altri

corsi classici)• contenuti:

– breve ripasso di analisi asintotica, ricorrenze, tecnica divide et impera (chi non conosce gli argomenti dovrà approfondire autonomamente da subito)

– più enfasi sull’implementazione, adesso che sono note (?) le principali SD

– Parte in più su algoritmi esaustivi: tecniche backtracking e branch-and-bound

Page 13: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Prologo sugli algoritmi da [DPV]

Page 14: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Algoritmi e rivoluzioni

L’esistenza di algoritmi efficienti per manipolare dati può essere cruciale nella storia.

La numerazione romana fu abbandonata perché non è semplice lavorarci:

MCDXLVIII + DCCCXII =?

Il sistema decimale inventato in India intorno al 600 d.C. fu una rivoluzione quando nel 9° sec. uno studioso di Baghdad scrisse un manuale con metodi elementari per addizionare, moltiplicare, etc. numeri in decimale. Queste procedure erano precise, senza ambiguità, meccaniche, efficienti, corrette…… in breve erano degli ALGORITMI!

Lo studioso era Al Khwarizmi ed è in suo onore che adesso li chiamiamo così.

Page 15: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Cos’è un algoritmo?detto fra noi:

questo lo capiremo solo

alla fine del corso….

Page 16: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Primi algoritmi“Before there were computers, there were algorithms. But now that there are computers, there are even more algorithms, and algorithms lie at the heart of computing.”

T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Introduction to Algorithms.

Page 17: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto
Page 18: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

La frittata con le uova….Un algoritmo è un procedimento per risolvere un problema mediante una sequenza finita di operazioni elementari.Il procedimento deve essere descritto in maniera precisa e univocaallo scopo di essere eseguito automaticamente dall’esecutore.

Input: 4 uovaOutput: una frittata

Ricetta:1. Rompere le uova2. Sbattere le uova3. Cuocere

Posso eseguire questa ricetta senza pensarci? Questo è un algoritmo? Non proprio!Non è un metodo generale, una ricetta per ogni frittata. Algoritmo per moltiplicare due numeri (non 4+5)Accendere fornello, prendere padella, …Separare gusci, aggiungere sale etc, cuocere come?L’esecutore sa rompere le uova?

Page 19: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto
Page 20: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Obiettivi

Abbiamo bisogno di algoritmi ogni qual volta vogliamo scrivere un programma.

Obiettivo finale: programmare in maniera consapevole

Dal problema al programma che lo risolve:

1. Formalizzazione del problema

2. Scelta della tecnica per progettare algoritmo

3. Correttezza

4. Analisi risorse usate / efficienza

Page 21: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Cosa imparerete in questo corso?

• A progettare nuovi algoritmi per risolvere i problemi di oggi e di domani

• Studiando come hanno fatto gli altri finora, quali tecniche sono state sviluppate e vengono tutt’ora utilizzate con successo (se siete fortunati, nuovi problemi possono essere formalizzati con problemi noti la cui soluzione è ben conosciuta e testata)

• Come dimostrarne la correttezza e valutarne la efficienza

Page 22: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Ho un problema….

Un problema reale….

1. gestire richieste di affitto campo di calcio*

2. elaborare una dieta

3. calcolare/prevedere numeri di amici di Facebookche avrò fra tot anni

Voglio risolverlo in maniera «automatica»

*Vedi quesiti di appelli alla fine della presentazione

Page 23: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Approccio 1: lo «smanettone»

Ho un computer + conosco un linguaggio di programmazione

Scrivo del codice, compilo, correggo, …….

FATTO!Sei sicuro

che funzioni?

Ci mette molto

tempo?

Si poteva fare

meglio?

Funziona: l’ho provato con vari

dati e ci ha messo pochi

secondi.

Page 24: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Approccio 2: l’informatico laureato!

Prendo carta e penna:

• Formalizzo il problema: quali i dati che ho? quali voglio?

• Cerco tutte le soluzioni che riesco a trovare applicando le tecniche studiate

• Valuto la complessità di tempo/spazio di ognuna relativamente ad una organizzazione dei dati. Scelgo!

• Vado al computer ad implementarla (ma di questo ne parlerete in altri corsi)

Ho un computer + conosco un linguaggio di programmazione, ma …..

Page 25: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Alla fine….

Sei sicuro che

funzioni?

Ci mette molto

tempo?

Si poteva fare

meglio?

Ti posso dimostrare che funziona e che

fra quelle considerate è la più efficiente.

Page 26: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Riprendiamo il «programma» in breve

1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve)

2. Tecniche di progetto di algoritmi: Programmazione Dinamica, Greedy, Ricerca esaustiva intelligente (BT e B&B)

3. Algoritmi su grafi (molti problemi possono essere espressi tramite grafi)

4. Calcolo di flusso su grafi e applicazioni.

Page 27: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Problemi…

Un algoritmo risolve un problema, ma…

… cos’è un problema?

Page 28: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Un esempio

Problema reale / concreto:

Organizzazione/Scheduling di attività:

In una scuola c’è 1 sala computer e più classi che vogliono accedervi ognuna in certi orari.

Come accontentare il maggior numero di classi?

Page 29: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Formalizzazione del problema

Problema computazionale: è definito da input e output

Esempio (continua)

• Input / Dati:

S = { 1, 2, … , n } insieme delle classi

Per ogni classe i :

• si tempo di inizio

• fi tempo di fine

• Output / Soluzione:

S’ sottoinsieme di S di attività compatibili (= orari non si accavallano) tale che Card(S’) massima

S’ = soluzione ottimale

Card(S’) = valore ottimo

Page 30: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Esempio

1

2

3

4

5

6

9 10 11 12 13 15 16 17 18 1914

S = {1, 2, 3, 4, 5, 6}

s1 = 9, f1 = 12s2 = 10, f2 = 14s3 = 13, f3 = 15….

Soluzioni ammissibili :S1 = {1, 3, 6}S2 = {1, 6}S3 = {2, 4, 6}S4 = {5}

Soluzioni ottimali:S1 = {1, 3, 6}S3 = {2, 4, 6}

Valore ottimo = 3

Page 31: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Varianti

• Nell’input : Scheduling di attività pesato

Ad ogni classe è associato un valore

Cerco S’ il cui valore totale sia massimo (non necessariamente la cardinalità)

• Nell’output

– Cerco soltanto valore ottimo

– Cerco tutti S’

Page 32: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Scelta della tecnica per Scheduling di attività

1) Ricerca esaustiva/ Forza bruta / naïf

• Considero tutti i sottoinsiemi di S• Per ognuno verifico compatibilità• Fra i sottoinsiemi di attività compatibili restituisco quello di cardinalità

massima

Q: Quanti sono tutti i sottoinsiemi di {1, 2, …. , n}?Cardinalità insieme delle parti di {1, 2, …. , n}Quanti sono tutti i sottoinsiemi di {1, 2, …. , 6}?Quante sono le stringhe binarie di lunghezza 6?

{1, 3, 6} 1 0 1 0 0 1

Sono 2n

Analisi: il tempo di esecuzione di tale algoritmo è esponenziale!Esponenziale = non accettabileAltra soluzione?

Page 33: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Tecniche di programmazione

2) Programmazione dinamica lo risolve in O(nlogn)

3) Tecnica greedy lo risolve in O(nlog n)

Tempo O(nlog n) è accettabile

Page 34: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Confronto efficienza

n logn vs 2n

accettabile non accettabile

Page 35: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Altra soluzione

Grafo della compatibilità: ogni nodo è un intervallo; due nodi collegati se si accavallano

1

2

3

4

56

9 10 11 12 13 15 16 17 18 1914

1 2 3 4

5

6

Soluzione S1 = {1, 3, 6}

Insieme di nodi indipendenti = tale che ogni coppia di nodi NON è collegata

Page 36: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Problema più generaleProblema dell’insieme indipendente

Input: grafo

Output: insieme indipendente di cardinalità massima

Una soluzione del problema dell’insieme indipendente

fornisce una soluzione del problema dello scheduling di attività.

Purtroppo però il problema dell’insieme indipendente è un problema «difficile»

Page 37: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Concludendo• Dal problema reale al problema computazionale

• Bisogna conoscere più tecniche di progettazione di algoritmi

• Necessario saper analizzare l’efficienza (tempo/spazio)

• Dimostrare correttezza

• Molti problemi si possono esprimere con i grafi

Page 38: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 15 gennaio 2015

Quesito 2 (24 punti)Dopo le festività natalizie avete messo su qualche chilo, e decidete di

cominciare una dieta. Ne avete trovato una che fa al caso vostro.

La Dieta consiste nel comporre ogni pasto scegliendo fra alcuni cibi che avete

a disposizione, ognuno con un assegnato numero di calorie, senza superare

una data quantità di calorie a pasto. Potete però scegliere secondo il vostro

gusto. Ad ogni porzione di cibo a disposizione, assegnate quindi un vostro

personale "grado di appetibilità" (un intero da 1 a 10).

Il problema è allora di calcolare il pasto che non superi il massimo di calorie

ammesse in quel pasto, ma che sia il più appetitoso possibile. Ricordate che

ogni porzione di cibo va scelta per intera al più una volta.

Formalizzate il problema reale in un problema computazionale e risolvetelo

con la tecnica che ritenete più opportuna affinché la soluzione sia il più

efficiente possibile. Giustificate le risposte.

Page 39: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 29 gennaio 2015

Quesito 2 (24 punti)Dopo la Laurea in Informatica avete aperto un campo di calcetto che ha

tantissime richieste e siete diventati ricchissimi. Ciò nonostante volete

guadagnare sempre di più, per cui avete organizzato una sorta di asta: chiunque

volesse affittare il vostro campo (purtroppo è uno solo), oltre ad indicare da

che ora a che ora lo vorrebbe utilizzare, deve dire anche quanto sia disposto a

pagare. Il vostro problema è quindi scegliere le richieste compatibili per orario,

che vi diano il guadagno totale maggiore. Avete trovato una soluzione, ma è

molto lenta. Vi ricordate allora che al corso di Algoritmi vi avevano tempestato

con le varie tecniche di progettazione di algoritmi: potranno esservi utili

(almeno una volta nella vita)?

Formalizzate il problema reale in un problema computazionale e risolvetelo in

maniera che sia il più efficiente possibile. Giustificate le risposte.

Page 40: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 19 febbraio 2015

Quesito 2 (24 punti)

Dopo la Laurea in Informatica avete aperto un campo di tennis, ma gli affari

non vanno benissimo. Decidete di proporre un’offerta: chi vuole affittare il

campo, indipendentemente dalla durata del noleggio, paga sempre lo stesso

prezzo fisso di x euro. Sarete però voi a decidere quali richieste accontentare,

dopo aver raccolto tutte le richieste, con i rispettivi orari di inizio e di fine, per

una stessa giornata.

Il vostro problema è di scegliere le richieste compatibili per orario, che vi

diano il massimo guadagno totale.

Formalizzate il problema reale in un problema computazionale e risolvetelo in

maniera che sia il più efficiente possibile, per quanto riguarda sia il tempo di

esecuzione che lo spazio di memoria necessario.

Giustificate la correttezza della vostra soluzione.

Page 41: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 17 aprile 2015Quesito 2 (24 punti)

E’ domenica pomeriggio, piove e non avete voglia di studiare (né di

vedere le partite!).

Coi vostri amici decidete di fare una “maratona” di film. Potete scegliere

fra un certo numero di film, di cui conoscete la durata esatta, e volete

vedere il maggior numero di film possibili nelle ore che avete a

disposizione. Il vostro problema è ora di selezionare i film. Ognuno di

voi ha un’idea differente, dalla più semplice alla più complicata, ma

nessuno riesce a convincere gli altri che la propria soluzione è la

migliore. E il tempo passa. Vi ricordate allora che al corso di Algoritmi vi

avevano tempestato con le varie tecniche di progettazione di algoritmi,

sui modi per dimostrarne la correttezza e valutarne la bontà: potranno

esservi utili (almeno una volta nella vita)?

Formalizzate il problema reale in un problema computazionale e

risolvetelo nella maniera più efficiente possibile e in modo che,

soprattutto, riusciate a convincere gli altri che la vostra soluzione

funziona perfettamente. Giustificate le risposte.

Page 42: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 9 luglio 2015

Quesito 2 (24 punti)

Da quando ti sei registrato su Facebook ad oggi, i tuoi amici sono aumentati

in maniera vertiginosa. Il primo anno avevi solo 10 amici; il secondo 35; il

terzo 100 e nessuno ti elimina mai dagli amici. Hai poi notato che ogni tuo

amico, 3 anni dopo averti dato la sua amicizia, ti porta un nuovo amico

(spesso è un collega di

università/lavoro, fidanzato/a, fratello/a, cugino/a). E tutti i tuoi nuovi amici

si aggiungono sempre e solo in questo modo.

Sapresti calcolare quanti diventeranno i tuoi amici nei prossimi anni?

a) Descrivere un algoritmo efficiente per il calcolo del numero dei tuoi amici

dopo n anni dalla tua registrazione su Facebook, supponendo che aumentino

sempre rispettando la regola sopra descritta. E’ necessario analizzare la

complessità di tempo e di spazio dell’algoritmo proposto.

b) Valutare la crescita del numero di amici rispetto ad n (in notazione

asintotica).

Page 43: Progettazione di Algoritmi - INTRANET · Riprendiamo il «programma» in breve 1. Analisi asintotica degli algoritmi e tecnica Divide et Impera (in breve) 2. Tecniche di progetto

Appello 15 gennaio 2016

Suggerimenti?