A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... ·...

40
Chiara Bodei, Jacopo Soldani Dipartimento di Informatica Università of Pisa A2. Complessità degli Algoritmi Fondamenti di Programmazione e Laboratorio

Transcript of A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... ·...

Page 1: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Chiara Bodei, Jacopo SoldaniDipartimento di InformaticaUniversità of Pisa

A2. Complessità degli AlgoritmiFondamenti di Programmazione e Laboratorio

Page 2: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Notazione Asintotica

2

Sia 𝑓(𝑛) la funzione che descrive la complessità in tempo/spazio di un algoritmo su input didimensione 𝑛, es

𝑇(𝑛) = 3𝑛2 + 14𝑛 + 2 e 𝑆(𝑛) = 34𝑛 + 12

La notazione asintotica permette di astrarre da dettagli influenti (come costantimoltiplicative, termini di ordine inferiore e costanti), concentrandosi sull’ordine di grandezzadeterminato da 𝑓(𝑛) stesso, es

𝑇(𝑛) = 𝑂(𝑛2) e 𝑆(𝑛) = 𝑂(𝑛)

Page 3: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Notazione Asintotica: 𝑂

3

𝑓(𝑛) = 𝑂(𝑔(𝑛)) se ∃𝑛0 > 0, 𝑐 > 0: ∀𝑛 > 𝑛0 . 𝑓 𝑛 ≤ 𝑐 ∙ 𝑔(𝑛)

NB: 𝑂 consente di definire upper bound (limiti superiori) per la complessità di un algoritmo,ovvero per dire che "si spende al massimo quell’ordine di grandezza di costo…"

Page 4: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Notazione Asintotica: 𝛀

4

𝑓(𝑛) = Ω(𝑔(𝑛)) se ∃𝑛0 > 0, 𝑐 > 0: ∀𝑛 > 𝑛0 . 𝑓 𝑛 ≥ 𝑐 ∙ 𝑔(𝑛)

NB: Ω consente di definire lower bound (limiti inferiori) per la complessità di un algoritmo,ovvero per dire che "si spende almeno quell’ordine di grandezza di costo…"

Page 5: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Notazione Asintotica: 𝛩

5

𝑓(𝑛) = 𝛩(𝑔(𝑛)) se ∃𝑛0 > 0, 𝑐1 > 0, 𝑐2 > 0: ∀𝑛 > 𝑛0 . 𝑐1 ∙ 𝑔 𝑛 ≤ 𝑓 𝑛 ≤ 𝑐2 ∙ 𝑔(𝑛)

NB: 𝛩 indica che la complessità di un algoritmo cresce quanto una certa funzione 𝑔(𝑛),ovvero per dire che "si spende esattamente quell’ordine di grandezza di costo…"

Page 6: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Notazione Asintotica: Proprietà

6

𝑂 definisce upper bound, Ω definisce lower bound, quindi…

Proprietà

Date due funzioni 𝑓(𝑛) e 𝑔(𝑛)

𝑓(𝑛) = 𝛩 𝑔 𝑛

se e solo se

𝑓 𝑛 = 𝑂 𝑔 𝑛 ∧ 𝑓(𝑛) = Ω 𝑔 𝑛

La complessità di un algoritmo quindi cresce come 𝛩 𝑔 𝑛

se valgono i limiti superiore 𝑂 𝑔 𝑛 e inferiore Ω 𝑔 𝑛

Page 7: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Esempio

7

Consideriamo la seguente funzione

𝑓 𝑛 = 2n2 + n + 5

Vale quanto segue

A) 𝑓 𝑛 = 𝑂(𝑛2) // basta scegliere 𝑐 = 3 e 𝑛 = 3

B) 𝑓(𝑛) = Ω(𝑛2) // basta scegliere 𝑐 = 1 e 𝑛 = 0

C) 𝑓(𝑛) = 𝛩(𝑛2) // poiché valgono A e B

D) 𝑓(𝑛) = 𝑂 𝑛3 // basta scegliere 𝑐 = 2 e 𝑛 = 2

Mentre non vale che

E) 𝑓(𝑛) = Ω(𝑛3) // per nessuna coppia 𝑐, 𝑛

F) 𝑓(𝑛) = 𝛩(𝑛3) // poiché non vale E

Page 8: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Quando e Come Usare la Notazione Asintotica

8

Useremo 𝑂 𝑔 𝑛 per indicare che la complessità in tempo/spazio di un algoritmo è limitata superiormente dalla funzione 𝑔(𝑛)

