1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Elementi di complessità
INFORMATICA Algoritmi fondamentali
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Analisi della complessità degli algoritmi
Analisi della complessità degli algoritmi
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Informatica di base A.A. 2003/2004 Algoritmi e programmi
File.
Algoritmo di Ford-Fulkerson
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati Introduzione. Gli argomenti di oggi Analisi della bontà degli algoritmi Modello Computazionale Tempo di esecuzione degli algoritmi.
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
1 Informazioni generali r Stefano Leonardi m Tel.: m URL: / r Ricevimento:
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Analisi asintotica1 Se si considerano tutte le costanti lanalisi può divenire eccessivamente complessa In realtà interessa conoscere come varia il costo.
1 Informazioni generali r Luca Becchetti m Tel.: m URL: r Ricevimento: m Latina:
Introduzione1 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa.
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
Strutture di controllo in C -- Flow Chart --
Fondamenti di Informatica Algoritmi
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Elementi di Informatica di base
Algoritmi e Strutture dati Introduzione al corso
INFORMATICA MATTEO CRISTANI.
CODIFICA Da flow-chart a C++.
Radix-Sort(A,d) // A[i] = cd...c2c1
Algoritmi e Strutture Dati
23 aprile 2002 Algoritmi e strutture dati1 Informazioni generali Fabrizio d'Amore o Tel.: o o URL:
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
COMUNICAZIONE ONLINE, RETI E VIRTUALITA MATTEO CRISTANI.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Informatica 3 V anno.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi Complessità e Trasportabilità Lezione n°3.
Transcript della presentazione:

1 2. Analisi degli Algoritmi

2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa in passi che, eseguiti in sequenza, consentono di eseguire un compito in tempo finito Esempio: Max. di un vettore di n elementi Algorithm arrayMax(A, n) currentMax = A[0]; for (i=0; i < n; i++) if (A[i] > currentMax) currentMax = A[i]; return currentMax;

3 Nel mondo reale Gli algoritmi sono al cuore di innumerevoli applicazioni informatiche Esempi Routing in Internet DBMS Analisi e classificazione di documenti/Motori di ricerca Ottimizzazione di progetti Etc. Etc. Etc.

4 Esempio: Routing in Internet Astrazione usando grafi: I nodi rappresentano router Gli archi descrivono i link fisici Costi sugli archi (link) : ritardo, livello di congestione Obiettivo: determinare buon cammino sorg.-dest. Protocollo di Routing A E D CB F Cammino buono: Di solito significa cammino a costo minimo Possibili def. alternative

5 Esempio: Accesso a basi di dati Obiettivo: rispondere rapidamente. Interrogazione Data base... Interrogazione

6 Qualità di algoritmi e strutture dati Efficienza Tempo di esecuzione Spazio (quantità di memoria) I due aspetti sono interdipendenti

7 Tempo di esecuzione In generale aumenta con la dimensione dellInput Per lo stesso valore di n può variare con il particolare input considerato (es. Vettore da ordinare) Dipende dalla piattaforma Hw/Sw In generale: può essere poco rappresentativo

8 Come misurare lefficienza? Perché B gira più velocemente ? Possiamo affermare che B sia migliore di A? Programma AProblemaProgramma B 10 ms 1 ms Dati

9 Misura dellefficienza - obiettivi Indipendenza dallimplementazione Generale (valida per ogni input, di qualsiasi dimensione) Misura indipendente dalla piattaforma Hw/Sw

10 Modello di costo RAM Random Access Machine Assegnazione Op. aritmetiche Test Lettura/Scrittura A = 10; (costo 1) A = B*C + D – 7; (costo 4) A == B (costo 1) System.out.println(A); (Costo 1) Macchina che esegue le istruzioni in sequenza. Insieme di operazioni primitive a costo unitario:

11 Modello di costo/2 Costo di operazioni complesse: Ciclo: somma costo test di fine ciclo e costo corpo del ciclo if…then…else: costo test più costo blocco istruzioni che segue then o else (a seconda del caso) Attivazione di un metodo: somma dei costi di tutte le istruzioni presenti nel metodo Costo: somma di tutti i costi

12 Esempio Nel primo caso (vett. di 3 elementi) si ha costo 1 (ass.)+1 (ass. nel for) + 6 (test e incr. nel for) + 1 (test finale for) + 3 (test if) + 1 (istruz. return) = 13 Nel secondo caso si ha 1 (ass.) + 1 (ass. nel for) + 10 (test e incr. nel for) + 1 (test finale for) + 5 (test if) + 1 (istr. ass. nellif) + 1 (istruz. return) = 20 AlgorithmarrayMax(A, n) currentMax=A[0]; for (i=0; i<n; i++) if (A[i]>currentMax) currentMax=A[i]; return currentMax; n=3 n=5

