比较算法之间的时序(大O)



如果一个程序可以在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),因为这是最重要的术语。

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

最新更新