→ L’ordine di grandezza del "costo massimo" necessario a risolvere un problema con un dato algoritmo è lo stesso della funzione 𝑓(𝑛)

Useremo Ω(ℎ(𝑛)) per indicare che la complessità di un problema è limitata inferiormente dalla funzione ℎ(𝑛)

→ L’ordine di grandezza del "costo minimo" necessario a risolvere un problema con un qualunque algoritmo è lo stesso della funzione 𝑔(𝑛)

Sia P un problema la cui complessità in tempo/spazio è Ω(𝑓(𝑛))

Un algoritmo è ottimo per P se la sua complessità in tempo/spazio è 𝑂 𝑓 𝑛

Page 9: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analizzare la Complessità in Tempo/SpazioTre Casi

9

Page 10: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Algoritmo di Riferimento: RicercaSequenziale

10

Algoritmo per la ricerca di un intero x in un array A non ordinato

int ricercaSequenziale(int x, int A[], int lunghezza) {

for(int i=0;i<lunghezza;i++)

if(V[i]==x) return i;

return -1;

}

Qual è la complessità in tempo di ricercaSequenziale?

Page 11: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Determinare la Complessità di un Algoritmo

11

Osservazione: La complessità in tempo dell’algoritmo è determinata dal ciclo for che confronta gli elementi di A con l’elemento x ricercato

• Quanti confronti dobbiamo fare per trovare x in A?

… dipende da dove si trova x in A: all’inizio? Alla fine? Non c’è?

• Ovviamente cerchiamo una risposta che non sia "dipende (da dove si trova x)"

Qual è la complessità in tempo di ricercaSequenziale?

Page 12: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Tre Casi da Considerare (Sempre)

12

Nell’analisi della complessità in tempo/spazio di un algoritmo, si considerano le risorse (tempo di esecuzione/occupazione di memoria) usate dall’algoritmo stesso in funzione della dimensione 𝒏 dell’istanza del problema in ingresso

es. in RicercaSequenziale, 𝑛 è data dalla lunghezza dell’array A

A parità di dimensione, istanze diverse del problema potrebbero determinare consumi diversi di risorse di calcolo

es. in RicercaSequenziale, basta un confronto se x è il primo elemento di A

mentre servono n confronti se x è non è presente in A

→ Si distinguono tre casi: ottimo, pessimo, e medio

Page 13: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Caso Migliore

13

Supponiamo di denotare con 𝑡 𝑖 il tempo necessario ad eseguire un algoritmo su una singola istanza 𝑖 di un problema

Il tempo necessario ad un algoritmo per risolvere il caso migliore di unproblema (o caso ottimo) si determina come segue

𝑇𝑏𝑒𝑠𝑡 𝑛 = ministanze 𝑖 di dimensione 𝑛

𝑡 𝑖

𝑇𝑚𝑖𝑛 𝑛 denota quindi il tempo necessario a risolvere le istanze (di dimensione n) del problema che comportano meno lavoro per l’algoritmo

→ 𝑇𝑏𝑒𝑠𝑡 𝑛 purtroppo non fornisce molte informazioni sull’algoritmo

NB: Lo stesso ragionamento si applica per il calcolo dello spazio necessario nel caso migliore diun problema, ovvero 𝑆𝑏𝑒𝑠𝑡 𝑛

Page 14: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaSequenziale: Caso Migliore

14

Caso Migliore:

• x si trova nella prima posizione di A

• RicercaSequenziale termina dopo un solo confronto!

𝑇𝑏𝑒𝑠𝑡 𝑛 = 𝑂(1)

int ricercaSequenziale(int x, int A[], int lunghezza) {

for(int i=0;i<lunghezza;i++)

if(V[i]==x) return i;

return -1;

}

… effettivamente non otteniamo informazioni eccezionalmente interessanti sulla complessitàdi RicercaSequenziale

Page 15: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Caso Peggiore

15

Supponiamo di denotare con 𝑡 𝑖 il tempo necessario ad eseguire un algoritmo su una singola istanza 𝑖 di un problema

Il tempo necessario ad un algoritmo per risolvere il caso peggiore di unproblema (o caso pessimo) si determina come segue

𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 = maxistanze 𝑖 di dimensione 𝑛

𝑡 𝑖

𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 denota quindi il tempo necessario a risolvere le istanze (di dimensione n) del problema che comportano più lavoro per l’algoritmo

