问题:汉诺威递归算法的时间复杂性
算法如下。
解释: size表示汉诺威的规模,startStack表示汉诺威的开始,endStack表示完成,midStack表示辅助
defTowers(size,startStack,endStack,midStack ) :
if size==1:
打印' move disk from ',firstStack,' to ',endStack
else:
Towers(size-1,firstStack,midStack,endStack ) )。
Towers(1,firstStack,endStack,midStack ) )。
Towers(size-1,midStack,endStack,firstStack ) )。
分析:设问题的规模为n,t(n )为问题规模的必要步骤,
t(n )=1t )1) 2t(n-1 ) /在规模为n-1情况下通过两次,因此成为2t ) n-1 )
=122t(n-1 )//因为规模为1时需要2个步骤,所以t )1)=2
=32[32t(n-2 ) ] //规模为n-2时,重复上述操作
=94t(n-2 ) )。
=94[32t(n-3 ) ]
=218t(n-3 ) )。
.
=C2^kt(n-k ) ) )
在n-k=1情况下,得到k=n-1,
t(n )=c2^ ) n-1 ) t )1) /其中t )1)=2
t(n )=C 2^n
总的来说,汉诺威的时间复杂度为o(2^n )
注:算法是用Python语言编写的