Sei sulla pagina 1di 23

Formalizzazione di problemi

Complessità

Algoritmi e Strutture Dati


Problemi, modelli e risorse

P. Massazza1
1 Dipartimento di Scienze Teoriche e Applicate
Università degli Studi dell’Insubria
Varese Italy
Formalizzazione di problemi
Complessità

Outline

1 Formalizzazione di problemi

2 Complessità
Formalizzazione di problemi
Complessità

Outline

1 Formalizzazione di problemi

2 Complessità
Formalizzazione di problemi
Complessità

Istanze e soluzioni
Ad ogni problema Π possiamo associare una funzione
fΠ : DΠ 7→ SΠ
dove
DΠ = insieme delle istanze di Π
SΠ = insieme delle risposte di Π
∀x ∈ DΠ fΠ (x) = soluzione del problema Π relativa a x

Esempio [Primalità]
Il problema Primalità consiste nel decidere se un numero intero
è primo o meno.

fPrimalità : N 7→ {0, 1}

fPrimalità (11) = 1, fPrimalità (121) = 0


Formalizzazione di problemi
Complessità

Correttezza e algoritmi
Ad ogni algoritmo ALG associamo una funzione (parziale)

ΦALG : InALG 7→ OutALG ∪ {⊥}

dove
InALG = insieme degli ingressi di ALG
OutALG = insieme delle uscite di ALG

Definizione
ALG risolve Π se e solo se
InALG = DΠ
OutALG = SΠ
∀x ∈ DΠ fΠ (x) = ΦALG (x)

Un algoritmo A che risolve un problema Π si dice corretto per Π


Formalizzazione di problemi
Complessità

Le risorse: tempo e spazio

L’efficienza di un algoritmo riguarda la quantità di risorse che


vengono impiegate per la soluzione di un problema. Occorre
fissare:
modello dell’esecutore
tipo delle istruzioni elementari
Tempo: numero complessivo di istruzioni eseguite
Spazio: memoria occupata (programma + dati)
Il concetto di efficienza viene formalizzato tramite la nozione di
Complessità (in tempo/spazio)
Formalizzazione di problemi
Complessità

Outline

1 Formalizzazione di problemi

2 Complessità
Formalizzazione di problemi
Complessità

Complessità
Per ogni algoritmo ALG con funzione associata

ΦALG : InALG 7→ OutALG ∪ {⊥}

introduciamo una funzione

WALG : InALG 7→ N

che esprime la dimensione dei dati in ingresso.


Esempio
Se InALG è un insieme di interi WALG (s) può essere la
lunghezza di s (numero di cifre)
Se InALG è un insieme di matrici WALG (s) può essere
l’ordine di s
Formalizzazione di problemi
Complessità

Complessità
Esprimiamo la complessità di un algoritmo ALG attraverso una
funzione
TALG : N 7→ N
che indica per ogni valore intero n la quantità di tempo/spazio
impiegata dall’algoritmo per elaborare dati di dimensione n
Fatto
Un algoritmo può comportarsi in modo sensibilmente differente
anche per istanze del problema aventi ugual dimensione

Esempio
È facile modificare un qualunque algoritmo di ordinamento in
modo che riconosca sequenze già ordinate, comportandosi su
tali istanze in tempo lineare, T (n) ≈ cn, c costante
Formalizzazione di problemi
Complessità

Complessità
Esprimiamo la complessità di un algoritmo ALG attraverso una
funzione
TALG : N 7→ N
che indica per ogni valore intero n la quantità di tempo/spazio
impiegata dall’algoritmo per elaborare dati di dimensione n
Fatto
Un algoritmo può comportarsi in modo sensibilmente differente
anche per istanze del problema aventi ugual dimensione

Esempio
È facile modificare un qualunque algoritmo di ordinamento in
modo che riconosca sequenze già ordinate, comportandosi su
tali istanze in tempo lineare, T (n) ≈ cn, c costante
Formalizzazione di problemi
Complessità

Complessità
Esprimiamo la complessità di un algoritmo ALG attraverso una
funzione
TALG : N 7→ N
che indica per ogni valore intero n la quantità di tempo/spazio
impiegata dall’algoritmo per elaborare dati di dimensione n
Fatto
Un algoritmo può comportarsi in modo sensibilmente differente
anche per istanze del problema aventi ugual dimensione

Esempio
È facile modificare un qualunque algoritmo di ordinamento in
modo che riconosca sequenze già ordinate, comportandosi su
tali istanze in tempo lineare, T (n) ≈ cn, c costante
Formalizzazione di problemi
Complessità

Complessità: caso peggiore e caso migliore

w (n)]
Definizione [TALG
La complessità caso peggiore di un algoritmo ALG è una
w (n) che fornisce il comportamento dell’algoritmo
funzione TALG
considerando per ogni dimensione l’istanza più sfavorevole

b (n)]
Definizione [TALG
La complessità caso migliore di un algoritmo ALG è una
b (n) che fornisce il comportamento dell’algoritmo
funzione TALG
considerando per ogni dimensione l’istanza più favorevole
Formalizzazione di problemi
Complessità

Complessità: caso peggiore e caso migliore

w (n)]
Definizione [TALG
La complessità caso peggiore di un algoritmo ALG è una
w (n) che fornisce il comportamento dell’algoritmo
funzione TALG
considerando per ogni dimensione l’istanza più sfavorevole

b (n)]
Definizione [TALG
La complessità caso migliore di un algoritmo ALG è una
b (n) che fornisce il comportamento dell’algoritmo
funzione TALG
considerando per ogni dimensione l’istanza più favorevole
Formalizzazione di problemi
Complessità

Complessità in media

a (n)]
Definizione [TALG
La complessità in media di un algoritmo ALG è una funzione
a (n) che fornisce il comportamento medio dell’algoritmo,
TALG
calcolato eseguendo la media dei comportamenti sulle istanze
aventi ugual dimensione,
X
a
TALG (n) = pi ci
|i|=n

dove:
pi = probabilità dell’istanza i
ci = quantità di risorse impiegate per elaborare l’istanza i
Formalizzazione di problemi
Complessità

Complessità in media
Indicando con Inn l’insieme dei dati in ingresso di dimensione n,
si ha:
X X
a
TALG (n) = pi ci = Pk k
i∈Inn k ≥0
dove X
Pk = pi
i∈Inn
ci =k

Ponendo
σn,k = ]{i ∈ Inn | ci = k }
e ipotizzando che tutte le istanze in Inn siano equiprobabili,
otteniamo:
X σn,k 1 X
a
TALG (n) = k = k σn,k
]Inn ]Inn
k k
Formalizzazione di problemi
Complessità

