非单调最坏情况复杂性的一个例子

时间:2012-02-08 23:01:57

标签: runtime time-complexity asymptotic-complexity

是否有人知道自然程序或算法具有非单调的最坏情况行为?

非单调的最坏情况行为我的意思是存在一个自然数n,使得大小为n + 1的输入的最坏情况运行时小于大小为n的输入的最坏情况运行时。

当然,使用此行为构建程序很容易。甚至可能是自然程序中的小n(如n = 1)发生这种情况。但是我对一个非常单调的有用算法很感兴趣。

2 个答案:

答案 0 :(得分:0)

  

是否有人知道自然程序或算法有一个   非单调的最坏情况行为?

请定义“自然程序或算法”。概念“算法”有一个我所知道的定义,并且肯定有算法(正如你正确承认的那样)具有非单调的最坏情况运行时复杂性。如果一个程序没有任何必要的工作或者它解决的问题类别的运行时复杂性最小,那么这个程序是“自然的”吗?在那种情况下,你会认为BubbleSort不是算法吗?更重要的是,我可以将问题定义为具有非单调最坏情况行为的最有效解决方案。这样的问题会“不自然”吗?你对“自然问题”的定义是什么?

  

当然,使用此行为很容易构建程序。

然后真正的问题是什么?在您承诺定义自然/有用的算法和问题之前,您的问题没有答案。您是否只对人们已经在现实世界中使用的预先存在的算法感兴趣?如果是这样,你应该说明,问题就变成了搜索文献的问题。坦率地说,我无法想象“自然,有用的算法”的合理定义,这将排除许多具有非单调运行时复杂性的算法示例......

  

但我对一个非单调的有用算法感兴趣   大n。

请定义“有用的算法”。概念“算法”有一个我所知道的定义,并且肯定有算法(正如你正确承认的那样)具有非单调的最坏情况运行时复杂性。如果算法正确解决了某些问题,它是否“有用”?我可以很容易地定义一个问题,该问题可以通过具有非单调运行时复杂性的算法来解决。

答案 1 :(得分:0)

考虑二元搜索。

实现二进制搜索时,您需要考虑您要拆分的数组段长度奇怪的情况。那时你有两个选择: 1.向上/向下舍入 2.检查两个索引并在继续之前做出决定。

如果你选择第一种情况(让我们假设你向下舍入)。对于奇数长度数组,您要搜索的数字是通过中间点的数字,您将需要额外的迭代。
如果那个奇数数组又添加了一个元素,它将为你节省额外的迭代次数。

如果你选择了第二种情况,那么大多数执行的算法都会进行更奇怪的迭代,那么如果它与额外的元素一起使用,则需要进行更多的比较。

请注意,所有这些都非常依赖于实现,因此如果没有真正的算法(并且还有真正的实现),就无法得到真正的答案。

所有这一切都是基于假设你在谈论实际的运行时差异而不是渐近差异。如果情况并非如此,那么答案就是“不”。没有非单调最坏情况渐近运行时间的算法。这将违背“最坏情况”的概念。