随机算法和启发式算法之间的区别

Posted

技术标签:

【中文标题】随机算法和启发式算法之间的区别【英文标题】:Difference between a stochastic and a heuristic algorithm 【发布时间】:2015-03-21 00:26:47 【问题描述】:

扩展question of streetparade,我想问一下随机算法和启发式算法之间有什么区别(如果有的话)。

说随机算法实际上是一种启发式算法对吗?

【问题讨论】:

【参考方案1】:

Booth 方法通常用于加速生成和测试 NP 完全问题的解决方案

    随机算法使用随机性

    他们使用所有组合但不按顺序使用,而是使用各种可能性中的随机组合,希望尽快找到解决方案。实现快速简单,单次迭代也很快(恒定时间)

    启发式算法

    他们不是随机选择组合,而是基于一些关于使用的流程、输入数据集或使用的知识。因此,他们将组合的数量显着降低到只使用那些可能是解决方案的组合,并且只使用那些但通常是所有组合,直到找到解决方案。

    实现复杂度取决于问题,单次迭代通常比随机方法(恒定时间)慢得多,因此只有在可能性的数量降低到足以看到实际加速的情况下才使用启发式算法,因为即使算法复杂度与启发式算法通常要低得多,有时常数时间足够大,甚至可以减慢速度......(在运行时方面)

展位方式可以组合在一起

【讨论】:

这个答案并不完全准确。两者都不适用于NP完全问题。参见例如带有随机枢轴选择的快速排序、Welzl 算法、随机梯度下降等。启发式也不一定比随机化慢。 @IVlad 是的,我知道,但我从来没有写过它们只是为了这样的目的......但是添加单词usually 不会受到伤害。速度大约是单次迭代常数时间(我从未见过具有较小常数时间的启发式方法然后是随机方法) @IVlad 对文本进行了一些修改。如果您知道更好的重新表述,请随时编辑我的英语技能已经生疏了 是的,NP-hardness 与这个问题无关。【参考方案2】:

TTBOMK,“随机算法”不是一个标准术语。然而,“随机算法”是,这可能就是这里的意思。

随机化:以某种方式使用随机性。有两种风格:Monte Carlo 算法总是在有限时间内完成,但不保证最佳解决方案,而 Las Vegas 算法不一定能在任何时间内完成时间有限,但承诺找到最优解。 (通常还要求它们具有有限的预期运行时间。)常见的蒙特卡罗算法示例:MCMC、模拟退火和米勒-拉宾素数测试。具有随机枢轴选择的快速排序是一种拉斯维加斯算法,总是在有限时间内完成。不使用任何随机性的算法是确定性

启发式:不保证能找到正确答案。非启发式算法是精确

许多启发式算法对不影响真正解决方案的输入的“附带”属性很敏感,例如在装箱问题的 First-Fit 启发式算法中考虑了订单商品。在这种情况下,它们可以被认为是蒙特卡洛随机算法:您可以随机排列输入并重新运行它们,始终保持您找到的最佳答案。 OTOH,其他启发式方法没有此属性-例如First-Fit-Decreasing 启发式是确定性的,因为它总是首先按尺寸递减的顺序对项目进行排序。

如果特定随机算法的可能输出集合是有限的并且包含真正的答案,那么运行它足够长的时间“实际上可以保证”最终找到它(从某种意义上说not 发现它可以任意小,但绝不是 0)。请注意,启发式输入的某些排列并不会自动导致得到准确的答案——在 First-Fit 的情况下,事实证明这 为真,但这仅在 2009 年得到证实。

有时可以对随机算法的收敛做出更强有力的陈述:这些通常是这样的:“对于任何给定的小阈值 d,经过 t 步后,我们将以概率 f(t, d) 处于最优解的 d 范围内",其中 f(t, d) 是 t 和 d 的递增函数。

【讨论】:

你提到了确定性算法,这让我更加困惑。 deterministicexact 算法不是一回事吗? 不,您可以使用确定性启发式算法。装箱的 First-Fit-Decreasing 启发式是确定性的,因为给定相同的输入,它总是会产生相同的输出。但这并不准确,因为它可能找不到最佳解决方案。 这条评论很有启发性。那么我们可以说我们有偶极子 deterministic-stochasticexact-heuristics 吗? 是的,你可以——我的回答中的第 2 和第 3 段也说了这么多;)

以上是关于随机算法和启发式算法之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

启发式算法 元启发式算法 超启发式算法 区别 是什么

启发式算法(Heuristic Algorithm)

贪心算法和启发式算法有啥区别?

启发式和元启发式有啥区别?

粒子群算法 | 启发式优化算法

算法学习开始阶段一