启发式算法和算法之间有什么区别?

时间:2010-02-25 13:22:35

标签: algorithm definition heuristics nomenclature

启发式算法和算法之间有什么区别?

12 个答案:

答案 0 :(得分:93)

算法是对问题的自动解决方案的描述。精确定义了算法的作用。解决方案可能是也可能不是最好的解决方案,但您从一开始就知道会得到什么样的结果。您使用某种编程语言实现算法以获取程序(的一部分)。

现在,一些问题很难解决,您可能无法在可接受的时间内获得可接受的解决方案。在这种情况下,你通常可以通过应用一些任意选择(有根据的猜测)来更快地获得一个不太糟糕的解决方案:这是一个启发式

启发式算法仍然是一种算法,但不能探索问题的所有可能状态,或者首先探索最可能的算法。

典型的例子来自游戏。在编写国际象棋游戏程序时,您可以想象在某个深度级别尝试每个可能的移动并对棋盘应用一些评估功能。启发式算法会排除以明显不良行为开始的完整分支。

在某些情况下,您不是在寻找最佳解决方案,而是针对任何符合某种约束的解决方案。一个好的启发式方法有助于在短时间内找到解决方案,但如果唯一的解决方案处于它选择不尝试的状态,也可能无法找到解决方案。

答案 1 :(得分:32)

  • 算法通常是确定性的,并证明可以产生最佳结果
  • 启发式方法没有正确性证明,通常涉及随机元素,可能无法产生最佳结果。

许多无法找到最佳解决方案的有效算法的问题都有启发式方法,可以非常快速地产生接近最优的结果。

有一些重叠:“遗传算法”是一个被接受的术语,但严格来说,这些是启发式算法,而不是算法。

答案 2 :(得分:22)

启发式,简而言之就是“受过教育的猜测”。维基百科很好地解释了它。最后,采用“一般接受”方法作为指定问题的最佳解决方案。

  

启发式是一个形容词   以经验为基础的技术有所帮助   解决问题,学习和解决问题   发现。使用启发式方法   迅速找到解决方案   希望尽可能接近最好   回答,或'最佳解决方案'。   启发式是“经验法则”,   有根据的猜测,直观的判断   或者只是常识。启发式是   解决问题的一般方法。   作为名词的启发式是另一个名称   对于启发式方法。

     

更确切地说,启发式   很容易使用策略   尽管松散适用,   控制问题解决的信息   在人类和机器中。

虽然算法是一种包含用于解决问题的有限指令集的方法。该方法已经过数学或科学证明,可以解决这个问题。有正式的方法和证据。

  

启发式算法是一种能够生成的算法   可接受的问题解决方案   许多实际情况,在   一般启发式的时尚,但是   没有正式证据的   它的正确性。

答案 3 :(得分:6)

实际上我并不认为他们之间有很多共同之处。某些算法在其逻辑中使用启发式算法(通常用于减少计算或获得更快的结果)。通常在所谓的贪心算法中使用启发式算法。

启发式算法是我们假设使用的一些“知识”,以便在我们的算法中获得最佳选择(当应该选择时)。例如......国际象棋中的启发式可能是(如果可以的话,总是拿对手的女王,因为你知道这是更强的数字)。启发式并不保证会引导您找到正确的答案,但(如果假设是正确的话)通常会在更短的时间内得到接近最佳答案的答案。

答案 4 :(得分:6)

算法是一个自包含的逐步操作集4,通常被解释为(计算机或人类)指令的有限序列,以确定解决问题的方法,例如:是否存在从A到B的路径,或者A和B之间的最小路径是什么。在后一种情况下,您也可以满足于合理地接近'替代解决方案

有某些类别的算法,其中启发式算法是一种。在这种情况下,根据算法的(已证明的)属性,它属于这三个类别之一(注1):

  • Exact :该解决方案被证明是输入问题的最佳(或精确解决方案)
  • Approximation :证明解决方案值的偏差永远不会超出某些预定范围的最佳值(例如,从不超过50%)最佳值)
  • Heuristic :该算法尚未被证明是最优的,也未在最佳解决方案的预定范围内被证实

请注意,近似算法也是一种启发式算法,但具有更强的属性,证明它与输出的解(值)有关。

对于某些问题,没有人发现过有效的问题。计算最优解的算法(注2)。其中一个问题是众所周知的旅行商问题。 Christophides'例如,旅行商问题的算法,曾经被称为启发式,因为它没有被证明它在最优解的50%之内。然而,自从Christophides'算法更准确地称为近似算法。

