色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript隨機(jī)數(shù)的組合問(wèn)題案例分析

瀏覽:17日期:2023-10-26 17:35:43

本文實(shí)例講述了JavaScript隨機(jī)數(shù)的組合問(wèn)題。分享給大家供大家參考,具體如下:

隨機(jī)數(shù)的組合問(wèn)題在面試時(shí)是經(jīng)常考的,比如之前我就被問(wèn)到:“有一個(gè)可以生成1-5的隨機(jī)數(shù)函數(shù),怎樣把它擴(kuò)大到1-7?”

在解決這個(gè)問(wèn)題之前,先來(lái)看看另外一個(gè)比較簡(jiǎn)單的問(wèn)題:“有一個(gè)可以生成1-7的函數(shù),怎樣把它縮小到1-5?”下面是一個(gè)生成1-7函數(shù)random7:

function random7() {return Math.floor(Math.random() * 7 + 1);}

如何把它轉(zhuǎn)成生成1-5的函數(shù)呢?這很簡(jiǎn)單:在一個(gè)循環(huán)里面調(diào)用random7,直到它的值小于等于5就結(jié)束循環(huán)并返回該隨機(jī)數(shù)即可,如下:

function random5() {var r = random7();while(r > 5) {r = random7();}return r;}

上面的思路就是:如果生成的隨機(jī)數(shù)大于5,就繼續(xù)調(diào)用random7,直到它小于等于5為止。好吧,回歸正題,再來(lái)看一下1-5如何轉(zhuǎn)成1-7吧。下面是一個(gè)隨機(jī)生成1-5的函數(shù):

function random5() {return Math.floor(Math.random() * 5 + 1);}

我們現(xiàn)在的目的是要把它擴(kuò)大到1-7。有一種很自然的想法可能就是:一個(gè)random5()產(chǎn)生的隨機(jī)數(shù)范圍是1-5,那么兩個(gè)random5()相加的范圍就是2-10了,再減去1就是1-9了,所以,可以按照上面的思路,在random7里來(lái)個(gè)循環(huán),如果小于等于7就結(jié)束循環(huán)并且返回。如下:

function random7() {var r = random5() + random5() - 1;while(r > 7) {r = random5() + random5() - 1;}return r;}

這樣確實(shí)可以把1-5的范圍擴(kuò)大到1-7,但是問(wèn)題來(lái)了:所謂隨機(jī)函數(shù),產(chǎn)生的每個(gè)值的概率是相等的,但是上面的方法產(chǎn)生的值概率相等嗎?我們可以使用概率論的組合知識(shí)算?繢矗荷?桑庇幸恢腫楹希?褪?andom5() + random5() - 1;中的兩個(gè)random5()均是1,生成2有兩種組合,第一個(gè)random5()是1第二個(gè)是2,或者相反。顯然,它們的概率是不等的。所以這種方法是不行的。

為了實(shí)現(xiàn)生成的每個(gè)值的概率是相等的,就是使得每個(gè)值的組合數(shù)相等。一種可行的方法是使得每個(gè)值的組合只有一種,如下:

function random7() {var r = (random5() - 1) * 5 + random5(); while(r > 7) {r = (random5() - 1) * 5 + random5(); }return r;}

為什么這樣就會(huì)使得各個(gè)值的概率相等呢?首先來(lái)看一下(random5() - 1) * 5,容易算?繒飧霰澩鍤繳?傻目裳≈凳牽埃?擔(dān)?0,15,20,用它去跟random5()相加,因?yàn)閞andom5()的可選值是1, 2,3,4,5,所以?xún)烧呦嗉又缶蜁?huì)得到1-25之間的隨機(jī)數(shù),而且產(chǎn)生的每個(gè)值的組合均只有一種,所以它們的概率也是相等的。

也許有人會(huì)問(wèn),(random5() - 1) * 5,這里為什么是乘以5而不是其他呢?這是因?yàn)槌艘裕抵蠛蛂andom5()相加,得到的數(shù)是連續(xù)的并且是等概率的。

上面討論的都是特殊情形1-5和1-7之間的轉(zhuǎn)換,對(duì)于其他的一般情形,大家可以自己試試哈。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 国产毛片一区 | 成人中文字幕一区二区三区 | 99视频在线免费看 | 欧美精品久久一区二区三区 | 亚洲三级视频在线观看 | 在线a人片免费观看国产 | 久久视频精品36线视频在线观看 | 国产片一级aaa毛片视频 | 一级做a爰片久久毛片美女 一级做a爰片久久毛片免费看 | 亚洲欧美一区二区三区 | 国产在线不卡免费播放 | 久久综合九九 | 美女视频网站永久免费观看软件 | 欧美国产成人免费观看永久视频 | 美国毛片aa | 亚洲国产情侣一区二区三区 | 99精品久久久久久久 | 欧美成人三级网站在线观看 | 精品视频免费在线观看 | 玖玖视频精品 | 天天躁夜夜躁狠狠躁2024 | 草草免费观看视频在线 | 国产精品久久久久久亚洲伦理 | 日韩欧美一级毛片视频免费 | 亚洲国产欧美在线成人aaaa | 欧美成人在线视频 | 日韩欧美亚洲天堂 | 精品日韩一区二区三区视频 | 亚洲在线视频免费观看 | 亚洲精品久久久久影 | 中国一级做a爱片免费 | 毛色毛片| 国产精品中文字幕在线观看 | 亚洲操综合 | 精品国产免费人成在线观看 | 久久国产精品一区二区三区 | 泷泽萝拉亚洲精品中文字幕 | 亚洲久久在线观看 | 手机在线看片国产日韩生活片 | 久久久久久免费观看 | 精品特级一级毛片免费观看 |