比较算法之间的时间(Big O)

时间:2014-02-19 01:33:59

标签: java big-o

如果一个程序可以在1分钟内解决30个磁盘的河内塔问题,那么用24个磁盘解决问题需要多长时间? 60个磁盘怎么样?

我知道你需要找出某种方法才能解决这个问题,但是如何做到这一点?谢谢!

1 个答案:

答案 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,因为这是最重要的术语。

时间将受所有条款的影响。我在上面提到的“最纯粹的形式”是为了表明复杂性是影响运行时间的唯一术语。