您如何区分算法和方法?为什么我们不称牛顿方法或福特 - 福克森方法算法?什么是良好算法的属性以及将方法作为算法的限定条件?
答案 0 :(得分:23)
算法以有限的步骤终止。
具有算法的所有特征的过程除了可能缺乏有限性之外可称为计算方法。 Euclid最初不仅提出了一个最大公数除数的算法,而且还提出了一个非常相似的几何结构,用于两个线段长度的“最大公共度量”;这是一种计算方法,如果给定的长度不可通约,则不会终止。 - D.Knuth,TAOCP第1卷,基本概念:算法
Newton Raphson方法无法保证收敛,也不能检测收敛失败。如果您使用收敛检测和终止在有限的epsilon上或在有限数量的步骤之后将方法包装起来,您将得到一个算法。
答案 1 :(得分:7)
“牛顿方法”和“算法”之间的术语“方法”没有技术差异。
编辑:反思,也许Pete是正确的,算法终止,方法可能没有(我是谁与Knuth争论?)但是,我不认为这是大多数人只会根据你使用一个字或另一个字。答案 2 :(得分:3)
在我看来,方法是比算法更通用的概念,可以或多或少地是任何东西,例如:将数据写入文件。几乎任何由于事件或某些逻辑表达而应该发生的事情。此外,词语“方法”和“算法”的含义可以根据它们使用的上下文而变化。它们可能用于描述同样的事情。
答案 3 :(得分:3)
在一般编程中,算法是完成任务的步骤。根据{{3}},
算法是指令的有限序列,是解决问题的明确的逐步程序,通常用于计算和数据处理。它正式是一种有效的方法,其中用于完成任务的明确定义的指令列表在给定初始状态时将通过明确定义的一系列连续状态,最终终止于最终状态。从一个州到下一个州的过渡不一定是确定性的;一些算法,称为概率算法,包含随机性。 <
在计算机科学中,方法或函数是面向对象哲学的一部分,用于编程,其中程序由包含执行特定任务的方法/函数的类组成。再次引用Wikipedia
在面向对象的编程中,方法是一个子程序,它只与一个类(称为类方法或静态方法)或一个对象(称为实例方法)相关联。与过程编程语言中的过程类似,方法通常由执行操作的一系列语句,定制这些操作的一组输入参数以及某种类型的输出值(称为返回值)组成。方法可以提供访问(用于读取和写入)存储在对象或类中的封装数据的机制。 <
简而言之,算法是我们执行某些操作的步骤,例如打开灯泡:
1)走路切换 2)翻转开关 3)电子流动 4)光生成
方法是我们在类中实际编写动作的地方。
答案 4 :(得分:1)
我认为这只是因为算法的起源域。如果发明者处于计算机科学背景中,他可能更喜欢称为算法。在数学和其他科学领域,他们可能更喜欢被称为方法。
答案 5 :(得分:1)
在你说的上下文(牛顿方法等)中,算法和方法之间没有本质的区别。两者都设置了解决问题的逐步说明。在关于牛顿方法的维基百科文章中,它指出“算法在Householder的方法中是第一个,由Halley的方法继承”。边界充其量是模糊的。
在计算机科学中,算法仍然是解决问题的逐步方式 - 与实现无关的一组步骤。方法通常是指与执行某项任务的类或对象关联的一大块代码 - 它可以实现许多算法。
答案 6 :(得分:1)
答案 7 :(得分:1)
算法就像一个逐步解决任何特定问题的公式,对任何步骤都没有歧义,并且必须有一些终点。方法论是任何解决方案的更一般形式。它提供了一种如何解决任何问题的方法,但在算法中,方法更精确地针对解决方案。
答案 8 :(得分:1)
方法类似于策略,算法类似于策略。一个例子:在战争中,你制定了一个战略(方法)来接管一个国家:首先采取港口,在陆地上向西推进,然后包围资本等。这种策略分为几个战术阶段(算法):第一,一个一步一步告诉士兵他们将如何接纳港口;然后,一个告诉士兵他们必须向西推进的人;然后,一个具有士兵围绕城市的确切步骤等等。
答案 9 :(得分:0)
程序可以永远持续下去。 作为算法的地方,最终将终止,并将精确定义每个步骤。
答案 10 :(得分:-1)
关于Ford-Fulkerson方法,CLRS称之为方法而不是算法,因为“它包含了几个不同运行时间的实现”[pp.61第2版]