Complessità Computazionale

Похожие документы
Valutazione delle Prestazioni. Valutazione delle Prestazioni. Architetture dei Calcolatori (Lettere. Tempo di risposta e throughput

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web: Prof. G. Quarella prof@quarella.

Architettura hardware

Appunti sulla Macchina di Turing. Macchina di Turing

Esercizi per il corso di Algoritmi e Strutture Dati

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Algoritmi e Strutture Dati

Capitolo 2. Operazione di limite

ESEMPIO 1: eseguire il complemento a 10 di 765

I sistemi di numerazione

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

SPC e distribuzione normale con Access

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

risulta (x) = 1 se x < 0.

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Guida all uso di Java Diagrammi ER

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Strutturazione logica dei dati: i file

Slide Cerbara parte1 5. Le distribuzioni teoriche

Matematica generale CTF

Esercizi su. Funzioni

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Macchine a stati finiti G. MARSELLA UNIVERSITÀ DEL SALENTO

Reti sequenziali sincrone

Algoritmi e strutture dati. Codici di Huffman

Approccio stratificato

Capitolo 4: Ottimizzazione non lineare non vincolata parte II. E. Amaldi DEIB, Politecnico di Milano

10 - Programmare con gli Array

Le parole dell informatica: modello di calcolo, complessità e trattabilità

OSSERVAZIONI TEORICHE Lezione n. 4

Cosa dobbiamo già conoscere?

4 3 4 = 4 x x x 10 0 aaa

Elementi di informatica

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Uso di base delle funzioni in Microsoft Excel

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Più processori uguale più velocità?

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

LA MOLTIPLICAZIONE IN CLASSE SECONDA

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Un modello matematico di investimento ottimale

Le Macchine di Turing

INFORMATICA 1 L. Mezzalira

Architettura dei computer

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Gestione del processore e dei processi

Esame di INFORMATICA

Laboratorio di Informatica

9. Memoria Virtuale. 9. Memoria Virtuale. 9. Memoria Virtuale

Gestione della memoria centrale

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

Ottimizzazione Multi Obiettivo

Testi di Esercizi e Quesiti 1

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Page 1. Evoluzione. Intelligenza Artificiale. Algoritmi Genetici. Evoluzione. Evoluzione: nomenclatura. Corrispondenze natura-calcolo

MODELLISTICA DI IMPIANTI E SISTEMI 2

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi.

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

La memoria centrale (RAM)

Ricerca di un valore nell array

Programmazione dinamica

L influenza della corrente sulla barca si manifesta in due effetti principali: uno sul vento e uno sulla rotta percorsa.

Analisi dei Dati 12/13 Esercizi proposti 3 soluzioni

PREMESSA AUTOMAZIONE E FLESSIBILITA'

Esercitazione relativa al capitolo 14 I MONOPOLI E LA CONCORRENZA IMPERFETTA

Fasi di creazione di un programma

Cos è l ISC (Indicatore Sintetico del Conto Corrente) e cosa sono i Profili tipo d utilizzo

Corso di Informatica

Il concetto di valore medio in generale

COME È FATTO IL COMPUTER

C. P. U. MEMORIA CENTRALE

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

E naturale chiedersi alcune cose sulla media campionaria x n

Laurea Specialistica in Informatica

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Algoritmi e strutture dati

Indirizzamento Aperto

Indici di dispersione

Dispense di Informatica per l ITG Valadier

Gli input sono detti anche fattori di produzione: terra, capitale, lavoro, materie prime.

Brochure Internet. Versione The Keyrules Company s.r.l. Pagina 2 di 8

Indice. 1 Il monitoraggio del progetto formativo di 6

Транскрипт:

Complessità Computazionale

Analisi Algoritmi e pseudocodice Cosa significa analizzare un algoritmo Modello di calcolo Analisi del caso peggiore e del caso medio

Esempio di algoritmo in pseudocodice INSERTION SORT(A) 1 for j 2 to lenght[a] 2 do key A[j] 3 si inserisce A[j] nella sequenza ordinata A[1..j 1] 4 i j 1 5 while i>0 and A[i]>key 6 do A[i+1] A[i] 7 i i 1 8 A[i+1] key

Esempio di algoritmo in C++ INSERTION SORT(A) 1 int i,j; 2 for (j= 2; j<a.lenght;j++){ 3 //si inserisce A[j] nella sequenza ordinata A[1..j 1] 4 int key=a[j] 5 for (i=j 1; i>0 && key>a[j];i ) 6 A[i+1]=A[i]; 7 A[i+1]=key; 8 }

Spiegazione intuitiva Supponiamo di avere i primi x elementi del vettore già ordinati Consideriamo l elemento di posizione x+1 e chiamiamolo key L idea è di scorrere gli elementi già ordinati e più grandi di key e di trovare la posizione giusta di key Mentre si scorrono gli elementi si fa spazio per l'eventuale inserzione spostando a destra di una posizione tutti gli elementi che sono maggiori di key Appena si trova un elemento più piccolo di key ci si ferma Dopo l'elemento piu' piccolo e prima di uno piu' grande si posiziona key

Cosa significa analizzare un algoritmo Analizzare un algoritmo significa determinare le risorse richieste per il completamento con successo dell algoritmo stesso Le risorse di interesse possono essere quelle di: memoria tempo numero di porte di comunicazione numero di porte logiche Noi saremo interessati principalmente alla risorsa di tempo computazionale

Modello di calcolo Per poter indicare il tempo di calcolo è necessario specificare un modello di calcolo e di calcolatore Dovremo lavorare con un calcolatore astratto In questo modo possiamo confrontare fra di loro tempi di esecuzione di algoritmi senza il problema di avere macchine con architetture diverse: singolo processore piu' processori in parallelo...e processori diversi: con frequenze di clock diverse con set di istruzioni diverse con gerarchie di memoria diverse (cache di livello 1,2, RAM, memoria secondaria) e di diverse dimensioni

Il nostro modello di calcolo Noi faremo riferimento al modello di calcatore RAM (Random Access Machine) costituito da un monoprocessore con accesso casuale ad un unico tipo di memoria di dimensioni illimitate In questo modello ogni istruzione è eseguita in successione (ovvero senza concorrenza) Ogni istruzione viene eseguita in tempo costante (anche se in generale diverso da istruzione a istruzione) Una cella di memoria puo' contenere un dato numerico di qualsiasi valore E' possibile usare il concetto di indirizzamento indiretto (puntatori)

Dimensione dell input Per poter comparare l efficienza di due algoritmi in modo generale si definisce una nozione di dimensione dell input e si compara il tempo di calcolo dei due algoritmi in relazione ad esso Ad esempio per un algoritmo di ordinamento è ragionevole aspettarsi che al crescere del numero di dati da ordinare cresca il tempo necessario per completare l algoritmo In questo caso la dimensione dell input coincide con la numerosità dei dati in ingresso

Dimensione dell input Nota: non sempre la dimensione dell input coincide con il numero di elementi in ingresso Ex: un algoritmo di moltiplicazione fra due numeri naturali ha come dimensione il numero di bit necessari per rappresentare la codifica binaria dei numeri Nota: non sempre la dimensione dell input è rappresentabile con una sola quantità Ex: un algoritmo che opera su grafi ha come dimensione il numero di nodi e di archi del grafo

Analisi del tempo computazionale Lo scopo dell analisi del tempo computazionale è di dare una descrizione sintetica del tempo di calcolo dell algoritmo al variare della dimensione dell ingresso Inizieremo con un calcolo esatto del tempo Successivamente utilizzeremo un formalismo più sintetico e compatto che fa uso della notazione asintotica (ordini di grandezza)

Analisi dell'insertion Sort Sia n length[a] N Costo INSERTION SORT(A) n c1 1 for j 2 to lenght[a] n 1 c2 2 do key A[j] n 1 0 3 si inserisce A[j]... n 1 c4 4 i j 1 Σ j=2..n t j c5 5 while i>0 e A[i]>key Σ j=2..n (t j 1) c6 6 do A[i+1] A[i] Σ j=2..n (t j 1) c7 7 i i 1 n 1 c8 8 A[i+1] key Dove t j è il numero di volte che l istruzione while è eseguita per un dato valore di j Il tempo complessivo è dato da: T(n)=c1.n + c2.(n-1)+c4.(n-1)+c5.(σ j=2..n t j )+c6.(σ j=2..n (t j -1)) +c7.(σ j=2..n (t j -1))+c8.(n-1)

Caso migliore/peggiore Anche a parità di numerosità dei dati in ingresso il tempo di esecuzione può dipendere da qualche caratteristica complessiva sui dati, ad esempio da come sono ordinati inizialmente Si distinguono pertanto i casi migliore e peggiore a seconda che i dati abbiano (a parità di numerosità) le caratteristiche che rendono minimo o massimo il tempo di calcolo del dato algoritmo Nell esempio dell insertion sort il caso migliore è che i dati siano già ordinati il caso peggiore è che siano ordinati in senso inverso

Analisi del caso migliore Per ogni j=2,3,,n in 5) si ha che A[i]<key quando i ha il suo valore iniziale di j-1 Quindi vale t j =1 per ogni j=2,3,,n Il tempo di esecuzione diviene quindi: T(n)=c1.n+c2(n-1)+c4.(n-1)+c5.(n-1)+c8.(n-1) ovvero T(n)=(c1+c2+c4+c5+c8).n -(c2+c4+c5+c8) ovvero T(n)=a.n+b Diciamo che T(n) è una funzione lineare di n

Analisi del caso peggiore Se l array è ordinato in ordine decrescente allora si deve confrontare l elemento key=a[j] con tutti gli elementi precedenti A[j-1], A[j-2],,A[1] In questo caso si ha che t j =j per j=2,3,4,,n Si ha che: Σ j=2..n j = n(n+1)/2-1 Σ j=2..n (j-1) = n(n-1)/2 Il tempo di esecuzione diviene quindi: T(n)=c1.n+c2(n-1)+c4.(n-1) +c5.(n(n+1)/2-1) +c6.(n(n-1)/2 ) +c7.(n(n-1)/2 ) +c8.(n-1) T(n)=(c5/2+c6/2+c7/2).n 2 +(c1+c2+c4+c5/2-c672-c7/2+c8).n-(c2+c4+c5+c8) T(n)=a.n 2 +b.n+c Diciamo che T(n) è una funzione quadratica di n

Analisi del caso medio Se si assume che tutte le sequenze di una data numerosità siano equiprobabili allora mediamente per ogni elemento key=a[j] vi saranno metà elementi nei restanti A[1,..,j-1] che sono più piccoli e metà che sono più grandi Di conseguenza in media t j =j/2 per j=2,3,4,,n Si computa T(n) come nel caso peggiore Il tempo di calcolo risulta di nuovo quadratico in n a meno di costanti moltiplicative

Quale caso analizzare? Come è accaduto anche nel caso appena visto, spesso il caso medio è dello stesso ordine di grandezza del caso peggiore Inoltre la conoscenza delle prestazioni nel caso peggiore fornisce una limitazione superiore al tempo di calcolo, cioè siamo sicuri che mai per alcuna configurazione dell ingresso l algoritmo impiegherà più tempo Infine per alcune operazioni il caso peggiore si verifica abbastanza frequentemente (ad esempio il caso di ricerca con insuccesso) Pertanto si analizzerà spesso solo il caso peggiore

Ordine di grandezza Per facilitare l analisi abbiamo fatto alcune astrazioni Si sono utilizzate delle costanti c i per rappresentare i costi ignoti delle istruzioni Si è osservato che questi costi forniscono più dettagli del necessario, infatti abbiamo ricavato che il tempo di calcolo è nel caso peggiore T(n)=a.n 2 +b.n+c ignorando così anche i costi astratti c i Si può fare una ulteriore astrazione considerando solo l ordine di grandezza del tempo di esecuzione perché per input di grandi dimensioni è solo il termine principale che conta e dire che T(n)=Θ(n)

Un algoritmo è tecnologia Si consideri il seguente caso: si abbia un personal computer capace di eseguire 10 6 operazioni al secondo ed un supercomputer 100 volte più veloce si abbia un codice di insertion sort che una volta ottimizzato sia in grado di ordinare un vettore di n numeri con 2n 2 operazioni si abbia un altro algoritmo (mergesort) in grado di fare la stessa cosa con 50 n log n operazioni si esegua l insertion sort su un milione di numeri sul supercomputer e il mergsort sul personal computer il risultato è che il supercomputer impiega: 2(10 6 ) 2 /10 8 = 5.56 ore mentre il personal computer impiega: 50 10 6 log 10 6 /10 6 = 16.67 minuti

Efficienza asintotica L ordine di grandezza del tempo di esecuzione di un algoritmo caratterizza in modo sintetico l efficienza di un algoritmo e consente di confrontare fra loro algoritmi diversi per la soluzione del medesimo problema Quando si considerano input sufficientemente grandi si sta studiando l efficienza asintotica dell algoritmo Ciò che interessa è la crescita del tempo di esecuzione al tendere all infinito della dimensione dell input In genere un algoritmo asintoticamente migliore di un altro lo è in tutti i casi (a parte input molto piccoli)