- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
1概率演算法
2引言前面幾張所討論的分治、動態規劃、貪心法、回溯和分支限界等演算法的每一計算步驟都是確定的,本章所討論的概率演算法允許執行過程中隨機選擇下一計算步驟。在多數情況下,當演算法在執行過程中面臨一個選擇是,隨機性選擇常比最優選擇省時,因此概率演算法可在很大程度上降低演算法複雜性。概率演算法的一個基本特徵是對所求解問題的同一實例用同一概率演算法求解兩次可能得到完全不同的效果(所需時間或計算結果)。本章將要介紹的概率演算法包括:數值概率演算法求解數值問題的近似解,精度隨計算時間增加而不斷提高舍伍德演算法消除演算法最壞情形行為與特定勢力之間的關聯性,並不提高平均性能,也不是刻意避免演算法的最壞情況行為拉斯維加斯演算法求解問題的正確解,但可能找不到解蒙特卡羅演算法求解問題的準確解,但這個解未必正確,且一般情況下無法有效判定正確性
37.1亂數亂數在概率演算法設計中扮演著十分重要的角色。在現實電腦上無法產生真正的亂數,因此在概率演算法中使用的亂數都是一定程度上隨機的,即偽亂數。線性同餘法是產生偽亂數的最常用的方法。由線性同餘法產生的隨機序列a0,a1,…,an滿足其中b?0,c?0,d?m。d稱為該隨機序列的種子。如何選取該方法中的常數b、c和m直接關係到所產生的隨機序列的隨機性能。這是隨機性理論研究的內容,已超出本書討論的範圍。從直觀上看,m應取得充分大,因此可取m為機器大數,另外應取gcd(m,b)=1,因此可取b為一素數。
47.2數值概率演算法一、用隨機投點法計算π值二、計算定積分三、解非線性方程組
5一、用隨機投點法計算π值設有一半徑為r的圓及其外切四邊形。向該正方形隨機地投擲n個點。設落入圓內的點數為k。由於所投入的點在正方形上均勻分佈,因而所投入的點落入圓內的概率為。所以當n足夠大doubleDarts(intn){//用隨機投點法計算?值staticRandomNumberdart;intk=0;for(inti=1;i=n;i++){doublex=dart.fRandom();doubley=dart.fRandom();if((x*x+y*y)=1)k++;}return4*k/double(n);}
6二、計算定積分設f(x)是[0,1]上的連續函數,且0≤f(x)≤1。需要計算的積分為,積分I等於圖中的面積G。在圖所示單位正方形內均勻地作投點試驗,則隨機點落在曲線下麵的概率為假設向單位正方形內隨機地投入n個點(xi,yi)。如果有m個點落入G內,則隨機點落入G內的概率
7三、解非線性方程組求解下麵的非線性方程組其中,x1,x2,…,xn是實變數,fi是未知量x1,x2,…,xn的非線性實函數。要求確定上述方程組在指定求根範圍內的一組解x1*,x2*,…,xn*。在指定求根區域D內,選定一個隨機點x0作為隨機搜索的出發點。在演算法的搜索過程中,假設第j步隨機搜索得到的隨機搜索點為xj。在第j+1步,計算出下一步的隨機搜索增量?xj。從當前點xj依?xj得到第j+1步的隨機搜索點。當x?時,取為所求非線性方程組的近似解。否則進行下一步新的隨機搜索過程。
87.3舍伍德(Sherwood)演算法設A是一個確定性演算法,當它的輸入實例為x時所需的計算時間記為tA(x)。設Xn是演算法A的輸入規模為n的實例的全體,則當問題的輸入規模為n時,演算法A所需的平均時間為這顯然不能排除存在x∈Xn使得的可能性。希望獲得一個概率演算法B,使得對問題的輸入規模為n的每一個實例均有這就是舍伍德演算法設計的基本思想。當s(n)與tA(n)相比可忽略時,舍伍德演算法可獲得很好的平均性能。
9一、線性時間選擇演算法快速排序演算法、線性時間選擇演算法P206有時也會遇到這樣的情況,即所給的確定性演算法無法直接改造成舍伍德型演算法。此時可借助於隨機預處理技術,不改變原有的確定性演算法,僅對其輸入進行隨機洗牌,同樣可收到舍伍德演算法的效果。例如,對於確定性選擇演算法,可以用下麵的洗牌演算法Shuffle將數組a中元素隨機排列,然後用確定性選擇演算法求解。這樣做所收到的效果與舍伍德型演算法的效果是一樣的。templateclassTypevoidShuffle(Typea[],intn){ //隨機洗牌演算法staticRandomNumberrnd;for(inti=0;in;i++){intj=rnd.Random(n-i)+i;Swap(a[i],a[j]);}}
10二、搜索有序表有序字典是表示有序集很有用的抽象數據類型,它支持對有序集的搜索、插入、刪除、前驅、後繼等運算;有許多基本數據結
文档评论(0)