《奇思妙想》論JavaScript取隨機數的相對公平性!!!

來源:互聯網
上載者:User

標籤:src   結束   image   javascrip   相同   隨機數產生   主持人   產生   ima   

前言

  大歡哥的題目完成了,但是衍生出一個新的問題!上篇隨筆中我和大歡哥採用的隨機數產生方式,到底是誰的比較公平???

本文

  歡迎來到阿段部落格《奇思妙想》!我們的口號是 “心有多大,bug就有多大”!

  下面介紹我們的嘉賓:

    小鵬哥,小鵬哥來自xxxxxx,取得xxxxxx(一堆頭銜)。前端老司機。大家鼓掌歡迎歡迎我們的小鵬哥,papapa....(小鵬哥沒有大歡哥高大,但是小鵬哥有個高大的內心,從座駕便可以看出來)。

    大歡哥,大歡哥前面介紹了,現在不用介紹了(大歡哥此時心裡有一句 “我去,不介紹我”,嘿嘿嘿嘿.....,開個玩笑),我們的大歡哥來自xxxxxxxx,取得xxxxxx(一堆頭銜)。Java老司機。大家鼓掌歡迎歡迎我們的大歡哥,papapa....(大歡哥高大威武,但是內心柔軟,老規矩還是座駕看出來的)。

  論題:如題(嘿嘿嘿....)

  論題代碼:

1 var ran1 = Math.floor(Math.random()*a.length);//方式一2 3 var ran2 = Math.round(Math.random()*(a.length-1));//方式二

  註:此處假設 JavaScript 中 Math.random() 產生的隨機數在0-1之間,絕對公平。a為長度為4的數組。

  代碼陳述:

    方式一:在0到1之間產生一個隨機數(假設絕對公平)。用隨機數乘於 a 的長度,最後取整。大歡哥代碼!

    方式二:在0到1之間產生一個隨機數(假設絕對公平)。用隨機數乘於 a 的長度減一 ,最後四捨五入取整數。My Code,小鵬哥代我論證。

  大歡哥:主持人,不對啊,人家的長度為 4,你為什麼要減去一個啊,這樣對人家數組 a 最後一個元素不公平啊!

  小鵬哥:咦,哎呀。我去。聽他這麼說好像,也許,或許是有那麼點不公平啊....(思考中)!

  好的!兩位嘉賓都覺得方式二不公平,那麼兩位嘉賓改論證一下方式二為什麼不公平了!兩位嘉賓擼袖子,拿筆拿紙中...

  .

  .

  .

  .

  (原諒我口才有限,直接說論證結果吧!)

  邏輯概念圖:

  

  看圖理思維:

    方式一把 a數組 抽象分為 四份!每一份的間距一樣(一,二,三,四)!當 Math.random() 產生的隨機數,可以均勻的落在四個區間(距離等距)每個區間的機率都為 25% ,所以,隨機產生的隨機數只要在Math.random函數假設公平下,方式一產生的隨機數,就很公平!

    結論:

對應區間 機率
0 第一區間 25%
1 第二區間 25%
2 第三區間 25%
3 第四區間 25%

    方式二把 a數組 抽象分為了 三份(length-1)!每一份的間距雖然也相等(三分之一:33.333333%),但是在 Math.round() 四捨五入後,要想落在第一個區間(0~0.5)的機率只有33.3333333333.........%/2=16.666666666.......%!相同的要落在第四個區間的機率也為 33.3333333333.....%/2=16.66666........%;也就是 再假設 Math.random() 絕對公平的情況下,要想獲得 0 或者 3 的機率只有 16.6666666.....% ,而 2 和 3 的機率卻高達 33.333333333......%。

    結論:

對應區間 機率
0 第一區間 16.6666666666%
1 第二區間 33.3333333333%
2 第三區間 33.3333333333%
3 第四區間 16.6666666666%

  感謝大歡哥和小鵬哥的精彩論證,難怪你年會沒抽到獎。原來是你用錯API了。。本期阿段部落格《奇思妙想》到此結束。謝謝!大家下期再見......

  結論

  綜合以上論證所得,在 Math.random() 絕對公平的情況下。方式一方式二絕對公平!!!

  對於以上結果,只相對於理論驗證,沒有實際資料驗證,如有不同意見,歡迎指出!!!

《奇思妙想》論JavaScript取隨機數的相對公平性!!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.