PROBLEMI, ALGORITMI e COMPLESSITÀ
Problema computazionale:
• Descrizione dell’input,
• Compito da svolgere.
Esempio:
SOMMA:
INPUT: 2 numeri x e y,
COMPITO: stampare x+y.
Ad ogni problema computazionale possiamo
associare una misura della sua complessità.
Complessità di un problema: quantità di risorse
necessaria e sufficiente per risolverlo.
Le principali risorse in informatica sono il tempo di
calcolo e lo spazio di memoria.
Ci concentriamo sul tempo di calcolo.
1
PROBLEMI, ALGORITMI e COMPLESSITÀ
Tre problemi:
1.ORDINAMENTO:
INPUT: n numeri,
COMPITO: disporli in ordine crescente.
2.COMMESSO VIAGGIATORE:
INPUT: distanze tra ogni coppia di n
città,
COMPITO: determinare il percorso più
corto che passa per tutte le città una ed
una sola volta e torna al punto di
partenza.
3.TERMINAZIONE:
INPUT: un programma e i suoi dati,
COMPITO: dire se il programma
eseguito sui dati termina in tempo finito.
2
PROBLEMI, ALGORITMI e COMPLESSITÀ
La complessità computazionale in tempo è data dal
numero di operazioni che il miglior algoritmo esegue
per risolvere il problema.
Un algoritmo è un procedimento risolutivo per un
problema computazionale. Sequenza di ordini non
ambigui descritti usando un qualche formalismo (es:
linguaggio di programmazione).
Esempio:
MAX
INPUT: n numeri: a[1],…,a[n]
COMPITO: stampa il massimo tra tutti gli a[i].
Algoritmo per calcolare il massimo tra n numeri.
Passo 1.
Passo 2.
Passo 3.
Passo 4.
Passo 5.
i=1
max=0
se a[i]>max allora max=a[i]
i=i+1
se i>n vai al passo 6 altrimenti
vai al passo 3
Passo 6. stampa max
3
PROBLEMI, ALGORITMI e COMPLESSITÀ
ORDINAMENTO: esiste un algoritmo che ordina n
numeri eseguendo circa n log(n) operazioni. Meglio
non si può fare. Quindi n log(n) è la complessità del
problema di ordinamento.
Esercizio: descrivere un algoritmo che ordina n
numeri in tempo proporzionale a n 2
COMMESSO VIAGGIATORE: non si conoscono
algoritmi con costo meno che esponenziale.
Sostanzialmente occorre esaminare tutte le soluzioni
e scegliere la più corta. Numero di soluzioni
n −1
(n − 1)! = ∏ i = 1 ⋅ 2 ⋅ 3 ⋅ L ⋅ (n − 2) ⋅ (n − 1)
i =1
TERMINAZIONE: non esistono algoritmi per
risloverlo. Indecidibile !!!
4
PROBLEMI, ALGORITMI e COMPLESSITÀ
Logaritmi, polinomi, esponenziali
Logaritmo. log2n = potenza a cui elevare 2 per
ottenere n.
Il logaritmo in base b di un numero misura
approssimativamente il numero di cifre necessarie
per scrivere il numero in base b.
Polinomi. 18n6 + 4n2 + 3n + 2
Esponenziali. 2n, n!, nn
Alcuni valori…..
n=10 n=20
1
1
log2n
3
3
n2
4
7
2n
7
19
n!
numero di cifre...
n=30
1
3
10
33
n=40
1
4
13
48
n=50
1
4
16
65
n=100
1
5
31
158
Numero di cifre
decimali per
rappresentare 50!
5
PROBLEMI, ALGORITMI e COMPLESSITÀ
Ricorsione: Le torri di Hanoi
Descrizione del problema: Spostare gli n anelli dal palo di
sinistra a quello di destra spostando un anello alla volta e
senza mai spostare un anello più grande su di un anello più
piccolo.
6
PROBLEMI, ALGORITMI e COMPLESSITÀ
Prima osservazione: Sono capace di spostare un anello da
un palo all’altro se sugli altri due pali ci sono anelli più
grandi.
7
PROBLEMI, ALGORITMI e COMPLESSITÀ
Seconda osservazione: Se sono capace di spostare n-1
anelli da un palo all’altro sono capace di spostarne n
8
PROBLEMI, ALGORITMI e COMPLESSITÀ
Algoritmo per spostare n anelli.
Sposta(n,sinistra,destra)=
Sposta(n-1,sinistra,centro)
Sposta(1,sinistra,destra)
Sposta(n-1,centro,destra)
fine.
Perché funziona ???
9
PROBLEMI, ALGORITMI e COMPLESSITÀ
Quanti spostamenti dobbiamo eseguire per muovere
n anelli da sinistra a destra ?
S(1) = 1
S(n) = S(n-1) + S(1) + S(n-1)
Quindi
S(n) = 2 S(n-1) + 1
= 2 (2 S(n-2) + 1) +1
= 4 S(n-2) + 2 + 1
= 4 (2 S(n-3) + 1) + 2 + 1
= 8 S(n-3) + 4 + 2 + 1
= 1 + 2 + 4 + 8 +16 + … + 2(n-1)
= 2n - 1
In Totale 2n – 1 spostamenti.
20 anelli = 524287 spostamenti….
10
PROBLEMI, ALGORITMI e COMPLESSITÀ
Soluzione all’esercizio dell’ordinamento
INSERTION SORT: I numeri sono rappresentati da un
mazzo di carte posto su un tavolo. Peschiamo dal mazzo
una carta alla volta e la inseriamo nel posto giusto tra le
carte che già abbiamo in mano.
INPUT:
45 17 39 21 47 89 33 12 10 26
17
17
17
17
17
17
12
10
10
45
39
21
21
21
21
17
12
12
39
45
39
39
39
33
21
17
17
21
21
45
45
45
39
33
21
21
47
47
47
47
47
45
39
33
26
89
89
89
89
89
47
45
39
33
33
33
33
33
33
89
47
45
39
12
12
12
12
12
12
89
47
45
10
10
10
10
10
10
10
89
47
26
26
26
26
26
26
26
26
89
OUTPUT:
10 12 17 21 26 33 39 45 47 89
11
PROBLEMI, ALGORITMI e COMPLESSITÀ
Caso peggiore:
15
14
13
12
11
10
14
15
14
13
12
11
13
13
15
14
13
12
12
12
12
15
14
13
11
11
11
11
15
14
10
10
10
10
10
15
circa n2/2
spostamenti
12