11.07.2014 Views

Fondamenti di Informatica - Università degli studi di Parma

Fondamenti di Informatica - Università degli studi di Parma

Fondamenti di Informatica - Università degli studi di Parma

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Algoritmo ricorsivo<br />

• Il caso base si ha quando n vale 1, in questo<br />

caso possiamo spostare liberamente il <strong>di</strong>sco da<br />

una torre ad un’altra<br />

• Per spostare n <strong>di</strong>schi dalla torre 1 alla torre 3<br />

1 gli n-1 <strong>di</strong>schi in cima alla torre 1 vengono spostati sulla<br />

torre 2, usando la torre 3 come deposito temporaneo (si<br />

usa una chiamata ricorsiva, al termine della quale la<br />

torre 3 rimane vuota)<br />

2 il <strong>di</strong>sco rimasto nella torre 1 viene portato nella torre 3<br />

3 gli n-1 <strong>di</strong>schi in cima alla torre 2 vengono spostati sulla<br />

torre 3, usando la torre 1 come deposito temporaneo (si<br />

usa una chiamata ricorsiva, al termine della quale la<br />

torre 1 rimane vuota)<br />

Algoritmo ricorsivo<br />

• Si basa sul Principio <strong>di</strong> induzione<br />

• Il principio <strong>di</strong> induzione <strong>di</strong>ce che una<br />

proprietà è vera per qualsiasi valore <strong>di</strong> n<br />

se<br />

q è vera per n = 1, e<br />

q nell’ipotesi che sia vera per un dato valore <strong>di</strong> n<br />

= n’ siamo capaci <strong>di</strong> <strong>di</strong>mostrare che è vera<br />

per n = n’ +1<br />

FI - Algoritmi e Programmazione 55<br />

FI - Algoritmi e Programmazione 56<br />

La “Torre <strong>di</strong> Hanoi”<br />

Algoritmo Hanoi(n, da, a, int)<br />

input: il numero <strong>di</strong> <strong>di</strong>chi n, il<br />

perno <strong>di</strong> partenza, <strong>di</strong> arrivo e<br />

interme<strong>di</strong>o<br />

output: le mosse necessarie<br />

if n = 1 then<br />

muovi (1, da, a)<br />

else<br />

hanoi (n-1, da, int, a)<br />

muovi (n, da, a)<br />

hanoi (n-1, int, a, da)<br />

FI - Algoritmi e Programmazione 57<br />

FI - Algoritmi e Programmazione 58<br />

1<br />

10<br />

30<br />

2<br />

10<br />

20<br />

1<br />

30<br />

20<br />

3<br />

10<br />

30<br />

1<br />

20<br />

10<br />

2<br />

20<br />

30<br />

1<br />

10<br />

30<br />

mosse<br />

10 20 30<br />

Algoritmo ricorsivo<br />

• Si può <strong>di</strong>mostrare che il numero <strong>di</strong> mosse<br />

necessarie per risolvere il rompicapo con<br />

l’algoritmo proposto è pari a:<br />

2 n – 1<br />

• Il tempo necessario alla soluzione è<br />

proporzionale al numero <strong>di</strong> mosse (ogni mossa<br />

richiede un tempo costante) cioe’:<br />

T(n) = 2 n – 1<br />

FI - Algoritmi e Programmazione 59<br />

FI - Algoritmi e Programmazione 60

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!