Algorithm 什么';贪婪算法和启发式算法的区别是什么?

Algorithm 什么';贪婪算法和启发式算法的区别是什么?,algorithm,heuristics,greedy,Algorithm,Heuristics,Greedy,贪婪算法和启发式算法有什么区别 我读过一些关于这个论点的文章,在我看来,它们或多或少都是相同类型的算法,因为它们的主要特点是在每次迭代中选择最佳(局部)选项来解决问题 这是两件不同的事情:贪婪算法试图在每次迭代时选择“最佳选择”(例如,如果您根据边的长度选择图中的边,它将在每次迭代中选择可能的最长/最短边)。贪婪算法提供了一个精确解 启发式算法使用概率和统计,以避免遍历所有可能性,并提供“估计的最佳解决方案”(这意味着,如果存在更好的解决方案,它只会稍微好一点) 它们的主要特点是在每次迭代中选择

贪婪算法和启发式算法有什么区别


我读过一些关于这个论点的文章,在我看来,它们或多或少都是相同类型的算法,因为它们的主要特点是在每次迭代中选择最佳(局部)选项来解决问题

这是两件不同的事情:贪婪算法试图在每次迭代时选择“最佳选择”(例如,如果您根据边的长度选择图中的边,它将在每次迭代中选择可能的最长/最短边)。贪婪算法提供了一个精确解

启发式算法使用概率和统计,以避免遍历所有可能性,并提供“估计的最佳解决方案”(这意味着,如果存在更好的解决方案,它只会稍微好一点)

它们的主要特点是在每次迭代中选择最佳(局部)选项

对于启发法来说,一点也不正确。启发式算法所做的选择在理论上是次优的,但在实践中已被证明能产生合理的结果。通常会找到近似的解决方案:

在计算机科学、人工智能和数学优化中,启发式是一种技术,用于在经典方法太慢时更快地解决问题,或在经典方法无法找到任何精确解时找到近似解。这是通过以最佳性、完整性、准确性或精度换取速度来实现的

贪婪是启发式的一个例子(做出最好的局部选择并希望得到最优的全局结果),但这并不意味着启发式是贪婪的。有许多与贪婪完全无关的启发式方法,例如:

在人工智能的计算机科学领域,遗传算法(GA)是一种模拟自然选择过程的启发式搜索算法


注意:我不确定以下内容是否适用于我和我的“社交圈”,或者是一个标准的全球概念

在我看来,正如维基百科所说,启发式算法是:

启发式是一种技术,用于在经典方法太慢时更快地解决问题,或在经典方法无法找到任何精确解时找到近似解。这是通过以最佳性、完整性、准确性或精度换取速度来实现的


另一方面,贪婪算法就是您所描述的:一种通过在每一步选择最佳选项来寻找最佳解决方案的算法。差不多就是这样。这并不意味着解决方案的任何方面:有时贪婪算法提供完美和最优的解决方案,而有时它可能只是一个启发式->近似(非完美)但更快的解决方案。

贪婪是指将元素一个接一个地聚合到解决方案中(遵循某种选择策略)永远不要回头。示例:直接选择排序可被视为贪婪过程


启发式是一个通用术语,表示任何旨在改进算法行为的特别/直观规则,但没有保证。示例:用于在快速排序中选择轴心点的三个规则的中间值。

我对启发式的描述方式是,它们是“经验法则”。它们产生全局最优解的能力可能无法直接证明,但通常情况下,它们做得很好。当确定最优解决方案的成本太高时,通常使用它们。此外,启发法通常对过去如何解决问题的经验进行一定程度的编码。描述启发式的更好方法是“解决策略”

贪婪算法是根据当前看起来最好的东西做出选择的算法。换句话说,选择是局部最优的,但不一定是全局最优的(如果幸运的话,可能是这样,但你无法证明)。此外,贪婪算法通常不会根据新信息优化其解。这只是一种解决策略(也称为启发式)

为了举例说明贪婪算法的工作原理,如果您使用贪婪算法来帮助您规划一条以最短距离从一个国家的一侧行驶到另一个国家的路线,它可能会选择短而慢的道路。它不一定会明白,高速公路,虽然更长,也许更直接,将是更好的选择

另一种策略(启发式)可能会尝试使用高速公路覆盖尽可能多的旅程(因为对于大多数目的地,它们往往更直接),然后使用普通道路在两者之间进行过渡。在某些情况下,它可能会表现得很糟糕,但在大多数情况下,它会表现得很好,老实说,这可能是我们通勤时使用的类似启发式方法(如果不使用卫星导航的话)

结束

  • 都是启发式,贪婪算法-不

  • 都是贪婪的算法,启发式的-一般来说,是的


为了提供一些背景知识,我在大学里的算法课上教的第一个问题是。它属于NP完全问题,意味着不存在有效的解决方法。也就是说,随着问题规模的扩大,找到解决方案所需的时间也会大幅增加。存在许多可证明的算法,但它们的性能并不好,在现实世界的应用中,我们倾向于使用启发式算法(包括贪婪算法-请参见链接)。

“贪婪算法提供精确的解决方案!”-对此不确定。我把所有使用贪婪方法的算法称为“贪婪”,即使它们不能得到精确解,“精确”和“最优”一样?“不,大多数贪婪算法都不是最优的。”@Dukeling:我想他的意思是“精确”就像“不近似”一样。依我看,这也不正确。@LeartS mind提供了一个贪婪算法的例子,它没有提供