Answers:
算法是对问题的自动解决方案的描述。精确定义了算法的作用。该解决方案可能是,也可能不是最佳解决方案,但是从一开始您就知道会得到什么样的结果。您可以实现的算法使用某种编程语言得到(的一部分)的程序。
现在,有些问题很难解决,您可能无法在可接受的时间内获得可接受的解决方案。在这种情况下,通常可以通过应用一些任意选择(有根据的猜测)来更快地获得一个不太差的解决方案:这是一种启发式方法。
启发式算法仍然是一种算法,但它不会探索问题的所有可能状态,或者会先探索最可能的状态。
典型示例来自游戏。编写国际象棋游戏程序时,您可以想象尝试在某个深度级别上进行所有可能的动作并将某些评估功能应用于棋盘。启发式将排除以明显不好的动作开始的完整分支。
在某些情况下,您不是在寻找最佳解决方案,而是在寻找适合某些约束的任何解决方案。良好的启发式方法将有助于在短时间内找到解决方案,但如果唯一的解决方案处于其选择不尝试的状态,则可能也找不到任何解决方案。
试探性地概括地说是“有根据的猜测”。维基百科很好地解释了这一点。最后,采用“一般接受”方法作为指定问题的最佳解决方案。
启发式是基于经验的技术的形容词,可帮助解决问题,学习和发现。启发式方法用于快速得出希望接近最佳答案的解决方案,即“最佳解决方案”。启发式是“经验法则”,有根据的猜测,直觉的判断或只是常识。启发式是解决问题的一般方法。启发式作为名词是启发式方法的另一个名称。
用更精确的术语来说,启发式方法代表的策略是使用易于访问但宽松的信息来控制人类和机器中的问题解决。
而算法是一种包含用于解决问题的有限指令集的方法。该方法已经过数学或科学证明,可以解决该问题。有正式的方法和证明。
启发式算法是一种能够以通用启发式的方式在许多实际情况下为问题提供可接受的解决方案的算法,但尚无形式上证明其正确性的算法。
的算法是一个自包含的一步一步的操作集要执行4,典型地解释为(计算机或人)的指令的有限序列,以确定一个解决问题的办法,例如:是否有从A的路径B或A与B之间的最小路径是什么。在后一种情况下,您也可能对“合理接近”的替代解决方案感到满意。
有某些类别的算法,其中启发式算法是其中的一种。根据这种情况下算法的(已验证)属性,它可以归为以下三个类别之一(注1):
请注意,近似算法也是一种启发式算法,但是具有更强的属性,证明了它输出的解(值)有一定的约束。
对于某些问题,还没有人找到一种能够计算出最佳解的“有效”算法(注2)。这些问题之一是众所周知的旅行商问题。例如,克里斯托弗德斯(Christophides)针对旅行商问题的算法曾被称为启发式算法,因为尚未证明它在最佳解的50%之内。但是,由于已被证明,因此Christophides的算法被更准确地称为近似算法。
由于计算机功能的限制,并非总是能够有效地找到最佳解决方案。如果问题中有足够的结构,即使解决方案空间很大(即,最短路径问题),也可能有一种遍历解决方案空间的有效方法。
通过添加“专家信息”或“受过教育的猜测”来指导搜索方向,启发式方法通常用于改善算法的运行时间。在实践中,试探法也可能是最优算法的子例程,以确定首先要看的地方。
(注1):另外,算法的特征在于它们是否包含随机或不确定的元素。始终以相同方式执行并产生相同答案的算法称为确定性算法。
(注2):这称为P对NP问题,并且被分类为NP完全和NP困难的问题不太可能具有“有效”算法。注意; 正如评论中提到的@Kriss一样,甚至存在“更糟糕”的问题,可能需要指数时间或空间来计算。
有几个答案可以回答部分问题。我认为它们不够完整且不够准确,因此决定不编辑@Kriss接受的答案
我认为启发式更多地是在人工智能的基于学习的模型中使用的约束,因为将来的解决方案状态很难预测。
但是,在阅读了以上答案之后,我的疑问是:“如何使用随机优化技术成功地应用启发式技术?或者当与随机优化一起使用时,启发式技术可以用作成熟的算法吗?”
我读过的最好的解释之一来自于一本很棒的书Code Complete,我现在引用它:
启发式技术是一种可以帮助您寻找答案的技术。其结果受偶然性影响,因为启发式方法只会告诉您外观,而不是查找内容。它并没有告诉您如何直接从A点到达B点;它甚至可能不知道A点和B点在哪里。实际上,启发式是小丑服中的一种算法。它的可预测性更差,更有趣,并且没有30天的退款保证。
这是开车到某人房屋的算法:沿167号高速公路向南行驶至Puy-allup。从南山购物中心(South Hill Mall)出口驶出,然后向山上行驶4.5英里。在杂货店的信号灯处右转,然后在第一个路口左转。转入左侧的大型棕褐色房屋的车道,在北锡达714号。
这是一种去某人家的试探法:找到我们寄给您的最后一封信。开车返回地址的小镇。当您到达城镇时,请问某人我们的房子在哪里。每个人都认识我们-有人会很乐意为您提供帮助。如果您找不到任何人,请通过公用电话给我们打电话,我们会帮助您。
算法和启发式算法之间的区别非常细微,两个术语有些重叠。就本书而言,两者之间的主要区别在于解决方案的间接级别。算法直接为您提供指令。启发式方法可以告诉您如何找到适合自己的说明,或者至少在哪里可以找到它们。