Testo di riferimento. Problema delle 12 monete. Algoritmi. Complessità degli algoritmi (cenni) Dispense del Corso di Algoritmi e Strutture Dati

Documenti analoghi
Complessità degli algoritmi (cenni)

complessità degli algoritmi

complessità computazionale

Informatica e Laboratorio di Programmazione complessità degli algoritmi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione

Prof. Pagani Corrado ALGORITMI E COMPLESSITÀ COMPUTAZIONALE

sono le risorse di calcolo necessarie per la sua l esecuzione di un metodo sono tipicamente:

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Appendice B. Algoritmi e Complessità

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Algoritmi e Strutture di Dati

COMPLESSITÀ COMPUTAZIONALE. Fondamenti di Informatica A - Massimo Bertozzi

Tecniche di analisi degli algoritmi

Tecniche di analisi degli algoritmi

COMPLESSITA COMPUTAZIONALE. Esercitazioni Tutor: Francesca Piersigilli

Tecniche di analisi degli algoritmi

Fondamenti di Informatica II 9. Complessità computazionale

Algoritmi e Strutture Dati

Fondamenti di Informatica

Di cosa parliamo oggi?

Teoria della complessità

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

Complessità computazionale

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

Tempo e spazio di calcolo

Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.

Algoritmi e Strutture Dati

Informatica II. Capitolo 2 Analisi di algoritmi. Valutare la complessità in tempo. Complessità in tempo: cosa serve?

algoritmi e strutture di dati

Notazioni asintotiche. Martedì 30 settembre 2014

Complessità computazionale

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1

Tempo e spazio di calcolo

Problemi intrattabili

Cenni sulla complessità computazionale

Algoritmi e Strutture Dati

Algoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti. INTERMEZZO 1: una favola araba

CORSO DI PROGRAMMAZIONE

Ad ogni problema computazionale possiamo associare una misura della sua complessità.

Automi e Linguaggi Formali

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet

Algoritmi e loro proprietà. Proprietà formali degli Algoritmi Efficienza rispetto al tempo Efficienza rispetto allo spazio

Algoritmi e strutture dati. Analisi di algoritmi Funzioni di costo, notazione asintotica

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

UD 4.b: Trattabilità e Intrattabilità INTRODUZIONE

Cos è l informatica? Un esempio di algoritmo. Che cos è un algoritmo? Algoritmi e loro proprietà. non ambigue ed effettivamente calcolabili

Algoritmi, Strutture Dati e Programmi. UD 4.b: Trattabilità e Intrattabilità

Analisi di algoritmi e di problemi

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

LABORATORIO DI COMPLESSITÀ COMPUTAZIONALE LEZIONE 3

Algoritmi e Strutture Dati

Studio degli algoritmi

Nell' Informatica è importante porsi questa domanda: Questo è l'argomento che viene trattato nella Complessità Computazionale, e si articola in due

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Problemi intrattabili, classi P e NP. Problemi intrattabili, classi P e NP

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

Complessità degli algoritmi. Obiettivi: Calcolare (valutare) la complessità di un algoritmo Confrontare algoritmi risolutivi del medesimo problema

Macchina RAM. Modelli di calcolo e metodologie di analisi. Linguaggio di una macchina RAM. Algoritmi e Strutture Dati. Istruzioni.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Problemi, istanze, soluzioni

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi

Corso di TECNOLOGIE INFORMATICHE A.S. 2014/2015. Modulo: Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati

Definizioni di base. Algoritmo: procedura computazionale ben definita che prende valori in input e produce valori in output.

Algoritmi e Strutture Dati. Luciano Gualà

Crescita funzioni. 20 novembre Come possiamo confrontare le funzioni di costo che abbiamo ottenuto finora?

LA COMPLESSITA DEGLI ALGORITMI

Algoritmi (e Complessità)

Ordinamento di una lista: bubble-sort

Laboratorio Algoritmi 2016

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova

Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 3 Introduzione alla Teoria della Complessita

Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi

Corso di Informatica A.A

Algoritmi e Strutture dati Introduzione al corso. Dr Maria Federico

FONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis

Calcolare x n = x x x (n volte)

Teoria della Complessità Computazionale

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

Algoritmi e Complessità

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

Laboratorio di Calcolo di Aerodinamica: II Lezione

Algoritmi e Strutture Dati

Elementi di Informatica A. A. 2016/2017

Problemi, algoritmi, calcolatore

Nozioni di base (II Parte)

FONDAMENTI DI INFORMATICA

Algoritmi e Strutture Dati. Luciano Gualà

FONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis Tutor: prof. Venturino Taggi

Algoritmi e Strutture Dati. Luciano Gualà

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Complessità. Ricorda: Problema P decidibile Linguaggio L P decidibile Taglia input x x. Esempio: G è un grafo connesso? { G G è un grafo connesso}

Transcript:

