Sei sulla pagina 1di 92

Analisi di algoritmi

Notazione asintotica
Relazioni di ricorrenza

Analisi di complessità degli algoritmi


Algoritmi e Strutture Dati

M. Cecilia Verri

Corso di Laurea in Informatica


Scuola di Scienze Matematiche, Fisiche e Naturali
Università di Firenze

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Disclaimer, Copyright e Privacy Policy

Video a cura dell’Università degli Studi di Firenze - tutti i diritti riservati.


Il video e tutti i contenuti presenti all’interno di questo video sono protetti dai diritti d’autore. Possono essere
utilizzati, personalmente dagli aventi diritto, per esclusivo scopo didattico e di ricerca; non possono essere
commercializzati, diffusi, distribuiti, modificati né utilizzati in altro modo che non sia espressamente autorizzato dai
titolari e/o detentori dei diritti d’autore. Ai fini del rispetto della normativa in materia di protezione dati l’utilizzo
dei video è consentito esclusivamente per uso personale, mentre ne è vietata ogni ulteriore operazione di
trattamento senza il preventivo consenso dell’interessato. Si ricorda che al fuori dell’uso strettamente personale, per
ogni ulteriore utilizzo lo studente sarà considerato Titolare del trattamento e soggetto agli obblighi di legge previsti
per tale figura. Ogni violazione sarà punita sulla base della vigente normativa sul diritto d’autore e sulla protezione
dei dati personali.

Copyright c 2020 by Università degli Studi di Firenze


Per l’attribuzione, l’autore del contenuto è: Maria Cecilia Verri

The video and all its contents are protected by copyright. They can be used, personally by those entitled, for the
exclusive teaching and research purposes; they cannot be marketed, disseminated, distributed, modified or used in
any other way that is not expressly authorized by the owners and / or holders of copyright. For the purposes of
compliance with data protection law, the use of videos is only allowed for personal use, while any further processing
operation is prohibited without the prior consent of the data subject. Please note that outside the strictly personal
use, for any further use the student will be considered Data Controller and subject to the legal obligations provided
for that figure. Any infringement will be punished according to the current legislation on copyright and on privacy
protection.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Valutare un algoritmo

La progettazione di un algoritmo richiede la valutazione della


bontà della soluzione proposta

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Valutare un algoritmo

La progettazione di un algoritmo richiede la valutazione della


bontà della soluzione proposta
aspetti qualitativi

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Valutare un algoritmo

La progettazione di un algoritmo richiede la valutazione della


bontà della soluzione proposta
aspetti qualitativi
correttezza, semplicità, generalità, . . .

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Valutare un algoritmo

La progettazione di un algoritmo richiede la valutazione della


bontà della soluzione proposta
aspetti qualitativi
correttezza, semplicità, generalità, . . .
aspetti quantitativi

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Valutare un algoritmo

La progettazione di un algoritmo richiede la valutazione della


bontà della soluzione proposta
aspetti qualitativi
correttezza, semplicità, generalità, . . .
aspetti quantitativi
misurazione delle prestazioni di un algoritmo, per confrontarlo
con altri algoritmi che risolvono lo stesso problema e predire le
risorse di spazio e di tempo necessari alla sua esecuzione

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Correttezza

Correttezza del metodo


dimostrazioni teoriche (teoremi, lemmi, . . .)
Correttezza dell’implementazione
tecniche informali
tecniche formali

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Semplicità

Un algoritmo semplice è:


più facile da verificare
più facile da scrivere
più facile da testare
più facile da modificare

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Semplicità

Un algoritmo semplice è:


più facile da verificare
più facile da scrivere
più facile da testare
più facile da modificare
Purtroppo, generalmente, è meno efficiente

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misurare l’efficienza di un algoritmo

La misura scelta:
deve consentire di confrontare due algoritmi per la soluzione
dello stesso problema
deve essere indipendente dalla macchina e dal linguaggio
utilizzati
deve essere indipendente dai dettagli di programmazione

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misurare l’efficienza di un algoritmo

La misura scelta:
deve consentire di confrontare due algoritmi per la soluzione
dello stesso problema
deve essere indipendente dalla macchina e dal linguaggio
utilizzati
deve essere indipendente dai dettagli di programmazione
Perciò è necessario:
individuare le operazioni fondamentali svolte dall’algoritmo
che ne caratterizzano la complessità
esprimere la variazione della complessità al variare della
dimensione dell’input

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Parametri critici