Complessità in media
Indicando con Inn l’insieme dei dati in ingresso di dimensione n,
si ha:
X X
a
TALG (n) = pi ci = Pk k
i∈Inn k ≥0
dove X
Pk = pi
i∈Inn
ci =k

Ponendo
σn,k = ]{i ∈ Inn | ci = k }
e ipotizzando che tutte le istanze in Inn siano equiprobabili,
otteniamo:
X σn,k 1 X
a
TALG (n) = k = k σn,k
]Inn ]Inn
k k
Formalizzazione di problemi
Complessità

Complessità: esempi

Consideriamo 5 algoritmi A1 , A2 , . . . , A5 differenti che risolvono


lo stesso problema ma con complessità diverse TA1 (n) = n,
TA2 (n) = n log n, TA3 (n) = n2 , TA4 (n) = n3 e TA5 (n) = 2n .
Fissiamo un esecutore in grado di eseguire 1000 istruzioni al
secondo e costruiamo la seguente tabella:
Algoritmo Complessità Dimensione max del problema
1s 1m 1h
A1 n 1000 6 · 10 4 3.6 · 106
A2 n log n 140 4893 2.0 · 105
A3 n2 31 244 1897
A4 n3 10 39 153
A5 2n 9.8 15 21
Formalizzazione di problemi
Complessità

Complessità: esempi

Consideriamo 5 algoritmi A1 , A2 , . . . , A5 differenti che risolvono


lo stesso problema ma con complessità diverse TA1 (n) = n,
TA2 (n) = n log n, TA3 (n) = n2 , TA4 (n) = n3 e TA5 (n) = 2n .
Fissiamo un esecutore in grado di eseguire 1000 istruzioni al
secondo e costruiamo la seguente tabella:
Algoritmo Complessità Dimensione max del problema
1s 1m 1h
A1 n 1000 6 · 10 4 3.6 · 106
A2 n log n 140 4893 2.0 · 105
A3 n2 31 244 1897
A4 n3 10 39 153
A5 2n 9.8 15 21
Formalizzazione di problemi
Complessità

Complessità: esempi

Consideriamo 5 algoritmi A1 , A2 , . . . , A5 differenti che risolvono


lo stesso problema ma con complessità diverse TA1 (n) = n,
TA2 (n) = n log n, TA3 (n) = n2 , TA4 (n) = n3 e TA5 (n) = 2n .
Fissiamo un esecutore in grado di eseguire 1000 istruzioni al
secondo e costruiamo la seguente tabella:
Algoritmo Complessità Dimensione max del problema
1s 1m 1h
A1 n 1000 6 · 10 4 3.6 · 106
A2 n log n 140 4893 2.0 · 105
A3 n2 31 244 1897
A4 n3 10 39 153
A5 2n 9.8 15 21
Formalizzazione di problemi
Complessità

Complessità: esempi

Incrementiamo ora la velocità dell’esecutore di un fattore 10


Algoritmo Complessità dim. max ”prima” dim. max ”dopo”
A1 n s1 10s1
A2 n log n s2 ≈ 10s2
A3 n2 s3 3.16s3
A4 n3 s4 2.15s4
A5 2n s5 s5 + 3.3

Fatto
La complessità asintotica di un algoritmo è un elemento di
primaria importanza nella costruzione di un sistema (Hw + Sw)
per la soluzione di un problema
Formalizzazione di problemi
Complessità

Complessità: esempi

Incrementiamo ora la velocità dell’esecutore di un fattore 10


Algoritmo Complessità dim. max ”prima” dim. max ”dopo”
A1 n s1 10s1
A2 n log n s2 ≈ 10s2
A3 n2 s3 3.16s3
A4 n3 s4 2.15s4
A5 2n s5 s5 + 3.3

Fatto
La complessità asintotica di un algoritmo è un elemento di
primaria importanza nella costruzione di un sistema (Hw + Sw)
per la soluzione di un problema
Formalizzazione di problemi
Complessità

Complessità: esempi

Fatto
Non è detto che un algoritmo A1 con complessità asintotica
minore di quella di un altro algoritmo A2 (per lo stesso
problema) si comporti meglio per ogni dimensione.

Esempio
Siano A1 e A2 due algoritmi tali che

TA1 (n) = 1000n TA2 (n) = 2n

Per istanze di dimensione compresa tra 1 e 13 conviene


utilizzare A2 .
Formalizzazione di problemi
Complessità

Complessità: esempi

Fatto
Non è detto che un algoritmo A1 con complessità asintotica
minore di quella di un altro algoritmo A2 (per lo stesso
problema) si comporti meglio per ogni dimensione.

Esempio
Siano A1 e A2 due algoritmi tali che

TA1 (n) = 1000n TA2 (n) = 2n

Per istanze di dimensione compresa tra 1 e 13 conviene


utilizzare A2 .

Potrebbero piacerti anche