有没有一种用于算法的自动运行时分析的方法?


10

我想知道,是否有一种至少可以在相关算法子集(可以分析的算法)上运行的自动运行时分析方法?

我用Google搜索这给了我“自动算法分析” 这个,但实在是太mathy。我只想要一个我可以理解的psuedocode中的简单示例。可能太具体了,但我认为值得一试。


我看不到“ any”和“ an”之间的压力如何阐明您真正追求的目标。如果某个决策程序绑定到特定算法B,则没有实际输入,答案总是相同的。我想您想问的是,是否“绑定某类算法的某类算法中的任何算法”。(编辑:这也已经指出了我姆恩的评论)。
Nicholas Mancuso 2014年

2
使用“ an”和“ any”的含糊之处正是发明量词的原因。
Nate Eldredge 2014年

2
我编辑了问题,以关注相关部分。请注意,我是如何使用精确的零数学来准确地表达问题(就您到目前为止指定的问题而言)。现在的问题仍然是病态:中当然也有这样的算法。例如,有一个简单的算法可以分析(非常相关)一类在时间中运行的算法。因此,您显然需要对输入集施加一些限制。(请注意,可能不会存在“我能理解的伪代码中的简单示例”。)Θ(nlogn)
拉斐尔

Answers:


12

COSTA工具不只是这一点,虽然它在很多情况下出现故障,你可以想像,由于可计算性问题。有许多文章关于这一点; E. Albert,P.Arenas,S.Genaim,G.Puebla,D.Zanardini编写的Java字节码成本分析是一个很好的起点。

采取的方法是从Javabyte代码推断运行时重现,然后将其转换为封闭形式。该工具还可以计算空间使用范围。


8
@Nathvi我可以理解您对某些评论感到恼火,但我同意这并不是真的必要,但您也应注意不要将“ pedantic runl”一词用于声誉卓著的科学家的工作(顺便说一句我的回答)。您有权不喜欢数学,但是如果没有数学,您不可能走得太远,而无礼的贬义词也无济于事。
babou 2014年

12

没有算法可以决定给定算法是否暂停,因此特别是没有算法可以严格分析给定算法的复杂性。


2
我的问题不是关于任意输入的算法,如果是,那么由于停顿问题,您的答案将是正确的。如果我的问题的措辞是正确的:“是否有一个算法A接受任何算法B,然后输出算法B的时间复杂度?”
Nathvi 2014年

6
如果算法B是固定的,那么肯定有一个算法A。只要有一个只打印“ O(n)”或与B对应的复杂度度量就什么都不做的算法就足够了。如果算法A仅存在一个可能的输入,那么我们只需要一个输出。
mhum 2014年

5
@Nathvi对我来说也不是很清楚-我也将问题理解为“是否有一种算法可以找到任何其他算法的复杂性”,但我仍然不明白您的真正问题。如果您要计算投票数,显然有2个以上的人以这种方式进行解释。万一发生混乱,编辑您的问题确实是个好主意,否则只有阅读此对话的人(而不是每个阅读问题的人)才能理解您的要求并给出良好的答案。像你看上去觉得DW的反应是敌对- FWIW,我不认为它的用意是..
JKFF

6
@ignis答案可能不完整,但是Yuval写的句子是绝对正确的。停顿问题并不是一些奇怪的附带情况:这是计算的本质。
David Richerby 2014年

3
@nikie这对问题没有帮助;即使在所有总是终止算法的集合上,运行时范围也是不确定的
拉斐尔

9

我知道一种用于(半)自动平均病例分析的方法,即MaLiJAn¹。它与Knuth在TAoCP中使用的分析非常相似。核心思想是

  • 将程序(流)建模为马尔可夫链,
  • n
  • n
  • 使用计算机代数来推算平均成本(将这些函数烧掉)。

请注意,只有累加成本度量(例如比较,“时间”)有效并且只有期望值是准确的(假设完美的概率函数),才能得出更高的矩。

除了外推法外,所有步骤都是严格的[2],并且已经证明该方法可以高精度地重现众所周知的结果-当然,要有适当的随机样本输入。尽管结果没有证据甚至没有近似保证(到目前为止,外推步骤仅是启发式的),但使用该工具获得的结果非常适合尝试难以分析的算法和提出假设[3,4]。


  1. 完全公开:我是该研究小组的成员,并且参与了该工具的开发。
  2. 算法和数据结构的最大似然分析由U.劳贝和M.内伯尔(2010)[ 预印本 ]
  3. 工程的Java 7的双枢轴快速排序使用MaLiJAn由S. Wild等人(2012)[ 预印本 ]
  4. U. Laube和M. Nebel(2015)对特殊图形上的Ford-Fulkerson方法的最大似然分析 [ 预印本 ]

这些技术是否附带了对平均案例分析精度的估计?
马丁·伯杰

@MartinBerger不幸的是,没有。我们对此有一些想法,但没有任何巩固的方法,更不用说实施了。请注意,很容易愚弄任何仅检查有限多个输入大小的方法,因此通常没有什么希望。基于运行时功能和/或数据集的假设,可能会发生一些事情。该工具至少应该能够说“需要更多数据”。
拉斐尔

那很有意思。希望您能做些额外的工作。
马丁·伯杰

8

当然,正如Yuval Filmus所指出的那样,人们不应该期望对这些问题有一个总体解决方案。但是通常情况下,可以找到有关一般情况有趣子集的解决方案。

我碰巧知道这类工作,所以我绝不是专家,甚至也不是这方面的知识渊博的人。它涉及自动平均复杂度分析,该工作由Philippe Flajolet及其同事完成。

λυ´ω

我在网上发现的一篇论文是1990年的一篇论文:Philippe Flajolet,Paul Zimmermann和Bruno Salvy 进行的算法自动平均情况分析

我希望以后的文章会扩展这项工作,但我真的不知道。这项工作被大量引用,并且在网络上搜索应该会产生更多关于同一主题的最新工作。

现在,恐怕Flajolet和他的同事的工作是非常数学的,并且我不希望有那么容易阅读的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.