Fondamenti di Informatica L- A Alcune considerazioni sul progetto di soluzioni software 12.

Slides:



Advertisements
Presentazioni simili
Scomposizione funzionale
Advertisements

Classe III A A.s – 2010 Programma di Informatica
Analisi della complessità degli algoritmi
Procedure e funzioni A. Ferrari.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Analisi della complessità degli algoritmi
PHP.
I linguaggi di programmazione
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
FONDAMENTI DI INFORMATICA
Lez. 51 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Complessita'
Luglio 2004Memorie Tradizionali1 MEMORIE TRADIZIONALI Luglio 2004.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
File.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Corso di Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:
Introduzione1 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
memoria gestita staticamente:
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
I File.
Le funzioni.
Espressioni condizionali
Lezione 2 Programmare in ASP
UNIVERSITA’ STUDI DI ROMA “FORO ITALICO”
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Elementi di Informatica di base
Il Calcolatore Elettronico
INFORMATICA MATTEO CRISTANI.
Algoritmi proprietà e caratteristiche. ottobre 2002(c) Fabrizio d'Amore, IGEA descrizione degli algoritmi codice e pseudo-codice codice e pseudo-codice.
Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma.
Analisi di un algoritmo
Complessità di un algoritmo
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Introduzione Laboratorio di Calcolo Corso di Laurea in Fisica Università degli Studi di Roma “La Sapienza”
Scrivere e compilare programmi
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
1 Sommario lez 1 Concetti principali, domande ed esercizi Concetti principali –algoritmo, programma –struttura di controllo: condizionale (if …), iterativa.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Fondamenti di Informatica
Realizzazione software
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Complessità Computazionale
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Il modello di Von Neumann
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
1 Informatica di Base Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Fondamenti di Informatica L- A Alcune considerazioni sul progetto di soluzioni software 12

Fondamenti di Informatica L- A Criteri da tenere a mente Lo stile di programmazione è importante –leggibilità (commenti / nomi significativi di variabili / indentazioni /...) –modularità e riuso (funzioni / prototipi / librerie standard /...) –adozione di convenzioni (es. nomi di funzioni con la minuscola,...; proprie di ciascun linguaggio) La fase di analisi/progetto precede la fase di implementazione... –in generale: metodologie (Ingegneria del Software) –in questo corso: alcune considerazioni di base per problemi su piccola scala 1

Fondamenti di Informatica L- A Basi di analisi di algoritmi Algoritmi equivalenti: alcuni più “efficienti” di altri Cosa vuol dire “efficiente”? –Tempo di esecuzione / spazio di memoria utilizzato? –In relazione alla dimensione dei dati di input? –Caso medio / caso peggiore? –In funzione di una o più operazioni elementari –Indipendentemente dalla velocità della macchina (complessità computazionale) –Dipendentemente dai vincoli imposti dall’architettura (scelte di progetto) –Ordini di grandezza: notazione O-grande 1

Fondamenti di Informatica L- A Ricerca lineare int find(int A[], int n, int key) { int i; for(i=0; i<n; i++) if(A[i]==key) return i; return -1; } Caso peggiore: –key non è presente in A (o è l’ultimo elemento) –in questo caso: n iterazioni (operazioni di confronto) Caso medio: –key è a metà di A –in questo caso: n/2 operazioni di confronto Complessità dell’algoritmo: O(n) 1