Tempo di esecuzione (Complessità in tempo)


Spazio di memoria (Complessità in spazio)
dipendono da
dimensione del problema
tipo dei dati

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Dimensione del problema

La dimensione del problema, che spesso coincide con la dimensione


dell’input, è la variabile rispetto a cui si descrive la variazione di
complessità

Problema Dimensione
trovare un dato in una lista di dati numero di dati nella lista
moltiplicare due matrici dimensioni delle due matrici
ordinare una lista di dati numero di dati nella lista
risolvere un problema su un grafo numero di vertici e archi del grafo

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Tipo dei dati

Anche se fissiamo la dimensione dell’input, il numero di operazioni


svolte da un algoritmo può variare in funzione della particolare
configurazione dell’input.
Ordinare una lista di 100.000 dati
già ordinati?
ordinati in senso opposto?
disposti in modo casuale?
...

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Tipo dei dati

Anche se fissiamo la dimensione dell’input, il numero di operazioni


svolte da un algoritmo può variare in funzione della particolare
configurazione dell’input.
Ordinare una lista di 100.000 dati
già ordinati?
ordinati in senso opposto?
disposti in modo casuale?
...

Analisi nel caso pessimo


Analisi nel caso medio

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Problema della ricerca

Problema: la ricerca di un elemento K in un elenco


Struttura dati: vettore
Algoritmo: ricerca sequenziale

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca sequenziale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misure di complessità

Tempo di esecuzione?
Difficoltà di implementazione?

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misure di complessità

Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misure di complessità

Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto
Caso pessimo: v[n-1]=K oppure K non esiste
n confronti
C (n) = n

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misure di complessità

Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto
Caso pessimo: v[n-1]=K oppure K non esiste
n confronti
C (n) = n
Caso medio (ogni elemento della lista ha la stessa probabilità
di essere ricercato)

1 1 1 1 1 + 2 + ··· + n n+1
1· + 2 · + 3 · + 4 · + ··· = =
n n n n n 2
n+1
C̄ (n) = 2

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Nel nostro esempio . . .

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

12 confronti

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Un altro metodo

Problema: la ricerca di un elemento K in un elenco


Struttura dati: vettore
Algoritmo: ricerca binaria

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca binaria

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca binaria

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca binaria

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ricerca binaria

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misura di complessità

Numero di operazioni fondamentali


Caso ottimo: v[n/2]=K
1 confronto
Caso pessimo: K non esiste
log2 n confronti

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misura di complessità

Numero di operazioni fondamentali


Caso ottimo: v[n/2]=K
1 confronto
Caso pessimo: K non esiste
log2 n confronti

C (n) = C (n/2) + 1, n ≥ 2

C (1) = 1

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Misura di complessità

Numero di operazioni fondamentali


Caso ottimo: v[n/2]=K
1 confronto
Caso pessimo: K non esiste
log2 n confronti

C (n) = C (n/2) + 1, n ≥ 2

C (1) = 1

C (n) = log2 n

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Nel nostro esempio . . .

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S

4 confronti

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Confronto

Ricerca sequenziale Ricerca binaria


n log2 n
10 3.322
100 6.644
1000 9.966
10000 13.287

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Confronto fra complessità

log2 n n n log2 n n2 2n
n=2 1 2 2 4 4
n=10 3,322 10 33,22 100 1024
n=100 6,644 100 664,4 10.000 >> 1030
n=1.000 9,966 1.000 9.966 1.000.000 >> 10300
n=10.000 13,287 10.000 132.877 100.000.000 >> 103000
Tabella: Numero di operazioni fondamentali al variare della dimensione
del problema

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Confronto fra complessità

log2 n n n log2 n n2 2n
n=2 1µs 2 µs 2 µs 4 µs 4 µs
n=10 3 µs 10µs 30 µs 100 µs 1ms
n=100 7 µs 100 µs 700 µs 10 ms 1016 anni
n=1.000 10 µs 1 ms 10 ms 1s very long
n=10.000 13µs 10 ms 130 ms 2 min very long
Tabella: Tempo di esecuzione (arrotondato) al variare della dimensione
del problema, per un processore che esegue un milione di operazioni
fondamentali al secondo

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Complessità in spazio

Lo spazio di memoria viene utilizzato per:


