我们如何对各种算法进行分类?
我听过各种各样的名字:Divide&征服算法,确定性算法,概率算法,就地算法等。
它们是否构成任何类型的分类层次结构?
请提供任何网络链接。
答案 0 :(得分:7)
算法有一些不同的分类:
他们解决问题的方式
经典算法:
非经典的:
但是这种算法对于特定输入的每次运行都是确定性的或非确定性的,它们将获得相同的结果(确定性)或不同的结果(非确定性)。
此算法也存在太多不同的问题,每个问题都使用所有算法的混合,例如欧几里得图中的TSP可以通过使用dfs和图算法,随机游走,......和ATSP来近似。 (非对称图中的TSP)可以通过线性规划和一些高级图算法的组合来近似。
但是有着名的问题分类,我们可以将它扩展到算法,这些算法是按时复杂的(也是记忆但是现在的记忆不是时间问题):
答案 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等语言的计算机可读分类方案中。)
因此,一个悬而未决的问题是,是否存在有用的分类层次结构,如果在算法方面存在有用的层次结构则更是如此。我怀疑答案是“不是真的”,并且敦促你在分类时要灵活。