溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java概率論的計數(shù)方法是什么

發(fā)布時間:2021-12-21 17:47:12 來源:億速云 閱讀:179 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容主要講解“Java概率論的計數(shù)方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java概率論的計數(shù)方法是什么”吧!

概率

概率論研究隨機事件。它源于賭徒的研究。中有許多隨機事件,比如投擲一個,是否只憑運氣呢?

賭徒逐漸發(fā)現(xiàn)隨機事件的規(guī)律。投擲兩個是常見的游戲。如果重復很多次,那么總數(shù)為2的次數(shù)會比總數(shù)7的次數(shù)少。這就是賭徒把握到的規(guī)律:盡管我無法預知事件的具體結果,但我可以了解每種結果出現(xiàn)的可能性。這是概率論的核心。

“概率”到底是什么?這在數(shù)學上還有爭議?!邦l率派”認為概率是重復嘗試多次,某種結果出現(xiàn)的次數(shù)在嘗試的總次數(shù)的比例?!柏惾~斯派”認為概率是主觀信念的強弱。幸好,這些爭議并不影響我們在日常生活中使用“概率”哲學。天氣預報的降雨概率為80%時,很多人會因此帶上傘。報紙會分析一場球賽某支球隊的贏球概率,如果最終贏球概率為10%的球隊取勝,那么球迷會感到驚訝,這畢竟是小概率事件。

要知道某個結果的概率并不容易。上面分析球隊的贏球概率,要考慮許多因素。投一個,有6種可能的結果。許多原因會影響到結果,比如撒子是否均勻,比如擲撒子的人是否有技巧偏向。只有在絕對均勻,且沒有作弊,每種結果出現(xiàn)的概率才相同。否則的話,根本無法給結果一個確定的概率值。因此,為了能從數(shù)學上給結果分配一個概率,我們往往會給隨機事件增加一些假設條件。這些條件有理想化的成份,但并不至于偏離現(xiàn)實。比如,我們說擲撒子,撒子均勻,擲的人也沒有什么特殊手法,并由此推斷每種結果出現(xiàn)的可能相同。那么,其中任意一個結果出現(xiàn)的概率為1/6。

Java概率論的計數(shù)方法是什么

基本計數(shù)原理

上面我們談到了“等概率”的假設。如果每種結果出現(xiàn)的概率相同,那么給結果分配概率的任務就變得簡單一些。在計算這種概率時,我們只需要等概率的結果的總數(shù),就可以知道每種結果的概率。比如擲一個撒子會有6種結果,如果等概率,那么每個結果的概率為1/6。對于一些復雜的情況,就需要使用到計數(shù)技巧。

計數(shù)的基本原理敘述如下:

如果一個實驗可以分為m個步驟,每個步驟分別有n1,n2,...,nmn1,n2,...,nm種可能,那么總共會有

n1×n2×...×nmn1×n2×...×nm

種可能的結果。

基本技術原理的核心是“分步”。對于簡單的一個步驟的事情,我們能比較直接的分辨結果的總數(shù)。比如生一個孩子的性別,比如一個硬幣的正反,比如一個撒子的結果。當一個隨機事件是多個步驟復合而成的,而每個步驟又都是隨機的,那么分布可以簡化問題的復雜性。想像一個餐廳,有三個窗口,分別賣三種飲料,五種菜和兩種主食。每個學生在每個窗口限選一種,那么學生的餐飲配套會有3x5x2共30種可能的結果。如果每個窗口的師傅都很隨意霸道,隨手給學生一樣東西,那么我們甚至于可以假設等概率條件,每種餐飲拍套出現(xiàn)的概率為1/30。

(當然,作為學生,會抗議這樣的“隨機”食堂吧?)

基本計數(shù)原理的應用并不局限于概率論。在程序員進行算法分析時,無形中使用的就是進行計數(shù)。比如嵌套循環(huán),外循環(huán)需要M步,內(nèi)循環(huán)需要N步,那么總共進行操作的次數(shù)是MxN次??梢哉f,計數(shù)是“離散數(shù)學”非常重要的一個組成部分;而離散數(shù)學,正是計算機專業(yè)的核心數(shù)學課程。

基本計數(shù)原理是思考的起點?,F(xiàn)實中的情況往往會更多變些。特別是當我們“分布”的動作都是作用于同一個群體時,會相對復雜。我們分類了解以下情形:

有序的重復抽樣

考慮下面的兩個問題:

  • 一個連續(xù)擲2次,所有可能的結果有多少個?

  • 一個可選6個號,每個號可以是0到9,共有多少個可能的結果?

我們可以看到,這一類的抽樣結果是由多次抽樣構成的。每次抽樣的樣本,在下一次也可能出現(xiàn)。比如第一次為1,第二次還可能為1。這叫做重復抽樣 (或者說有放回的抽樣,sampling with replacement)。在的例子中,每次抽樣的可能出現(xiàn)的結果都有6種。

樣本出現(xiàn)的次序影響結果。比如(1,2)(1,2)和(2,1)(2,1)是兩個不同結果。

從數(shù)學上來說,如果進行m次有放回的抽樣,每次抽樣都有n種可能。如果最終結果有序,那么將有

nmnm

種可能。

我們下面模擬的例子:

