两道概率题-供大家周末把玩
生活随笔
收集整理的這篇文章主要介紹了
两道概率题-供大家周末把玩
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
兩道概率題-供大家周末把玩
題目
1.給定一個函數(shù)rand5(),該函數(shù)能等概率生成1-5之間的整數(shù)(包括1和5),如何用該函數(shù)等概率生成整數(shù)1-7?
解法
本以為很簡單,做了以后才發(fā)現(xiàn)其實并不簡單,這個題難就難在要求是等概率,貼出幾個解法,供大家參考
下面代碼來自StackOverflow
解法一
代碼 int i;do
{
i = 5 * (rand5() - 1) + rand5(); // i is now uniformly random between 1 and 25
} while(i > 21);
// i is now uniformly random between 1 and 21
return i % 7 + 1; // result is now uniformly random between 1 and 7
解法二(更直觀一些)
代碼 int rand7(){
int vals[5][5] = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 1, 2, 3 },
{ 4, 5, 6, 7, 1 },
{ 2, 3, 4, 5, 6 },
{ 7, 0, 0, 0, 0 }
};
int result = 0;
while (result == 0)
{
int i = rand5();
int j = rand5();
result = vals[i-1][j-1];
}
return result;
}
2. 一個隨機(jī)數(shù)生成函數(shù)f(),只產(chǎn)生數(shù)字1和0,生成1的概率是p,生成0的概率是1-p,如何利用該函數(shù)等概率生成1和0?(此題來自算法導(dǎo)論一書)
由于p(1-p)和(1-p)p是兩個等概率事件,根據(jù)這個原理,可得如下代碼
int func(){
int i ;
int j ;
while(true)
{
i = f() ;
j = f() ;
if(i == 1 && j == 0)
return 1;
else if(i == 0 && j == 1)
return 0;
}
}
posted on 2010-07-10 18:24 zdd 閱讀(...) 評論(...) 編輯 收藏
總結(jié)
以上是生活随笔為你收集整理的两道概率题-供大家周末把玩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql-front 无法连接本机my
- 下一篇: 初学者怎么学习编程