Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Paolo Camurati
Dip. Automatica e Informatica
Politecnico di Torino
Algoritmo
Sequenza finita di istruzioni che:
risolvono un problema
soddisfano i seguenti criteri:
ricevono valori in ingresso
producono valori in uscita
sono chiare, non ambigue ed eseguibili
terminano dopo un numero finito di passi
operano su strutture dati
Algoritmo: da al-Khwarizmi, matematico
persiano/uzbeko del IX secolo d.C.
algoritmo
altrimenti
procedura
A.A. 2019/20 01 Gli algoritmi 3
La congettura di Collatz (1937)
Data la funzione f(n) così definita:
n/2 per n pari
f(n) =
3n + 1 per n dispari
dato un qualsiasi numero naturale n, la
funzione f(n) convergerà ad 1 in un numero
finito di passi?
n = 27
Converge in 111 passi
Non si può garantire che con n qualsiasi converga.
while (n > 1) {
printf("%d ", n);
if ((n%2) ==1)
n = 3*n + 1;
else
n = n/2;
}
printf("%d \n", n);
return 0;
}
La macchina di Turing
nastro … * 1 0 0 1 + 0 * 0 0 …
A.A. 2019/20 01 Gli algoritmi 15
Lo stato interno è la configurazione della
macchina in funzione dell’input corrente e
della «storia» passata.
La macchina, in funzione dello stato e
dell’input correnti, scrive un valore sul nastro
e sposta la testina a DX o SX (programma).
void Goldbach(void) {
int n = 2, counterexample, p, q;
do { 03Goldbach.c
n = n + 2;
printf("I try for n = %d\n", n);
counterexample = 1;
for (p = 2; p <= n-2; p++){
q = n - p;
if (Prime(p) == 1 && Prime(q) == 1){
counterexample = 0;
printf("%d %d\n", p, q);
}
}
} while (counterexample == 0 && n < upper);
if (counterexample == 1)
printf(“Counterexample is: %d \n", n);
else
printf("Until n= %d none found\n", upper);
return;
}
A.A. 2019/20 01 Gli algoritmi 27
I problemi di decisione decidibili possono essere:
trattabili, cioè risolvibili in tempi “ragionevoli”:
ordinare un vettore di n interi
intrattabili, cioè non risolvibili in tempi
“ragionevoli”:
le Torri di Hanoi
NP
P NP = P
probabile improbabile
A.A. 2019/20 01 Gli algoritmi 31
La Classe NP-C
Un problema è NP-completo se:
è NP
P
NP-C
TRAVELLING
SALESMAN
A.A. 2019/20 01 Gli algoritmi 35
Vertex-cover
B
Esempio A
D
B B
A A
D D
C C
5 4 6 S5
A.A. 2019/20 01 Gli algoritmi 41
Esempio
Problema di decisione: dato il grafo non
orientato, esiste un vertex-cover di cardinalità
2?
G = (V, E)
a b V = a,b,c,d,e,f
f c E = (a,c),(a,f),(b,c)
(b,f),(c,d),(c,f)(e,f)
e d
Sf
U = (a,c),(a,f),(b,c)
Se (e,f) Sa (b,f),(c,d),(c,f)(e,f)
(a,f) Sa = (a,c),(a,f)
Sc (c,f) Sb = (b,c),(b,f)
(a,c)
Sc = (a,c),(b,c),(c,d),(c,f)
(b,c) (b,f) Sd = (c,d)
(c,d) Sb
Se = (e,f)
Sd
Sf = (a,f),(b,f),(c,f)(e,f)
Sf
Se (e,f) Sa a b
(a,f)
(c,f)
f c
Sc (a,c)
e d
(b,c) (b,f)
(c,d) Sb
Sd
NP-H NP-C
A.A. 2019/20 01 Gli algoritmi 46
NP:
• Fattorizzazione
• Isomorfismo grafi
NP-H: P:
NP-C:
• Permanente • Connettività
• Soddisfacibilità
di una matrice grafi
• Ciclo di Hamilton
• Primalità
• Clique
• Determinante
v 1 6 4 2 0 k 4
Ricerca con successo
v 1 6 4 2 0 v[0] k
v 1 6 4 2 0 v[1] k
v 1 6 4 2 0 v[0] k
v 1 6 4 2 0 v[1] k
Ricerca con fallimento
v 1 6 4 2 0 v[2] k
v 1 6 4 2 0 v[3] k
if (found == 0)
return -1;
else
return i;
}
Ordinamento:
Input: simboli <a1, a2, …, an> di un
insieme con relazione d’ordine totale
Output: permutazione <a’1, a’2, …, a’n>
dell’input per cui vale la relazione d’ordine
a’1 a’2 … a’n.
p0 p1 p2 p3
0 21 24 25 27
scheduling p1-p3-p0-p2
p1 p3 p0 p2
0 3 5 26 27
tempo medio di attesa (0+3+5 +26)/4 =8,5
scheduling (ordinamento per durata crescente) p2-
p3-p1-p0
p2 p3 p1 p0
01 3 6 27
tempo medio di attesa (0+1+3 +6)/4 =2,5
applicazioni ovvie
A.A. 2019/20 01 Gli algoritmi 61
trovare la mediana
ricerca binaria in un database
trovare i duplicati in una mailing list
…
6 3 5 1 7 21 8 4 12 0 9 8 4
i=1
Elemento da inserire x 3
3<6
6 6 5 1 7 21 8 4 12 0 9 8 4
3 6 5 1 7 21 8 4 12 0 9 8 4
A.A. 2019/20 01 Gli algoritmi 66
Esempio
Già ordinati Non ancora considerati
3 6 5 1 7 21 8 4 12 0 9 8 4
i=2
Elemento da inserire x 5
5<6
3 6 6 1 7 21 8 4 12 0 9 8 4
5 > 3, inserisco 5
3 5 6 1 7 21 8 4 12 0 9 8 4
A.A. 2019/20 01 Gli algoritmi 67
Esempio
Già ordinati Non ancora considerati
3 5 6 1 7 21 8 4 12 0 9 8 4
i=3
Elemento da inserire x 1
1<6
3 5 6 6 7 21 8 4 12 0 9 8 4
1<5
3 5 5 6 7 21 8 4 12 0 9 8 4
A.A. 2019/20 01 Gli algoritmi 68
Esempio
Già ordinati Non ancora considerati
3 5 6 1 7 21 8 4 12 0 9 8 4
i=3
Elemento da inserire x 1
1<3
3 3 5 6 7 21 8 4 12 0 9 8 4
1 3 5 6 7 21 8 4 12 0 9 8 4
A.A. 2019/20 01 Gli algoritmi 69
06insertion-sort.c
Algoritmi:
C. Toffalori «Algoritmi», Collana «Raccontare la
Matematica», Il Mulino, 2015
Congettura di Collatz:
G. Gopalakrishnan «Computation Engineering»,
Springer 2006, 2.9
Congettura di Goldbach:
Crescenzi 1.2