


















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Complessità computazionale per liceo scientifico o informatico
Tipologia: Appunti
1 / 26
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!



















Esercitazioni
Tutor: Francesca Piersigilli
COMPLESSITA’ TEMPORALE
La complessità temporale può essere vista come somma di duecomponenti:•tempo di compilazione•tempo di esecuzioneL’unica quantità che interessa realmente è il tempo di esecuzione: ¾
richiede una profonda conoscenza del compilatore; ¾
è strettamente dipendente dalle ottimizzazioni effettuate; ¾
viene influenzato dall’architettura su cui il programma viene eseguito.
Ipotesi semplificativa
Il tempo impiegato è proporzionale al numero di operazionieseguite (ciascuna a costo unitario), non ci si riferisce, quindi, aduna specifica macchina, ma ci si basa su un modello astratto dicalcolatore.Occorre svincolarsi da una particolare configurazione dei dati iningresso, ad esempio basandosi sulla configurazione cherappresenta il caso peggiore, ovvero quello che comporta ilmaggior costo computazionale.Il tempo impiegato per risolvere un problema dipende siadall'algoritmo utilizzato che dalla
"dimensione" dei dati
a cui si
applica l'algoritmo. Quindi nell'ipotesi semplificativa, il tempodeve essere una funzione della dimensione dell'input.
Moltiplicazione di due matrici quadrate nxn di interi:per calcolare C[i,j] si eseguono 2n letture, n moltiplicazioni, n-1 addizionied 1 scritturan = 3 C = A x B
c[1,1] = a[1,1]b[1,1]+ a[1,2]b[2,1]+ a[1,3]*b[3,1]Per calcolare un generico c[i,j] si eseguono, quindi 4n
2n
3 +n
3 +n
2 (n-1)+n
2
2
2
3
O(1) È posseduta dagli algoritmi che eseguono sempre lo stessonumero di operazioni indipendentemente dalla dimensionedei dati.Es: inserimento o estrazione di un elemento dalla testa diuna lista concatenata, ecc.
O(kn), k<1 Es: Ricerca binaria, o logaritmica, ecc.
k
O(n
k)
, con k>=
Es: Bubblesort (O(n
2 )), moltiplicazione di due 2 matrici (O(n
3 )), ecc.
Tutte le classi di complessità elencate precedentemente vengonogenericamente considerate come polinomiali. Esse sonocaratterizzate dal fatto che la dimensione
n
non compare mai come
esponente in alcun modo. Quando ciò avviene si parla invece dicomplessità esponenziale….
O(k
n)
cioè esponenziale.
Es: Torre di Hanoi O(
n^ )
¾
Possono richiedere tempi di esecuzione grandissimi anche per
n
piccoli ed
indipendentemente dalla velocità dell'elaboratore. ¾
Esistono molti problemi per i quali non si conoscono ancora algoritmi non esponenziali (problemi intrattabili), come il problema del commesso viaggiatore. ¾
Un problema è computazionalmente
trattabile
se esiste un algoritmo
efficiente
che lo risolve; altrimenti il problema è computazionalmente
intrattabile
.
¾
Un algoritmo si dice
efficiente
se il suo tempo di esecuzione è limitato
superiormente da una funzione polinomiale (funzione limitata superiormente da n
k
per un opportuno fissato intero k).
2
timeA2(n) = n
2
Per n>=5, timeA2(n) < timeA1(n). La complessità di A2 è minoreper ingressi con dimensione maggiore di 5.NB: non è detto che quel che vale per n "grande" valga anche per n"piccolo". Ma ci interessa che un algoritmo sia efficiente per ngrande (se n "piccolo", c'è poca differenza, e comunque ognialgoritmo va bene... o quasi!)
(g(n))
(o complessità
(g(n)) ) se esiste una opportuna costante positiva
c
tale che:
_timeA(n) > cg(n)_* per un numero infinito di valori di n. Esempio 3n
2 +n =
Ω
(n
2 ) (ma anche
Ω
(n) e
Ω
(n*log n))
Ω
(g(n)), rappresenta un limite inferiore al comportamento di una funzione. Si ha una valutazione esatta del costo di un algoritmo quando ledue delimitazioni O(f(n)) e
(f(n)) coincidono.