算法和设计模式之间有什么区别

时间:2009-02-17 20:50:59

标签: algorithm design-patterns semantics

我正在搜索“撤消/重做算法”并发现标记为重复的内容,但副本是“撤消设计模式”的请求。我真的很喜欢这个算法。我认为我不一定需要设计模式。

“设计模式”和“算法”之间是否有根本区别,或者有人可以互换地使用这两者吗?

我会挂断电话,然后停止播放。

好的,原谅我认为设计模式只是算法的抽象。这里有一个关于我的答案的小表,这些答案都非常好。

   Design Pattern |    Algorithm
------------------|----------------
Abstract          | Concrete
Control Structure | Set of Actions    
Template          | Implementation
Flexible          | Deterministic
Blueprint         | Recipe

12 个答案:

答案 0 :(得分:25)

算法就像一个食谱:执行某些活动的分步过程。

设计模式就像蓝图:对象和关联的结构化集合以及实现某些目标的行动。

答案 1 :(得分:18)

是的,有区别。

算法是执行某项任务的方法 - 一组明确的有限指令集,通过对输入进行操作并生成输出来实现某些目标。通常,算法以与语言无关的伪代码表示,然后可以用您选择的语言实现。

设计模式是一种构建代码的方式,以便优雅地表达功能组件之间的关系。您可以在算法的实现中使用设计模式。例如,您可以使用算法进行树的有序遍历,以确保以特定顺序访问树数据结构的所有节点。您还可以实现 visitor 设计模式,以表示您的实现如何将控制权返回给调用上下文,以指示已访问过某个节点。这不是算法的一部分,而是软件设计的一部分,以及如何构建软件的每个组件可以使用的接口。

算法和设计模式是正交的,尽管它们可能同时使用。

答案 2 :(得分:7)

设计模式是如何在架构层面解决问题的相对模糊的描述,强调灵活性和可维护性。算法是对如何计算特定事物的精确描述,强调正确性和效率。

答案 3 :(得分:2)

设计模式无法直接转换为代码。它是一种“策略”,可用于设计应用程序。该术语的起源是计算机科学的外部。阅读Christopher Alexander了解详情。

另一方面的算法可以用代码表示。它是一系列操作,可以解决任何输入的特定问题。

答案 4 :(得分:2)

算法是一组步骤/动作/命令/指令,它们以指定的顺序/方式在所有环境或状态变化中工作。在撤销/重做的情况下,它将涉及在每个时刻存储先前的状态,然后在命令上再现它(通过app具有的任何方式)。但由于这个定义非常模糊,每个特定情况都不同,我们希望创建一个更通用的设计模式,可以插入特定应用程序的功能。

  

在软件工程中,设计模式是软件设计中常见问题的通用可重复解决方案。设计模式不是可以直接转换为代码的完成设计。它是如何解决可在许多不同情况下使用的问题的描述或模板。 - SourceMaking

克里斯托弗亚历山大是建筑师,他首先研究建筑和社区的模式,并开发了一种“模式语言”来生成它们。

  

每个模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题的解决方案的核心,以这种方式使您可以使用此解决方案一百万次,而无需执行此操作同样两次。 - 克里斯托弗·亚历山大

因此这些术语不可互换,因为它们指的是不同的设计层次。

答案 5 :(得分:1)

我会说设计模式定义结构,而算法定义行为。

例如,您可以将几种不同的算法与Strategy design pattern结合使用。

答案 6 :(得分:1)

算法是执行任务的一组特定步骤。解码音频或视频文件将使用算法。

设计模式更像是设计具有某些特征的系统的模板。

答案 7 :(得分:1)

答案 8 :(得分:1)

当我第一次研究设计模式概念时,我也很惊讶为什么在算法存在的情况下引入了设计模式。由于我的知识一直在增加设计模式,我在这一点上达到了算法完全不同的方法来解决问题和设计模式是不同的。

设计模式基本上是针对特定上下文中的软件应用程序的相同问题的重复解决方案,其在某种程度上与算法无关,因为算法是用于解决问题的逐步指令。

答案 9 :(得分:0)

设计模式将决定你如何设计一个算法(或者可能与算法无关,但是假设我们正在处理一个算法),而算法将是一组可靠的,可重复的,可实现的,做某事的步骤。所以不,我不会称它们为可互换的。

答案 10 :(得分:0)

如何组织类型的功能而非特定功能可能是将“设计模式”与“算法”分开的关键......

设计模式描述了常见设计问题的通用解决方案。 “每个模式都描述了在我们的环境中一次又一次出现的问题,然后描述了该问题解决方案的核心,以这种方式使您可以使用此解决方案一百万次,而无需以相同的方式执行两次“(Christopher Alexander)在编程中,这是通过描述软件对象(代表概念或现实世界对象)之间的特定关系集来完成的。应该避免描述具体的实现,因为它使设计模式不那么通用。

算法是一组定义任务执行方式的步骤。算法中每个步骤的执行不需要创造性技能。相反,它只需要遵循指示的能力。 (警告:不确定性算法,不符合此限制并且是研究的重要主题)

所以,我认为关系的一个描述可能是将功能与功能分开。但是,对象的特征集合将决定其功能,因为每个子特征都具有封装在其中的功能。当你将许多小对象组合成一个更大的对象(例如,不同类的实例到程序中)时,它们中的一些将一起工作以创建它们自己没有的新功能(整体大于其各部分的总和) )。你可以说这只是一个新算法,但它也是一个新对象。特征和功能是同一枚硬币的两面,因此不可能将它们完全分开。但是如何组织类型的功能而不是特定功能可能是将“设计模式”与“算法”分开的关键,因为如果设计模式是关于组织特定功能,即特定类的实例,那么算法已经提出并且每次执行都是完全相同的,即它不是通用的,你不能“使用这个解决方案一百万次,而不是两次同样的方式”。

答案 11 :(得分:0)

设计模式:

  • 解决常见但通用的问题。
  • 一般问题的一般解决方案。
  • 通常每次使用时都必须实施。

算法:

  • 您可以遵循的特定步骤来回答特定问题。
  • 直接实施解决具体问题。