istruzioni
costanti e variabili
dati in input
spazio di lavoro per calcoli intermedi
Se lo spazio di lavoro è costante al variare della dimensione
dell’input, si dice che l’algoritmo lavora sul posto.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Un esempio
Relazioni di ricorrenza

Ottimalità

Ogni problema ha una sua complessità intrinseca

Un algoritmo è detto ottimo se ha come complessità, nel caso


pessimo, il valore della complessità intrinseca del problema che
risolve
Non tutti i problemi possono avere algoritmi ottimi

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Notazione O grande

Per valutare il tempo di esecuzione di un algoritmo ci interessa


stabilire un limite superiore asintotico.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Notazione O grande

Per valutare il tempo di esecuzione di un algoritmo ci interessa


stabilire un limite superiore asintotico.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Notazione O grande

Per valutare il tempo di esecuzione di un algoritmo ci interessa


stabilire un limite superiore asintotico.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Notazione O grande

Per valutare il tempo di esecuzione di un algoritmo ci interessa


stabilire un limite superiore asintotico.
Definizione
Una funzione f (n) ∈ O(g(n)) se esistono una costante c > 0 ed un
valore n0 > 0 tali che f (n) ≤ c · g(n) per ogni n > n0

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

f (n) cresce al più come un multiplo di g(n)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Esempio

n(n + 1)
C (n) = ∈ O(n2 )
2
Infatti la disequazione:

n(n + 1)
≤ c · n2
2
è soddisfatta con c=1 per ogni n ≥ 1

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Classificazione dei problemi

Problemi

Decidibili Indecidibili Aperti


- problema - 10100 cop-
dell’arresto pia di numeri
Trattabili Intrattabili - ... gemelli
- ricerca - scacchi - ...
- ordinamento - commesso
- ... viaggiatore
- ...

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Classificazione dei problemi

Problemi

Decidibili Indecidibili Aperti


- problema - 10100 cop-
dell’arresto pia di numeri
Trattabili Intrattabili - ... gemelli
- ricerca - scacchi - ...
- ordinamento - commesso
- ... viaggiatore
- ...

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Trattabilità

Problemi trattabili
Problemi per i quali esiste un algoritmo con complessità minore o
uguale a O(np ) (complessità polinomiale)

Problemi intrattabili
Problemi per i quali un p del genere non esiste (complessità
esponenziale)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Decidibilità

Algoritmi decidibili
I problemi trattabili e intrattabili si dicono decidibili perché, a
prescindere dalla loro complessità è sempre possibile trovare un
algoritmo risolutivo.

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Problemi intrattabili: senza speranza

lineare quadratico esponenziale


1h 30 operazioni 302 operazioni 230 operazioni
n = 30

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Problemi intrattabili: senza speranza

lineare quadratico esponenziale


1h 30 operazioni 302 operazioni 230 operazioni
n = 30
1h
1000 volte
più veloce

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Problemi intrattabili: senza speranza

lineare quadratico esponenziale


1h 30 operazioni 302 operazioni 230 operazioni
n = 30
1h 30 · 1000 operazioni
1000 volte
più veloce n=30000

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Problemi intrattabili: senza speranza

lineare quadratico esponenziale


1h 30 operazioni 302 operazioni 230 operazioni
n = 30
1h 30 · 1000 operazioni n2 = 302 · 1000
1000 volte
più veloce n=30000 n ≈ 950

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica
Relazioni di ricorrenza

Problemi intrattabili: senza speranza

lineare quadratico esponenziale


1h 30 operazioni 302 operazioni 230 operazioni
n = 30
1h 30 · 1000 operazioni n2 = 302 · 1000 2n = 230 · 1000
1000 volte
più veloce n=30000 n ≈ 950 n ≈ 40

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Ricorrenze di base

La complessità degli algoritmi ricorsivi può essere espressa


tramite una relazione di ricorrenza
Alcune relazioni di ricorrenza possono essere risolte in modo
semplice, con pochi accorgimenti

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 1

Tipica di algoritmi ricorsivi che ciclano sui dati in input


eliminandone uno alla volta.

C (n) = C (n − 1) + n, n≥2
C (1) = 1

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 1

C (n) = C (n − 1) + n, n≥2
C (1) = 1

C (n) = C (n − 1) + n = C (n − 2) + (n − 1) + n =
= C (n − 3) + (n − 2) + (n − 1) + n = · · · =
= C (1) + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
n(n + 1)
= 1 + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
2

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 1

