版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章概率算法
9.2數值概率算法
9.3舍伍德(Sherwood)型概率算法9.4拉斯維加斯(LasVegas)型概率算法9.5蒙特卡羅(MonteCarlo)型概率算法9.1概
述
9.1概
述
9.1.1概率算法的設計思想9.1.2隨機數發(fā)生器概率算法是比較新的、十分有用的一類算法。概率算法的特點:對同一實例多次執(zhí)行,結果和用時可能不同;這一點有時是很有用的。概率算法允許失敗,但概率要小,如除0錯誤。對一實例多次執(zhí)行概率算法,可能獲得最好解(類似選舉)。概率算法的平均時間復雜度比最壞時間復雜度重要。概率算法可以控制解精度,運行次數越多解就越精確。9.1.1概率算法的設計思想
例如,判斷表達式f(x1,x2,…,xn)是否恒等于0。概率算法首先生成一個隨機n元向量(r1,r2,…,rn),并計算f(r1,r2,…,rn)的值,如果f(r1,r2,…,rn)≠0,則f(x1,x2,…,xn)≠0;如果f(r1,r2,…,rn)=0,則或者f(x1,x2,…,xn)恒等于0,或者是(r1,r2,…,rn)比較特殊,如果這樣重復幾次,繼續(xù)得到f(r1,r2,…,rn)=0的結果,那么就可以得出f(x1,x2,…,xn)恒等于0的結論,并且測試的隨機向量越多,這個結果出錯的可能性就越小。對于確定性算法,通常分析在平均情況下以及最壞情況下的時間復雜性。對于概率算法,通常分析在平均情況下以及最壞情況下的期望時間復雜性,即由概率算法反復運行同一輸入實例所得的平均運行時間。概率算法的時間性能需要強調的是,“隨機”并不意味著“隨意”。9.1.2隨機數發(fā)生器
目前,在計算機上產生隨機數還是一個難題,因為在原理上,這個問題只能近似解決。計算機中產生隨機數的方法通常采用線性同余法,產生的隨機數序列為a0,a1,…,an,滿足:
(式1)
其中,b≥0,c≥0,m>0,d≤m。d稱為隨機數發(fā)生器的隨機種子(RandomSeed),當b、c和m的值確定后,給定一個隨機種子,由式1產生的隨機數序列也就確定了。計算機語言提供的隨機數發(fā)生器,一般會輸出一個分布在開區(qū)間(0,1)上的隨機小數,并且需要一個隨機種子,這個隨機種子可以是系統當前的日期或時間。下面給出利用C++語言中的隨機函數rand產生的分布在任意區(qū)間[a,b]上的隨機數算法。算法——隨機數發(fā)生器intRandom(inta,intb){returnrand()%(b-a)+a;//rand()產生(0,32767)之間的隨機整數}C++描述9.2數值概率算法(Numericalprobabilisticalgorithms)9.2.1用數值概率算法求π的值例1:設有一半徑為r的圓及其外切四邊形。向該正方形隨機地投擲n個點。設落入圓內的點數為k。由于所投入的點在正方形上均勻分布,因而所投入的點落入圓內的概率為k/n=πrr/4r=πr/4,所以當n足夠大時,k與n之比就逼近這一概率。令r=1,則π=4k/npublicstaticdoubledarts(intn){//用隨機投點法計算值intk=0;for(inti=1;i<=n;i++){ x=dart.fRandom(); y=dart.fRandom();if((x*x+y*y)<=1)k++;}return4*k/(double)n;}例2圍B精uf組fo程n的針18世紀Ge苦or曠ge飄L暖ou揚isLe齒cl背er陡c和Co哨mt對e溫de監(jiān)B擇uf矛fo裝n證明津了:跟同寬頂度木稼板拼棄成的已地板多,縫礙隙為0,針罰的長里度是晨木板析寬度熟的一暖半,且隨機騎落下n個針底,與飛地板掏縫相趁交的豎有k個,目則k/德n=1思/π。即π=n/鼠kBu棟ff壇on定理跑:可以愁預測納隨機星落下性的n個針啦中地點板縫正相交府的個甩數可以和計算π的值還可下以計謎算地妻板木樸板的殲寬度設地頂板寬蘭度是ω,針趴長λ,聽當ω≥λ時,移隨機刺落下濁的針羅與地所板縫忠相交并的概窮率是p=揀2λ/ωπ.已知λ,隨機嗚丟n個針魄,統寇計與斧地板賊縫相權交的戰(zhàn)針數歪,得赤到p,求咐出地哀板寬峰度:ω=2λ/pπ9.化2.底2數字使積分abhI/恰(b己-a兆)9.刻2.固2數字仔積分用概錦率算恭法計答算f(澡x)在區(qū)龜間[a,奧b]的積斥分,加即面雁積。有兩談種方井法:(1芹)產生n個隨診機點竊(在改矩形目區(qū)中宇),礦統計跡位于泡曲線旋之下泳的點竿數k,k/巧n=I靈/[h(皮b-a詞)](Mo黑nt漫e星Ca原rl板o算法談)(2蘋)在[a,欠b]區(qū)間姥隨機危采樣f(口x)(高度)n個點,求出何平均歸高度H,H*粉(b飾-a掠)就是I的近逝似值挨。Fu窯nc熱t(yī)i捉onMc速in杯t(殼f,烤n,叢a,稍b)su嘉m=寒0fo蜻r求i=茶1迷to費n排d騎ox=ra本nd批om吊(a電,b)su宗m=su光m+壺f(殲x)re釀tu歇rn懷(撥b-身a)蹲*(欄su晶m/曬n)當n很大墻時,把估計只值的鼠分布龜近似電于正節(jié)態(tài)分多布,怠估計詞值的宇期望破誤差翻與√n成反孝比,壺要提剃高1位精孕度,占需多蜻做10際0倍的堵工作笑。等距災離一曉次采豈樣的義確定苗算法版:Fu患nc頭ti罩onDe惠ti箭nt習(f雀,n籍,a墨,b)su匹m=么0;da賊lt過a=(b-牢a)納/n;麥x猜=a膀+d旺al梢ta洲/2fo架r乞i=限1錫to倉n沸d嫂osu州m=su負m+者f(稼x)re蠶tu鏈rn醋su帝m*da步lt摩a該算宿法比Mc政ti恥nt算法林要實宿用,畏得到崖同等盯精度至的值躲,比Mc粥ti燈nt算法橋迭代貧的次竟數要躁少。De忍ti喝nt不適肺合于怎多重腐積分費計算傲,重漲數的霉增加洋,會謹使迭奇代次虧數以趟積的拌形式變增長賣才能大保持脈相同蜜的精施度。Mc園ti賀nt算法卡適合成多重如積分氧計算亞,重荷數的棕增加玻對當略代次題數影垃響較您小。9.簽2.寸3概率盛計數n鈴bi助t溪re意gi瘡st乞er年:計數賤為2n;計數候范圍罩能超端過0~2n-1嗎?回答丟是肯展定的炕。你沸可以勸以跳爺躍的傍方式嫁計數舍。但是n掛bi仰tre怠gi雖st位er所能華表達研的狀爆態(tài)數施不會予超過2n:設置3個函御數:in做it剩(c):初始哪化寄移存器宜,清0ti差ck浩(c):計數co淘un捧t(施c):返回芬計數聞值如果伴要求損精確長計數跑,n班bi晨t的寄緊存器灣的計廳數范英圍只膨能是0~2n-1。如果稈放寬掠這一煤限制捐,計睜數并讓不要畝求是樂精確銹的。昨則計握數范然圍可氧以擴輛大很勞多。例如覆:在ti倉ck計數即時,時以拋尊硬計團數,漸正面箱加1,背拼面加0,如果繩你拋閱了n次,抱計數械器中童的值攪是n/規(guī)2(正大面概甲率是0.不5),co罵un登t(色)應返滲回值旱是n。所妄以n武bi戚t閣re杠gi魯st幟er停:計數河范圍污是0~2n+鑒1-2。9.富3舍伍宣德(S寨he洲rw陵oo肺d)型概丹率算擱法9.踩3.缺1快速杠排序9.變3.晚2選擇顏問題舍伍摸德(S循h(huán)e祖rw宗oo沉d)型概袖率算狹法分析報確定蘿性算策法在勺平均當情況傻下的勾時間繼復雜籃性時員,通垮常假膠定算里法的怕輸入龜實例顛滿足司某一括特定奇的概比率分糧布。事實格上,垃很多樹算法御對于勸不同騰的輸卻入實可例,糖其運規(guī)行時嚇間差休別很勢大。厭此時觸,可踩以采唱用舍伍勿德型疊概率淺算法竊來消妨除算桑法的何時間叮復雜巨性與治輸入箏實例啄間的綠這種疊聯系霉。算法——隨機洗牌voidRandomShuffle(intn,intr[]){for(i=0;i<n;i++){j=Random(0,n-i-1);r[i]←→r[j];//交換r[i]和r[j]}}C++描述如果洞一個卻確定堵性算鉛法無鄙法直到接改氣造成吼舍伍績德型攪概率本算法酬,可健借助僻于隨侄機預體處理掌技術懂,即俗不改驅變原與有的纖確定善性算際法,駛僅對粘其輸龍入實累例隨前機排頌列(木稱為圍洗牌宋)。羊假設第輸入對實例倡為整拳型,扒下面盈的隨奸機洗烏牌算鏟法可海在線蛇性時減間實丹現對葡輸入艙實例辨的隨鐘機排稻列。舍伍品德型挺概率激算法曠總能慶求得鞭問題接的一紡個解味,并懇且所鵲求得恒的解廢總是堵正確薯的。窄但與步其相拿對應纏的確卵定性略算法宮相比號,舍緒伍德第型概馳率算幅法的千平均盒時間位復雜紗性沒退有改追進??輷Q言繁之,選舍伍層德型途概率則算法逗不是扮避免捆算法喘的最漂壞情陵況行闊為,騾而是燙設法嘆消除芝了算偷法的渣不同膜輸入騾實例帥對算熔法時巖間性抖能的前影響薄,對守所有理輸入索實例瓜而言凱,舍紛伍德見型概賽率算菜法的咽運行凱時間秧相對貴比較拆均勻心,其列時間旋復雜劣性與仗原有鼠的確伶定性吃算法需在平緊均情突況下星的時倒間復勇雜性往相當。9.拆3.層1快速構排序快速妖排序擱算法旺的關款鍵在癥于一下次劃爸分中量選擇飯合適籠的軸巖值作怨為劃哈分的召基準問,如蛙果軸邪值是傍序列正中最炎?。{或最艇大)艘記錄正,則飲一次敘劃分招后,噸由軸墳值分張割得蠻到的陣兩個冤子序口列不憑均衡峽,使江得快豈速排僑序的竿時間題性能月降低插。舍如伍德頌型概蹦率算羨法在詳一次槳劃分枕之前炊,根泳據隨勸機數芹在待苗劃分咬序列鋒中隨沉機確適定一存?zhèn)€記絹錄作成為軸壺值,融并把鼠它與舟第一遍個記胃錄交望換,桶則一筆次劃穗分后擠得到鹽期望某均衡低的兩勾個子堪序列封,從間而使陪算法福的行造為不錯受待煤排序詢序列達的不拴同輸娘入實腰例的通影響塑,使悄快速吳排序傲在最焦壞情嘗況下喊的時紙間性厘能趨回近于昆平均描情況精的時得間性寶能。一次劃分結果[61319]23[313528]初始鍵值序列6131923313558圖10.1一次劃分引入隨機選擇的示例一次劃分結果6[131923313558]初始鍵值序列6131923313558隨機選擇一個2313196313558記錄與6交換(a)以最小值6為軸值,劃分不均衡(b)隨機選擇軸值,劃分均衡算法10.3——隨機快速排序voidQuickSort(intr[],intlow,inthigh){if(low<high){i=Random(low,high);r[low]←→r[i];k=Partition(r,low,high);QuickSort(r,low,k-1);QuickSort(r,k+1,high);}}C++描述算法9.瓜3在最討壞情廁況下促的時膽間復握雜性壇仍是O(n2),這是壇由于勤隨機盞數發(fā)爆生器膛在第i次隨榴機產罷生的烏軸值辯記錄修恰好確都是幻玉序列葵中第i小(未或第i大)侮記錄慶。但洽是,鹿作為劫隨機乎數發(fā)命生器遞,這皆種情訪況的減出現火概率剖是微敘乎其率微的醉。事即實上極,輸鹿入記成錄的跑任何艙排列欲,都尼不可河能出藝現使耽算法壁行為市處于造最壞伴的情炸況。掉因此戚,該薦算法購的期挎望時室間復威雜性期是O(nlo醋g2n)。9.至3.幣2選擇裳問題設無漆序序同列T=(r1,r2,孝…,rn),T的第k(1≤k≤n)小元磨素定豈義為T按升犯序排部列后趴在第k個位脆置上憂的元錫素。顏給定賞一個低序列T和一銹個整士數k,尋找T的第k小元暑素的雙問題闊稱為隨選擇妥問題櫻。特舍別地攪,將違尋找歲第n/2小元彼素的赤問題氏稱為犁中值午問題貸??紤]涉快速匆排序冰中的螺劃分付過程繩,選幼定一斜個軸香值將點序列ri~rj進行勇劃分語,使秒得比查軸值食小的家元素吧都位賓于軸紅值的灣左側舒,比杯軸值悠大的梯元素穴都位攪于軸閃值的膽右側賠,假井定軸由值的壺最終愧位置沸是s,則傭:(1)若k=s,則rs就是巾第k小元脂素;(2)若k<s,則膝第k小元日素一惡定在晌序列ri~rs-1中;(3)若k>s,則灣第k小元銳素一住定在晌序列rs+1~rj中;[ri
…rk…
rs-1]
rs[rs+1……
rj]
均≤rs軸值均≥rs
查找這里[ri
……
rs-1]
rs[rs+1…rk…
rj]
均≤rs軸值均≥rs查找這里(a)若k<s,則rk在軸值的前面(b)若k>s,則rk在軸值的后面舍伍纖德型突概率暢算法奇在一撿次劃味分之損前,踐根據褲隨機耗數在窮待劃測分序貼列中犯隨機昌確定斑一個告記錄裙作為固軸值區(qū),并址把它限與第看一個早記錄悼交換朽,則多一次員劃分退后得觀到期宵望均虛衡的度兩個腹子序棄列,儉使得慎選擇仆問題餅在最場壞情腥況下杠的時膝間性件能趨棗近于榴平均執(zhí)情況州的時另間性卸能。算法——選擇問題intSelect(intr[],intlow,inthigh,intk){if(high-low<=k)returnr[high];//數組長度小于kelse{i=Random(low,high);//在區(qū)間[low,high]中隨機選取一個元素r[low]←→r[i];//交換元素s=Partition(r,low,high);//進行一次劃分,得到軸值的位置sif(k==s)returnr[s];//元素r[s]就是第k小元素elseif(k>s)returnSelect(r,low,s-1,k);//在前半部分繼續(xù)查找elsereturnSelect(r,s+1,high,k);//在后半部分繼續(xù)查找}C++描述9.忘4拉斯仿維加講斯(L傘as搭V近eg宋as趕)型概頭率算末法9.左4.管1八皇怕后問存題9.嬸4.呼2整數全因子批分解葵問題拉斯上維加占斯(L繁as兆V形eg翠as鼻)型概厚率算火法拉斯聲維加藏斯型暢概率辮算法次不時水地做己出可題能導傷致算額法陷準入僵藏局的爐選擇歐,并今且算握法能跟夠檢干測是錢否陷駛入僵據局,夜如果喚是,莊算法去就承帳認失鞋敗。悅這種巴行為萄對于飾一個銷確定施性算鉆法是圍不能得接受疫的,衡因為催這意凱味著胳它不序能解阿決相只應的和問題場實例彼。但荒是,燦拉斯析維加席斯型孩概率獎算法產的隨凍機特就性可受以接決受失需敗,算只要叨這種暢行為塑出現戰(zhàn)的概耽率不闊占多面數。量當出市現失拘敗時私,只濾要在加相同呆的輸蛛入實泡例上瓜再次音運行鎖概率譜算法睡,就侮又有貨成功得的可尺能。拉斯待維加撤斯型搭概率園算法飯的一束個顯焦著特湖征是別,它所采做的早隨機帳性選悉擇有娘可能枝導致駕算法咬找不爸到問動題的案解,貴即算貢法運場行一今次,少或者債得到專一個羞正確顧的解憤,或槽者無套解。因鴨此,需要原對同一輸蓬入實鉗例反過復多著次運凳行算及法,議直到遣成功團地獲揪得問斗題的翅解。由于圾拉斯諒維加昏斯型偏概率潑算法岔有時劈燕運行寒成功門,有剛時運房誠行失游敗,頂因此介,通費常拉殖斯維篇加斯秘型概葬率算扔法的棉返回府類型棄為bo礦ol,并且逼有兩躺個參原數:宇一個派是算千法的用輸入貍,另辟一個葡是當孝算法鏡運行屑成功鵲時保雪存問黃題的陶解。筑當算換法運周行失蘋敗時歇,可謝對同崗一輸恭入實小例再紛次運世行,靠直到萄成功添地獲挑得問扒題的滋解。拉斯閑維加韻斯型罰概率數算法拴的一金般形茫式vo州id迎Ob屠st恩in領at饒e(春in染pu嶄t墳x,罵s溉ol墊ut場io貍n亂y){su輝cc嶄es子s=踢fa崖ls匙e;wh碰il復e船(!惱su律cc繩es刪s)模s貌uc儀ce類ss栗=L亭V(萍x,叼y守);}設p(x)是對槳輸入繡實例x調用街拉斯辣維加湖斯型歇概率懇算法展獲得中問題猜的一館個解幸的概奶率,害則一視個正琴確的啞拉斯訪維加慎斯型匠概率捆算法嘩應該減對于姑所有種的輸愈入實蹦例x均有p(x)>廈0。在更健強的食意義倦下,燦要求天存在飲一個援正的抖常數δ,使得返對于方所有夕的輸惹入實慎例x均有p(x)>范δ。由于p(x)>和δ,所以稿,只采要有泡足夠遵的時吸間,鐘對任榆何輸估入實迎例x,拉斯催維加潛斯型缸概率叼算法成總能依找到成問題電的一牽個解好。換閉言之筍,拉斗斯維襲加斯舌型概脆率算獅法找盒到正亂確解潮的概仙率隨魔著計考算時梁間的票增加驅而提柱高。9.木4.腹1八皇貓后問螞題八皇舉后問搞題是泡在8×8的棋氏盤上奧擺放跪八個但皇后醒,使貧其不喜能互胡相攻箏擊,息即任鋤意兩獎個皇屠后都削不能伸處于暖同一刑行、供同一方列或越同一鏈斜線蝴上。對于至八皇痰后問們題的誓任何寨一個乎解而走言,敞每一乓個皇煤后在泄棋盤折上的便位置飲無任峽何規(guī)狹律,幣不具天有系輝統性困,而堅更像辣是隨眨機放帆置的寒。由訪此想由到拉固斯維萌加斯駕型概燭率算閘法:苦在棋岔盤上半相繼彼的各督行中附隨機撇地放極置皇璃后,馬并使能新放玻置的淺皇后緩與已串放置短的皇榜后互忽不攻曲擊,矮直至均八個尊皇后賭均已約相容刷地放慢置好石,或情下一及個皇攜后沒頭有可脫放置吩的位口置。由于趕棋盤毫的每豈一行咐上可哪以而疲且必皮須放盾置一堂個皇撿后,逝所以但八皇巖后問請題的父可能濾解用猴一個拔向量X=(x1,x2,備…,x8)表示重,其返中,1≤xi≤8并且1≤i≤8,即褲第i個皇回后放跑置在綠第i行第xi列上飾。由賊于兩墓個皇么后不蚊能位壺于同踏一列么上,潛所以停,解叮向量X必須段滿足筍約束盞條件映:xi≠xj(式9.裙2)若兩艦個皇寨后擺改放的套位置匆分別誓是(i,xi)和(j,xj),在瞧棋盤撲上斜趨率為-1的斜笛線上短,滿免足條填件i-j=xi-xj,在棋刻盤上妄斜率津為1的斜輛線上斧,滿泰足條拼件i+j=xi+xj,綜合刊兩種共情況行,由襖于兩局個皇勿后不傲能位糞于同色一斜脹線上侵,所肝以,吵解向妹量X必須忙滿足隱約束更條件雙:|i-xi|≠泡|j-xj|(式9.席3)滿足固式9.賄2和式9.補3的向抬量X=(x1,x2,筆…,xi)表示父已放物置的i個皇容后(1≤i≤8)互不逆攻擊牌,也駝就是惠不發(fā)漸生沖犬突。算法——八皇后問題1.將數組x[8]初始化為0;試探次數count初始化為0;2.for(i=1;i<=8;i++)2.1產生一個[1,8]的隨機數j;2.2count=count+1,進行第count次試探;2.3若皇后i放置在位置j不發(fā)生沖突,則x[i]=j;count=0;轉步驟2放置下一個皇后;2.4若(count==8),則無法放置皇后i,算法運行失??;否則,轉步驟2.1重新放置皇后i;3.將元素x[1]~x[8]作為八皇后問題的一個解輸出;偽代碼拉斯轉維加閑斯型迅概率悅算法夢通過聰反復如調用羞算法9.雪5,直折至得攏到八給皇后澡問題老的一睜個解盲。如果粉將上常述隨笨機放阿置策漲略與妖回溯星法相線結合抵,則繳會獲想得更合好的條效果盜??蓾櫼韵鹊K在棋雖盤的鋒若干孔行中桃隨機磨地放澡置相涼容的察皇后籍,然齒后在癥其他溉行中生用回軌溯法戴繼續(xù)巧放置陸,直劇至找慘到一幣個解濤或宣羞告失蠟敗。在棋古盤中傾隨機付放置磨的皇跪后越棗多,值回溯催法搜喊索所即需的扯時間震就越暖少,披但失篩敗的泛概率債也就公越大賴。例如罵八皇扣后問叮題,燥隨機聯地放捆置兩莖個皇嫂后再戴采用滾回溯個法比唉完全偵采用?;厮葑惴焖俅蠹s超兩倍董;隨殃機地肌放置冶三個潔皇后曾再采狐用回糕溯法躍比完例全采筍用回剪溯法館快大通約一啦倍;涼而所尼有的女皇后帳都隨坊機放仁置比獸完全爭采用荒回溯淋法慢程大約申一倍舅。很容校易解節(jié)釋這輛個現臘象:友不能悅忽略填產生芽隨機筆數所裙需的挽時間極,當染隨機宇放置允所有幸的皇螞后時擴,八備皇后穴問題稀的求俊解大矮約有70租%的時巧間都蠢用在舒了產丟生隨楚機數詞上。9.義4.臘2整數焰因子頑分解更問題設n是正登整數哄且n>1,整數n的因叉子分座解問純題是服找出n的如危下形畝式的紐奉惟一杯分解物式:其中渾,p1<p2<…<pk是素綿數,m1,m2,…,mk是正忙整數彩。如禁果n是一駁個合壟數,懇則n必有織一個計非平頁凡因悶子m(1<m<n),使得m可以匯整除n。給定污一個脂合數n,求n的一樓個非僵平凡腫因子款的問形題稱黃為整凈數因殼子劃免分問廢題。整數替因子肝分解寬問題蛇可以傷歸結笑為整埋數因吩子劃碧分和趁素數蜂測試夫:假阿設對疤整數n進行鮮因子蛾分解爆,首會先進艦行素扔數測劑試,久如果n是素內數,食則分柄解完朵成;弓否則夜,再盒進行宏因子策劃分塵,找藍到n的一警個非捐平凡瓦因子m,并怠遞歸滴地對m和n/m進行簽因子源分解拼。下面而討論石整數宜因子辦劃分布問題炒。對一析個正特整數n進行強因子訂劃分另的最輩自然遷的想良法是汽試除腫,它監(jiān)可以呆找到n的最狡小素跳數因糧子。算法——整數因子劃分intFactor(intn){i=sqrt(n);for(m=2;m<=i;m++)if(n%m==0)returnm;return1;//如果找不到一個因子,則n是素數}C++描述算法Fa東ct漢or是對蹲范圍纖在1~勞的所鬧有整隙數進帶行了譜試除筐而得剩到了n的最明小素采數因瞧子,替其時白間復系雜性鬧是O(節(jié))。對于猴一個兇正整騰數n,其位植數為梯,則懲算法Fa寒ct香or的時子間復請雜性品是O(1厲0m/2)。假定臭每次杰循環(huán)舞只需青要1納秒紹,它眉也需基要花沒費1復00簡0年的埋時間純來分膚解一暑個40位左它右的差堅固遣的(Ha流rd)合滾數?!皥远焦痰臅场焙纤{數是隱指這欣個數生是兩快個規(guī)駕模相妨當的系素數拖的乘銀積。到目籃前為氣止,脫還沒賞有找意到求際解整睡數因泡子劃票分問陶題的禮多項桐式時裕間算捷法。求解脾整數谷因子答劃分準問題睡的拉斯犁維加葵斯型奏概率攝算法在開拳始時紹選取0~n-1范圍唱內的宜隨機松數x1,然后雕遞歸慘地由決下式很產生拖無窮睡序列x1,x2,點…,xk,超…。對于i=2k(k=0曲,牌1,斤2鎖,…),以及2k<j≤2k+1,計算xj-xi與n的最務大公生因子d,如果d大于1,則d即是n的非磁平凡存因子碑,算牲法實辭現對n的一撤次劃曬分。計算xj-xi與n的最存大公疏因子??梢詳R采用懷歐幾相里德隸算法毛,具噸體算丟法如峽下:算法——最大公因子intGcd(inta,intb){r=a%bwhile(r!=0)
{a=b;b=r;r=a%b;}returnb;}C++描述算法——整數因子劃分intPollard(intn){i=1;k=2;x=Random(0,n-1);//x為[0,n-1]區(qū)間的隨機整數y=x;while(true){i++;x=(x*x-1)%n;d=Gcd(y-x,n);if(d>1)returnd;//若y-x與n存在最大公約數d,則d即為n的非平凡因子if(i==k){y=x;k*=2;}}}C++描述算法Po鼓ll睜ar泥d中的wh暈il你e循環(huán)鄭執(zhí)行敗約裳次璃后,損會得拉到n的一跪個素面數因叮子p。由于n的最銜小素停數因歌子鐘,故柿算法Po齒ll紗ar親d可在O(n1/增4)的時糕間內襲找到n的一蠻個素柜數因狹子。9.辭5蒙特泡卡羅(M稿on送te陶C鄙ar蹈lo仰)型概躁率算對法9.傳5.飽1主元姥素問斷題9.樹5.閱2素數討測試繪問題9.陜5.扯1主元樸素問華題設T[艷n]是一烤個含暈有n個元偏素的說數組降,x是數續(xù)組T的一租個元饒素,怨如果粉數組奪中有月一半窩以上孟的元顯素與x相同升,則嘆稱元胞素x是數起組T的主叉元素村(Ma害jo尿r旺El掀em脅en潮t)。例如碼,在青數組T[研7]稼={洪3,藝2躁,命3,療2罷,羊3,筑3塞,塌5}中,叢元素3就是部主元牧素。蒙特駛卡羅仙型概蠅率算胖法求處解主停元素付問題項可以刺隨機器地選連擇數渾組中敲的一提個元貪素T[床i]進行夠統計其,如微果該魂元素服出現艷的次外數大鉤于n/2,則該危元素境就是落數組尖的主洗元素淋,算械法返嫌回tr駝ue;否則弊隨機弄選擇宵的這不個元備素T[煙i]不是望主元削素,逐算法悶返回fa便ls推e。此時睡,數頂組中孤可能桿有主氣元素揮也可花能沒皆有主許元素紹。如永果數永組中當存在蘿主元畫素,災則非維主元釣素的諷個數滅小于n/2。因此昌,算姻法將奔以大美于1/鑄2的概尺率返映回tr飽ue,以小鞠于1/艇2的概錫率返趕回fa屆ls正e,這說冤明算輔法出付現錯額誤的稻概率浸小于1/疫2。如刊果連恐續(xù)運象行算鼻法k次,套算法陽返回fa第ls榮e的概籮率將屯減少續(xù)為2-k,則算系法發(fā)鏡生錯復誤的棋概率丸為2-k。算法——主元素問題boolMajority(intT[],intn){i=Random(0,n-1);x=T[i];//隨機選擇一個數組元素k=0;for(j=0;j<n;j++)if(T[j]==x)k++;if(k>n/2)//k>n/2時含有主元素為T[i]returntrue;elsereturnfalse;}boolMajorityMC(intT[],intn,doublee){k=log(1/e)/log(2);for(i=1;i<=k;i++)if(Majority(T,n))returntrue;returnfalse;}C++描述對于路任何退給定獨的>0,算狂法Maj誰or覽it獲yM廈C重復劃調用lo芳g2(1遠/)次算瓶法Maj培or御it歪y,其錯票誤概糞率小旱于,時暈間復籍雜性教顯然則是O(nlo愛g2(1獵/))。9.眉5.好2素數量測試塵問題測試詳一個育整數n是否痛是素餓數,窄最簡混單的嗽方法勞是把矮這個司數除奔以2~勤的慶數,著如果廈余數漠為0,則n是一萬個合伴數,將否則憤,n就是廉一個獅素數錯。算法——素數測試boolFactor(intn){i=sqrt(n);for(m=2;m<=i;m++)if(n%m==0)returnfalse;returntrue;//如果找不到一個因子,則n是素數}C++描述算法10歇.9的時滅間復旨雜性畏是O(術)。對于踏一個住正整圓數n,其位門數為默,艘則算游法Fa權ct撐or的時績間復灑雜性屬是O(1盼0m/2),因此煩,這副個算拖法的米時間宴復雜砍性是痛指數段階的伏。費爾嗽馬定揀理如果n是一爬個素答數,a為正搬整數顯且0<a<n,則an-1mo景dn≡1。費爾界馬定螞理表糾明,箭如果吃存在繞一個嫩小于n的正鄭整數a,使得an-1mo鍵dn≠1,則n肯定粘不是油素數競。費爾煌馬定繪理只羞是素鐮數判偵定的仁一個宏必要赤條件揚,有潮些合名數也把滿足職費爾廳馬定墻理,始這些養(yǎng)合數槍被稱拆作Ca剖rm鑒ic船ha磨el數。Ca頑rm巧ic池ha睛el數是蝕非常網少的光,在1~10鍵0,朽00莖0,博00購0范圍匆內的擔整數拉中,閘只有25壟5個Ca迎rm局ic翻h(huán)a眉el數。挺為了粉提高痕素數衰測試優(yōu)的準厘確性考,可堵以多繪次隨鉆機選胡取小裂于n的正策整數a,重復畫計算d=an-1mo域dn來判缺定n是否栗是素剩數。例如小,對禁于34臺1,取a=3,則334剪0mo洲d督34定1=56,從而皇判定34語1不是削素數瘦。算法——河Fe陶rm梢at測試in雷tEx婆pM擔od做(i階ntn)嶄//計算an-1mo委dn{a=襯Ra扮nd棗om晌(2劇,竿n-1)計;腎/燃/產生[2客,截n-1]之間贏的一倡個隨另機整笨數b=批1;fo嚇r標(i交=1籍;柿i<階=n-1;古i聯++摸)b=貌(b煮*a嫌)海%跳n;re朋tu單rn團b督;}bo似olPr彼im真e1嚇(i棵nt滔n餅){if郵(Ex丈pM辟od乖(n)=壇=足1)re倍tu易rn怖t土ru案e;散//可能參是素隸數或Ca嶺rm捐ic罵ha樓el數el纏sere欺tu絞rn需f川al兼se史;敵//一定今不是蓮素數}算法Pri味me沒1返回fa攔ls侍e時,過整數n一定姨是一姻個合銀數,如果莫算法Pr舌im容e1返回tr伐ue,說明駝正整趨數n可能陪是素純數,你還可伯能是Ca捐rm埋ic蠢ha李el數。友但是虛,這考個簡幟單的包測試潔卻很南少給碎出錯協誤的誰結果解。當肌一個耳合數n對于視整數a滿足邪費爾響馬定揭理時寒,稱逗整數a為合妨數n的偽證傾據(Ps齡eu營do膏wi患tn拋es薄s)。所以破,只長有在反選取黨到一速個偽襪證據舉時,Fe僅rm妙at測試黎的結胡論才典是錯往誤的憤。幸運原的是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機械通氣臨床故障處理總結2026
- 道路安全培訓知識
- 2026年甘肅省武威市高職單招數學試題及答案
- 道路交通安全及事故課件
- 2026年度執(zhí)業(yè)藥師繼續(xù)教育公需科目考試題庫(含答案)
- 2026年甘肅省隴南市高職單招英語試題解析及答案
- 2025小動物視覺電生理數據采集操作規(guī)范指南(2025)課件
- 中考語文文言文對比閱讀(全國)15《記承天寺夜游》對比閱讀16組80題(原卷版)
- 邊坡坍塌安全教育培訓課件
- 施工現場安全檢查計劃安排表
- 2026年廣東農墾火星農場有限公司公開招聘作業(yè)區(qū)管理人員備考題庫及參考答案詳解
- 腫瘤化療導致的中性粒細胞減少診治中國專家共識解讀
- 2025年查對制度考核考試題庫(答案+解析)
- 云南省2025年普通高中學業(yè)水平合格性考試歷史試題
- 養(yǎng)老護理服務的法律監(jiān)管與執(zhí)法
- 四川省2025年高職單招職業(yè)技能綜合測試(中職類)汽車類試卷(含答案解析)
- 隧道施工清包合同(3篇)
- 消化系統腫瘤多學科協作(MDT)診療方案
- 圍手術期疼痛的動物模型與轉化研究
- 安泰科技招聘筆試題庫2025
- 二級生物安全培訓課件
評論
0/150
提交評論