|
L'algoritmo ricorsivo è procedure Hanoi(N, Origine, Libero, Arrivo: Byte); begin if(N = 1) then write(Origine:2, ' --> ', Arrivo:2) else begin Hanoi(N-1, Origine, Arrivo , Libero); Hanoi(1 , Origine, Libero , Arrivo); Hanoi(N-1, Libero , Origine, Arrivo); end; end; Il tempo di attesa è dato dal numero di chiamate ricorsive (mosse...) T(1) = 1 T(2) = T(1)+T(1)+T(1) = 1+1+1 = 3 = 22-1 T(3) = T(2)+T(1)+T(2) = 2*T(2)+1 = 2*3+1 = 7 = 23-1 T(4) = ... = 2*7+1 = 15 = 24-1 ... Per induzione, se T(1) = 1 e T(n-1) = 2n-1-1 allora T(n) = 2*T(n-1)+1 = 2(2n-1-1)+1 = 2n-2+1 = 2n-1. Il problema della torre di Hanoi ha complessità O(2n), esponenziale, e qualunque altro algoritmo risolutivo non potrà avere complessità minore... (è un problema intrinsecamente esponenziale) I tempi necessari per risolvere il problema sono
|
|