Upload
gianluca-milano
View
212
Download
0
Embed Size (px)
Citation preview
Un problema
• Progettare un programma per calcolare se un qualsiasi altro programma contiene un ciclo infinito– Ciclo infinito: per esempio, eseguire le istruzioni con numeri
1000, 1001, …, 1010, poi sempre tornare all’istruzione 1000, poi ripetere 1001, …, 1010, poi tornare all’istruzione 1000 … ecc.
• Supponiamo che un programma per calcolare se un qualsiasi altro programma contiene un ciclo infinito esiste– Programma LC(P,x), dove P è un altro programma e x è
l’input del programma P– Il risultato di LC(P,x) è “Sì” se, quando P è eseguito su x, fa
un ciclo infinito– Altrimenti il risultato di LC(P,x) è “No”
Un problema
• Supponiamo che esiste un programma CD(P):– Calcola LC(P,P)– Se il risultato di LC(P,P) è “Sì”, termina con il risultato “Sì”– Altrimenti, torna al punto del CD(P) dopo il calcolo di
LC(P,P)
Ans=LC(P,P)
Ans?Termina con risultato Ans
“No”“Sì”
CD(P)
Un problema
• Eseguire CD su se stesso: che cos’è il risultato di CD(CD)?– Se il risultato di LC(CD,CD) è “No”: vuol dire che CD non ha un
ciclo infinito con input CD
– Poi CD(CD) fa un ciclo infinito (in rosso)
– Il risultato di LC è scorretto
Ans=LC(P,P)
Ans?Termina con risultato Ans
“No”“Sì”
CD(P)
Un problema
• Eseguire CD su se stesso: che cos’è il risultato di CD(CD)?– Se il risultato di LC(CD,CD) è “Sì”: vuol dire che CD ha un ciclo
infinito con input CD
– Poi CD(CD) non fa un ciclo infinito (in rosso)
– Il risultato di LC è scorretto (di nuovo)
Ans=LC(P,P)
Ans?Termina con risultato Ans
“No”“Sì”
CD(P)
Un problema
• Non è possibile trovare un programma per calcolare se un qualsiasi altro programma contiene un ciclo infinito
• Per molti problemi che possono essere descritti formalmente, non possiamo trovare programmi per la loro soluzione
• Per altri problemi, possiamo trovare programmi per la loro soluzione, ma non programmi efficienti– Programma efficiente: il numero di istruzioni eseguiti è una funzione
polinomiale della dimensione del input al programma– Per esempio: non sì può trovare un programma efficiente per
trovare l’insieme meno costoso di biglietti aerei per fare un viaggio a n città