Testo di riferimento Complessità degli algoritmi (cenni) CORDA Informatica A. Ferrari Dispense del Corso di Algoritmi e Strutture Dati Marco Bernardo - Edoardo Bontà Università degli Studi di Urbino Carlo Bo Facoltà di Scienze e Tecnologie Corso di Laurea in Informatica Applicata Algoritmi Problema delle 12 monete Matematico persiano Muhammad al-khwarizmi (IX secolo) Un algoritmo è una sequenza finita di passi interpretabili da un esecutore L esecuzione di un algoritmo potrebbe richiedere un tempo non necessariamente finito Un algoritmo non deve necessariamente essere espresso in un linguaggio di programmazione L algoritmo si trova ad un livello di astrazione più alto rispetto ad ogni programma che lo implementa Abbiamo 12 monete che sembrano identiche ma non lo sono. Una di esse ha un peso diverso dalle altre ma non sappiamo qual è e neppure se è più pesante o più leggera delle altre. Dobbiamo scoprire qual è la moneta di peso diverso, con 3 pesate comparative utilizzando una bilancia a due piatti. Algoritmo delle 12 monete Classificazione degli algoritmi Algoritmi sequenziali: eseguono un solo passo alla volta Algoritmi paralleli: possono eseguire più passi per volta Algoritmi deterministici: ad ogni punto di scelta, intraprendono una sola via determinata dalla valutazione di un espressione Algoritmi probabilistici: ad ogni punto di scelta, intraprendono una sola via determinata a caso Algoritmi non deterministici: ad ogni punto di scelta, esplorano tutte le vie contemporaneamente 1

Problemi e algoritmi Complessità di un algoritmo rispetto all'uso di risorse Dato un problema, possono esistere più algoritmi che sono corretti rispetto ad esso e un numero illimitato di algoritmi errati L L algoritmo viene valutato in base alle risorse utilizzate durante la sua esecuzione: Tempo di calcolo Spazio di memoria (risorsa riusabile) Banda trasmissiva (risorsa riusabile) Gli algoritmi corretti possono essere confrontati rispetto alla loro complessità o efficienza computazionale Domanda Problemi decidibili e indecidibili Esiste sempre un algoritmo risolutivo di un problema? Problema decidibile se esiste un algoritmo che produce la soluzione in tempo finito per ogni istanza dei dati di ingresso del problema Problema indecidibile se non esiste nessun algoritmo che produce la soluzione in tempo finito per ogni istanza dei dati di ingresso del problema Problemi trattabili e intrattabili Complessità temporale Problemi intrattabili non sono risolvibili in tempo polinomiale nemmeno da un algoritmo non deterministico Problemi trattabili Si dividono in due categorie P - insieme dei problemi risolvibili in tempo polinomiale da un algoritmo deterministico NP - insieme dei problemi risolvibili in tempo polinomiale da un algoritmo non deterministico Confronto fra algoritmi che risolvono lo stesso problema Si valuta il tempo di esecuzione (in numero di passi) in modo indipendente dalla tecnologia dell esecutore Il tempo è espresso in funzione della dimensione dei dati in ingresso T(n) Per confrontare le funzioni tempo ottenute per i vari algoritmi si considerano le funzioni asintotiche 2

Funzione asintotica Casi Data la funzione polinomiale f(n) che rappresenta il tempo di esecuzione dell algoritmo al variare della dimensione n dei dati di input La funzione asintotica ignora le costanti moltiplicative e i termini non dominanti al crescere di n Es f(n) = 3x 4 +6x 2 + 10 funzione asintotica = x 4 Il tempo di esecuzione può essere calcolato in caso pessimo dati d ingresso che massimizzano il tempo di esecuzione ottimo dati d ingresso che minimizzano il tempo di esecuzione medio somma dei tempi pesata in base alla loro probabilità Classi di complessità asintotica Algoritmi non ricorsivi O(1) complessità costante O(log n) complessità logaritmica O(n) complessità lineare Calcolo della complessità Vengono in pratica contate le operazioni eseguite O(n * log n) complessità pseudolineare O(n 2 ) complessità quadratica O(n k ) complessità polinomiale O(α n ) complessità esponenziale Calcolo della complessità di algoritmi non ricorsivi Esempio: fattoriale Il tempo di esecuzione di un istruzione di assegnamento che non contenga chiamate a funzioni è 1 Il tempo di esecuzione di una chiamata ad una funzione è 1 + il tempo di esecuzione della funzione Il tempo di esecuzione di un istruzione di selezione è il tempo di valutazione dell espressione + il tempo massimo fra il tempo di esecuzione del ramo then e del ramo else Il tempo di esecuzione di un istruzione di ciclo è dato dal tempo di valutazione della condizione + il tempo di esecuzione del corpo del ciclo moltiplicato per il numero di volte in cui questo viene eseguito int fattoriale(int n) { int fatt, i; fatt = 1; for (i = 2; i <= n; i++) fatt = fatt * i; return(fatt); } T(n) = 1 + (n-1)(1+1+1)+1 = 3n 1 = O(n) 3