→ 𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 quindi fornisce garanzie sulla prestazione dell’algoritmo

NB: Lo stesso ragionamento si applica per il calcolo dello spazio necessario nel caso pessimodi un problema, ovvero 𝑆𝑤𝑜𝑟𝑠𝑡 𝑛

Page 16: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaSequenziale: Caso Peggiore

16

Caso Peggiore:

• x non è presente in A

• RicercaSequenziale termina solo dopo aver confrontato x con tutti gli n elementi contenuti in A

𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 = 𝑂(𝑛)

int ricercaSequenziale(int x, int A[], int lunghezza) {

for(int i=0;i<lunghezza;i++)

if(V[i]==x) return i;

return -1;

}

Quindi, nel peggiore dei casi, RicercaSequenziale richiede un numero di confronti linearenella dimensione dell’input (e mai in quantità maggiore)

Page 17: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Caso Medio

17

Supponiamo di denotare con 𝑡 𝑖 il tempo necessario ad eseguire un algoritmo su una singola istanza 𝑖 di un problema, e con 𝑃(𝑖) la probabilità di avere tale istanza in ingresso

Il tempo necessario ad un algoritmo per risolvere il caso medio di unproblema si determina come segue

𝑇𝑎𝑣𝑔 𝑛 = Σistanze 𝑖 di dimensione 𝑛

𝑃 𝑖 ∙ 𝑡 𝑖

𝑇𝑎𝑣𝑔 𝑛 denota quindi il tempo necessario a risolvere –in media– le istanze di dimensione n del problema considerato, ovvero le sue istanze "tipiche"

→ 𝑇𝑎𝑣𝑔 𝑛 approssima le prestazioni dell’algoritmo,

→ richiedendo però una distribuzione di probabilità dei possibili input

NB: Lo stesso ragionamento si applica per il calcolo dello spazio necessario nel caso medio diun problema, ovvero 𝑆𝑎𝑣𝑔 𝑛

Page 18: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaSequenziale: Caso Medio

18

Caso Medio: (richiede una conoscenza sulla distribuzione di probabilità dei possibili input)• Indichiamo con 𝑖𝑗 il caso in cui x si trova nella posizione 𝑗 di A• Supponiamo che x possa occupare ogni posizione di A con la medesima probabilità

• Abbiamo che 𝑃 𝑖𝑗 =1

𝑛e 𝑡 𝑖𝑗 ≈ 𝑗

• Ne segue che

𝑇𝑎𝑣𝑔 𝑛 ≈

1≤𝑗≤𝑛

1

𝑛∙ 𝑗 ≈

𝑛 + 1

2= 𝑂(𝑛)

int ricercaSequenziale(int x, int A[], int lunghezza) {

for(int i=0;i<lunghezza;i++)

if(V[i]==x) return i;

return -1;

}

Page 19: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

RicercaSequenziale: Riepilogo

19

Caso Complessità in Tempo Complessità in Spazio

Migliore 𝑂 1 𝑂 𝑛

Peggiore 𝑂 𝑛 𝑂 𝑛

Medio 𝑂 𝑛 𝑂 𝑛

Serve sempre 𝑂(𝑛)spazio per memorizzare

gli elementi di A

RicercaSequenziale quindi è ottimo per il problema generale…

Lower Bound Tempo Lower Bound Spazio

Ω 1 Ω 𝑛

Ω 𝑛 Ω 𝑛

Ω 𝑛 Ω 𝑛

Problema della ricerca di un elemento in un array

…ma si può fare di meglio per casi più specifici :)

Page 20: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

RicercaBinaria

20

Algoritmo per la ricerca di un intero x in un array A ordinato

int ricercaBinaria(int x, int A[], int lunghezza) {

int centro,sx,dx;

sx=0;

dx=lunghezza-1;

while(sx<=dx) {

centro = (sx+dx)/2;

if(A[centro]==x) return centro;

if(A[centro]>x) dx=centro-1;

else sx=centro+1;

}

return -1;

}

Page 21: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaBinaria

21

Caso Migliore

• L’elemento al centro di A è uguale a x

• 𝑇𝑏𝑒𝑠𝑡(𝑛) = 𝑂(1)

Caso Peggiore

• L’elemento x non è presente in A

• 𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 = ?

Caso Medio

• Assumiamo che le istanze del problema siano equidistribuite

• 𝑇𝑎𝑣𝑔 𝑛 = ?

