如果一个程序可以在1分钟内解决30个磁盘的河内塔问题,那么解决24个磁盘的问题需要多长时间?60 个磁盘怎么样?
我知道你需要找出某种公式才能解决这个问题,但如何做到这一点?谢谢!
这取决于实际的复杂性。不知道这一点,您只能说移动 60 个磁盘通常需要一分钟以上,而移动 24 个磁盘通常需要更少时间:-)
碰巧的是,河内的复杂性基本上是O(2n)
。这样做的原因是,如果将 30 个磁盘从极A
移动到极C
需要x
操作,那么基本上需要2x
次操作才能移动 31。
这背后的原因是,您使用x
操作将前 30 个磁盘从A
移动到B
,然后将最大的磁盘从A
移动到C
,然后使用另一个x
操作将所有内容从B
移动到C
。
因此,在最纯粹的形式中,移动 24 个磁盘需要1/2x1/2x1/2x1/2x1/2x1/2x 1 minute
(六个步骤中的每一个1/2
从 30 个磁盘移动到 24 个),或者不到一秒钟。
对于60个圆盘来说,这将是230x 1 minute
,或大约两千年。
请记住,复杂性分析并不是要告诉您某件事需要多长时间,而是要告诉您工作量(例如处理步骤计数)如何随着输入大小的变化而变化。
通常,您只使用随着输入大小增加而最重要的术语,以便显示处理步骤计数的公式
:2^n + n^2
2^n - 42
2^n + n^2 + 7n + 12
都会被认为是O(2n)
,因为这是最重要的术语。
所花费的时间将受到所有条款的影响。我上面提到的"最纯粹的形式"旨在表明复杂性是影响运行时间的唯一术语。