Esercizio - 1 Esercizio 2 Scrivere l algoritmo di ricerca del valore minimo in un array di n elementi Calcolare la complessità computazionale Definire la classe di complessità asintotica Scrivere l algoritmo che ricerca il valore x in un array di n elementi e ritorna l indice della prima occorrenza dell elemento o -1 se non è presente Calcolare la complessità nel caso ottimo pessimo medio Valutazione con un parametro Complessità computazionale Confrontare algoritmi corretti che risolvono lo stesso problema, allo scopo di scegliere quello migliore in relazione a uno o più parametri di valutazione Se si ha a disposizione un solo parametro per valutare un algoritmo, per esempio il tempo d esecuzione, è semplice la scelta: il più veloce. Ogni altra caratteristica non viene considerata. Valutazione con più parametri Durata delle istruzioni Nel caso di due parametri normalmente si considera il tempo. numero di passi (istruzioni) che occorrono per produrre il risultato finale. Passi e non secondi o millisecondi perché il tempo varia al variare delle potenzialità del calcolatore. lo spazio occupazione di memoria Le istruzioni non hanno tutte lo stesso tempo di esecuzione. Il tempo di esecuzione di un algoritmo è una somma pesata delle istruzioni: T totale =(i 0 *t 0 *n 0 )+(i 1 *t 1 *n 1 )+ +(i m *t m *n m ) i j è l istruzione, t j è il costo dell istruzione, il tempo di esecuzione n j è il numero di volte che viene eseguita. 4

Efficienza Misura dell efficienza L approssimazione di una funzione con una funzione asintotica è molto utile per semplificare i calcoli La notazione asintotica di una funzione descrive il comportamento in modo semplificato, ignorando dettagli della formula Esempio: per valori sufficientemente alti di x il comportamento della funzione f(x) = x 2 3x + 1 è approssimabile con la funzione f(x) = x 2 Per un algoritmo con un input di dimensione n, possiamo definirne l efficienza dicendo che l algoritmo per calcolare il risultato finale impiega al più f(n) passi l algoritmo ha complessità f(n) Terminologia (1) Terminologia (2) O (O grande) equivale al simbolo <= Corrisponde a al più come la complessità dell algoritmo è O(f(n)) equivale a il tempo d esecuzione dell algoritmo è minore o uguale a f(n) o (o piccolo) equivale al simbolo < la complessità dell algoritmo è o(f(n)) equivale a il tempo d esecuzione dell algoritmo è strettamente minore a f(n) Θ (teta) corrispondente al simbolo = la complessità dell algoritmo è Θ(f(n)) equivale a il tempo d esecuzione dell algoritmo è uguale a f(n) Ω (omega grande) equivale al simbolo >= la complessità dell algoritmo è Ω(f(n)) equivale a dire il tempo d esecuzione dell algoritmo è maggiore o guale a f(n) ω (omega piccolo) equivale al simbolo > la complessità dell algoritmo è ω(f(n)) equivale a dire il tempo d esecuzione dell algoritmo è strettamente maggiore di f(n) Complessità computazionale temporale Complessità La complessità computazionale temporale di un algoritmo è la quantità di tempo necessaria per produrre il risultato finale La complessità si esprime sotto forma di una funzione matematica che mette in relazione il tempo di esecuzione di un algoritmo con la dimensione dei dati di input Il caso peggiore per un algoritmo è il caso in cui questo, per generare il risultato, impiega più tempo In molti casi la complessità è legata al tipo o al numero dei dati di input Ad esempio la ricerca di un valore in un vettore ordinato dipende dalla dimensione del vettore La complessità può dipendere anche dalla disposizione e dal tipo di dati Sempre nell algoritmo di ricerca in un vettore ordinato avremo il caso: Ottimo Pessimo Medio 5

Tipi di complessità lineare logaritmica quadratica esponenziale fattoriale Lineare l algoritmo ha complessità O(n) Esempio: algoritmo di ricerca sequenziale di un elemento in un array Logaritmica Quadratica Esempio ricerca dicotomica in un array La ricerca dicotomica ha complessità O(log 2 (n)) Un esempio è l algoritmo di ordinamento bubblesort eseguito su un array di elementi l algoritmo ha complessità O(n 2 ) Esponenziale l algoritmo della Torre di Hanoi ha complessità Ω(2 n ), La Torre di Hanoi è un rompicapo matematico composto da tre paletti e un certo numero di dischi di grandezza decrescente, che possono essere infilati in uno qualsiasi dei paletti. Il gioco inizia con tutti i dischi incolonnati su un paletto in ordine decrescente, in modo da formare un cono. Lo scopo è portare tutti dischi sull ultimo paletto, potendo spostare solo un disco alla volta e potendo mettere un disco solo su uno più grande, mai su uno più piccolo Torre di Hanoi 6

Fa2oriale logaritmica < lineare < quadratica < esponenziale < fa2oriale E quella che cresce più velocemente rispetto a tutte le precedenti. Esempio: algoritmo che calcola tutti gli anagrammi di una parola di n lettere distinte. la complessità di un tale algoritmo è Θ(n!) Confronto 7