是否存在“负面”大O复杂性这样的事情?

时间:2010-07-09 01:53:48

标签: algorithm complexity-theory big-o

  

可能重复:
  Are there any O(1/n) algorithms?

这只是因为没有特别的原因突然出现在我脑海中,我想这是一个奇怪的问题。是否有任何已知的算法或问题实际上可以通过更大的输入来解决更容易更快?我猜测,如果有,它不会出现像突变或排序这样的事情,那将是决策问题。也许有一些问题,有大量的输入可以很容易地决定什么,但我无法想象。

如果没有负面复杂性这样的事情,是否有证据证明不存在?或者只是没有人找到它?

7 个答案:

答案 0 :(得分:9)

不,这是不可能的。由于Big-Oh被假设为算法执行的与其域大小相关的操作数的近似,因此将算法描述为使用负数操作是没有意义的。

维基百科article的正式定义部分实际上定义了使用正实数的Big-Oh表示法。所以实际上甚至没有证据,因为Big-Oh的整个概念对于正式定义的负实数没有意义。

简短回答:这是不可能的,因为定义是这样说的。

答案 1 :(得分:4)

<强>更新 为了说清楚,我正在回答这部分问题:是否有任何已知的算法或问题实际上通过更大的输入更容易或更快地解决?

正如此处接受的答案中所述, 没有 算法可以在输入更大的情况下更快地运行。 Are there any O(1/n) algorithms? 即使像sleep(1/n)这样的算法也必须花时间阅读其输入,因此其运行时间有一个下限。

特别是,作者引用了相对简单的子串搜索算法:
http://en.wikipedia.org/wiki/Horspool

PS但是对于这样的算法使用术语“负复杂性”对我来说似乎并不合理。

答案 2 :(得分:1)

考虑在负时间执行的算法,与考虑时间倒退相同。

如果程序在上午10:30开始执行并在上午10:00停止而不经过上午11:00,则它刚刚执行了时间= O(-1)。

=]

现在,对于数学部分:

如果你无法想出一系列及时执行的行动(你永远不会知道......大声笑),那么证据非常简单:

  

positiveTime = O(-1)表示:

     

positiveTime&lt; = c * -1,对于任何C&gt; 0和n> n0&gt; 0

考虑“C&gt; 0”限制。 我们找不到乘以-1的正数将导致另一个正数。 考虑到这一点,结果如下:

positiveTime&lt; = negativeNumber,对于任何n&gt; n0&gt; 0

只是证明你不能用O(-1)算法。

答案 3 :(得分:0)

不是真的。 O(1)是你能想到的最好的。

我能想到的最接近的是语言翻译,它使用目标语言中的大量短语数据集来匹配源语言中较小的片段。数据集越大,翻译越好(并且在某种程度上更快)。但那仍然不是O(1)。

答案 4 :(得分:0)

好吧,对于许多计算,例如“给定输入A返回f(A)”,您可以“缓存”计算结果(将它们存储在数组或映射中),这将使得更大数量的值更快地计算,如果其中一些值重复。

但我认为它不符合“负面复杂性”。在这种情况下,最快性能可能会计为O(1),最差情况下性能将为O(N),平均性能将介于两者之间。

这有点适用于排序算法 - 其中一些具有O(N)最佳情况复杂度和O(N ^ 2)最差情况复杂度,具体取决于要处理的数据状态排序

我认为为了具有负复杂性,算法应该在被要求计算结果之前返回结果。即它应该连接到时间机器,并且应该能够处理相应的"grandfather paradox"

答案 5 :(得分:0)

与关于空算法的另一个问题一样,这个问题是一个定义的问题,而不是一个可能或不可能的问题。当然可以考虑算法花费O(1 / n)时间的成本模型。 (当然,这不是负面的,而是随着更大的输入而减少。)算法可以像sleep(1/n)那样做其他建议的答案之一。确实,当n被发送到无穷大时,成本模型会崩溃,但是n永远不会被发送到无穷大;无论如何,每种成本模型最终都会崩溃。对于1字节到1千兆字节的输入大小,说sleep(1/n)需要O(1 / n)时间可能非常合理。对于任何时间复杂度公式来说,这是一个非常广泛的范围。

另一方面,最简单,最标准的时间复杂定义使用单位时间步长。正整数值函数不可能具有渐近渐近的渐近函数;它可以是最小的是O(1)。

答案 6 :(得分:0)

我不知道这是否适合,但它让我想起了bittorrent。下载文件的人越多,所有人下载的速度就越快