由于对计算机可以执行的操作的限制,并非总能有效地找到最佳解决方案。如果问题中有足够的结构,则可能有一种有效的方法来遍历解空间,即使解空间很大(即在最短路径问题中)。

启发式算法通常用于通过添加“专家信息”来改善算法的运行时间。或者“有根据的猜测”。引导搜索方向。在实践中,启发式也可以是最佳算法的子例程,以确定在哪里看第一

(注释1):此外,算法的特征在于它们是包含随机元素还是非确定性元素。总是以相同的方式执行并产生相同答案的算法称为确定性。

(注释2):这被称为P vs NP问题,被归类为NP-complete和NP-hard的问题不太可能具有“有效”的问题。算法。注意;正如@Kriss在评论中提到的,甚至更糟糕的是'问题的类型,可能需要指数时间或空间来计算。

有几个答案可以回答部分问题。我认为它们不够完整且不够准确,并且决定不编辑@Kriss所接受的答案

答案 5 :(得分:4)

启发式算法是算法,因此在这个意义上没有算法,然而,启发式方法采用“猜测”方法解决问题,产生“足够好”的答案,而不是找到“最佳”解决方案。

一个很好的例子是你有一个非常难(读NP完全)的问题,你想要一个解决方案,但没有时间到达它,所以必须使用基于启发式算法的足够好的解决方案,例如使用遗传算法找出旅行商问题的解决方案。

答案 6 :(得分:4)

算法是一系列操作的序列,给定输入计算某事物(函数)并输出结果。

算法可能会产生精确值或近似值。

它还可以计算一个接近精确值的高概率随机值。

启发式算法使用对输入值的一些洞察力并计算不精确的值(但可能接近最优值)。 在某些特殊情况下,启发式算法可以找到精确的解决方案。

答案 7 :(得分:3)

算法是一组明确定义的解决问题的指令,启发式方法涉及利用学习和发现的方法来达成解决方案。

因此,如果您知道如何解决问题,那么请使用算法。如果你需要开发一个解决方案,那就是启发式。

答案 8 :(得分:2)

启发式通常是一种优化或策略,通常提供足够好的答案,但并非总是很少是最佳答案。例如,如果你用蛮力解决旅行商问题,一旦其成本超过当前最佳解决方案的成本就丢弃部分解决方案是一种启发式方法:有时它会有所帮助,有时它却没有,而且肯定没有。 t改进算法的理论(大哦表示法)运行时间

答案 9 :(得分:2)

我认为启发式更多地是人工智能中基于学习的模型中使用的约束,因为未来的解决方案状态很难预测。

然而,在阅读上述答案之后,我的疑问是 “如何使用随机优化技术成功应用启发式算法?或者当与随机优化一起使用时,它们可以作为完全成熟的算法运行吗?”

http://en.wikipedia.org/wiki/Stochastic_optimization

答案 10 :(得分:2)

我读过的最好的解释之一来自伟大的书Code Complete,我现在引用它:

  

启发式是一种可以帮助您寻找答案的技巧。它的   结果是偶然的,因为启发式只告诉你如何   看,而不是找到什么。它没有告诉你如何直接获得   从A点到B点;它甚至可能不知道A点和A点   B点是。实际上,启发式算法是一种小丑服的算法。   它的预测性较差,更有趣,而且没有30天,   退款保证。

     

这是一个驾驶到某人家的算法:走167号公路   南到Puy-allup。在South Hill Mall出口下,行驶4.5英里   上山。在杂货店右转,然后   第一个路口左转。转入大棕褐色房子的车道上   左边,在北雪松714号。

     

这是一个到某人家的启发式:找到最后一个   我们寄给你的信。在回程地址开车到镇上。什么时候   你到镇上,问别人在哪里。谁都知道   我们 - 有人会很乐意帮助你。如果您找不到任何人,请致电我们   从公用电话,我们会来找你。

     

算法和启发式之间的区别是微妙的,而且   两个术语有点重叠。出于本书的目的,主要是   两者之间的差异是间接的水平   解。算法直接为您提供说明。一个   启发式告诉你如何为自己发现指令,或者   至少在哪里寻找它们。

答案 11 :(得分:0)

他们找到了一个次优的解决方案而没有任何关于所找到的解决方案质量的保证,很明显,只有多项式的启发式才有意义。这些方法的应用适用于解决现实世界中的问题或大问题,从计算的角度来看,对于它们来说甚至都没有能够在多项式时间内找到近似解的算法。