日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

隨機概率題

系統 2177 0

1. 給定rand3()能隨機生成整數1到3的函數,寫出能隨機生成整數1到7的函數rand7();

用3*(rand3() - 1) + rand3()生成1-9的數。然后再從1-9中生成1到7.

這種思想是基于,rand()產生[0,N-1],把rand()視為N進制的一位數產生器,那么可以使用rand()*N+rand()來產生2位的N進制數,以此類推,可以產生3位,4位,5位...的N進制數。這種按構造N進制數的方式生成的隨機數,必定能保證隨機。

      
        1
      
      
        int
      
       x = 
      
        0
      
      
        ;


      
      
        2
      
      
        do
      
      
         {


      
      
        3
      
           x = 
      
        3
      
       * (rand3() - 
      
        1
      
      ) +
      
         rand3();


      
      
        4
      
       } 
      
        while
      
       (x > 
      
        7
      
      
        ); 


      
      
        5
      
      
        return
      
       x;
    

如果已經randm()能隨機生成1到m的整數,寫出生成整數1到n的函數randn(),也就是

用m?* (randm() - 1)?+ randm()生成1-m^2,然后再踢掉n+1-m^2這些數。

      
        1
      
      
        int
      
       x = 
      
        0
      
      , max = m * m / n *
      
         n;


      
      
        2
      
      
        do
      
      
         {


      
      
        3
      
           x = m * (randm() - 
      
        1
      
      ) +
      
         randm();


      
      
        4
      
       } 
      
        while
      
       (x >
      
         max); 


      
      
        5
      
      
        return
      
      
        1
      
       + (x % n);
    

2.?已知隨機函數rand(),以p的概率產生0,以1-p的概率產生1,現在要求設計一個新的隨機函數newRand(), 使其以1/n的等概率產生1~n之間的任意一個數。

先構造一個函數,使得等概率生成0和1。然后用它,以二進制的方式構造出0~n-1。然后加1就成了1~n。

      
         1
      
      
        int
      
      
         rand01() {


      
      
         2
      
      
        while
      
       (
      
        true
      
      
        ) {


      
      
         3
      
      
        int
      
       a = rand(), b =
      
         rand();


      
      
         4
      
      
        if
      
       (a == 
      
        0
      
       && b == 
      
        1
      
      ) 
      
        return
      
      
        0
      
      
        ;


      
      
         5
      
      
        if
      
       (a == 
      
        1
      
       && b == 
      
        0
      
      ) 
      
        return
      
      
        1
      
      
        ;


      
      
         6
      
      
            }


      
      
         7
      
      
        }


      
      
         8
      
      
        int
      
      
         randn() {


      
      
         9
      
      
        int
      
       ans = 
      
        0
      
      
        ;


      
      
        10
      
      
        do
      
      
         {


      
      
        11
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; n; n >>= 
      
        1
      
      , i++
      
        ) {


      
      
        12
      
      
        if
      
       (rand01() == 
      
        1
      
      
        ) {


      
      
        13
      
                       ans |= (
      
        1
      
       <<
      
         i);


      
      
        14
      
      
                    }


      
      
        15
      
      
                }


      
      
        16
      
           } 
      
        while
      
       (ans >=
      
         n);


      
      
        17
      
      
        return
      
       ans + 
      
        1
      
      
        ;    


      
      
        18
      
       }
    

?3. 帽子問題:有n位顧客,他們每個人給餐廳的服務生一頂帽子,服務生以隨機的順序歸還給顧客,請問拿到自己帽子的顧客的期望數是多少?

答案:使用指示隨機變量來求解這個問題會簡單些。定義一個隨機變量X等于能夠拿到自己帽子的顧客數目,我們要計算的是E[X]。對于i=1, 2 ... n,定義Xi =I {顧客i拿到自己的帽子},則X=X1+X2+...Xn。由于歸還帽子的順序是隨機的,所以每個顧客拿到自己帽子的概率為1/n,即Pr(Xi=1)=1/n,從而E(Xi)=1/n,所以E(X)=E(X1+X2+...Xn)=E(X1)+E(X2)+...E(Xn)=n*1/n = 1。即大約有1個顧客可以拿到自己的帽子。

4. 如果在高速公路上30分鐘內看到一輛車開過的幾率是0.95,那么在10分鐘內看到一輛車開過的幾率是多少?(假設常概率條件下)
答案:假設10分鐘內看到一輛車開過的概率是x,那么沒有看到車開過的概率就是1-x,30分鐘沒有看到車開過的概率是(1-x)^3,也就是0.05。所以得到方程(1-x)^3 = 0.05 ,解方程得到x大約是0.63。

5. 生日悖論:一個房間至少要有多少人,才能使得有兩個人的生日在同一天?
答案:對房間k個人中的每一對(i, j)定義指示器變量Xij = {i與j生日在同一天} ,則i與j生日相同時,Xij=1,否則Xij=0。兩個人在同一天生日的概率Pr(Xij=1)=1/n。則用X表示同一天生日的兩人對的數目,則E(X)=E(∑ki=1 ∑kj=i+1 Xij) = C(k,2)*1/n = k(k-1)/2n,令k(k-1)/2n >=1, 可得到k>=28,即至少要有28個人,才能期望兩個人的生日在同一天。

轉自:http://blog.csdn.net/hxz_qlh/article/details/1297877

6. 如果只是想要隨機生成一定概率的數。比如20%生成0,20%生成1,60%生成2.

      
         1
      
      
        int
      
       rand(
      
        int
      
       num[], 
      
        float
      
       prob[], 
      
        int
      
      
         n) {


      
      
         2
      
      
            srand(time(NULL));


      
      
         3
      
      
        int
      
       random = rand() % 
      
        100
      
       + 
      
        1
      
      
        ;    


      
      
         4
      
      
         5
      
      
        int
      
       range = 
      
        0
      
      , pre = 
      
        0
      
      
        ;


      
      
         6
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i < n; ++
      
        i) {


      
      
         7
      
               range += static_case<
      
        int
      
      >(prob[i] * 
      
        100
      
      
        );


      
      
         8
      
      
        if
      
       (random > pre && random <=
      
         range) {


      
      
         9
      
      
        return
      
      
         num[i];


      
      
        10
      
      
                }


      
      
        11
      
               pre =
      
         range;


      
      
        12
      
      
            }


      
      
        13
      
      
        return
      
       -
      
        1
      
      ; 
      
        //
      
      
        error
      
      
        14
      
       }
    

?

隨機概率題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 深泽县| 游戏| 盐亭县| 察雅县| 石狮市| 海宁市| 思南县| 崇仁县| 青田县| 布拖县| 香格里拉县| 吉安市| 扎赉特旗| 黄浦区| 祁连县| 始兴县| 东乌珠穆沁旗| 莒南县| 高碑店市| 长兴县| 南安市| 林芝县| 奉贤区| 黄梅县| 乌苏市| 崇阳县| 茌平县| 泽普县| 九江市| 子洲县| 河西区| 弋阳县| 河间市| 福州市| 江陵县| 莒南县| 彩票| 武功县| 江北区| 淮北市| 清水县|