C (n) = C (n − 1) + n, n≥2
C (1) = 1

C (n) = C (n − 1) + n = C (n − 2) + (n − 1) + n =
= C (n − 3) + (n − 2) + (n − 1) + n = · · · =
= C (1) + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
n(n + 1)
= 1 + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
2

C (n) ∈ O(n2 )

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 2

Tipica di algoritmi in cui, ad ogni passo con una sola operazione


viene dimezzato l’insieme dei dati su cui procedere.
n
C (n) = C ( ) + 1, n≥2
2
C (1) = 0

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 2

n
C (n) = C ( ) + 1, n≥2
2
C (1) = 0

supponiamo che n sia una potenza di 2, n = 2N

C (2N ) = C (2N−1 ) + 1 = C (2N−2 ) + 1 + 1 =

= C (2N−3 ) + 3 = · · · =
= C (20 ) + N = N = log2 n

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 2

n
C (n) = C ( ) + 1, n≥2
2
C (1) = 0

supponiamo che n sia una potenza di 2, n = 2N

C (2N ) = C (2N−1 ) + 1 = C (2N−2 ) + 1 + 1 =

= C (2N−3 ) + 3 = · · · =
= C (20 ) + N = N = log2 n

C (n) ∈ O(log2 n)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 3

Anche in questo caso l’input viene dimezzato ad ogni passo ma per


eseguire questa operazione è necessario esaminare tutti i dati.
n
C (n) = C ( ) + n, n≥2
2
C (1) = 1

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 3

n
C (n) = C ( ) + n, n≥2
2
C (1) = 1

supponiamo che n sia una potenza di 2, n = 2N

C (2N ) = C (2N−1 ) + 2N = C (2N−2 ) + 2N−1 + 2N =

= C (2N−3 ) + 2N−2 + 2N−1 + 2N = · · · =


= C (20 ) + 21 + 22 + · · · 2N−2 + 2N−1 + 2N =
N
X
= 2k = 2N+1 − 1 = 2 · 2N − 1 = 2n − 1
k=0

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 3

n
C (n) = C ( ) + n, n≥2
2
C (1) = 1

supponiamo che n sia una potenza di 2, n = 2N

C (2N ) = C (2N−1 ) + 2N = C (2N−2 ) + 2N−1 + 2N =

= C (2N−3 ) + 2N−2 + 2N−1 + 2N = · · · =


= C (20 ) + 21 + 22 + · · · 2N−2 + 2N−1 + 2N =
N
X
= 2k = 2N+1 − 1 = 2 · 2N − 1 = 2n − 1
k=0

C (n) ∈ O(n)
M.C. Verri Analisi di complessità degli algoritmi
Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 4

Si presenta in algoritmi che analizzano tutti i dati dividendoli in


due parti con una operazione di costo n e poi proseguono
separatamente su entrambi
n
C (n) = 2 · C ( ) + n, n≥2
2
C (1) = 0

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 4

n
C (n) = 2 · C ( ) + n, n≥2
2
C (1) = 0

supponiamo che n sia una potenza di 2, n = 2N

C (2N ) = 2 · C (2N−1 ) + 2N

dividiamo entrambi i membri per 2N

C (2N ) C (2N−1 ) C (2N−2 ) C (20 )


= + 1 = + 2 = · · · = +N =N
2N 2N−1 2N−2 20

C (2N ) = 2N · N ⇒ C (n) = n log2 n

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 4
n
C (n) = 2 · C ( ) + n, n≥2
2
C (1) = 0

supponiamo che n sia una potenza di 2, n = 2N


C (2N ) = 2 · C (2N−1 ) + 2N
dividiamo entrambi i membri per 2N
C (2N ) C (2N−1 ) C (2N−2 ) C (20 )
= + 1 = + 2 = · · · = +N =N
2N 2N−1 2N−2 20
C (2N ) = 2N · N ⇒ C (n) = n log2 n

C (n) ∈ O(n log2 n)


M.C. Verri Analisi di complessità degli algoritmi
Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 5

Si presenta in algoritmi che analizzano tutti i dati dividendoli in


due parti con una operazione di costo costante e poi proseguono
separatamente su entrambe le parti
n
C (n) = 2 · C ( ) + 1, n≥2
2
C (1) = 1

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 5
n
C (n) = 2 · C ( ) + 1, n≥2
2
C (1) = 1

supponiamo che n sia una potenza di 2, n = 2N


