Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMafalda Di matteo Modificato 11 anni fa
1
Analisi asintotica1 Se si considerano tutte le costanti lanalisi può divenire eccessivamente complessa In realtà interessa conoscere come varia il costo al variare della dimensione dellinput, a meno di costanti o Motivo: il costo è comunque calcolato a meno di costanti, per le ipotesi fatte circa il modello Unanalisi di questo tipo è detta asintotica Lanalisi asintotica trascura i fattori costanti Lanalisi asintotica è influenzata dalloperazione dominante di un algoritmo o L'operazione eseguita "più frequentemente" (concetto da chiarire)
2
Analisi asintotica2 Analisi asintotica /2 f(n), g(n) funzioni non negative e non decrescenti, dagli interi ai reali f(n) = O(g(n)) se esistono c > 0 reale e una costante intera n 0 >= 1 tali che f(n) = n 0 (f cresce al più come g) f(n) = Ω(g(n)) se esistono c > 0 reale e una costante intera n 0 >= 1 tali che f(n) >= c·g(n), per n >= n 0 (f cresce almeno come g) f(n) = Θ(g(n)) se f(n) = O(g(n)) e f(n) = Ω(g(n)) (f cresce come g) f(n) = o(g(n)) se lim n f(n)/g(n) = 0 f(n) = ω(g(n)) se g(n) = o(f(n))
3
Analisi asintotica3 Esempi 1. Lalgoritmo arrayMax ha costo Θ(n) 2. f(n) = 3n 2 + 10n = O(n 2 ) per c = 4 e n 0 >= 10, 3n 2 + 10n <= 4n 2 3. f(n) = n 2 /2 – 3n = Θ(n 2 ) per c 1 = 1/14, c 2 = 1/2, n 0 >= 7: c 1 n 2 <= n 2 /2 – 3n <= c 2 n 2 D.: Cosa significa O(1)?
4
Analisi asintotica4 Operazione dominante Unoperazione di un algoritmo di costo f(n) si dice dominante se, per ogni n, essa viene eseguita, nel caso peggiore di input di dimensione n, un numero di volte d(n) che soddisfa: f(n) < a·d(n) + b per opportune costanti reali a e b Ex.: istruzione if (A[i] > currentMax) nellalgoritmo arrayMax(A, n)
5
Analisi asintotica5 Analisi asintotica /3 Limiti dellapproccio "analisi asintotica di caso peggiore" o Le costanti nascoste possono essere molto grandi: un algoritmo con costo 10 50 n è lineare ma potrebbe essere poco pratico o Comportamento nel caso di istanze piccole (es. 3n contro n 2 )? o Il caso peggiore potrebbe verificarsi raramente
6
Analisi asintotica6 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; Ordina in modo non-decrescente Inserisce lelemento A[i] nella posizione corretta nel vettore ordinato A[0,…,i-1] Operazione dominante: una qualunque fra quelle eseguite nel for più interno D.: se la ricerca della posizione di A[i] in A[0,…,i-1] avvenisse con la ricerca binaria? Ex: 5 4 3 2 1 i=0 5 4 3 2 1 0 confronti i=1 4 5 3 2 1 1 confronto i=2 3 4 5 2 1 2 confronti i=3 2 3 4 5 1 3 confronti i=4 1 2 3 4 5 4 confronti Ex: 1 2 3 4 5 f(n) = n
7
Analisi asintotica7 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: 1+ 2 + … + n = O(n 2 ) qual è la dimensione dell'input??
8
Analisi asintotica8 Calcolo delle somme dei prefissi Dato un vettore di interi X[0....n-1], determinare le componenti del vettore A[0...n-1] in modo tale che A[i]=X[0]+....+X[i-1] + X[i]. 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; Algorithm prefix2(X, n) A[0]=X[0]; for (i=1; i<n; i++) A[i]=A[i-1]+X[i]; return A; O(n 2 ) O(n)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.