代码之家  ›  专栏  ›  技术社区  ›  Sagar Varpe

如何测试完美优化的算法?

  •  3
  • Sagar Varpe  · 技术社区  · 15 年前

    2 回复  |  直到 13 年前
        1
  •  4
  •   Pierre    15 年前

    对于我们这些凡人来说,他们只想知道一个算法:

    • 按预期合理工作;
    • 比别人快;

    有一个简单的步骤叫做“基准测试”。

    挑选该地区最好的竞争者,并与你的算法进行比较。

    如果您的算法获胜,那么它将更好地满足您的需求(由

        2
  •  8
  •   polygenelubricants    15 年前

    没有简单的方法证明任何给定的算法是渐近最优的。

    证明最优性(如果有的话)有时会在算法编写之后的几年和/或几十年。一个典型的例子是 Union-Find/disjoint-set data structure .

    不相交的集合林是一种数据结构,其中每个集合由树数据结构表示,其中每个节点持有对其父节点的引用。它们最初是由伯纳德A。盖勒和迈克尔J。费舍尔在1964年,虽然他们的精确分析花了数年时间。

    […]这两种技术相辅相成;综合起来计算,每个工序的摊销时间仅为 O(α(n)) ,在哪里 α(n) 是函数的逆函数 f(n) = A(n,n) A 是不是增长非常快 Ackermann 功能。

    对于某些算法来说,最优性可以通过非常仔细的分析来证明,但一般来说,一旦一个算法被编写出来,就很难判断它是否是最优的。事实上,要证明算法是否正确并不总是容易的。

    另请参见


    实际考虑

    请注意,由于许多因素(例如,易于实现、给定输入参数范围的实际性能更好等),有时渐近“更差”算法在实践中更好。

    一个典型的例子是 quicksort 简单的枢轴选择可能表现出二次最坏情况的性能,但在许多情况下仍优于更复杂的变量和/或其他渐近最优排序算法。