算法和方法之间有什么区别?

22

如何区分算法和方法?为什么我们不把牛顿法或福特-福尔克森方法称为算法?好的算法具有哪些属性?什么样的方法可以被称为算法?


你是在询问(软件)专利的情况下吗? - zvrba
不,这只是一个普通问题。但是您能否在专利的背景下回答它呢? - unj2
11个回答

29

算法会在有限步骤内终止。

一个具有算法所有特征但可能缺乏有限性的过程可称为计算方法。欧几里得最初提出了求两条线段长度的“最大公测量值”的几何构造和数字的最大公因数的算法;这是一种计算方法,如果给定的长度是不可公度的,则无法终止。——D.Knuth,《TAOCP》第1卷基本概念:算法

牛顿-拉夫森方法不能保证收敛,也不能检测收敛失败。但如果您将该方法包装起来并在有限的epsilon或在有限次数的步骤之后进行收敛检测和终止,则可以得到一个算法。


8

“方法”和“算法”这两个术语在技术上没有区别,比如“牛顿迭代法”和“牛顿迭代算法”是等价的。

编辑:经过深思熟虑,也许皮特是正确的,算法会终止而方法可能不会(我不能与库特争论)。但是,我认为这不是大多数人仅根据您使用的一个词或另一个词来区分的区别。


你是在暗示我们可以互换使用这些术语吗?我可以把任何方法都称为算法? - unj2
我相信你可以将任何这类数学方法称为“算法”,既能在技术上正确,也能被数学家理解。 - mqp
2
对于一些人来说,这些术语可能是可以互换的——使用“算法”来指代非有限步骤的序列,他们可能不会注意或在意。然而,其他人会在意,因此我建议不要将这些术语互换使用。更安全的做法是将算法视为方法的子集。这样,您就可以与每个人有效地沟通,而不仅仅是那些无论如何都不作区分的人。 - Rob Kennedy

3

我认为,方法是一个比算法更通用的概念,可以是任何东西,例如将数据写入文件。几乎任何由事件或逻辑表达式引起的事情都可以被称为方法。此外,“方法”和“算法”这些词的含义取决于它们所处的上下文。它们可能用来描述相同的事物。


3
算法必须是“有限的”、“明确的”和“有效的”。牛顿法满足所有这些条件,因此这些术语是可以互换的。然而,计算我的美国所得税似乎并不明确 - 一些术语似乎没有很好地定义,因此它不是一个合适的算法。 - S.Lott
1
我不认为算法必须是有效的。我可以构建一个性能非常糟糕的自己的算法。除非你是在说它变成了一个方法:) - ralphtheninja
2
有效并不意味着高效。它意味着这些步骤朝着最终的状态或目标迈进。它意味着算法没有填充无意义的步骤,而是有效地达到了目标。 - S.Lott
我听到你了!虽然有语言障碍,但现在已经被克服了 ;) - ralphtheninja

2
一般而言,在编程中,算法是完成任务的步骤。根据维基百科的定义,
算法是有限指令序列、用于解决问题的明确、逐步过程,通常用于计算和数据处理。它在形式上是一种有效方法,其中为完成任务定义了一系列明确定义的指令列表,当给定初始状态时,将通过一系列明确定义的连续状态,最终终止于一个结束状态。从一个状态到另一个状态的转换不一定是确定性的;一些算法,称为概率算法,包含随机性。<
在计算机科学中,方法或函数是面向对象编程思想的一部分,程序由包含执行特定任务的方法/函数的类组成。再次引用维基百科的定义。
在面向对象编程中,方法是一个子程序,它只与类(称为类方法或静态方法)或对象(称为实例方法)相关联。像过程语言中的过程一样,方法通常由一系列语句组成,以执行操作,一组输入参数来自定义这些操作,并可能具有某种输出值(称为返回值)。方法可以提供一种机制,用于访问(读取和写入)存储在对象或类中的封装数据。
简而言之,算法是我们完成某些操作的步骤,例如打开灯泡:
1)走到开关处 2)翻转开关 3)电子流动 4)发光
方法是我们在类中实际编码操作的地方。

3
我在谈论一种不同的方法。请阅读问题。 - unj2
在计算机科学中,算法是步骤,方法是我们执行操作的手段。所有的数学公式都可以看作是算法,因为它们给出了如何查找或执行某些操作的指令--即使在数学中它们被称为方法。我们需要在程序中编写方法来实际实现它们。 - FloppyDisk
@FloppyDisk,你提到的是方法这个术语,它仅在面向对象编程范畴内有定义(即类的函数),而问题的作者询问的是通用术语(解决问题的工具),这使得你的比较有点荒谬。 - Salim Mazari Boufares

1

方法类似于战略,算法类似于战术。例如:在战争中,您制定了一项接管国家的战略(方法):首先占领港口,向西陆地推进,然后包围首都等。该战略被分为几个战术阶段(算法):首先,告诉士兵们他们将如何逐步占领港口;然后,告诉士兵们如何向西推进;然后,给士兵们提供确切的步骤来包围城市等。



1

算法就像一个公式,可以逐步解决任何特定问题,没有任何步骤的歧义,并且必须有一些结束点。方法论是任何解决方案的更一般形式。它提供了一种解决问题的方式,但在算法中,这种方式更精确地制定了解决方案。


0
一个过程可以永远进行下去。 而算法最终会终止,并且每个步骤都被精确定义。

0

我认为这只是因为算法的起源领域不同。如果发明者背景是计算机科学,他可能更喜欢称之为算法。在数学和其他科学领域,他们可能更喜欢称之为方法。


0
在你所提到的上下文中(如牛顿法等),算法和方法之间没有本质区别。它们都是一组逐步解决问题的指令集。在维基百科关于牛顿迭代法的文章中,它说“该算法首先属于豪斯霍尔德方法类,接着是哈雷方法”。边界最多只是模糊的。
在计算机科学中,算法仍然是一种逐步解决问题的方式 - 一组与实现无关的步骤。方法通常指与类或对象相关联的一段代码,用于执行某些任务 - 它可以潜在地实现许多算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接