日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【基本算法】概率算法

發(fā)布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【基本算法】概率算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、什么是概率算法?

概率算法依照概率統(tǒng)計的思想來求解問題,其往往不能得到問題的精確解,但是在數(shù)值計算領(lǐng)域得到了廣泛的應(yīng)用。因為很多數(shù)學(xué)問題,往往沒有或者很難計算解析,此時便需要通過數(shù)值計算來求解近似值。概率算法執(zhí)行的基本過程如下:

? (1). 將問題轉(zhuǎn)化為相應(yīng)的幾何圖形S,S的面積容易計算,問題的結(jié)果往往對應(yīng)幾何圖形中某一部分S1的面積。

? (2). 然后,向幾何圖形中隨機(jī)撒點。

? (3). 統(tǒng)計幾何圖形S和S1中的點數(shù)。根據(jù)S和S1面積的關(guān)系及各圖形中的點數(shù)來計算得到結(jié)果。

? (4). 判斷上述結(jié)果是否在需要的精度之內(nèi),如果未達(dá)到精度則執(zhí)行步驟(2)。如果達(dá)到精度,則輸出近似結(jié)果。

概率算法大致分為如下4種形式:數(shù)值概率算法;蒙特卡羅(Monte Carlo)算法;拉斯維加斯(Las Vegas)算法;舍伍德(Sherwood)算法;

2、概率算法的應(yīng)用

計算π的近似值

圓周率π是一個非常重要的常數(shù),無論在數(shù)學(xué)還是在物理學(xué)上都有很廣泛的用途。π的值直接關(guān)系到計算圓周長、圓面積、球體積等。π一般定義為圓周長與圓直徑之比。在數(shù)學(xué)分析學(xué)中,圓周率π被嚴(yán)格定義為滿足如下等式的最小正實數(shù):,圓周率 π=3.141592653589793…… ,其是一個無限不循環(huán)實數(shù),即所謂的無理數(shù)。圓周率π的精確計算,從古至今都非常重要。

蒙特卡羅(Monte Carlo)算法是一種以概率為基礎(chǔ)的、非常重要的數(shù)值計算方法,在工程、金融、計算物理學(xué)等領(lǐng)域都有著重要的應(yīng)用。蒙特卡羅算法是如何計算圓周率π的呢?我們先畫一個半徑為1的圓,如圖所示:

先來推算圖中陰影部分的面積,陰影部分是一個圓的1/4,因此有如下計算公式:S陰影 = S圓 /4 = (1/4)π*r^2 = π/4 ,而圖中正方形的面積則為:S正 = r^2 = 1,這樣,按照圖示建立一個坐標(biāo)系。如果均勻地向正方形內(nèi)撒點,那么落入陰影部分的點數(shù)與全部的點數(shù)之比就是S陰影/S正方形=π/4。根據(jù)概率統(tǒng)計的規(guī)律,只要撒的點足夠多,就會得到近似的結(jié)果。通過這個原理便可以計算圓周率π的近似值,這就是蒙特卡羅算法。

蒙特卡羅算法有幾個關(guān)鍵點:

  • 均勻撒點:使用隨機(jī)方法來實現(xiàn),產(chǎn)生[0,1]之間隨機(jī)的坐標(biāo)值[x,y]。
  • 區(qū)域判斷:圖中陰影部分的特點是距離坐標(biāo)原點的距離小于等于1,這樣,可以通過計算判斷x^2+y^2≤1來實現(xiàn)。

通過蒙特卡羅算法計算π的近似值,Java實現(xiàn)demo演示如下:

public class Test {/*** 打印結(jié)果:* n = 6000 ------> π = 3.1466666666666665* n = 600000 ------> π = 3.1464866666666667* n = 60000000 ------> π = 3.1413683333333333* n = 600000000 ------> π = 3.1415774266666667**/public static void main(String[] args) {int n = 6000;System.out.println("n = " + n + " ------> π = " + getMontePI(n));}public static double getMontePI(int amount) { // amount為陰影區(qū)域的撒點數(shù)int cnt = 0; // 統(tǒng)計落在陰影區(qū)域的點Random random = new Random();for (int i = 1; i < amount; i++) {// 陰影區(qū)域范圍:x^2+y^2≤1if (Math.pow(random.nextDouble(), 2) + Math.pow(random.nextDouble(), 2) <= 1)cnt++;}return 4.0 * cnt / amount; // π概率計算公式} }

從測試結(jié)果可知:撒點數(shù)n越多,概率統(tǒng)計得到π的值越精確。同時,由于概率算法的隨機(jī)性,在不同的運行時間,即使輸入同樣的撒點數(shù),得到的結(jié)果也是不相同的。

參考書籍:《Java常用算法手冊(第3版)》

總結(jié)

以上是生活随笔為你收集整理的【基本算法】概率算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。