Il 0% ha trovato utile questo documento (0 voti)
29 visualizzazioni43 pagine

01 Pjalgo Introduzione

Il documento descrive il corso di Progettazione di Algoritmi per l'anno accademico 2016/17, tenuto dalla professoressa Marcella Anselmo, con informazioni su orari, modalità di frequenza, contenuti del corso e modalità di esame. Il corso prevede 48 ore di lezioni frontali, coprendo tecniche di progettazione di algoritmi come Programmazione Dinamica, Greedy e algoritmi su grafi. Sono forniti anche dettagli su libri di testo, regole di comportamento e sanzioni disciplinari in caso di violazioni.

Caricato da

donmatteo
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
29 visualizzazioni43 pagine

01 Pjalgo Introduzione

Il documento descrive il corso di Progettazione di Algoritmi per l'anno accademico 2016/17, tenuto dalla professoressa Marcella Anselmo, con informazioni su orari, modalità di frequenza, contenuti del corso e modalità di esame. Il corso prevede 48 ore di lezioni frontali, coprendo tecniche di progettazione di algoritmi come Programmazione Dinamica, Greedy e algoritmi su grafi. Sono forniti anche dettagli su libri di testo, regole di comportamento e sanzioni disciplinari in caso di violazioni.

Caricato da

donmatteo
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 43

Progettazione di Algoritmi

a.a. 2016/17
Classe 3: matricole congrue 2 modulo 3
Presentazioni
• Marcella Anselmo

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

• Orario ricevimento:
• Lunedì 11:00 - 12:00
• Giovedì 9:00 - 11:00

• Il mio studio è il n° 57 al 4° piano (ultimo piano)


della Stecca 7 (fra l'aula F8 e Farmacia).
Pagina del corso
• Pagina pubblica del corso:
http://www.di.unisa.it/professori/anselmo/pjalgo1617.htm

• Sulla piattaforma
http://elearning.informatica.unisa.it/el-platform/
troverete: orario lezioni, ricevimento, programma, syllabus,
avvisi, calendario aggiornato via via, slides, date di esame,…

• Inoltre trovate il calendario della vostra classe su


http://corsi.unisa.it/informatica/didattica/calendari
Svolgimento del corso
6 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ì 30 maggio 2017
• 3 lezioni di recupero (se vogliamo fare il ponte del 25
Aprile):
– martedì 28/3 ore 15 - 17 in aula F1
– martedì 4/4 ore 15 - 17 in aula F1
– venerdì 28/4 ore 11 - 13 in aula F1
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 padroneggiare i concetti di base di


programmazione (cicli, iterazione, ricorsione,…)

Nonché padroneggiare nozioni di matematica acquisite nei precedenti


anni scolastici (logaritmi, diseguaglianze, polinomi, sommatorie,… )
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.
Come studiare?
• Lezioni (attive)
• Slides, appunti, ma… libri!
• Esercizi (da soli, a gruppi,…)
• Ricevimento
• Organizzare gli esami dei vari corsi
• Non dimenticare obiettivi e motivazioni
Un po’ di regole
Ad ogni lezione faremo una pausa di 5/10 minuti (o
due quando faremo 3 ore) durante la quale potete:
sgranchirvi, bere, mangiare, telefonare, controllare le
vostre chat, parlare coi vostri colleghi o con me, etc.
etc….
QUINDI

Durante la lezione NON farete niente di tutto ciò, ma:


cercate di concentrarvi per seguire la lezione, capire,
porvi e pormi domande, in generale far lavorare il
cervello, eventualmente prendere degli appunti e/o
seguire sul libro
Libri di testo
I 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.
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 può
contenere una parte con domande a risposta multipla. Un
esempio di compito con soluzione è disponibile sulla piattaforma.
• 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.
• Sono previste 2 prove intercorso per coloro che seguono il corso:
11/4 ore 9, F1, e 5/6 ore 9, aula P4.
• Faremo anche brevi test di valutazione dell’apprendimento (per
me, per voi).
• Durante lo svolgimento del compito scritto NON è consentito
consultare libri, appunti o altro materiale/fonte di nessun tipo.
Attenzione
Da codice etico unisa http://web.unisa.it/uploads/rescue/41/76/codice-etico-e-di-comportamento-unisa.pdf
ART. 43 – Violazione dei doveri del Codice - Studenti
1. La violazione delle norme del presente Codice da parte degli studenti può dar luogo a sanzioni disciplinari, ai sensi del
Regolamento Studenti dell'Ateneo.
2. Quando siano accertate attività tese a modificare indebitamente l'esito delle prove o impedirne una corretta
valutazione, il docente o altro preposto al controllo dispone l'annullamento delle prove medesime e la segnalazione al
Rettore ai fini dell'attivazione del procedimento disciplinare ai sensi del Regolamento studenti.

Da Regolamento studenti unisa http://web.unisa.it/uploads/rescue/31/19/reg_studenti_2014_web.pdf

ART. 40 – SANZIONI DISCIPLINARI A CARICO DEGLI STUDENTI


1. Le sanzioni che si possono comminare sono le seguenti:
a) ammonizione;
b) interdizione temporanea da uno o più attività formative;
c) esclusione da uno o più esami o altra forma di verifica di profitto per un periodo fino a sei mesi;
d) sospensione temporanea dall’Università con conseguente perdita delle sessioni di esame.
2. La relativa competenza è attribuita al Senato accademico, fatto salvo il diritto dello studente destinatario del
provvedimento di essere ascoltato.
3. L'applicazione delle sanzioni disciplinari deve rispondere a criteri di ragionevolezza ed equità, avuto riguardo alla
natura della violazione, allo svolgimento dei fatti e alla valutazione degli elementi di prova. Le sanzioni sono comminate in
ordine di gradualità secondo la gravità dei fatti.
4. La sanzione è comminata con decreto rettorale.
5. Tutte le sanzioni disciplinari sono registrate nella carriera scolastica dello studente e vengono conseguentemente
trascritte nei fogli di congedo.
Date esami
Di norma gli orali si terranno a partire da 1 settimana dopo lo scritto
ed entro tale data saranno disponibili i risultati delle prove scritte.

