我们如何对各种算法进行分类?

时间:2010-12-12 07:17:00

标签: algorithm

我们如何对各种算法进行分类?

我听过各种各样的名字:Divide&征服算法,确定性算法,概率算法,就地算法等。

它们是否构成任何类型的分类层次结构?

请提供任何网络链接。

5 个答案:

答案 0 :(得分:7)

算法有一些不同的分类:

他们解决问题的方式

经典算法:

非经典的:

但是这种算法对于特定输入的每次运行都是确定性的或非确定性的,它们将获得相同的结果(确定性)或不同的结果(非确定性)。

此算法也存在太多不同的问题,每个问题都使用所有算法的混合,例如欧几里得图中的TSP可以通过使用dfs和图算法,随机游走,......和ATSP来近似。 (非对称图中的TSP)可以通过线性规划和一些高级图算法的组合来近似。

但是有着名的问题分类,我们可以将它扩展到算法,这些算法是按时复杂的(也是记忆但是现在的记忆不是时间问题):

  • P
  • NP
  • NPC
  • NPC强大
  • NP Hard
  • CO-NP
  • ...

答案 1 :(得分:2)

没有通用的算法分类。从广义上讲,它可以根据所遵循的设计模式,算法解决的问题或复杂性。您可以通过组合这些分类来创建层次结构。例如,排序算法可以根据设计模式或复杂性细分为多个组。

此处提供了更多详细信息 - http://www.scriptol.com/programming/algorithms-classification.php

答案 2 :(得分:2)

您可以查看The Stony Brook Algorithm Repository。 这是基于其目的的算法分类。

答案 3 :(得分:1)

您可以根据需要对算法进行分类,以便最好地满足您的需求。您建议的大纲分类,根据其轮廓设计对算法进行分类,看起来不错。另一种方法是按目的对它们进行分类:排序,搜索,乘法等。另一种方法可能是按复杂度对它们进行分类:O(1),O(n),O(log n),O(n 3 )等。您需要分类的每个算法都适用于任何这些分类方案。

如果你想要的话,你可以定义一个分层分类方案:排序/随机输入,排序/接近排序的输入,排序/几乎未排序的输入。

但是对于算法没有单一的正确或错误的分类方案,你选择的应该取决于你打算用它做什么。

至于网络链接,我会将它们留给其他人。

答案 4 :(得分:1)

有大量的算法分类方案,有些比其他方法更有用(对于一个非常愚蠢的方案的例子,考虑通过算法描述的校验和进行分类!)这是因为分类不是那么多算法的基本属性,而不是我们对它们的了解。对知识进行分类非常困难,并且往往会产生许多重叠的分类;建立这种分类的整个领域称为本体论。 (令人困惑的是,“本体论”这个词也附加在OWL等语言的计算机可读分类方案中。)

因此,一个悬而未决的问题是,是否存在有用的分类层次结构,如果在算法方面存在有用的层次结构则更是如此。我怀疑答案是“不是真的”,并且敦促你在分类时要灵活。