Provate, per esercizio, a calcolare 𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 e 𝑇𝑎𝑣𝑔 𝑛 . Li calcoleremo comunque insieme perun’altra versione della RicercaBinaria… quella ricorsiva!

Page 22: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analizzare Algoritmi RicorsiviTre Diversi Metodi

22

Page 23: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

RicercaBinaria: Versione Ricorsiva

23

Algoritmo per la ricerca di un intero x in un array A ordinato

int ricercaBinaria(int x, int A[], int sx, int dx) {

if(sx>dx) return -1;

int centro = (sx+dx)/2;

if(A[centro]==x) return centro;

if(A[centro]>x) return ricercaBinaria(x,A,sx,centro-1);

else return ricercaBinaria(x,A,centro+1,dx);

}

Qual è la complessità in tempo di ricercaBinaria(nel caso peggiore)?

Page 24: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaBinaria

24

La complessità in tempo di RicercaBinaria rispetta la seguente relazione di ricorrenza

𝑇 𝑛 = ቐ𝑐 + 𝑇

𝑛

2𝑛 > 1

1 𝑛 = 1

NB: Esistono vari metodi per risolvere questo tipo di equazioni di ricorrenza..

int ricercaBinaria(int x, int A[], int sx, int dx) {

if(sx>dx) return -1;

int centro = (sx+dx)/2;

if(A[centro]==x) return centro;

if(A[centro]>x) return ricercaBinaria(x,A,sx,centro-1);

else return ricercaBinaria(x,A,centro+1,dx);

}

Page 25: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 1: Metodo dell’Iterazione

25

Idea: "Srotolare" la ricorsione nella relazione di ricorrenza, in modo da ottenere una sommatoria dipendente solo dalla dimensione 𝑛 del problema originale

Nel caso di RicercaBinaria, abbiamo che

𝑇 𝑛 = ቐ𝑐 + 𝑇

𝑛

2𝑛 > 1

1 𝑛 = 1

può essere "srotolata" come segue (assumendo che 𝑛 sia una potenza di 2)

𝑇 𝑛 = 𝑐 + 𝑇𝑛

2= 𝑐 + 𝑐 + 𝑇

𝑛

4= ⋯ = 𝑘 ∙ 𝑐 + 𝑇

𝑛

2𝑘

Page 26: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 1: Metodo dell’Iterazione (2)

26

Nel caso di RicercaBinaria, abbiamo che

𝑇 𝑛 = 𝑐 + 𝑇𝑛

2= 𝑐 + 𝑐 + 𝑇

𝑛

4= ⋯ = 𝑘 ∙ 𝑐 + 𝑇

𝑛

2𝑘

Dobbiamo continuare finché 𝑛

2𝑘= 1, ovvero fino a che 𝑘 = log2 𝑛

𝑇 𝑛 = log2 𝑛 ∙ 𝑐 + 𝑇 1 = 𝑐 log2 𝑛 + 1

Quindi, per RicercaBinaria, abbiamo che

𝑇(𝑛) = 𝑂(log 𝑛)

(al caso pessimo)

Page 27: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Analisi di RicercaBinaria

27

Caso Migliore

• L’elemento al centro di A è uguale a x

• 𝑇𝑏𝑒𝑠𝑡(𝑛) = 𝑂(1)

Caso Peggiore

• L’elemento x non è presente in A

• 𝑇𝑤𝑜𝑟𝑠𝑡 𝑛 = 𝑂(log 𝑛)

Caso Medio

• Assumiamo che le istanze del problema siano equidistribuite

• 𝑇𝑎𝑣𝑔 𝑛 = log 𝑛 − 1 +1

𝑛= 𝑂(log 𝑛)

𝑇𝑎𝑣𝑔 si può calcolare sempre con lo stesso approccio e sfruttando il fatto che le istanze delproblema siano equidistribuite

Page 28: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 2: Metodo della Sostituzione

28

Prendiamo, ad esempio, la seguente relazione di ricorrenza

𝑇 𝑛 = ቐ𝑇

𝑛

2+ 𝑛 𝑛 > 1

1 𝑛 = 1

e proviamo ad applicare il metodo della sostituzione

Idea: "Intuire" la soluzione della relazione di ricorrenza e utilizzare l’induzione matematica per dimostrare che la soluzione è quella intuita

Page 29: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 2: Metodo della Sostituzione (2)

29

𝑇 𝑛 = ቐ𝑇

𝑛

