扩展question of streetparade,我想问一下随机算法和启发式算法之间有什么区别。
说随机算法实际上是一种启发式算法是正确的吗?
答案 0 :(得分:8)
TTBOMK,"随机算法"不是标准术语。 "随机算法"但是,它可能就是这里的意思。
随机化:以某种方式使用随机性。有两种风格:蒙特卡罗算法总是在有限的时间内完成,但不保证最佳解决方案,而拉斯维加斯算法并不一定能得到保证在任何有限的时间内完成,但承诺找到最佳解决方案。 (通常它们还需要具有有限的预期运行时间。)常见蒙特卡罗算法的示例:MCMC,模拟退火和Miller-Rabin素性测试。具有随机枢轴选择的Quicksort是拉斯维加斯算法,总是在有限的时间内完成。不使用任何随机性的算法是 deterministic 。
启发式:无法保证找到正确的答案。非启发式算法完全。
许多启发式方法对"偶然的"非常敏感。不会影响真实解决方案的输入属性,例如在Bin Packing问题的First-Fit启发式中考虑订单项。在这种情况下,它们可以被认为是蒙特卡罗随机算法:您可以随机置换输入并重新运行它们,始终保持您找到的最佳答案。 OTOH,其他启发式方法没有这个属性 - 例如First-Fit-Decreasing启发式是确定性的,因为它总是首先按递减的大小顺序对项目进行排序。
如果特定随机算法的可能输出集合是有限的且包含真实答案,那么运行它足够长的时间实际上是保证"最终找到它(从某种意义上说,不找到它的概率可以任意小,但永远不会为0)。请注意,启发式输入的某些排列将导致获得确切答案的情况不会自动发生 - 在First-Fit的情况下,事实证明此是是的,但这只是在2009年证实的。
有时可以对关于随机算法收敛的更强有力的陈述:这些通常沿着"对于任何给定的小阈值d,在t步之后,我们将在概率f(t)的最优解的d内。 ,d)",f(t,d)是t和d的递增函数。
答案 1 :(得分:4)
Booth方法通常用于加速 genere和测试解决NP完全问题的方法
随机算法使用随机性
他们使用所有组合但不是按顺序排列,而是使用来自各种可能性的随机组合,希望尽快达到解决方案。实现非常简单,单次迭代也很快(恒定时间)
启发式算法
他们不是随机选择组合,而是基于对使用过程,输入数据集或用法的一些了解。因此,他们将组合的数量显着降低到只有那些可能是解决方案的组合,并且只使用那些组合,但通常只使用它们直到找到解决方案。
实现复杂性取决于问题,单次迭代通常比随机方法(恒定时间)慢得多,因此只有当可能性的数量降低到足以实际加速时才会使用启发法,因为即使算法复杂度具有启发式算法也是如此通常情况下要低得多,有时恒定的时间足够大,甚至可以减慢速度......(在运行时间)
布斯方法可以组合在一起