‘壹’ 随机性数学方法有哪些
随机数学是研究随机现象统计规律性的一个数学分支,涉及四个主要部分:概率论、随机过程、数理统计、随机运筹。概率论是后三者的基础。则睁厅
4、舍伍德算法 Sherwood
利用随机算法改造已有算法,使得算法的性能尽量与输入数据无关,即平滑算法的性能。它总能求得问题的一个解,且求得的解总是正确的。
‘贰’ (六) 概率算法
前面所讨论算法的每一计算步骤都是确定的,而本次所讨论的概率算法允许算法在执行过程中随机地选择下一个计算步骤。在许多情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时。因此概率算法可在很大程度上降低算法的复杂度。
概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。这两次求解所需的时间甚至所得到的结果可能会有相当大的差别。一般情况下, 可将概率算法大致分为四类:数值概率算法、蒙特卡罗(MonteCarlo) 算法、拉斯羡孝陵维加斯(Las Vegas) 算法和舍伍德(Sherwood) 算法。
随机数在随机化算法设计中扮演着十分重要的角色。在现实计算机上无法产生真正的随机数,因此在随机化算法中使用的随机数都是一定程度上随机的,即伪随机数。
线性同余法 是产生伪随机数的最常用的方法。由线性同余法产生的随机序列 满足
其中 。d称为该随机序列的种子。如何选取该方法中的常数b、c和m直接关系到所产生的随机序列的随机性能。这是随机性理论研究的内容,已超出本书讨论的范围。从直观上看,m应取得充分大,因此可取m为机器大数,另外应取 ,因此可取b为一素数。
为了在设计概率算法时便于产生所需的随机数,建立一个随机数类RandomNumber:该类包含一个需由用户初始化的种子randSeed。给定初始种子后,即可产生与之相应的随机序列。种子randSeed是一个无符号长整型数, 可由用户选定也可用系统时间自动产生。函数Random的输入参数 是一个无符号长整型数,它返回 范围内的一个随机整数。函数fRandom返回[0,1) 内的一个随机实数。
数值概率算法常用于数值问题的求解。这类算法所得到的往往是近似解。且近似解的精度随计算时间的增加而不断提高。在许多情况下,要计算出问题的精确解是不可能的或没有必要的,因此用数值概率算法可得到相当满意的解。
当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时
舍伍德算法就是一种利用随机算法改造确定性算法,消除或减少问题的好坏实例间的这种差别。舍伍德算法精髓不是避免算法的最坏情况行为,而是设法消除这种最坏情形行为与特定实例之间的关联性。
思想:利用随机算法改造已有算法,使得算法的性能尽量与输入数据无关,即平滑算法的性能。它总能求得问兄戚题的一个解,且求得的解总是正确的。
算法的性能 =平均性能 + 一个很小的随机值。 舍伍德算法是为了得到好的平均性能。
一个算法,对于不同的输入数据,其算法的性能是不一样的。比如快排算法,每次选择第一个元素作为基准,慎带对序列从小到大排序:
拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解。但有时用拉斯维加斯算法会找不到解。
与蒙特卡罗算法类似,拉斯维加斯算法找到正确解的概率随着它所用的计算时间的增加而提高。对于所求解问题的任一实例,用同一拉斯维加斯算法反复对该实例求解足够多次,可使求解失效的概率任意小。
蒙特卡罗算法用于求问题的准确解。对于许多问题来说,近似解毫无意义。例如,一个判定问题其解为“是”或“否”,二者必居其一,不存在任何近似解答。又如,我们要求一个整数的因子时所给出的解答必须是准确的,一个整数的近似因子没有任何意义。
用蒙特卡罗算法能求得问题的一个解,但这个解未必是正确的。求得正确解的概率依赖于算法所用的时间。算法所用的时间越多,得到正确解的概率就越高。蒙特卡罗算法的主要缺点也在于此。一般情况下,无法有效地判定所得到的解是否肯定正确。
在实际应用中常会遇到一些问题,不论采用确定性算法或随机化算法都无法保证每次都能得到正确的解答。蒙特卡罗算法则在一般情况下可以保证对问题的所有实例都以高概率给出正确解,但是通常无法判定一个具体解是否正确。
有些蒙特卡罗算法除了具有描述问题实例的输入参数外,还具有描述错误解可接受概率的参数。这类算法的计算时间复杂性通常由问题的实例规模以及错误解可接受概率的函数来描述。
参考链接: http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html
数值概率算法的应用
舍伍德算法的应用
拉斯维加斯算法的应用
蒙特卡罗算法的应用
‘叁’ 舍伍德算法的基本思想
设A是一个确定性算法,当它的输入实例为x时所需的计算时间记为tA(x)。设Xn是算法A的输入规模为n的实例的全体,则当问题的输入规模为n时,算法A所需的平均时间为这显然不能排除存在x∈Xn使得 tA(x)>>tA(n)的可能性。
希望获得一个概率算法B,使得对问题的输入规模为n的每一个实例均有
这就是舍伍德算法设计的基本思想。当s(n)与tA(n)相比可忽略时,舍伍德算法可获得很好的平均性能。
舍伍德算法总能求得问题的一个解,且所求得的解总是正确的。当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以在这个确定算法中引入随机性将它改造成一个舍伍德算法,消除或减少问题的好坏实例间的这种差别。舍伍德算法精髓不是避免算法的最坏情况行为,而是设法消除这种最坏行为与特定实例之间的关联性。
‘肆’ 算法具有确定性,因此在写算法中一定不能包含随机数调用的函数
错的,这里举个例子吧:随机快速排序,每次随机取一个值作为排序分类标准把当前区间拆成两部分,但是最后它还是会排好序,是一个具有确定结果的算法,只是得到结果的过程随机。
希望能帮到你。
‘伍’ 舍伍德算法的总结
采用数组模拟有序链表,它本质上是利用两个数组,一个存储数据,一个存储其后继在数组中的位置,对于查找指定元素,采用舍伍德算法可在0(n)时间内完成,采用顺序存储结构时,若数组元素无序,则只能顺序查找,需O(n)时间,若数组元素有序,可进行二分法查找,其时问复杂度虽然降为0(logn),但却在进行插入和删除元素时,需要移动大量元素。与链式存储相比,插入和删除时虽然都不需要移动元素,但在查找上,其时间性能由0(n)降为O(n),可见采用数组模拟有序链表,并采用舍伍德算法进行查找删除具有比较高的效率。它不失为一种高效韵数据结构。
‘陆’ 有哪些随机数算法呢
1、数值概率算法:用于数值问题的求解。所得到的解几乎都是近似解,近似解的精度
随着计算时间的增加而不断地提高。
2、拉斯维加斯算法(LasVegas):要么给出问题的正确答案,要么得不到答案。反复求解多次,可
使失效的概率任意小。
3、蒙特卡罗算法(MonteCarlo):总能得到问题的答案,偶然产生不正确的答案。重复运行,每一次
都进行随机选择,可使不正确答案的概率变得任意小。
4、舍伍德算法(Sherwood):很多具有很好的平均运行时间的确定性算法,在最坏的情况下性能很
坏。引入随机性加以改造,可以消除或减少一般情况和最坏情况的差别。
‘柒’ 如何有效提高概率算法获得正确解的概率或提高算法的求解精度
1)数值概率算法:常用于数值问题的求解,得到的往往是近似解
(1)解的精度随计算时间的增加而提高
(2)在许多情况下,计算出问题的精确解是不可能或没必要
2)蒙特卡罗算法:用于求解问题的准确解,可以求得问题的一个解,但该解未必正确
(1)求得正确解的概率依赖于算法的计算时间
多次执行蒙特卡罗算法,可以提高获得正确解的概率
(2)无法有效判定所得到的解是否肯定正确。
3)拉斯维加斯算法:不会得到不正确的解
(1)有时找不到问题的解
(2)找到正确解的概率随算法计算时间的增加而提高
(3)用同一拉斯维加斯算法反复对问题实例求解足够多次,可使求解失败的概率任意小。
4)舍伍德算法:总能求解得到问题的一个解,而且所求得得解总是正确的。
将确定性算法引入随机性改造成舍伍德算法,可消除或减少问题对于好坏实例间的差别。