13 Perché il modello è accettabile? A=A+B*C; MUL B,C ADD A,B A B C N finito (es. 32 o 64 ) Ogni istruzione corrisponde a una sequenza finita di istruzioni macchina Ogni variabile occupa una quantità finita di memoria e quindi i tempi di accesso a due variabili sono legati da una costante

14 Vantaggi e svantaggi Vantaggi: prescinde dalla piattaforma Hw/Sw e dal linguaggio di programmazione Svantaggi: lindicazione che si ottiene è qualitativa

15 Quale input considerare? La misura deve dipendere dalla dimensione dellinput (n nel nostro esempio) ma non dal particolare input considerato Possibile alternative: Analisi del caso peggiore: si considera il costo di esecuzione nel caso peggiore Analisi del caso medio: si considera il costo medio dellalgoritmo rispetto ad una distribuzione dellinput (richiede la conoscenza della distribuzione) In ogni caso occorre definire la dimensione dellinput

16 Dimensione dellinput In generale: No. bit necessari a rappresentare linput Esempio (calcolo del Max. in un array di n interi) n interi finiti (< MAXINT) log(MAXINT) bit per rappresentare ogni valore. Poiché MAXINT è una costante in pratica, il numero di bit necessari a rappresentare un intero è costante (es. 32) Quindi: dimensione input è proporzionale a n A volte le cose possono non essere così ovvie (si pensi al problema di indovinare un numero proposto nellultima slide)

17 AlgorithmarrayMax(A, n) currentMax=A[0]; for (i=0; i<n; i++) if (A[i]>currentMax) currentMax=A[i]; return currentMax; Analisi nel caso peggiore (esempio) Nel caso peggiore larray e ordinato in senso crescente In questa ipotesi listruzione currentMax=A[i]; è eseguita n-1 volte. Il costo complessivo dellalgoritmo è allora 1(ass)+1(ass for)+2n(test ed increm for)+2(n-1)(test e ass. if)+1(test finale for) +1(return)=4n

18 Analisi asintotica Se si considerano tutte le costanti lanalisi può divenire eccessivamente complessa Interessa conoscere il costo al variare della dimensione dellinput, a meno di costanti Motivo: il costo è comunque calcolato a meno di costanti, per le ipotesi fatte circa il modello Unanalisi di questo tipo è detta asintotica Lanalisi asintotica è influenzata dalloperazione dominante di un algoritmo

19 Istruzione dominante Un operazione o istruzione si dice dominante se il numero d(n) di volte che essa è eseguita nel caso peggiore di input di dimensione n soddisfa: f(n)<=a d(n) + b, dove f(n) è la complessità dellalgoritmo nel caso peggiore ed a e b sono costanti opportune Es.: istruzione if (A[i]>currentMax) in AlgorithmarrayMax(A, n)

20 Analisi di Insertion Sort Algorithm insertionSort(A, n) for (i=0; i<n; i++) { tmp=A[i]; for (j=i; j>0 && tmp<A[j-1]; j--) A[j]=A[j-1]; A[j] = tmp; } return A; Inserisce lelemento A[i] nella posizione corretta nel vettore ordinato A[0,…,i-1] Ex: i= confronti i= confronto i= confronti i= confronti i= confronti Ex: f(n)= n

