【问题标题】:An Example for Non-Monotone Worst-Case Complexity非单调最坏情况复杂性的示例
【发布时间】:2012-02-08 23:01:57
【问题描述】:

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

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

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

【问题讨论】:

  • 定义“有用”。即使算法不是尽可能高效,它也可能很有用。另外,您是否排除了人为的算法?如果您要查找的是具有此属性的常见、知名、著名算法,或者是否存在最优算法具有此属性的问题,我建议您明确说明。否则,“有用性”是主观的。

标签: runtime time-complexity asymptotic-complexity


【解决方案1】:

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

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

当然,用这种行为构造一个程序很容易。

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

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

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

【讨论】:

    【解决方案2】:

    考虑二分搜索。

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

    如果您选择第一种情况(假设您向下取整)。对于您要搜索的数字是通过中间点的数字的奇数长度数组,您将需要进行额外的迭代。
    如果这个奇怪的数组再添加一个元素,它会为您节省额外的迭代。

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

    请注意,所有这些都非常依赖于实现,因此如果没有真正的算法(以及真正的实现),就不可能有真正的答案。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多