Studio degli algoritmi

Documenti analoghi
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

PROGRAMMAZIONE STRUTTURATA

Ω (grande omega) Esempio 10 COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Fondamenti di Informatica

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

IL TEOREMA DI BOEHM-JACOPINI

Fondamenti di Informatica. Definizione di Algoritmo. Algoritmo Euclideo. Prof.V.L.Plantamura Informatica e Comunicazione Digitale a.a.

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Algoritmi e basi del C Struttura di un programma

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Introduzione agli Algoritmi

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Lezione 6 Introduzione al C++ Mauro Piccolo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Cosa si intende con stato

Introduzione alla programmazione

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

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

Corso di Informatica di Base

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall algoritmo al programma

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

10 STRUTTURE DI CONTROLLO REPEAT E WHILE. Strutture di controllo e variabili strutturate

Algoritmi e soluzione di problemi

Rappresentazione degli algoritmi

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Capitolo 3 L elaborazione e la strutturazione dell informazione

Valutazione delle prestazioni

Indice. Prefazione. 3 Oggetti e Java 53

Informatica Generale 1 - Esercitazioni Flowgraph, algebra di Boole e calcolo binario

Università degli Studi di Verona. Algoritmie Diagrammidiflusso. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Il linguaggio macchina

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Problemi algoritmici e Complessità degli algoritmi

Problemi, algoritmi, calcolatore

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Informatica Teorica. Macchine a registri

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Le basi del linguaggio Java

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Laboratorio di Programmazione

Tempo e spazio di calcolo (continua)

Rappresentazione con i diagrammi di flusso (Flow - chart)

Strutture dati e loro organizzazione. Gabriella Trucco

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Cicli annidati ed Array multidimensionali

Esercizi Programmazione I

Algoritmi e Strutture Dati

Laboratorio di Informatica Ingegneria Clinica Lezione 7/11/2011. Prof. Raffaele Nicolussi

Istruzioni iterative (o cicliche)

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Il linguaggio di programmazione Python

Introduzione alla programmazione strutturata

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

L'Allocazione Dinamica della Memoria nel linguaggio C

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Transcript:

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi o progetto. Costruzione di un algoritmo A che risolve P; Analisi. Dato un algoritmo A: Dimostrare che A risolve P (correttezza); Valutare la quantità di risorse utilizzate da A (complessità); Classificazione. Data una quantità T di risorse, individuare la classe dei problemi risolubili da algoritmi che utilizzano al più tale quantità. Confronto di algoritmi Valutare la quantità di risorse utilizzate da un algoritmo per la risoluzione di un dato problema. Uno stesso problema può essere risolto in modi diversi, cioè con algoritmi diversi; Algoritmi diversi possono avere diversa complessità (sforzo di applicazione, costo) e quindi diversa efficienza; Le differenze possono essere di poco conto nella manipolazione di piccole quantità di dati ma crescono proporzionalmente alla loro quantità. 1

Obiettivo Studio di un modello di calcolo per la misura dell efficienza di algoritmi. Efficienza In fase di progetto ci sono due obiettivi spesso in antitesi: Facilità di comprensione, codifica e test Efficienza in termini di spazio e tempo Fattori di influenza per una scelta di efficienza: Utilizzo del programma costi di esecuzione maggiori dei costi di progettazione e implementazione Fattori di sicurezza quali controllo di processi pericolosi e sistemi in tempo reale efficienza prioritaria Risorse principali: spazio e tempo. Il tempo è da privilegiare in quanto risorsa non riutilizzabile. Efficienza Prima definizione intuitiva di efficienza: un programma è più efficiente di un altro se la sua esecuzione richiede meno tempo di calcolo. 2

Esempio computer 1 computer 2 Elenchiamo il tempo di Dim. Input A 1 A 2 A 1 A 2 esecuzione in secondi 50 0,005 0,07 0,05 0,25 di 4 programmi che 100 0,003 0,13 0,18 0,55 200 0,13 0,27 0,73 1,18 implementano 300 0,32 0,42 1,65 1,85 rispettivamente due 400 0,55 0,57 2,93 2,57 algoritmi A 1 e A 2 su due 500 0,87 0,72 4,60 3,28 diverse architetture. 1000 3,57 1,50 18,32 7,03 Si può notare che: la superiorità del secondo algoritmo non è evidente per input di dimensione piccola CI sono diversi fattori che influenzano il tempo di esecuzione! Fattori di influenza La bontà del compilatore; La struttura del sistema di elaborazione; La potenza di calcolo; I dati in ingresso (dimensione e bontà); La complessità temporale dell algoritmo sottostante. Fattori di influenza La potenza di calcolo, la bontà del compilatore e la struttura del sistema di elaborazione non rendono la misura oggettiva; Non è possibile esprimere la complessità temporale intrinseca di un algoritmo utilizzando unità di misura quali i secondi. 3

