A. 隨機演算法原理
展開專欄
登錄
企鵝號小編
5.7K 篇文章
關注
詳解各種隨機演算法
2018-02-06閱讀 1.4K0
轉自:JarvisChu
之前將的演算法都是確定的,即對於相同的輸入總對應著相同的輸出。但實際中也常常用到不確定的演算法,比如隨機數生成演算法,演算法的結果是不確定的,我們稱這種演算法為(隨機)概率演算法,分為如下四類:
1、數值概率演算法
用於數值問題的求解,通常是近似解
2、蒙特卡洛演算法Monte Carlo
能得到問題的一個解,但不一定是正確解,正確的概率依賴於演算法運行的時間,演算法所用的時間越多,正確的概率也越高。求問題的准確解;
3、拉斯維加斯演算法 Las Vegas
不斷調用隨機演算法求解,直到求得正確解或調用次數達到某個閾值。所以,如果能得到解,一定是正確解。
4、舍伍德演算法 Sherwood
利用隨機演算法改造已有演算法,使得演算法的性能盡量與輸入數據無關,即平滑演算法的性能。它總能求得問題的一個解,且求得的解總是正確的。
隨機數
概述
計算機產生的隨機數都是偽隨機數,通過線性同餘法得到。
方法:產生隨機序列
d稱為種子;m取值越大越好;m,b互質,常取b為質數;
B. 隨機事件概率計算公式是什麼
隨機事件概率的計算公式為:C(n,m)*p^m*(1-p)^(n-m)。
其中事件的概率為p,n為隨機事件,m為發生的次數,隨機事件是在隨機試驗中,可能出現也可能不出現,而在大量重復試驗中,具有某種規律性的事件叫做隨機事件(簡稱事件)。
概率(舊稱幾率,又稱機率、機會率或或然率)是數學概率論的基本概念,是一個在0到1之間的實數,是對隨機事件發生之可能性的度量。
隨機試驗的數學描述:
試驗E的全部結果(其中是基本結果的集合)⇔樣本空間Ω(其中是樣本點的集合)。
隨機事件⇔Ω中的子集A。
事件A發生⇔A中樣本點出現。
基本事件:由一個樣本點構成的單點集{ω}。
必然事件:Ω(Ω⊂Ω)。
不可能事件:∅(空集∅⊂Ω)
C. 隨機數和概率問題
是一樣的 典型的古典概率 每一個球被取出的概率是一樣的 和標號排序沒有任何關系(當然前提是要充分的隨機,)
D. 如何計算隨機概率
概率論,一個C上下個一個數字的演算法:Cmn=m!/[n!*(m-n)!]
m在下,n在上n!代表n的階乘=1*2*3*……*n。拓展資料:一、概率的嚴格定義:E是隨機試驗,S是它的樣本空間。對於E的每一事件A賦於一個實數,記為P(A),稱為事件A的概率。這里P(·)是一個集合函數,P(·)要滿足下列條件:
(1)非負性:對於每一個事件A,有P(A)≥0;
(2)規范性:對於必然事件S,有P(S)=1;
(3)可列可加性:設A1,A2……是兩兩互不相容的事件,即對於i≠j,Ai∩Aj=φ,(i,j=1,2……),則有P(A1∪A2∪……)=P(A1)+P(A2)+..
二、概率論是研究隨機性或不確定性等現象的數學。更精確地說,概率論是用來模擬實驗在同一環境下會產生不同結果的情況。在自然界和人類社會中,存在大量的隨機現象,而概率是衡量該現象發生的可能性的量度。
E. 《演算法導論(原書第2版)》pdf下載在線閱讀,求百度網盤雲資源
《演算法導論(原書第2版)》([美] Thomas H.Cormen)電子書網盤下載免費在線閱讀
鏈接:https://pan..com/s/1fH3Yg9FLAppoeaKrmc639A
書名:演算法導論(原書第2版)
作者:[美] Thomas H.Cormen
譯者:潘金貴 等
豆瓣評分:9.3
出版社:機械工業出版社
出版年份:2006-9
頁數:754
內容簡介:
這本書深入淺出,全面地介紹了計算機演算法。對每一個演算法的分析既易於理解又十分有趣,並保持了數學嚴謹性。本書的設計目標全面,適用於多種用途。涵蓋的內容有:演算法在計算中的作用,概率分析和隨機演算法的介紹。書中專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似演算法等,還有有關遞歸求解、快速排序中用到的劃分方法與期望線性時間順序統計演算法,以及對貪心演算法元素的討論。此書還介紹了對強連通子圖演算法正確性的證明,對哈密頓迴路和子集求和問題的NP完全性的證明等內容。全書提供了900多個練習題和思考題以及敘述較為詳細的實例研究。
作者簡介:
Thomas H.Cormen
達特茅斯學院計算機科學系副教授
Charles E.Leiserson
麻省理工學院計算機科學與電氣工程系教授
Ronald L.Rivest
麻省理工學院計算機科學系Andrew與Erna Viterbi具名教授
Clifford Stein
哥倫比亞大學工業工程與運籌學副教授
F. 為什麼演算法導論中的數組序號是從1開始的
c語言下標從零開始是個錯誤,並且 index 也是一個有誤導性的名詞,它表示的是偏移量,明明應該用 offset。
然後 c 的徒子徒孫都學了它,導致現在很多人都誤以為下標應該從 0 開始。
早期蠻荒時代,很多東西都不科學,演算法導論作者致力於與落後文明作斗爭,然而卻遭到了樓主你的不理解,實乃編程屆一大憾事。
我再說一遍,C 是結構化的匯編,下標基 0 是受到了 PDP-11 指令集的影響,更老的語言(比如 Fortran)都是基 1 的。
另外用 0/非 0 代表 false/true 也是 PDP-11 中 TST 指令和 Z 位的行為。
可能是這本書強調演算法的求學思想,所以從一更加符合數學的數組規定。
但是編程的時候,指針這個東西會經常用到,如果用a(o)作為第一個元素 那麼*a+n就等同於a(n) 比較方便
演算法導論上的這個問題呢,我覺得我比較同意樓上的看法,這個書上面的很多的程序並不是可以敲上去直接運行的,他只是偽代碼,思想而已,給人看的,人類的普遍思維是從1開始,那麼書頁就是從1開始了
說編程語言是給機器看而偽代碼是給人看的簡直是逗大家笑吧...編程語言設計出來就是給人看的....
另外從0開始在很多方便都極好....我覺得寫多代碼都能體會到吧..
幫算導洗地:
演算法導論通篇用的是偽代碼 是給人類閱讀理解的 不是設計給機器去運行的
而絕大多數情況下, index 從 1 開始更符合人類直覺(如果你對這點有異議請參考的答案 )
但少數情況下, index 從 0 開始更符合人類直覺。例如書中 hashing 還有 FFT 那塊內容, index 是從 0 開始的。
其實寫幾天 Pascal 你就適應啦。。
G. 隨機演算法的內容簡介
本書是斯坦福一劍橋項目(Stanford-Cambridge Program)之一。
對於許多應用,隨機演算法是最簡單可行的,或者是最快的,或者兩者兼得。本書由該領域兩位著名專家寫成,給出了隨機演算法設計和分析的基本概念,適用於接近研究生開始階段的水平。
本書的第一部分介紹了概率論的基本工具,以及在演算法應用中經常使用的概率分析。為了說明每個工具的作用,在具體設置給出了一些演算法示例。本書的第二部分為演算法的應用,共包括七章,每一章集中在隨機演算法應用的一個重要領域,如數據結構、幾何演算法、圖演算法、數論、計數、並行演算法及在線演算法等。對於每個領域中的演算法,做了全面並且具有代表性的選擇。
盡管本書基本按照教材寫成,也可作為一本有價值的參考書供專業人員和研究者使用。
H. 大神們,有沒有一種能控制概率的隨機演算法. 用來抽獎用的。。比如可以控制某人的中獎的概率大一些
沒有,因為正常的抽獎時沒有概率問題的,也找不到任何規律
I. 隨機化演算法的舉例
下面,我們就隨機化問題,舉一個例子:
一個長度在4..10的字元串中,需要判定是否可以在字元串中刪去若干字元,使得改變後字元串符合以下條件之一:
(1)AAAA;(2)AABB;(3)ABAB;(4)ABBA。
例如:長度為6字元串「POPKDK」,若刪除其中的「O」,「D」兩個字母,則原串變為:「PPKK」,符合條件(2)AABB。
分析:
這道題很容易想到一種演算法:運用排列組合:枚舉每4個字母,然後逐一判斷。演算法是可行的,但是如果需要題目中加上一句話:需要判斷n個字元串,且n<=100000,那麼這樣的耗時是不能讓人忍受①的,因為在枚舉的過程中,是非常浪費時間的。
(①:這里是指信息學中要求演算法的普遍運算時間為:1000ms)
所以這道題有可能可以藉助於隨機化演算法,下面我們來算一下在10個字元中取4個字元一共有多少種取法:C(4,10)=210。那麼很容易得知,隨機化演算法如果隨機300次,能得到的結果基本上就正確了(概率為1-(209/210)^300,約為0.76),而隨機時的時間消耗是O(1),只需要判斷沒有隨機重復即可,判重的時間復雜度也為O(1),並且最多隨機300次,這樣就可以有效地得到答案,最大運算次數為:O(300n),這是在計算機的承受范圍內(1000ms)的。
從這里就能看出,隨機化演算法是一個很好的概率演算法,但是它並不能保證正確,而且它單獨使用的情況很少,大部分是與其他的演算法:例如貪心、搜索等配合起來運用。 排序問題。快速排序是排序方法中較為便捷的方法之一,但是由於它極不穩定,最好的時候時間復雜度為O(n㏒n),這里的㏒是指以2為底的對數運算。最壞的時候能達到與普通排序方法一樣的O(n^2)。
而制約快速排序的有兩個:一是數據,越無序的數據,快排的速度越快;二是中間點的枚舉。
因為兩個制約條件都與隨機有著不可分開的關系。
所以,在快速排序中加入隨機化演算法無疑是十分重要的。
運用在:
(1)數據讀入時,隨機排放數據位置。
(2)中間點的枚舉進行多次隨機化後決定。
這樣就基本上將快速排序的時間復雜度維持在最好狀態。
J. 演算法導論的內容簡介
《演算法導論》自第一版出版以來,已經成為世界范圍內廣泛使用的大學教材和專業人員的標准參考手冊。本書全面論述了演算法的內容,從一定深度上涵蓋了演算法的諸多方面,同時其講授和分析方法又兼顧了各個層次讀者的接受能力。各章內容自成體系,可作為獨立單元學習。所有演算法都用英文和偽碼描述,使具備初步編程經驗的人也可讀懂。全書講解通俗易懂,且不失深度和數學上的嚴謹性。第二版增加了新的章節,如演算法作用、概率分析與隨機演算法、線性編程等,幾乎對第一版的各個部分都作了大量修訂。
本書深入淺出,全面地介紹了計算機演算法。對每一個演算法的分析既易於理解又十分有趣,並保持了數學嚴謹性。本書的設計目標全面,適用於多種用途。涵蓋的內容有:演算法在計算中的作用,概率分析和隨機演算法的介紹。本書專門討論了線性規劃,介紹了動態規劃的兩個應用,隨機化和線性規劃技術的近似演算法等,還有有關遞歸求解、快速排序中用到的劃分方法與期望線性時間順序統計演算法,以及對貪心演算法元素的討論。本書還介紹了對強連通子圖演算法正確性的證明,對哈密頓迴路和子集求和問題的NP完全性的證明等內容。全書提供了900多個練習題和思考題以及敘述較為詳細的實例研究。
本書內容豐富,對本科生的數據結構課程和研究生的演算法課程都是很實用的教材。本書在讀者的職業生涯中,也是一本案頭的數學參考書或工程實踐手冊。