Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoPlinio Colucci Modificato 11 anni fa
1
Algoritmi e Strutture Dati con Laboratorio (Modulo I)
Luciano Gualà
2
Informazioni utili Orario lezioni Orario ricevimento
Lunedì: 12,00 – 14,00 mercoledì: 9,00 – 11,00 Orario ricevimento mercoledì: 11,15 – 12,45 Ufficio: dip. di matematica, piano 0, corridoio B0, stanza 206 Copyright © The McGraw - Hill Companies, srl
3
Struttura del corso Corso strutturato in due moduli
Modulo I (vecchio Elementi di Algoritmi e Strutture Dati) 6 CFU Ottobre – Gennaio Modulo II (vecchio Algoritmi e Strutture dati con Laboratorio) Marzo – Giugno Copyright © The McGraw - Hill Companies, srl
4
Prerequisiti del corso
Cosa è necessario sapere… programmazione di base strutture dati elementari concetto di ricorsione dimostrazione per induzione e calcolo infinitesimale Copyright © The McGraw - Hill Companies, srl
5
Libro di testo C. Demetrescu, I. Finocchi, G. Italiano
Algoritmi e Strutture dati (sec. ed.) McGraw-Hill Slide e materiale didattico Copyright © The McGraw - Hill Companies, srl
6
…altri testi utili… P. Crescenzi, G. Gambosi, R. Grossi, G. Rossi
Strutture di dati e algoritmi Pearson T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduzione agli algortimi e strutture dati McGraw-Hill A. Bertossi, A. Montresor Algoritmi e strutture di dati Città Studi J. Kleinberg, E. Tardos Algorithm Design Addison Wesley Copyright © The McGraw - Hill Companies, srl
7
Qualche consiglio: Lavorare sui problemi assegnati in gruppo
Scrivere/formalizzare la soluzione individualmente Copyright © The McGraw - Hill Companies, srl
8
Modalità d’esame L’esame consiste in una prova scritta e una prova orale Quattro appelli 2 giugno/luglio 1 settembre 1 gennaio/febbraio Prova parziale a febbraio Per sostenere l’esame è obbligatorio prenotarsi online (una settimana prima) su delphi.uniroma2.it Copyright © The McGraw - Hill Companies, srl
9
public static int InJava (int[] a){ int max=a[0];
int InC(int a[], int n){ int i, max; max = a[0]; for (i = 1; i < n; i++) if (a[i] > max) { max = a[i]; } return max; public static int InJava (int[] a){ int max=a[0]; for (int i = 1; i < a.length; i++) if (a[i] > max) max = a[i]; return max; function InPascal(var A: array[1…Nmax] of integer): integer; var k, max: integer; begin max:=A[1]; for k:= 2 to n do if A[k]>max then max:=A[k]; end; InPascal:=max; Copyright © The McGraw - Hill Companies, srl
10
…un possibile pseudo-codice…
Input: Sequenza di n numeri: <a1,a2,…, an> Output: valore massimo della sequenza max=a1 per ogni i=2,…, n se (ai > max) allora aggiorna max= ai restituisci max Copyright © The McGraw - Hill Companies, srl
11
Algoritmi e programmi Un algoritmo può essere visto come l’essenza computazionale di un programma, nel senso che fornisce il procedimento per giungere alla soluzione di un dato problema di calcolo Algoritmo diverso da programma programma è la codifica (in un linguaggio di programmazione) di un algoritmo un algoritmo può essere visto come un programma distillato da dettagli riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo Algoritmo è un concetto autonomo da quello di programma Copyright © The McGraw - Hill Companies, srl
12
Definizione informale di algoritmo
Insieme di istruzioni, definite passo per passo, in modo da poter essere eseguite meccanicamente e tali da produrre un determinato risultato Copyright © The McGraw - Hill Companies, srl
13
etimologia Il termine Algoritmo deriva da Algorismus, traslitterazione latina del nome di un matematico persiano del IX secolo, Muhammad al-Khwarizmi, che descrisse delle procedure per i calcoli matematici Copyright © The McGraw - Hill Companies, srl
14
Algoritmo vs Problema Sequenza di passi ben definita che risolve un problema computazionale La definizione del problema specifica in termini generali la relazione di input/output desiderata Copyright © The McGraw - Hill Companies, srl
15
Problema: ricerca del minimo fra n numeri
Input: una sequenza di n numeri A=<a1,a2,…,an> Output: un numero ai tale che ai aj j=1,…,n (stabilisce una relazione tra input e outut) Algoritmo (descrive procedura computazionale per realizzare tale relazione) Minimo (A) min= a1 for j=2 to n do if (aj < min) then min=aj return min Copyright © The McGraw - Hill Companies, srl
16
Strutture dati Concetto di algoritmo è inscindibile da quello di dato
Un algoritmo è una procedura che prende dei dati (input) e, dopo averli elaborati, li restituisce (output) I dati devo essere organizzati e strutturati in modo tale che la procedura che li elabora sia “efficiente” Copyright © The McGraw - Hill Companies, srl
17
un esempio MCCXIV * XXI = 1214 * 21 = 1214 2428 25494 ?????? !!!!!!!
1214 * 21 = 1214 2428 25494 ?????? !!!!!!! Copyright © The McGraw - Hill Companies, srl
18
Cosa impareremo? …ad analizzare e progettare “buoni” algoritmi
…che intendiamo per “buoni”? Producano correttamente il risultato desiderato (correttezza) Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria (efficienza) Copyright © The McGraw - Hill Companies, srl
19
Analisi di algoritmi Studio teorico del comportamento, delle proprietà e dell’uso delle risorse di un algoritmo. Correttezza: dimostrare formalmente che un algoritmo è corretto non è sempre facile Un algoritmo può essere complesso e/o non intuitivo (ai fini dell’efficienza) Complessità: Stimare la quantità di risorse (tempo e memoria) necessarie all’algoritmo Misurata in complessità asintotica Non sempre è facile campire quale è la complessità di un algoritmo (es: algoritmi ricorsivi) Copyright © The McGraw - Hill Companies, srl
20
Cosa è (più) importante oltre l’efficienza?
Allora perché tanta enfasi sull’efficienza? Veloce è bello A volte: o veloce o non funzionale Legato alla User-friendliness Efficienza può essere usata per “pagare” altre caratteristiche Correttezza Semplicità Mantenibilità Stabilità Modularità Sicurezza User-friendliness … Copyright © The McGraw - Hill Companies, srl
21
Altri motivi per studiare gli algoritmi
"There is a saying: If you want to be a good programmer, you just program every day for two years, you will be an excellent programmer. If you want to be a world-class programmer, you can program every day for ten years. Or you can program every day for two years and take an algorithms class." Charles E. Leiserson Copyright © The McGraw - Hill Companies, srl
22
Altri motivi per studiare gli algoritmi
“Se è vero che un problema non si capisce a fondo finché non lo si deve insegnare a qualcuno altro, a maggior ragione nulla è compreso in modo più approfondito di ciò che si deve insegnare ad ua macchina, ovvero di ciò che va espresso tramite un algoritmo." Donald Knuth In ogni algoritmo è possibile individuare due componenti fondamentali: l’identificazione della appropriata tecnica di progetto algoritmico (basato sulla struttura del problema; la chiara individuazione del nucleo matematico del problema stesso. Copyright © The McGraw - Hill Companies, srl
23
Altri motivi per studiare gli algoritmi
“L’algoritmica è l’anima dell’informatica." David Harel Le idee algoritmiche non solo trovano soluzioni a problemi ben posti, quanto costituiscono il linguaggio che porta ad esprimere chiaramente il problema soggiacente Copyright © The McGraw - Hill Companies, srl
24
Altri motivi per studiare gli algoritmi
Potenzia le capacità di: Critical Thinking: un modo di decidere se un certo enunciato è sempre vero, vero a volte, parzialmente vero, o falso Problem Solving: insieme dei processi atti ad analizzare, affrontare e risolvere positivamente problemi Copyright © The McGraw - Hill Companies, srl
25
Un’altra cosa che impareremo a fare (un po’):
…analizzare problemi (computazionali) …cosa intendiamo con analizzare un problema? Copyright © The McGraw - Hill Companies, srl
26
Formalizzazione di un problema
Trovare un modello formale/matematico che descrive in modo non ambiguo il problema e renda esplicita la relazione fra input ed output Qualche volta piuttosto difficile Perché formalizzare? aiuta a comprendere meglio il problema una formalizzazione può suggerire un approccio risolutivo (possibilmente efficiente) per il problema Copyright © The McGraw - Hill Companies, srl
27
Ragionare sulla complessità di un problema
Ho progettato un algoritmo per un dato problema che usa una certa quantità di risorse di tempo e spazio Posso fare meglio? Quanto posso sperare di abbassare la mia complessità? Copyright © The McGraw - Hill Companies, srl
28
Formalizzazione: un esempio
Vogliamo progettare un algoritmo che aiuti la segretaria di dipartimento ad assegnare i corsi ai docenti (lei quando lo fa a mano impiega troppo tempo). C’è un insieme di docenti, a ognuno dei quali deve essere assegnato un solo corso (magari!). Un docente sa insegnare solo alcuni corsi. Copyright © The McGraw - Hill Companies, srl
29
Una possibile formalizzazione: matching su grafi bipartiti
docenti d1 d2 d3 d4 d5 Grafo bipartito nodi: docenti + corsi archi: (di,cj) se di sa insegnare cj c1 c2 c3 c4 c5 corsi Trovare insieme di archi che “coprono” tutti i corsi tale che due archi non incidono su uno stesso nodo Copyright © The McGraw - Hill Companies, srl
30
Formalizzazione: un altro esempio
Vogliamo progettare un algoritmo per un correttore ortografico di testi che, data una parola, controlla se essa è scritta bene e in caso di errore suggerisce una possibile correzione Copyright © The McGraw - Hill Companies, srl
31
Una possibile formalizzazione
Manteniamo un insieme D di parole dove D è il nostro dizionario (di parole corrette) Una parola x è corretta se x D Definiamo un concetto di distanza tra parole Se x non è in D, cerco una parola y in D che minimizza la distanza da x Osservazioni: Distanza fra due parole x e y deve essere piccola quando x e y sono “simili” Distanza fra due parole deve poter essere calcolata (efficientemente) Copyright © The McGraw - Hill Companies, srl
32
Trovare il cammino più breve
Copyright © The McGraw - Hill Companies, srl
33
Una possibile formalizzazione: cammino minimo su un grafo pesato
sorgente 2 10 3 9 s 18 6 Grafo pesato nodi: incroci archi: strade e distanze 2 6 6 30 4 19 11 5 15 8 6 20 16 t 7 44 destinazione Trovare un cammino (diretto) da s a t che minimizza la somma dei pesi degli archi Copyright © The McGraw - Hill Companies, srl
34
Formalizzazione: un altro esempio
Due robot telecomandabili R1 e R2 sono posizionati sui nodi s1 e s2 di un grafo G Vogliamo spostare R1 e R2 in t1 e t2, rispettivamente Possiamo spostarli uno alla volta seguendo gli archi di G Vincolo: i due robot non devono mai essere a distanza (minimo numero di archi che li separa) ≤ r (per evitare interferenze di segnale) Goal: trovare una sequenza minima di mosse valida r=1 s1 s2 t1 Copyright © The McGraw - Hill Companies, srl
35
Formalizzazione: un altro esempio
Idea: costruire un grafo delle “configurazioni” su cui cercare la sequenza di mosse Costruiamo un nuovo grafo H Nodi di H: coppie {i,j} di nodi di G tali che i e j sono a distanza > r Archi di G: c’è un arco fra {i,j} e {k,j} se c’è un arco in G fra i e k Trova un cammino minimo in H da {s1,s2} a {t1,t2} Copyright © The McGraw - Hill Companies, srl
36
Un problema da $ 1,000,000 Trovare un algoritmo efficiente per il seguente problema: Dato un grafo G (non diretto e non pesato) e due nodi s e t, trovare il cammino (semplice) più lungo fra s e t s s t t Copyright © The McGraw - Hill Companies, srl
37
Buon inizio anno Copyright © The McGraw - Hill Companies, srl
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.