26

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

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

我会挂断我的回答。

好吧,请原谅我认为设计模式只是算法的抽象。这是我从答案中得出的一些发现的小表格,这些结果都非常好。

   设计模式 | 算法
------------------|----------------
摘要 | 具体的
控制结构 | 一组动作    
模板 | 执行
灵活 | 确定性
蓝图 | 食谱
4

12 回答 12

29

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

设计模式就像一个蓝图:一个结构化的对象、关联和动作的集合,以完成某个目标。

于 2009-02-17T20:54:06.710 回答
20

是,有一点不同。

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

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

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

于 2009-02-17T20:58:19.587 回答
8

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

于 2009-02-17T20:55:36.207 回答
2

设计模式不能直接转换为代码。它是一种“策略”,可用于应用程序的设计。该术语的起源是计算机科学之外的。阅读有关克里斯托弗·亚历山大的信息以了解更多信息。

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

于 2009-02-17T20:57:58.823 回答
2

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

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

Christopher Alexander 是建筑师,他首先研究了建筑物和社区中的模式,并开发了一种“模式语言”来生成它们。

每个模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题的解决方案的核心,这样您就可以使用该解决方案一百万次,而不必以同样的方式重复使用两次. ——克里斯托弗·亚历山大

所以这些术语是不可互换的,因为它们指的是不同的设计水平。

于 2009-02-17T21:40:21.140 回答
1

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

例如,您可以将几种不同的算法与策略设计模式结合使用。

于 2009-02-17T20:55:37.050 回答
1

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

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

于 2009-02-17T21:00:04.620 回答
1

它们是不同的: http://en.wikipedia.org/wiki/Design_pattern_( computer_science) vs http://en.wikipedia.org/wiki/Algorithm

使用命令设计模式(http://en.wikipedia.org/wiki/Command_pattern),很容易实现撤销/重做:http ://www.cs.mcgill.ca/~hv/classes/CS400/ 01.hchen/doc/command/command.html

相关问题:Undo Engine 的设计模式

于 2009-02-17T21:05:38.710 回答
1

当我第一次研究设计模式的概念时,我也很惊讶为什么在算法存在的情况下引入了设计模式。随着我对设计模式的了解不断增加,我在这一点上得出结论,算法是完全不同的解决问题的方法,设计模式也不同。

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

于 2012-08-21T15:55:02.803 回答
0

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

于 2009-02-17T20:53:41.610 回答
0

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

设计模式描述了常见设计问题的通用解决方案。“每个模式都描述了一个在我们的环境中反复出现的问题,然后描述了该问题解决方案的核心,以这样一种方式,您可以使用该解决方案一百万次,而无需以相同的方式使用它两次”(克里斯托弗亚历山大)在编程中,这是通过描述软件对象之间的特定关系集来完成的(代表概念或现实世界的对象)。应该避免描述具体的实现,因为它会降低设计模式的通用性。

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

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

于 2014-08-06T04:38:58.570 回答
0

设计模式:

  • 一个常见但普遍的问题的解决方案。
  • 一般问题的一般解决方案。
  • 通常每次使用时都必须执行。

算法:

  • 您可以遵循的特定步骤来回答特定问题。
  • 直接实施以解决具体问题。
于 2016-10-22T03:31:48.670 回答