import itertools
a = [1, 2, 3, 4, 5, 6]
outcomes = list(itertools.product(a, a))print(outcomes)print(len(outcomes))

共返回36個可能的結果:

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), 
 (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), 
 (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), 
 (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), 
 (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), 
 (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
36

如果每種結果的出現(xiàn)概率相同,那么對于其中的某個具體結果來說,它出現(xiàn)的概率P=1/36P=1/36。

有序的非重復抽樣

考慮下面兩個問題:

  • 從4個人中,挑出2個人分別擔任隊長和副隊長,有多少種可能?

  • 從10們課種,挑選3門,分別放入周一、周三、周五的課表,有多少種可能?

可以看到,這樣的抽樣是沒有重復的。某一次抽樣的樣本在此后不會出現(xiàn),前面一個步驟的動作減少了后面一個步驟的選擇,這叫做非重復抽樣。在非重復的前提下,每次抽樣可能的結果數(shù)遞減,比如從4個人中選一個作為隊長,那么副隊長只能從3個人中選擇。

同樣,結果是有序的。A擔任隊長,B擔任副隊長,與A擔任副隊長,B擔任隊長,是兩個不同結果。

有序的非重復抽樣又叫做排列(permutation)。從數(shù)學上來說,從n個樣品中挑選m個,放入m個位置,將有

n×(n?1)×...×(n?m+1)n×(n?1)×...×(n?m+1)

種可能。如果我們使用階乘(factorial)運算符,那么結果可以表示為

n!(n?m)!n!(n?m)!

其中,n!=1×2×...×(n?1)×nn!=1×2×...×(n?1)×n。

我們用下面的程序來模擬隊長組合的狀況:

import itertools
a = ["Tom", "Lee", "King", "James"]
outcomes = list(itertools.permutations(a, 2))print(outcomes)print(len(outcomes))

結果為

[('Tom', 'Lee'), ('Tom', 'King'), ('Tom', 'James'), 
 ('Lee', 'Tom'), ('Lee', 'King'), ('Lee', 'James'), 
 ('King', 'Tom'), ('King', 'Lee'), ('King', 'James'), 
 ('James', 'Tom'), ('James', 'Lee'), ('James', 'King')]

共有12種可能的結果。

無序的非重復抽樣

考慮下面的問題:

  • 從4個人中抽出2個人,有多少種可能?

  • 從一副中抽3張牌,有多少種可能?

在上面的問題中,每次抽樣同樣是非重復的。但這里,抽樣結果是無序的。比如說,抽出"Lee"和"Tom",以及抽出"Tom"和"Lee",是同一個結果。這樣的抽樣方式叫做組合(combination)。

m個樣品有m!m!種排列方式。如果是從n個樣品中抽取m個作為組合,所有的這m!m!種排序方式應該看做一種。因此,有

n!(n?m)!m!n!(n?m)!m!

種可能結果。我們可以用下面的方式記錄組合:

(nm)=n!(n?m)!m!(nm)=n!(n?m)!m!

 

我們下面來模擬第一個問題:

import itertools
a = ["Tom", "Lee", "King", "James"]
outcomes = list(itertools.combinations(a, 2))print(outcomes)print(len(outcomes))

有以下結果

[('Tom', 'Lee'), ('Tom', 'King'), ('Tom', 'James'),
 ('Lee', 'King'), ('Lee', 'James'),
 ('King', 'James')]

可以看到,從4個中挑選2個,有6種可能的組合。這是排列的一半。

組合的問題可以進一步延伸。比如,將9個球分為1, 3, 5個的三堆,有多少種方式?這相當于從9個球中抽取1個,再從剩下的8個球中抽取3個,最后剩下的5個為一堆??梢宰C明,結果為

9!1!3!5!9!1!3!5!

類似的,將n個球分為n1,n2,...,nmn1,n2,...,nm個的堆,其中n=n1+n2+...+nmn=n1+n2+...+nm。將有

n!n1!n2!...nm!n!n1!n2!...nm!

種可能。

無序的重復抽樣

考慮下面的問題:

  • 刮獎有4種獎品。購買3張的話,有多少種中獎可能?

在上面的每次抽樣中,都是重復抽樣,即抽出后有放回。比如刮獎中,可以多次刮到同一獎品。我們在一個表中記錄結果:


臺燈手表電腦汽車
可能13000
可能22010
可能30111

可以看到,我們實際上是將3張分成4份,每份的數(shù)目不定(≥0)(≥0)。

這與下面的問題類似,將5個相同物品放入三個不同的容器中:

Java概率論的計數(shù)方法是什么

我們用2個黑色分隔物,來將5個相同的物品分為3堆。比如這里,將物品分為(0, 2, 3)的結果。

從7個位置中挑選2個作為分割物的位置,共有

(72)(72)

種可能。

概括來講,從n個樣品中,無序的重復抽樣m次,有

(n+m?1m?1)(n+m?1m?1)

種可能。

階乘與組合

我們在上面多次使用了階乘運算,在Python中,它可以使用math.factorial實現(xiàn):

import mathprint(math.factorial(5))

此外,組合可以使用scipy.misc.comb來近似計算,比如:

import scipy.miscprint(scipy.misc.comb(4, 2))

到此,相信大家對“Java概率論的計數(shù)方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI