无法推断出有关算法有效性的表格

时间:2009-06-28 11:19:03

标签: algorithm complexity-theory

我不完全确定following table

alt text http://files.getdropbox.com/u/175564/algTranslation.png

该表提供了当算法复杂度为给定大小时,左栏中给出的时间限制内可以解决的问题大小。

我对演绎表感兴趣。

表格告诉我

  • O(n)= 10M in second (这似乎是当前计算机的强大功能)
  • n 是要处理的项目数Thanks to Guffa!

我不确定如何推导出O(n * log(n))列中的值。

  1. 如何为O(n * log(n))或O(n ^ 2)推导出0.5M 的值?

3 个答案:

答案 0 :(得分:4)

不,n不是秒数,而是要处理的项目数。

O(n)表示处理项目的时间与项目数量呈线性关系。

O(n²)表示处理项目的时间是相对于项目数的平方。如果您将项目数量加倍,则处理时间将延长四倍。

请参阅:Big O notation

该表假定每个项目有一定数量的工作,虽然大O表示法仅指定算法如何对项目数量的变化作出反应,但它并没有告诉您有关每项工作量的信息。项目

编辑:
表中x轴的值只是基于每个项目的工作量相同的假设的近似值。例如,O(n²)的值3000从10百万的平方根舍入,即~3162.28。 10百万的立方根不是200,它是~215.44。

在一个真实的情境中,两个算法很少会为每个项目执行相同数量的工作。对于相同的目的,具有O(log n)的算法通常比O(n)算法在每个项目上做更多的工作,但是在大多数情况下它仍然是优选的,因为它可以更好地扩展。

答案 1 :(得分:1)

我认为这张表只是给出了一些非常近似的例子,当你有固定的时间(1秒,1分钟,1小时,1天或1天)时, n 对于不同类型的复杂性有多大你可以随意使用。

例如O(n ^ 3):

 1 second: 200^3 = 8 000 000 (roughly 10 million, given in O(n) column)
 1 minute: 850^3 = 614 125 000 (roughly 600 million, given in O(n) column))
 1 hour: 3000^3 = 27 000 000 000 (somewhat roughly 35 billion, given in O(n) column)

如您所见,该数字是非常粗略近似值。似乎作者想要使用漂亮的数字来说明他的观点。

答案 2 :(得分:1)

如果你每秒可以做10,000,000次操作,那么当你设置n = 500,000并且计算n * log(n)= 500,000 * log2(500,000)= 500,000 * 18 = 9,000,000 ops时,大约10,000,000用于“秒”分类。

同样地,当n = 3,000时,你得到n ^ 2 = 9,000,000。因此,在每一行上,操作的数量大致相同。

相关问题