


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
- La misura dell’efficienza. - Ordine di grandezza delle funzioni - Calcolo della complessità computazionale di alcuni costrutti - DIVITE ET IMPERA – RICERCA BINARIA - DIVITE ET IMPERA – RICERCA UNIFORME
Tipologia: Appunti
1 / 4
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!



La misura dell’efficienza. Un aspetto importante nella progettazione di un algoritmo è sicuramente l’analisi dell’efficienza di quest’ultimo. Per far ciò si utilizzano tre modelli : Complessità Computazionale / Temporale o Riguarda l’efficienza di esecuzione o tempo di esecuzione di un algoritmo .Uno stesso problema può essere risolto con algoritmi diversi che possono avere diversa complessità ,quindi diversa efficienza. o Complessità Spaziale (Efficienza in termini di memoria impiegata, spazio occupato dall’esecuzione dell’algoritmo) Complessità di I/O (tempo di acquisizione o trasferimento da periferiche) Chiaramente l’efficienza di un algoritmo dipende anche dalla macchina su cui viene eseguito ma esistono anche strumenti operativi per valutare l’efficienza di un generico algoritmo. Solitamente per studiarla si caratterizza la funzione che fornisce il tempo di esecuzione (T) di quest’ultimo in relazione alla dimensione (n) della struttura dati su cui su cui l’algoritmo opera ( Es : ordinamento del vettore). Sono molte le variabili che entrano in gioco durante questa analisi, e pur prescindendo dalla struttura del calcolatore utilizzato, si deve comunque considerare l’ipotesi che il tempo T(n) di un generico algoritmo possa variare in relazione anche alle tipologie di dato inserito in esso. Per questo motivo , se la funzione dipende anche da tale parametro, l’analisi che si conduce per determinarne il tempo dipende da tre casi possibili : Caso Migliore o Riguarda la configurazione della struttura dati tale per cui la funziona T(n) è minima. Caso Peggiore o Riguarda la configurazione della struttura dati tale per cui la funziona T(n) è massima. Caso Medio o Riguarda il comportamento che in media la funzione T(n) assume al variare della configurazione della struttura dati. Ordine di grandezza delle funzioni
Per studiare l’efficienza di un algoritmo si studia la funzione T(n) con n>>1 attraverso delle notazioni asintotiche. Affermare che un algoritmo ha un certo andamento asintotico , significa dire che per qualunque configurazione di dati in ingresso il comportamento asintotico è di quel tipo. In particolare distinguiamo tre diverse notazioni asintotiche : O (g(n)) o Date due costanti positive c ed n0, una funzione f(n) appartiene all’insieme O(g(n)), ovvero f(n) ∈ O (g(n)) se: ∃ c, n0 > 0 | ∀ n > n0, 0 ≤ f(n) ≤ c g(n) o Ovvero per valori >n0 la funzione g(n) > f(n) quindi g(n) rappresenta un limite superiore per la f(n).Solitamente in questi casi ,essendo non un limite “stretto” si cerca di individuare il limite superiore più stretto possibile. Ω (g(n)) o Date due costanti positive c ed n0 , una funzione f(n) appartiene all’insieme W(g(n)), ovvero f(n) ∈ Ω (g(n)) se: ∃ c, n0 > 0 | ∀ n > n0, f(n) ≥ c g(n) ≥ 0 Θ (g(n)) / Q( g(n) ) o Date tre costanti positive c1, c2 ed n0 , una funzione f(n) appartiene all’insieme Q(g(n)) , ovvero f(n) ∈ Θ (g(n)) se: ∃ c1, c2, n0 > 0 | ∀ n > n0, 0 ≤ c1 g(n) ≤ f(n) ≤ c2 g(n) Calcolo della complessità computazionale di alcuni costrutti Istruzioni di assegnamento ecc. o Hanno tutte complessità costante O(1). Blocchi di più istruzioni o La complessità del blocco è uguale alla massima complessità tra le istruzioni. Costrutti selettivi o Distinguiamo in
Un altro approccio è sicuramente basato sull’utilizzo della Ricerca Uniforme su un container ordinato. In questo caso avremo : Complessità caso peggiore : O(N) Complessità caso medio : O( log( log (N) ) ) Complessità caso migliore : O(1)