C (2N ) = 2 · C (2N−1 ) + 1
dividiamo entrambi i membri per 2N
C (2N ) C (2N−1 ) 1 C (2N−2 ) 1 1
N
= N−1
+ N
= N−2
+ N−1 + N = · · · =
2 2 2 2 2 2
N  k
C (20 ) 1 1 1 1 X 1 1
= + + + · · · + + = = 1 =2
20 2 22 2N−1 2N k=0
2 1− 2

C (2N ) = 2 · 2N ⇒ C (n) = 2n

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Relazione 5
n
C (n) = 2 · C ( ) + 1, n≥2
2
C (1) = 1

supponiamo che n sia una potenza di 2, n = 2N


C (2N ) = 2 · C (2N−1 ) + 1
dividiamo entrambi i membri per 2N
C (2N ) C (2N−1 ) 1 C (2N−2 ) 1 1
N
= N−1
+ N
= N−2
+ N−1 + N = · · · =
2 2 2 2 2 2
N  k
C (20 ) 1 1 1 1 X 1 1
= + + + · · · + + = = 1 =2
20 2 22 2N−1 2N k=0
2 1− 2

C (2N ) = 2 · 2N ⇒ C (n) = 2n
C (n) ∈ O(n)
M.C. Verri Analisi di complessità degli algoritmi
Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 1

1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i
5: end for
6: return s
7: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 1

1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i . operazione fondamentale
5: end for
6: return s
7: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 1

1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i . operazione fondamentale
5: end for
6: return s
7: end procedure
L’operazione fondamentale viene ripetuta n volte perciò la
complessità di AlgA è O(n)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 2

1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j
6: end for
7: end for
8: return a
9: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 2

1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j . operazione fondamentale
6: end for
7: end for
8: return a
9: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 2

1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j . operazione fondamentale
6: end for
7: end for
8: return a
9: end procedure
L’operazione fondamentale viene ripetuta n × n volte perciò la
complessità di AlgB è O(n2 )

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 3

1: procedure AlgD(n)
2: if n = 1 then
3: return 1
4: else
5: return n+AlgD(n − 1)
6: end if
7: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 3

1: procedure AlgD(n)
2: if n = 1 then
3: return 1 . caso base
4: else
5: return n+AlgD(n − 1) . chiamata ricorsiva
6: end if
7: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 3

1: procedure AlgD(n)
2: if n = 1 then
3: return 1 . caso base
4: else
5: return n+AlgD(n − 1) . chiamata ricorsiva
6: end if
7: end procedure
La complessità di AlgD è descritta dalla relazione di ricorrenza

C (1) = 1

C (n) = 1 + C (n − 1)
perciò la complessità di AlgD è O(n)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 4

1: procedure AlgE(n) 1: procedure AlgF(n)


2: b←0 2: if n = 1 then
3: for k = 1, . . . , n do 3: return 1
4: b ← b + AlgF(k) 4: else
5: end for 5: return AlgF(n − 1) + n
6: return b 6: end if
7: end procedure 7: end procedure

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 4

1: procedure AlgE(n) 1: procedure AlgF(n)


2: b←0 2: if n = 1 then
3: for k = 1, . . . , n do 3: return 1
4: b ← b + AlgF(k) 4: else
5: end for 5: return AlgF(n − 1) + n
6: return b 6: end if
7: end procedure 7: end procedure
La complessità di AlgF è descritta dalla
relazione di ricorrenza

C (1) = 1

C (n) = 1 + C (n − 1)
perciò la complessità di AlgF(n) è O(n)

M.C. Verri Analisi di complessità degli algoritmi


Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza

Esercizio 4

1: procedure AlgE(n) 1: procedure AlgF(n)


2: b←0 2: if n = 1 then
3: for k = 1, . . . , n do 3: return 1
4: b ← b + AlgF(k) 4: else
5: end for 5: return AlgF(n − 1) + n
6: return b 6: end if
7: end procedure 7: end procedure
AlgE richiama nel ciclo for AlgF(k): La complessità di AlgF è descritta dalla
dunque la sua complessità è: relazione di ricorrenza
n
X n(n + 1) C (1) = 1
(1 + k) = n +
2
k=0 C (n) = 1 + C (n − 1)

ovvero O(n2 ) perciò la complessità di AlgF(n) è O(n)

M.C. Verri Analisi di complessità degli algoritmi

Potrebbero piacerti anche