Complessità Temporale Obiettivo: studio di un modello per la misura dell efficienza di un programma che sia indipendente dal sistema di elaborazione sul quale lo si intende eseguire; Per ottenere una misura oggettiva della complessità temporale, cerchiamo un modello di calcolo che tenga conto: Dell algoritmo; Dei dati in ingresso. Complessità Temporale Considerato un algoritmo A, vogliamo caratterizzare la sua complessità computazionale (temporale); Sia T il tempo di esecuzione richiesto da A su un input x. Calcolare T A (x) può essere molto complicato a causa del variare di x sull insieme di tutti gli input. Dimensione dell input Sia allora x la dimensione di una istanza, che raggruppa tutti gli input che hanno la stessa dimensione; Dimensione dell input = Cardinalità dei dati in ingresso; Osservazione: occorre definire in anticipo come si misura la dimensione della particolare istanza del problema. Non esiste un criterio universale. 4

Esempi Nel caso di algoritmi di ordinamento una dimensione possibile è data dal numero di elementi da ordinare ( (50,4,1,9,8) =5 ); Nel caso di algoritmi di addizione e moltiplicazione una misura possibile è data dal numero di cifre decimali necessario ad esprimere la lunghezza degli operandi. Definizione intuitiva Indipendentemente dal tipo di dati, indichiamo con n la dimensione dell input; Dato un algoritmo A, siamo interessati a trovare T A (n); Def: La complessità temporale di un algoritmo A su una istanza x di dimensione n del problema P è uguale al numero di passi T A (n) necessari per eseguire l algoritmo. Modello di calcolo Dovendo prescindere da un particolare compilatore o architettura, il modello che si assumerà per il calcolo di T A (n) è la RAM: modello computazionale mono-processore in cui tutte le istruzioni sono eseguite una dopo l altra, senza alcun parallelismo; L accesso ad ogni cella di memoria avviene in tempo costante; 5

Modello di calcolo In questo modello le istruzioni semplici hanno un costo unitario in termini di tempo impiegato per la loro esecuzione; Su questa base si procede al calcolo del tempo complessivo T impiegato da tutte le istruzioni dell algoritmo, tenendo presente che il tempo dovrà dipendere solo dalla dimensione dei dati: n. Costi delle istruzioni Operazione di costo unitario, la cui esecuzione non dipende dai valori e dai tipi di dati delle variabili (ossia dalla dimensione dell input): Lettura: scanf () Scrittura: printf () Assegnamento, operazioni aritmetiche predefinite, return: y=sqrt(x)+3; return x; Costi delle istruzioni Accesso ad un qualunque elemento di un array residente in memoria centrale: A[i] = A[1]; x=a[10000]; Valutazione di una qualsiasi espressione booleana: if ((x>100) ((j<=n) && (B == true))) { 6

Costi delle istruzioni Altre operazioni di costo non unitario: Istruzione composta: somma dei costi delle istruzioni componenti Istruzione ciclo: costo totale della condizione + costo totale del corpo Costi delle istruzioni Istruzione condizionale: costo della condizione + il costo del ramo then (se la condizione è vera) oppure il costo del ramo else (se la condizione è falsa) Attivazione di funzione: costo di tutte le istruzioni che la compongono (eventualmente tenendo conto di attivazioni al suo interno) 1) i = 1; while (i <= n) i = i+1; Esempi Assegnamento esterno 1 + Num. di test (condizione while) n+1 + Assegn. interni (corpo while) n*1 + Numero totale di passi base 2*n+2 7

2) i =1; while (i <= n) { i = i + 1; j = j*3 + 42; } Esempi Assegnamento esterno 1 + Numero di test n+1 + Assegnamenti interni n*2 + Numero totale di passi base 3*n+2 3) i = 1; while (i <= 2*n) { i = i + 1; j = j*3 + 4367; } Esempi Assegnamento esterno 1 + Numero di test 2*n+1 + Assegnamenti interni (2*n)*2 + Numero totale di passi base 6*n+2 Esempi 4) i = 1; while (i <= n) { //n+1 test for (j = 1; j < n; j ++) { //un ciclo for per ogni ripetizione while printf ( CIAO! ); } //una scrittura per ogni ripetizione for i = i + 1; } //un assegnamento per ogni while Assegnamento esterno 1 + Test while n+1 + Numero cicli while n *[ For n + Corpo for (n-1)*1+ Assegn. Interno while 1 ] Numero totale di passi base 2*n 2 +n+2 8

Esempi 5) i =1; while (i *i <= n) { i = i + 1; } Quanti test vengono eseguiti? Caso n=9: i=1 i 2 =1 <=9? SI i:=2 i 2 =4 <=9? SI i:=3 i 2 =9 <=9? SI i:=4 i 2 =16 <=9? NO FINE Si cicla 3= 9 volte, eseguendo 4= 9 + 1 test. La complessità di questo blocco è dunque: 1+ n + 1 + n = 2+ 2 n passi base (con arrotondamento all intero superiore) 9