21 Esempi class esercizio { public void Ex1(int n) { int a, i; for (i=0; i<n;i++) a=i; } public void Ex2(int n) { int a, i; for (i=0; i<n*n;i++) a=i; } public void Ex3(int n) { int a, i, j; for (i=0; i<n;i++) for (j=0; j<=i;j++) a=i; } Valutare la complessità dei tre metodi Complessità di Ex3: n=O(n 2 )

22 Calcolo delle somme dei prefissi Dato un vettore di interi X[0....n-1], calcolare le componenti del vettore A[0...n-1] tale che A[i]=X[0]+....+X[i-1]. Due algoritmi: Algorithm prefix1(X, n) for (i=0; i<n; i++) { A[i]=0; for (j=0; j<=i; j++) A[i]=A[i]+X[j]; } return A; O(n 2 ) Algorithm prefix2(X, n) A[0]=X[0]; for (i=1; i<n; i++) A[i]=A[i-1]+X[i]; return A; r O(n)

23 Metodo Divide et Impera Il problema è risolto ricorsivamente attraverso la sua scomposizione in problemi di taglia inferiore Divide: Problema suddiviso in un numero di sottoproblemi di taglia inferiore Impera: Sottoproblemi risolti ricorsivamente o direttamente se di dimensione piccola a sufficienza Combina: Le soluzioni dei sottoproblemi sono combinate per ottenere la soluzione al problema originale

24 Merge Sort A[0...n] Si suppone n pari per semplicità A[0...n/2-1] A[n/2...n-1] Suddividi A in due sottovettori di dim. n/2 A[0...n/2-1] A[n/2...n-1] MergeSort A[0...n/2-1] MergeSort A[n/2...n-1] Merge A ordinato

25 Merge Sort/2 void mergesort(int[] A, int first, int last) { if (first < last) { int mid = (first + last) / 2; mergesort(A, first, mid); mergesort(A, mid+1, last); merge(A, first, last); }

26 Merge Sort A[0...n] /3 Divide: divide gli n elementi da ordinare in due sottosequenze da n/2 elementi. Costo: O(n) Impera: ordina ricorsivamente usando il merge sort le due sottosequenze. Costo: 2f(n/2) Combina: fonde le due sottosequenze ordinate. Costo: O(n) La ricorsione termina quando si hanno solo due elementi da ordinare. Costo:O(1) Costo dellalgoritmo Merge Sort:

27 Larray [ ] ordinato con mergesort

28 Merge void merge(int[] data, int first, int last) { int mid = (first + last) / 2; int i1 = 0, i2 = first, i3 = mid + 1; while (i2 <= mid && i3 <= last) if (data[i2] <data[i3]) temp[i1++] = data[i2++]; else temp[i1++] = data[i3++]; while (i2 <= mid) temp[i1++] = data[i2++]; while (i3 <= last) temp[i1++] = data[i3++]; for (i1 = 0, i2 = first; i2 <= last; data[i2++] = temp[i1++]); }

29 Equazioni di ricorrenza Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di ricorrenza. Ex: MergeSort: Semplificazioni: Argomenti non interi. Condizioni al contorno: per n piccolo

30 Soluzione di equazioni di ricorrenza Metodo per sostituzione. Si tenta una soluzione g(n) e si verifica se soddisfa lequazione di ricorsione. Dimostrazione per induzione. Base dellinduzione: f(1)g(1) Ipotesi induttiva: f(n/2) g(n/2) Passo induttivo: f(n) g(n) Per Merge Sort:

31 Soluzione equazioni di ricorrenza per Merge Sort Base: Ipotesi induttiva: Passo induttivo:

32 Esercizi/1 1. Mostrare che la soluzione di f(n)=f(n/2)+f(n/2)+1 è O(n) 2. Mostrare che la soluzione di f(n)=2f(n/2+10)+n è O(nlog n)

33 f(n)=f(n/2)+f(n/2)+1 Ipotesi: f(n)<=g(n)=cn f(n/2)+f(n/2)+1<=cn/2 + cn/2 +1 = cn +1 NO! Ipotesi: f(n)<=g(n)=cn-b f(n/2)+f(n/2)+1<=cn/2-b + cn/2-b +1 = cn -2b+1 b>=1

34 f(n)=2f(n/2+10)+n Rinominiamo n+20= m. Quindi: f(m)=2f(m/2)+m-20 Ipotesi: f(m)<=g(m)=cmlogm f(m)<=2c (m/2) (log m-1)+m-20<=cm log m se c>=1 Quindi: f(n)<=g(n)=(n+20)log(n+20)

35 Esercizi/2 Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n)

36 Esercizi/3 Si consideri il problema della ricerca in un vettore di interi: dato il vettore A[1..n] ed un intero k, si vuole stabilire se k sia tra gli elementi di A o meno Considerato il classico algoritmo basato sulla ricerca binaria, si mostri che esso ha complessità O(log n)

37 Esercizi/4 Si consideri il problema di indovinare un numero intero nel numero minimo di tentativi: ad ogni tentativo, lalgoritmo propone un valore ad un oracolo, che conosce il numero da indovinare. Loracolo risponde dicendo se il numero proposto sia maggiore, minore o uguale a quello da indovinare (nell ultimo caso il gioco termina). Si proponga un algoritmo efficiente e se ne esprima la complessità temporale in funzione del generico numero N da indovinare