如果一个程序可以在1分钟内解决30个磁盘的河内塔问题,那么用24个磁盘解决问题需要多长时间? 60个磁盘怎么样?
我知道你需要找出某种方法才能解决这个问题,但是如何做到这一点?谢谢!
答案 0 :(得分:3)
这取决于实际的复杂程度。在不知情的情况下,你可以说的是,通常需要超过一分钟才能转移60个磁盘而不是转移到24个转盘: - )
实际上,河内的复杂性基本上是O(2n)
。这样做的原因是,如果需要x
次操作才能将30个磁盘从极点A
转移到极点C
,那么基本上需要2x
次操作才能转移31个。
背后的原因是您使用x
操作将前30个磁盘从A
转移到B
,然后将最大磁盘从A
转移到{{ 1}},然后使用其他C
操作将所有内容从x
转移到B
。
因此,在它最纯粹的形式中,需要C
移动24个磁盘(六个步骤中的每个步骤从{30}降至24),或者不到一秒。
对于60个磁盘,这将是1/2 x 1/2 x 1/2 x 1/2 x 1/2 x 1/2 x 1 minute
,或大约两千年。
请记住,复杂性分析实际上不是意味着告诉您需要多长时间,而是在输入大小发生变化时,工作量(如处理步数)会如何变化。
通常,当输入大小增加时,您只使用大多数重要的术语,因此显示处理步骤的公式计为:
1/2
将所有视为230 x 1 minute
,因为这是最重要的术语。
时间将受所有条款的影响。我在上面提到的“最纯粹的形式”是为了表明复杂性是影响运行时间的唯一术语。