如何测试算法进行完美优化?

时间:2010-07-17 08:33:56

标签: algorithm

有没有办法测试算法进行完美优化?

2 个答案:

答案 0 :(得分:8)

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

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

  

脱节集林是一种数据结构,其中每个集合由树数据结构表示,其中每个节点都拥有对其父节点的引用。它们首先由Bernard A. Galler和Michael J. Fischer于1964年描述,尽管它们的精确分析需要数年时间。

     

[...]这两种技术相辅相成;一起应用,每个操作的摊还时间仅为O(α(n)),其中α(n)是函数f(n) = A(n,n)的倒数,而A是增长极快的Ackermann功能。

     

[...]事实上,这是渐近最优的:Fredman和Saks在1989年表明,每个操作平均必须通过任何不相交的数据结构来访问Ω(α(n))个字。

对于某些算法,经过非常仔细的分析可以证明最优性,但一般来说,没有简单的方法可以判断算法一旦写入就是最优的。事实上,要证明算法是否正确并不总是很容易。

另见

  • Wikipedia/Matrix multiplication
  • Wikipedia/Asymptotically optimal
      

    今天许多最着名的算法是否渐近最优是一个悬而未决的问题。例如,有一个O(nα(n))算法用于查找最小生成树。该算法是否渐近最优是未知的,并且如果以任何一种方式解决,可能会被视为重要结果。


实际考虑因素

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

一个典型的例子是quicksort,它具有简单的枢轴选择,可能表现出二次最坏情况的性能,但在许多场景中仍然比较复杂的变体和/或其他渐近最优的排序算法更受青睐。

答案 1 :(得分:4)

对于我们这些只想知道算法的凡人:

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

有一个简单的步骤称为“基准”。

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

如果您的算法获胜,则可以更好地满足您的需求(由...定义的算法) 你的基准)。