1. Pre-appello: 12 Giugno 2017, ore 12, aula P3


2. Primo appello: 7 Luglio, ore 12, aula P3
3. Secondo appello: 21 Luglio ore 12, aula P3 (Orali dal 24
Luglio)
4. Appello di settembre: 7 settembre 2017, ore 12, aula P3.
5. Appello straordinario di Novembre 2017 (riservato).
6. Appello di Gennaio 2018.
7. Appello di Febbraio 2018
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 di
applicazione: Mergesort, Quicksort. Ricorrenze. (4 ore frontali)
3. La tecnica di progetto di algoritmi Programmazione Dinamica e relativi esempi di
applicazione: Calcolo di numeri di Fibonacci, Combinazioni; Problemi di
ottimizzazione: Scheduling di risorse, Zaino intero, Problemi su stringhe, Cammini
minimi 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 di
Huffman. (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 ore
frontali). [DPV, cap. 9]
In breve
Gli argomenti sono:

• 3 tecniche di progettazione di algoritmi:


1. Programmazione dinamica
2. Tecnica greedy
3. Algoritmi esaustivi

• Grafi e principali algoritmi su grafi


Perché studiare gli algoritmi?
La definizione di informatica proposta dall’ACM
(Association for Computing Machinery),
una delle principali organizzazioni scientifiche di
informatici di tutto il mondo, è la seguente:

”L’informatica è la scienza degli algoritmi che descrivono


e trasformano l’informazione:
la loro teoria, analisi, progetto, efficienza, realizzazione e
applicazione.”
Algoritmi in prima pagina
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.
Cos’è un algoritmo?
Un famoso libro del 1976 di Niklaus Wirth si intitola

Algorithms + Data Structures = Programs


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

Obiettivo finale: programmare in maniera consapevole e


creativa

Dal problema reale al programma che lo risolve:


1. Formalizzazione del problema
2. Scelta della tecnica per progettare algoritmo
3. Dimostrazione della Correttezza
4. Analisi risorse usate / efficienza
Ho un problema….
Un problema reale….
1. gestire richieste di affitto campo di calcio
2. calcolare/prevedere numeri di amici di Facebook
che avrò fra tot anni
3. Scegliere un regalo per San Valentino…
Voglio risolverlo in
maniera
«automatica»
Approccio 1: lo «smanettone»
Ho un computer + conosco un linguaggio di
programmazione
Scrivo del codice, compilo, correggo, ……. Sei sicuro che
funzioni? O finisce
come con gli
FATTO! abbonamenti del
treno…
Funziona: l’ho
Ci mette
provato con vari
molto
dati e ci ha
tempo?
messo pochi
secondi.
Si poteva
fare
meglio?
Approccio 2: l’informatico laureato!
Ho un computer + conosco un linguaggio
di programmazione, ma …..

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, di cui dimostro il corretto funzionamento su
ogni input
• Quale scelgo? Valuto la complessità di tempo/spazio di ognuna
relativamente ad una organizzazione dei dati. Scelgo!
• Vado al computer ad implementarla
Alla fine….

Ti posso
dimostrare che
funziona su ogni
input e che fra
quelle
considerate è la Sei sicuro
più efficiente. che
funzioni?
Ci mette
molto
tempo?

Si poteva
fare
meglio?
In pratica
Il nostro obiettivo sarà: risolvere un problema
(reale, computazionale)
Nostro compito: Progettare un algoritmo che lo
risolva
Tre aspetti importanti della soluzione:
1. Tempo impiegato
2. Costo delle risorse (memoria)
3. Qualità : funziona bene? Sempre?
Cosa imparerete in questo corso?
• 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
Problemi…
Un algoritmo risolve un problema, ma…
… cos’è un problema?
Corrispondenza fra spazio delle istanze (dati in
ingresso) e delle soluzioni
Un esempio
Problema reale / concreto:
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?
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
Esempio
S = {1, 2, 3, 4, 5, 6}

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

3 Soluzioni ammissibili :
S1 = {1, 3, 6}
4 S2 = {1, 6}
S3 = {2, 4, 6}
5 S4 = {5}
6 Soluzioni ottimali:
S1 = {1, 3, 6}
9 10 11 12 13 14 15 16 17 18 19
S3 = {2, 4, 6}

Valore ottimo = 3
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’
Scelta della tecnica per Scheduling di attività
1) Ricerca esaustiva/ Forza bruta / naif

• 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}  101001

Sono 2n
Analisi: il tempo di esecuzione di tale algoritmo è esponenziale!
Esponenziale = non accettabile
Altra soluzione?
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


Confronto efficienza
n logn vs 2n

accettabile non accettabile


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

1 1 2 3 4
2
3
4 5
5
6 6
9 10 11 12 13 14 15 16 17 18 19

Insieme di nodi indipendenti =


Soluzione S1 = {1, 3, 6}  tale che ogni coppia di nodi NON è
collegata
Problema più generale
Problema 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»
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


Prossime lezioni
• Grafi: definizioni e visite
• Riprenderemo brevemente l’analisi asintotica
• Riprenderemo brevemente la tecnica Divide-
et-impera, come punto di partenza per
• La tecnica della programmazione dinamica

Potrebbero piacerti anche