2+ 𝑛 𝑛 > 1

1 𝑛 = 1

Ipotesi: 𝑇 𝑛 = 𝑂 𝑛 , ovvero 𝑇 𝑛 ≤ 𝑐 ∙ 𝑛 (per un’opportuna costante 𝑐 > 0)

Dimostrazione:

Caso Base:

𝑇 1 = 1 ≤ 𝑐 ∙ 1 (vale per ogni 𝑐 > 0)

Passo Induttivo:

𝑇 𝑛 = 𝑇𝑛

2+ 𝑛 // per ipotesi induttiva 𝑇

𝑛

2≤ 𝑐 ∙

𝑛

2

≤ 𝑐 ∙𝑛

2+ 𝑛 =

𝑐

2+ 1 ∙ 𝑛

Quindi 𝑇 𝑛 ≤ 𝑐 ∙ 𝑛 per un qualunque 𝑐 ≥ 2 CVD

Page 30: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Digressione: Divide et Impera

30

La tecnica del divide et impera è una tecnica potente e generale utilizzabile per la progettazione di algoritmi e la risoluzione di problemi

Dato un problema di dimensione 𝑛:

• Il problema viene scomposto in 𝒔 sotto-problemi

• Ciascuno sotto-problema ha dimensione 𝒏

𝒅

• Suddividere il problema in sotto-problemi costa 𝒇 𝒏

Ne risultano relazioni di ricorrenza del tipo

𝑇 𝑛 = 𝑠 ∙ 𝑇𝑛

𝑑+ 𝑓 𝑛

Divide: Dividere i dati di ingresso in sottoinsiemi (o sotto-problemi)Impera: Risolvere ricorsivamente i sotto-problemi e combinare le

loro soluzioni per ottenere la soluzione globale

Page 31: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Digressione: Divide et Impera

31

La tecnica del divide et impera, quindi, permette di realizzare algoritmi ricorsivi per cui

𝑇 𝑛 = ቐ𝑠 ∙ 𝑇

𝑛

𝑑+ 𝑓 𝑛 𝑛 > 1

1 𝑛 = 1

RicercaBinaria

𝑇 𝑛 = ቐ𝑐 + 𝑇

𝑛

2𝑛 > 1

1 𝑛 = 1

Come risolvere (in generale) questo tipo di relazioni di ricorrenza?

Page 32: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 3: Master Theorem

32

Permette di determinare la soluzione di relazioni di ricorrenza in algoritmi basati su divide et impera, le cui relazioni di ricorrenza risultano essere del tipo

𝑇 𝑛 = ቐ𝑠 ∙ 𝑇

𝑛

𝑑+ 𝑓 𝑛 𝑛 > 1

1 𝑛 = 1

…vediamo come!

Page 33: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Verso il Master Theorem, Intuitivamente

33

Supponiamo che 𝑛 sia una potenza di 𝑑 e che la ricorsione si fermi quando 𝑛 = 1

L’albero di ricorsione è il seguente

𝑛

𝑛/𝑑 𝑛/𝑑 𝑛/𝑑

𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2…

𝑠

𝑠𝑠 𝑠

Page 34: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Verso il Master Theorem, Intuitivamente

34

Osservazione: I sotto-problemi al livello 𝑙 hanno dimensione 𝑛

𝑑𝑙. Quindi (escluso il tempo per

le chiamate ricorsive) il tempo speso al livello 𝑙 è 𝑓𝑛

𝑑𝑙

Osservazione: All’ultimo livello dell’albero di ricorsione abbiamo che 𝑛

𝑑𝑙= 1. Quindi l’albero di

ricorsione avrà al più altezza 𝑙 = log𝑑 𝑛

𝑛

𝑛/𝑑 𝑛/𝑑 𝑛/𝑑

𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2 𝑛/𝑑2…

𝑠

𝑠𝑠 𝑠

Osservazione: Ogni nodo interno ha 𝑠 figli. Quindi al livello 𝑙 dell’albero di ricorsione ci sono 𝑠𝑙 nodi

Page 35: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Verso il Master Theorem, Intuitivamente

35

Osservazione: Ogni nodo interno ha 𝑠 figli. Quindi al livello 𝑙 dell’albero di ricorsione ci sono 𝑠𝑙 nodi

Osservazione: I sotto-problemi al livello 𝑙 hanno dimensione 𝑛

𝑑𝑙. Quindi (escluso il tempo per

le chiamate ricorsive) il tempo speso al livello 𝑙 è 𝑓𝑛

