什么时候说两种算法“相似”?


16

我不从事理论工作,但是我的工作需要不时阅读(和理解)理论论文。一旦理解了(一组)结果,我就会与与之共事的人讨论这些结果,其中大多数人也不是理论上的人。在其中一种讨论中,出现了以下问题:

什么时候说两个给定的算法“相似”?

“相似”是什么意思?我们可以说,如果您可以在论文中提出以下任一主张而不会混淆/烦扰任何审阅者(欢迎使用更好的定义),则可以说两种算法是相似的:

声明1.“算法与算法相似,也解决了问题 ”ABX

声明2。“我们的算法类似于算法 ”C

让我稍微具体一点。假设我们正在使用图算法。首先,两种算法必须相似的一些必要条件:

  1. 他们必须解决相同的问题。
  2. 他们必须具有相同的高级直观想法。

例如,谈到图遍历,广度优先和深度优先遍历满足以上两个条件;对于最短路径计算,广度优先和Dijkstra的算法满足上述两个条件(当然,在未加权图上);等等

这些条件是否也足够?更具体地,假设两种算法满足必要条件以变得相似。如果真的,您是否会称它们相似?

  1. 他们有不同的渐近表现?
  2. 对于一类特殊的图,一种算法需要时间,而另一种算法则需要时间?Ω(n)O(n1/3)
  3. 他们有不同的终止条件?(回想一下,他们正在解决相同的问题)
  4. 两种算法的预处理步骤是否不同?
  5. 两种算法的内存复杂度是否不同?

编辑:问题显然是非常依赖于上下文的,并且是主观的。我希望以上五种条件能够提出一些建议。如果需要获得答案,我很乐意进一步修改问题并提供更多详细信息。谢谢!


1
这实际上取决于上下文。例如,对于某些顺序算法,DFS和BFS非常不同,甚至可能无法正常工作。在并行设置中,DFS(或至少一个变体)是P完全的,而BFS是“易于并行”的。
Suresh Venkat 2012年

@SureshVenkat-我同意这个问题与上下文有关。为了不进行辩论,我避免使用“两种算法”的名称,
以免

4
问题是有近有近。有一种方法可以将乘积权重更新方法视为“本质上是二进制搜索”,但是在错误的上下文中,这听起来很疯狂。FWIW,在上述所有情况下,我都可以想象宣布两种算法不同。
Suresh Venkat 2012年

1
这个问题对我来说太主观了。当不存在规范定义时,您基本上是在要求“相似”的定义。
2012年

Answers:


23

给出连贯的“算法A与算法B类似”的定义是一个难题。首先,我认为“他们必须解决相同的问题”不是必要条件。通常,当一个人在一份文件中说,“算法定理的2类似于算法定理1 ”,该算法一个实际解决比的不同问题,,但有一些小的修改,以处理新问题。A2B1AB

即使试图确定两个算法相同意味着什么也是一个有趣且困难的问题。请参阅论文“两种算法何时相同?” http://research.microsoft.com/~gurevich/Opera/192.pdf


17

通常,这表示“我不想详细写出算法B,因为所有有趣的细节几乎都与算法A相同,而且我不想超过10页的限制,而且无论如何,提交截止日期为三个小时。”


7

如果您在口语中表示“相似”,我认为JeffE的答案可以理解某些人的意思。

从技术上讲,这取决于您关心的内容。如果您只关心渐近时间复杂度,则递归和迭代之间的差异可能无关紧要。如果您只关心可计算性,那么计数器变量和一个符号堆栈之间的差异并不重要。

为了比较算法,第一步将是使等效概念更精确。直观地,令为算法的空间,M为数学对象的空间,s e mA M为函数编码,s e mP 是算法P的含义。空间M可以包含任何内容,范围从算法中的变量数量到状态图或时间复杂度。我不相信M可以是什么。给定MAMsem:AMsem(P)PMMM但是,如果等于s e mQ ,我们可以说两种算法是等效。让我补充一点,我认为您提到的五个标准中的每一个都可以通过这种方式在数学上形式化。sem(P)sem(Q)

如果我们要谈论一种算法比另一种算法更通用(或者一种算法在完善另一种算法),我将赋予更多的结构。想像一下,中号是部分有序集和顺序X ý编码X比更定义的对象ÿ。例如,如果中号包含算法的迹线的集合和是集合的包含,小号È P 小号È Q 单元,其每一个微量PM(M,)xyxyMsem(P)sem(Q)P的痕迹。我们可以这样解释,说 PQ更确定。QPQ

接下来,我们要问是否有可能量化两种算法的接近程度。在这种情况下,我想必须为赋予一个指标。然后,我们可以测量两种算法表示的数学对象之间的距离。进一步的可能性是映射算法以测量空间或概率空间,并使用其他标准对其进行比较。M

更笼统地说,我会问-您在乎什么(用直觉的术语),代表这些直觉属性的数学对象是什么,如何从算法映射到这些对象以及该空间的结构是什么?我还要问对象的空间是否具有足够的结构来接受相似性的概念。从编程语言语义学的角度来看,这是我要采取的方法。鉴于计算机科学中的思想文化截然不同,因此我不确定您是否认为此方法有吸引力。


5

按照Jeff的回答,如果其中一种算法的作者希望另一种算法的作者正在审阅她的论文,则两种算法是相似的。

