算法 | 如何根據(jù)不相等概率[0,1]設(shè)計(jì)出相等概率的[0,1]冯乘?

前言
本文主要介紹如何根據(jù)不相等概率[0,1]設(shè)計(jì)出相等概率的[0,1]洽胶。
給定一個(gè)方法func1,這個(gè)方法返回0的概率為p裆馒,返回1的概率為1-p姊氓。
現(xiàn)在要根據(jù)func1這個(gè)方法,設(shè)計(jì)出一個(gè)新的方法func2喷好,該方法返回0和1的概率都為50%翔横。
func1代碼如下:
public static int func1() {
return Math.random() < 0.7 ? 0 : 1;
}
復(fù)制代碼
思路解析
先來看一下func1這個(gè)方法,通過這個(gè)方法我們可以得出幾個(gè)信息:

方法不可更改梗搅,只能被調(diào)用禾唁。
方法只返回0 和 1,我們并不知道0和1的概率是多少无切。
要想辦法從func1中荡短,得出2個(gè)概率相等的數(shù)字。

func1方法中的內(nèi)容我們不能更改哆键,而且方法里面的 0.7也有可能是其他的掘托,只知道是固定的,但具體多少也無法得知籍嘹,只能得到0和1闪盔。
要設(shè)計(jì)的func2方法也是返回0和1,但是0和1的概率是相同的辱士,都為50%锭沟。
那怎么利用func1方法來實(shí)現(xiàn)呢?
組合概率
其實(shí)實(shí)現(xiàn)方法也很簡單识补,只需要調(diào)用兩次func1方法方法就能得到兩個(gè)相同的概率數(shù)字族淮,我們一起來分析一下。
func1方法可以得到0和1,調(diào)用兩次func1方法可以得到哪些組合呢祝辣?
調(diào)用兩次func1方法得到的數(shù)據(jù)組合為:00贴妻、01、10蝙斜、11名惩。
再來看下00、01孕荠、10娩鹉、11這四組數(shù)的概率分別為:pp、p(1-p)稚伍、(1-p)p弯予、(1-p)(1-p)。
可以看到个曙,雖然我們不知道概率p到底是多少锈嫩,但至少01、10這兩組數(shù)的概率是相同的都是p
(1-p)垦搬。

組合概率00pp01p(1-p)10(1-p)p11(1-p)*(1-p)
由此可以得出呼寸,我們只要調(diào)用兩次func1方法,如果生成的是00或11猴贰,就讓他重新生成对雪,如果生成的是01或10直接返回即可。
代碼實(shí)現(xiàn)
經(jīng)過上面的分析米绕,對(duì)func2方法的實(shí)現(xiàn)如下:
public static int func2() {
int res, tmp;
do {
res = func1();
tmp = func1();
} while (res == tmp);
return res;
}
復(fù)制代碼
概率驗(yàn)證
怎么驗(yàn)證一下func2方法返回的0和1是不是等概率的呢瑟捣?
驗(yàn)證思路如下:

初始化一個(gè)數(shù)組arr,用來存放 0和1 被調(diào)用的次數(shù)义郑。
設(shè)置一個(gè)循環(huán)1千萬次蝶柿,來調(diào)用func2()這個(gè)方法丈钙。
對(duì)比數(shù)組arr中0和1元素的個(gè)數(shù)非驮。
如果0和1元素的個(gè)數(shù)大致相同的話,說明func2()方法返回的0和1是等概率的雏赦。

驗(yàn)證代碼如下:
public static void main(String[] args) {
int times = 10000000;
int[] arr = new int[2];
for (int i = 0; i < times; i++) {
int res = func2();
arr[res]++;
}
System.out.println("元素: 0, 出現(xiàn)的次數(shù)為: " + arr[0]);
System.out.println("元素: 1, 出現(xiàn)的次數(shù)為: " + arr[1]);
}
復(fù)制代碼
多運(yùn)行幾次驗(yàn)證方法劫笙,可以發(fā)現(xiàn)0和1的次數(shù)是差不多的,也就是說func2()方法返回的0和1是等概率的星岗。
運(yùn)行結(jié)果如下:
元素: 0, 出現(xiàn)的次數(shù)為: 5002123
元素: 1, 出現(xiàn)的次數(shù)為: 4997877
復(fù)制代碼
總結(jié)
本文主要介紹如何根據(jù)不相等概率[0,1]設(shè)計(jì)出相等概率的[0,1]填大。
其中主要思想就是根據(jù)不相等概率的[0,1]通過組合來生成包含相同概率的兩組數(shù)的結(jié)果00、01俏橘、10允华、11,然后從這4組數(shù)中只返回相同概率的01和10,如果生成的是00和11就讓他重新再生成直到生成01和10靴寂。
當(dāng)然磷蜀,解決方法不可能只有這一種,如果你有更好的方法百炬,歡迎在評(píng)論區(qū)留言交流~褐隆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剖踊,隨后出現(xiàn)的幾起案子庶弃,更是在濱河造成了極大的恐慌,老刑警劉巖德澈,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歇攻,死亡現(xiàn)場離奇詭異,居然都是意外死亡圃验,警方通過查閱死者的電腦和手機(jī)掉伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澳窑,“玉大人斧散,你說我怎么就攤上這事√” “怎么了鸡捐?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麻裁。 經(jīng)常有香客問我箍镜,道長,這世上最難降的妖魔是什么煎源? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任色迂,我火速辦了婚禮,結(jié)果婚禮上手销,老公的妹妹穿的比我還像新娘歇僧。我一直安慰自己,他們只是感情好锋拖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布诈悍。 她就那樣靜靜地躺著,像睡著了一般兽埃。 火紅的嫁衣襯著肌膚如雪侥钳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天柄错,我揣著相機(jī)與錄音舷夺,去河邊找鬼苦酱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛给猾,可吹牛的內(nèi)容都是我干的躏啰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耙册,長吁一口氣:“原來是場噩夢啊……” “哼给僵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起详拙,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤帝际,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饶辙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹲诀,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年弃揽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脯爪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矿微,死狀恐怖痕慢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涌矢,我是刑警寧澤掖举,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站娜庇,受9級(jí)特大地震影響塔次,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜名秀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一励负、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匕得,春花似錦继榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攒发。三九已至调塌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惠猿,已是汗流浹背羔砾。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姜凄。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓政溃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親态秧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子董虱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容