𝑑𝑙

Osservazione: All’ultimo livello dell’albero di ricorsione abbiamo che 𝑛

𝑑𝑙= 1. Quindi l’albero di

ricorsione avrà al più altezza 𝑙 = log𝑑 𝑛

La relazione di ricorrenza può essere quindi riscritta come segue:

𝑇 𝑛 =

𝑖=0

log𝑑 𝑛

𝑠𝑖𝑓𝑛

𝑑𝑖

La cui soluzione è data dal master theorem

Page 36: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Metodo 3: Master Theorem

36

𝑇 𝑛 = ቐ𝑠 ∙ 𝑇

𝑛

𝑑+ 𝑓 𝑛 𝑛 > 1

1 𝑛 = 1

ha soluzione

1) 𝑇(𝑛) = 𝛩 𝑛log𝑑 𝑠 se 𝑓(𝑛) = 𝑂(𝑛log𝑑 𝑠 − 𝜀) per 𝜀 > 0

2) 𝑇(𝑛) = 𝛩 𝑛log𝑑 𝑠 ∙ log 𝑛 se 𝑓(𝑛) = 𝛩(𝑛log𝑑 𝑠)

3) 𝑇(𝑛) = 𝛩 𝑓 𝑛 se 𝑓(𝑛) = Ω(𝑛log𝑑 𝑠+ 𝜀) per 𝜀 > 0 e 𝑠 ∙ 𝑓𝑛

𝑑≤ 𝑐 ∙ 𝑓 𝑛

per 𝑐 < 1 e 𝑛 sufficientemente grande

Jon Louis Bentley, Dorothea Haken, and James B. Saxe. 1980. A general method for solving divide-and-conquer recurrences. SIGACT News 12, 3 (Fall 1980), 36–44. DOI: https://doi.org/10.1145/1008861.1008865

Page 37: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Usare il Master Theorem

37

Nel caso di RicercaBinaria, abbiamo che

𝑇 𝑛 = 𝑇𝑛

2+ 𝑂(1)

Ovvero abbiamo che

𝑠 = 1, 𝑑 = 2 e 𝑓 𝑛 = 𝑂(1)

Visto che𝛩 𝑛log𝑑 𝑠 = 𝛩 𝑛log2 1 = 𝛩 𝑛0 = 𝛩(1)

siamo nel caso 2 del master theorem, e quindi

𝑇 𝑛 = 𝛩 𝑛log𝑑 𝑠 ∙ log 𝑛 = 𝛩 1 ∙ log 𝑛 = 𝛩 log 𝑛

Page 38: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Usare il Master Theorem

38

Esempio: Consideriamo la seguente relazione di ricorrenza

𝑇 𝑛 = 9 ∙ 𝑇𝑛

3+ 𝑛

Ovvero abbiamo che

𝑠 = 9, 𝑑 = 3 e 𝑓 𝑛 = 𝑛

Visto che𝛩 𝑛log𝑑 𝑠 = 𝛩 𝑛log3 9 = 𝛩 𝑛2

e che

𝑓 𝑛 = 𝑛 = 𝑂(𝑛2−𝜀) per 𝜀 = 1

siamo nel caso 1 del master theorem, e quindi

𝑇 𝑛 = 𝛩 𝑛log𝑑 𝑠 = 𝛩 𝑛log3 9 = 𝛩 𝑛2

Page 39: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Riepilogo

39

Page 40: A2. Complessità degli Algoritmipages.di.unipi.it/bodei/CORSO_FP_20/FP/Lezioni/IntroAlgo... · 2020. 11. 17. · progettazione di algoritmi e la risoluzione di problemi Dato un problema

Quindi?

40

La notazione asintotica permette di esprimere la complessità in tempo/spazio di un algoritmo in modo compatto e sintetico, astraendo da dettagli non influenti (es. costanti)

Possiamo esprimere la complessità in tempo/spazio di un algoritmo in funzione delladimensione 𝒏 dell’istanza del problema in ingresso

Poiché, a parità di dimensione 𝑛, la complessità di un algoritmo può variare, è necessario analizzare l’algoritmo nel suo caso peggiore (e, se possibile, nel caso medio)

La complessità degli algoritmi ricorsivi si esprime agevolmente mediante relazioni di ricorrenza, che possono poi essere risolte applicando il metodo di iterazione, quello di sostituzione, o il master theorem