Fondamenti di Informatica L- A Ricerca binaria (su array ordinato) int find(int A[], int n, int key) { int mid; if( n < 0 ) return -1; // not found mid = n/2; if( key > A[mid] ) return mid + find( A+mid+1, n-mid-1, key ); else if( key < A[mid] ) return find( A, mid-1, key ); else return mid; } Caso peggiore: –key non è presente in A –a ogni iterazione l’intervallo si dimezza  log 2 n iterazoni per arrivare a  –in questo caso: log n iterazioni Complessità dell’algoritmo: O(log n) 1

Fondamenti di Informatica L- A Ricerca binaria (su array ordinato) int find(int A[], int n, int key) { int lo=1, hi=n-1; while( lo<=hi ) { int mid= (lo+hi)/2; if( A[mid]==key ) return mid; else if( key<A[mid] ) hi=mid-1; else lo=mid+1; } return -1; // non trovato } Caso peggiore: –key non è presente in A –a ogni iterazione l’intervallo si dimezza  log 2 n iterazoni per arrivare a  –in questo caso: log n iterazioni Complessità dell’algoritmo: O(log n) 1

Fondamenti di Informatica L- A Complessità: perché è importante... Esempio visto: ricerca di un elemento in un vettore di n elementi. Caso medio: –Ricerca binaria: log n - 1 –Ricerca lineare: n/2 –Oracolo: 1 nOracoloRic. binariaRic. lineare mila miliardi 1

Fondamenti di Informatica L- A Quando bisogna tenere conto dell’architettura Esistono vari tipi eterogenei di operazioni elementari, il cui costo dipende significativamente dall’architettura Caso tipico: elaborazione di dati su file Configurazione tipo: –File system su HD con latency time ~ 10 ms –Transfer rate HD: 10MBps (100 ms/MB) –Transfer rate RAM (133MHz, 64bit): 1GBps (1 ms/MB) –Memoria disponibile >> dimensione dati Punti chiave di una generica soluzione: 1.Lettura da file 2.Trasformazione dati 3.Scrittura risultato su file 12

Fondamenti di Informatica L- A Scelte di progetto ed efficienza Costo del trasferimento file  memoria: –Latency + size / transfer rate (~10ms ms/MB) Costo del trasferimento dati memoria  processore: –Latency + size / transfer rate (~20ns + 1 ms/MB) Costo per effettuare una operazione semplice: –Frequenza CPU (~1 GHz  1 ns) Variabili F = dimensione del file (MB) D = dimensione del blocco di dati da trasferire (MB) n = numero di record M = numero di iterazioni 12

Fondamenti di Informatica L- A Scelte di progetto ed efficienza Costo del trasferimento file  memoria (ms): –F ~  ~ 10 –F >>  ~ 100 x F Costo del trasferimento dati memoria  processore (ms): –D ~  ~ –D >>  ~ D Costo per effettuare una operazione semplice: –~ Variabili F = dimensione del file (MB) D = dimensione del blocco di dati da trasferire (MB) n = numero di record M = numero di iterazioni 2-6 ordini di grandezza 4-9 ordini di grandezza 12

Fondamenti di Informatica L- A 1 Problema, 2 Scenari, 3 Soluzioni Programma che gestisce un DB i clienti di un negozio –il DB contiene per ogni cliente: nome, cognome,..., spesa2006 –a ogni acquisto, il DB deve aggiornare la spesa2006 del cliente –il programma deve conservare i dati in modo permanente Scenario 1: F = 100MB, n = 10 6 Scenario 2: F = 100KB, n = 10 3 [Soluzione A] –A.1: leggi tutto il file su una tabella in memoria –A.2: esegui tutte le operazioni (M operazioni) –A.3: alla fine, salva la tabella aggiornata su file [Soluzione B] per ciascuna delle M operazioni: –B.1: cerca sul file il record interessato –B.2: esegui l’operazione sul record –B.3: salva il singolo record su file [Soluzione C]  varianti di [B]: –[ C.I ] il file è ordinato  è possibile effettuare una ricerca binaria –[ C.II ] esiste un oracolo che, dato un cliente, restituisce la posizione del relativo record all’interno del file 12

Fondamenti di Informatica L- A Scenario 1: F = 100MB, n = 10 6 Programma che gestisce un DB i clienti di un negozio –il DB contiene per ogni cliente: nome, cognome,..., spesa2006 –a ogni acquisto, il DB deve aggiornare la spesa2006 del cliente –il programma deve conservare i dati in modo permanente [Soluzione A] –A.1: leggi tutto il file su una tabella in memoria –A.2: esegui tutte le operazioni (M operazioni) –A.3: alla fine, salva la tabella aggiornata su file [Soluzione B] per ciascuna delle M operazioni: –B.1: cerca sul file il record interessato –B.2: esegui l’operazione sul record –B.3: salva il singolo record su file [Soluzione C]  varianti di [B]: –[ C.I ] il file è ordinato  è possibile effettuare una ricerca binaria –[ C.II ] esiste un oracolo che, dato un cliente, restituisce la posizione del relativo record all’interno del file 10 2 x F  10 4 M x O(n) x  M (ric. lin.) 10 2 x F  10 4 ~ M M x x O(n)  10 7 (ric. lin.) ~10 7 x M 10 M x 10 x O(log n) M x 10 x O(1) ~10 2 x M ~10 x M NOTA sec > 1 min 10 3 sec > 15 min 10 4 sec > 2 h e 3/ sec > 1 g 10 6 sec > 11 gg 10 6 sec > 4 mesi 10 8 sec > 2 anni 10 9 sec > 20 anni utilizzo memoria (dati) ~ 100M utilizzo memoria (dati) ~ 10KB 12

Fondamenti di Informatica L- A Scenario 2: F = 100KB, n = 10 3 Programma che gestisce un DB i clienti di un negozio –il DB contiene per ogni cliente: nome, cognome,..., spesa2006 –a ogni acquisto, il DB deve aggiornare la spesa2006 del cliente –il programma deve conservare i dati in modo permanente [Soluzione A] –A.1: leggi tutto il file su una tabella in memoria –A.2: esegui tutte le operazioni (M operazioni) –A.3: alla fine, salva la tabella aggiornata su file [Soluzione B] per ciascuna delle M operazioni: –B.1: cerca sul file il record interessato –B.2: esegui l’operazione sul record –B.3: salva il singolo record su file [Soluzione C]  varianti di [B]: –[ C.I ] il file è ordinato  è possibile effettuare una ricerca binaria –[ C.II ] esiste un oracolo che, dato un cliente, restituisce la posizione del relativo record all’interno del file 10 M x O(n) x  x M 10 ~ x M M x x O(n)  10 4 C  ~10 4 x M 10 M x 10 x O(log n) M x 10 x O(1) ~10 2 x M ~10 x M utilizzo memoria (dati) ~ 100KB utilizzo memoria (dati) ~ KB 12

Fondamenti di Informatica L- A Considerazioni conclusive Impatto della complessità degli algoritmi scelti sulla soluzione –importante sapere costo di algoritmi di uso comune! es: ricerca (binaria), ordinamento,... Impatto delle scelte progettuali –utilizzo di tabelle può essere necessario –approcci misti: suddividere file in porzioni (fare per esercizio...) Attenzione: scenario molto semplificato! –presenza/dimensione di eventuali cache –architetture con parallelismi –limiti sulla memoria disponibile 1

Fondamenti di Informatica L- A Preparazione all’esame

Fondamenti di Informatica L- A Prova pratica Facile prendere due punti se –avete seguito il laboratorio –riuscite a risolvere gli esercizi proposti Punti chiave: –avere dimestichezza con l’utilizzo dell’ambiente di programmazione del laboratorio (editor, compiler) –saper utilizzare il debugger –aver fatto sufficiente pratica, anche su problemi semplici (soprattutto: vettori, cicli, funzioni)

Fondamenti di Informatica L- A Prova scritta Per raggiungere la sufficienza occorre raggiungere un punteggio minimo in ciascuna domanda, come da tabella: DomandaPuntiSoglia 1. Progetto Analisi Teoria4+44 progetto / programmazione separate (?)

Fondamenti di Informatica L- A Valutazione di un progetto Presenza di un progetto Giustificazione delle scelte progettuali Correttezza della soluzione Leggibilità del codice (commenti, indentazione) Modularità (uso di funzioni)  non è sempre necessario/richiesto sviluppare la soluzione per intero! Qualità degli algoritmi Capacità di usare gli strumenti in modo appropriato –visibilità e tempo di vita delle variabili –passaggio dei parametri –corretto utilizzo delle istruzioni su file/stringa –implementazione dei cicli –...

Fondamenti di Informatica L- A Sul sito web: testi e soluzioni di esami dell’anno scorso. Domande di progetto tipo: –dato un problema (di media difficoltà), progettare una possibile soluzione e implementare una parte delle funzioni, o una specifica funzione –dato un problema (facile), progettare una possibile soluzione e implementarla in modo completo Come esercitarsi per lo scritto (domanda di progetto)

Fondamenti di Informatica L- A Consigli: 1.Non leggere direttamente la soluzione! 2.Esercitarsi a Disegnare lo schema di un progetto coerente di soluzione, in cui sia chiaro – ad esempio – il ruolo delle variabili globali e/o delle eventuali variabili dinamiche. Esprimere considerazioni di progetto. Eventualmente, mettere a confronto varie possibili scelte. Sviluppare codice modulare, distribuito in più funzioni (anche se non sono tutte implementate). Scrivere i prototipi e ragionare su un “progetto” globale. Bisogna essere in grado di ragionare su funzioni (anche non implementate), in termini di: –parametri di input –valore di uscita –gestione dei casi di errore –utilizzo di strutture dati esterne (es. variabili globali) 3.Implementare il codice scritto e usare il debugger per ispezionarlo Come esercitarsi per lo scritto (domanda di progetto)

Fondamenti di Informatica L- A Sul sito web: testi e soluzioni di esami dell’anno scorso. Domanda di analisi tipo: –data una funzione ricorsiva, indicare come si comporta con un dato input. Giustificare accuratamente la risposta. Consigli: 1.Esercitarsi a giustificare accuratamente la risposta. Vedi sul sito web. 2.Implementare le funzioni proposte gli anni passati (e/o altre di propria iniziativa) e usare il debugger per ispezionarne il funzionamento Errore tipico: presente solo l’output della funzione, senza giustificazione Come esercitarsi per lo scritto (domanda di analisi)

Fondamenti di Informatica L- A Sul sito web: testi e soluzioni di esami dell’anno scorso. Domanda di teoria tipo: –Si parli in modo esauriente e sintetico dell’argomento X. Consigli: 1.Studiare non (solo) sui lucidi (libri, biblioteche, internet,...) 2.Leggere bene la domanda... 3.“Esauriente e sintetico” significa: –mostrare padronanza dell’argomento –toccare gli aspetti chiave –non andare fuori tema Errore tipico: –si presentano solo gli aspetti che si ricordano, ma non i più importanti –manca una visione complessiva dell’argomento –si dedica spazio alla trattazione di argomenti non richiesti Come esercitarsi per lo scritto (domanda di teoria)