但是开个玩笑,在理论界,我会说算法A正在解决的问题与它是否与算法B“相似”(这可能正在解决一个完全不同的问题)“很相切”。如果A由于相同的主要理论思想而“起作用”,则与B类似。例如,这两种算法的主要思想是,您可以将数据投影到更低的维空间中,使用Johnson-Lindenstrauss引理保留准则,然后进行蛮力搜索吗?然后,无论您要解决的是什么问题,您的算法都与执行此操作的其他算法相似。有少量的重型算法技术可用于解决各种各样的问题,我认为这些技术形成了许多“相似”算法的重心。


3

非常有趣的问题,很好的论文瑞安!

我确实同意这样一种观点,即对算法之间的总体相似性进行评估主要是一种主观的价值判断。尽管从技术角度来看,有很多特性需要密切观察才能确定算法的相似性,但最终,这也取决于个人喜好。在参考您问题的特定要点时,我将尝试描述同一枚硬币两面的重要性:

从技术角度来看:

  1. 瑞安(Ryan)已经指出两种算法必须解决同一问题。通过说通常足以证明算法A可以理解同一实例的多项式变换,以便算法B可以处理它,人们甚至可以进一步推广这一概念。但是,这实际上非常薄弱。我确实更想从相似性上考虑相似性。
  2. 但是,我永远不会期望两个等效的算法具有相同的直观想法-尽管同样,这是一个不容易捕获的定义。不仅如此,通常情况下,被视为相似的算法并不遵循主要原理。例如,考虑一些排序算法,这些算法是遵循不同思想以不同方式产生的。作为一个极端的例子,考虑遗传算法,数学界通常将遗传算法视为随机过程(因此,它们在他们看来是等效的),然后以完全不同的方式对其进行建模和分析。
  3. N(N21)加性模式数据库实际上将以完全相同的顺序扩展相同数量的节点,这使得这两种算法(及其启发式方法)在非常强烈的意义上严格等效,而第一种方法没有预处理,第二种方法没有预处理在开始解决特定实例之前,有大量开销。但是,一旦您的模式数据库考虑了更多的模拟交互,它们之间的性能就会出现巨大的差距,因此它们肯定是不同的想法/算法。
  4. 实际上,我认为大多数人会根据目的性能来判断算法。因此,渐近性能是推理程序之间相似性的良好度量。但是,请记住,这种性能不一定是典型情况,因此,如果两种算法具有相同的渐近性能,但在实践中表现不同,那么您可能会得出结论,认为它们是不同的。在这方面有力的证据是这两种算法在时间和内存上都具有相同的性能(正如Suresh所说,这使得DFS和BFS看起来有所不同)。如果这个断言听起来不令人信服,请参阅出色的(也是非常推荐的书):《编程宇宙》由塞思·劳埃德(Seth Lloyd)设计。在第189页中,他引用了具有30多种复杂性度量的列表,这些度量可用于将算法视为不同的。

那么什么使算法相似/不同呢?在我看来(这纯粹是推测性的),主要区别在于它们对您的建议。当用于相同目的时,许多算法(许多!)仅在技术上有所不同,因此对于不同的输入范围,典型情况是不同的。但是,所有差异中最大的是(在我看来)它们对您的建议。算法具有不同的功能,因此各有优缺点。如果两个算法看起来相同,但可能以不同的方式扩展以应对不同的情况,那么我将得出结论,它们是不同的。但是,通常两种算法看起来确实很相似,因此您会认为它们是相同的...直到有人来做关键区别,突然之间,它们完全不同!

抱歉,我的回复结束了这么长时间...

干杯,


1
事实上,瑞安认为,这是不是必需的两种算法来解决同样的问题。
杰夫·杰夫·2012年

真正!我只是在收集有关这方面的意见,但您绝对正确!
卡洛斯·利纳雷斯·洛佩斯

2

没有定义相似性度量标准的任何相似性提及都没有明确定义。两种算法可以有多种相似的方式:

Quicksort和Mergesort解决了非常相似的问题,但是他们使用不同的算法来解决。它们具有相似的算法复杂度(尽管最坏情况下的性能和内存使用情况可能会有所不同)。Quicksort和Mergesort都与Bubblesort相似,但是Bubblesort具有非常不同的性能指标。如果您忽略复杂性统计信息,则Quicksort,Mergesort和Bubblesort都在同等的类中。但是,如果您完全关心算法的复杂性,那么Quicksort和Mergesort彼此之间的相似度要远高于Bubblesort。

Smith-Waterman动态规划和HMM序列比较试图解决对齐两个序列的问题。但是,它们采用不同的输入。Smith-Waterman将两个序列作为输入,而HMM序列比较则将HMM和一个序列作为输入。两个输出序列比对。在激励思想方面,这两者都与Levenshtein的编辑距离相似,但只是在很高的层次上。

以下是一些可以称为两种算法的标准:

  1. 输入/输出类型
  2. 算法/内存复杂度
  3. 关于输入类型的假设(例如,仅正数或浮点稳定性)
  4. 嵌套关系(例如,某些算法是其他算法的特例)

关于相似性含义的关键决定仍然存在。有时您关心算法的复杂性,有时则不在意。由于相似性的定义取决于讨论的上下文,因此术语“相似算法”的定义不明确。

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.