8-1 随机算法计算机应用基础.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
概率计算 概率计算就是在算法中可采用随机选择计算的步骤、 元素或参数等。 它的基本特征是计算具有不确定性。 它的解也不一定是最优解。 它在很大程度上能降低算法的复杂度。 非标准算法中普遍应用概率方法,主要有: (1)直接用概率进行数值计算; (2)用概率/随机进行选择; (3)利用概率加速搜索或避免陷于局部最优。 直接用概率进行数值计算 设f(x)是[0, 1]上的连续函数, 1 求I =∫ f(x)dx。 0 y = f(x) 假设向单位正方形内随机投入 n个点(x , y ) ,若有m个点落入 i i G G中,则I≈m/n。 double Darts (int n) {double x, y; int k = 0; static RandomNumber dart; for (int i=1; i=n; i++) {x=dart.fRandom(); y=dart.fRandom(); if (y=f(x)) k++;} return k/double(n); } 划分基准的随机选择 在快速排序算法中,若用拟中位数作为划分标准, 可保证在线性时间内完成。但是确定拟中位数要付 出额外开销。若选用第一个元素为划分基准,最坏 2 时的时间复杂性为O(n )。 若在算法中采用随机选择一个元素作为划分标准, 便可既保证算法的线性时间平均性能,又避免了计 算拟中位数的麻烦。 也可先对数组进行“洗牌”,然后再进行确定的排 序算法。这样依然可取得同样的效果。 “洗牌”后的快速排序 void Shuffle(Type a[], int n) { //随机洗牌算法 static RandomNumber md; for (int i = 1; i n; i++) { int j = md.Random(n – i + 1) + i; Swap(a[i], a[j]); }} Void QuiksortByShuffle(Type a[], int n) { Shuffle(a, n); //将数组a洗牌 Quiksort(a, n); } 随机抽样 在n个元素的集合中随机抽取m(0m≤n)个 无重复的元素。为简单起见,假定所有元 素的值都位于1至n之间。 随机抽样 我们采用下面的方法进行选择: 1、首先将n个元素都标记为“未选择”; 2、重复下列步骤直到抽取了m个不同的元素 (1) 产生一个1至n间的随机数r ; (2) 如果r标记为“未选择”,将它标记为 “已选择”,并加入到抽样中。 随机抽样 int RandomSampling(S[n], A[m], m) { mark[1..n] = False; count=0; while(count m) { r = random(1, n); if (mark[r] False) { count++; A[count]=S[r]; mark[r]=True; }}} Las Vegas算法 Las Vegas算法的特点是随机性地进行决策。 例如对n后问题,Las Vegas算法是随机地产生一组王 后放置的位置。若成功了,便找到了一个解;若失 败了,就整个重来,再随机产生另外一组王后的位 置。这样作,直至找到解。 此算法能显著地改进算法的有效性,甚至对迄今为 止找不到有效算法的问题,也能得到满意的结果。

文档评论(0)

恬淡虚无 + 关注
实名认证
内容提供者

学高为师,身正为范.师者,传道授业解惑也。做一个有理想,有道德,有思想,有文化,有信念的人。 学无止境:活到老,学到老!有缘学习更多关注桃报:奉献教育,点店铺。

1亿VIP精品文档

相关文档