Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


APPUNTI SUL CALCOLO DELLA COMPLESSITA' COMPUTAZIONALE, Appunti di Algoritmi E Strutture Di Dati

- 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

2019/2020

In vendita dal 02/10/2020

SUDOUser
SUDOUser 🇮🇹

9 documenti

1 / 4

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
COMPLESSITA’ COMPUTAZIONALE
La misu ra de ll’effi cie nz a.
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
oRiguarda 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
oRiguarda la configurazione della struttura dati tale per cui la funziona T(n) è minima.
Caso Peggiore
oRiguarda la configurazione della struttura dati tale per cui la funziona T(n) è massima.
Caso Medio
oRiguarda il comportamento che in media la funzione T(n) assume al variare della configurazione della
struttura dati.
Ordine di grandezza delle funzioni
pf3
pf4

Anteprima parziale del testo

Scarica APPUNTI SUL CALCOLO DELLA COMPLESSITA' COMPUTAZIONALE e più Appunti in PDF di Algoritmi E Strutture Di Dati solo su Docsity!

COMPLESSITA’ COMPUTAZIONALE

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)