關(guān)于隨機打亂數(shù)組的深入研究
2006/11/21 9:29:55
這幾天看到網(wǎng)絡(luò)上在討論關(guān)于隨機打亂數(shù)組的問題!發(fā)現(xiàn)很多朋友的都有自己的方法,但是否真正的隨機了呢?這個問題的爭議一直很大,我在總結(jié)后,以及對Array.sort()內(nèi)部構(gòu)造的猜測后發(fā)現(xiàn),還是有很多不是太完美的地方,所以我經(jīng)過思考還是寫了一套關(guān)于自己的數(shù)組隨機打亂的函數(shù),希望與大家分享一下!
好了,言歸正轉(zhuǎn),來看看我們的三個函數(shù),分別是: randomArray(arrLen) 功能為:產(chǎn)生一個完全隨機的數(shù)組,參數(shù)為數(shù)組的長度. randomIndex(arrLen) 功能為:根據(jù)參數(shù)產(chǎn)生一個數(shù)組,從0起到長度-1的所有自然數(shù)隨機打亂 randomSort(arr) 功能為:隨機打亂一個數(shù)組中所有值的順序.
首先是隨機數(shù)組,這是最簡單的一個函數(shù),來看一下代碼!
function randomArray(arrLen) {
var rArr:Array = new Array(arrLen);
for (var i = 0; i<arrLen; i++) {
rArr[i] = Math.random();
}
return rArr;
}
是不是很簡單,我相信不用過多的解釋!函數(shù)返回的rArr這個數(shù)組里的所有數(shù)都是放射性隨機的,所以將來會很有用的!另外值得說明的就是用Math類產(chǎn)生的隨機數(shù),客觀上是不可能會有任何重復的,因為概率小的幾乎可以完全忽略,即使數(shù)組長度為千百萬以上!
其次我們來看看,建立隨機索引的過程:
function randomIndex(arrLen) {
var iArr:Array = new Array(arrLen);
var rArr = randomArray(arrLen); //建立隨機數(shù)組,以備使用
for (var i = 0; i<arrLen; i++) { //遍歷數(shù)組,尋找最小的數(shù)字
iArr[i] = i; //默認被比較的數(shù)字為最小數(shù)字,并記錄索引
var t = rArr[i]; //記錄該數(shù)字在臨時變量中
for (var j = 0; j<arrLen; j++) { //與所有數(shù)字進行比較
if (rArr[j]<t) { //如果發(fā)現(xiàn)更小的數(shù)字,則更新
iArr[i] = j;
t = rArr[j];
}
}
delete t;
rArr[iArr[i]] = 1; //將最小的數(shù)字設(shè)置成1.
}
return iArr;
}
簡單說一下原理吧:隨機數(shù)組中的所有數(shù)字的大小全是不確定的,相互之間也是不確定的!任何一個數(shù)字都可能最大,也都可能最小,所以每次都會產(chǎn)生不同的序列,那么他們排序后索引就會被完全打亂,由此也起到了真正的隨機效果!值得一提的是其中rArr[iArr[i]]=1;是因為Math.random();不可能出現(xiàn)1,也就是說任何數(shù)都比1小,也保證的1是最大的,那么修改它后,第二次比較的時候就會讓它失去了比較權(quán),因為上一輪它已經(jīng)是最小的數(shù)了,并且已經(jīng)被記錄過了!相反如果語句if(rArr[j]<t)其中的小于號改成大于號,最后的值應(yīng)該設(shè)置成0,同樣可以起到放射性隨機的效果,只是結(jié)果完全相反而已.
現(xiàn)在打亂了所有的索引,最后要做的就是根據(jù)這個完全隨機的索引序列,隨機打亂數(shù)組中所有的值了:
function randomSort(arr) {
arrLen = arr.length;
var tArr = new Array(arrLen); //建立臨時數(shù)組,存放隨機打亂的數(shù)組
var iArr = randomIndex(arrLen); //建立隨機索引
for (var i = 0; i<arrLen; i++) {
tArr[i] = arr[iArr[i]]; //根據(jù)隨機索引完全打亂數(shù)組中所有的值
}
return tArr;
}
用隨機索引函數(shù)產(chǎn)生的數(shù)組作為預(yù)被打亂的數(shù)組的新索引,進行賦值,即完成了完全打亂的效果!
就此對于隨機打亂數(shù)組的研究也進行完了,希望對喜歡的朋友們有些幫助!
返回列表
返回首頁
主站蜘蛛池模板:
泰国午夜理伦三级|
中文精品北条麻妃中文|
男人肌肌捅女人肌肌视频|
国产精品大片天天看片|
jizzjizz成熟丰满舒服|
最近中文字幕mv2018免费看|
台湾佬在线观看|
6080yy免费毛片一级新视觉|
日本xxx在线播放|
亚洲jizzjizz妇女|
波多野结衣全部作品电影|
全彩※acg海贼王同人本子|
caoporn地址|
国内精品久久久久久久影视麻豆|
久久大香伊蕉在人线观看热2|
欧美成人综合在线|
免费国产美女爽到喷出水来视频|
h国产在线观看|
国模吧一区二区|
yellow日本动漫高清小说|
手机在线看片你懂的|
动漫美女被爆羞羞免费|
调教15小男生gay脱裤子|
国产日韩精品在线|
gdianav|
成人免费在线视频|
亚洲2022国产成人精品无码区|
欧美精品一区二区三区在线
|
国产精品久久久尹人香蕉|
99久久免费看国产精品|
日本肉漫在线观看|
亚洲一区二区三区在线观看网站|
欧美精品一区二区三区在线|
亚洲自国产拍揄拍|
男男暴菊gay无套网站|
午夜体验试看120秒|
翁情难自禁无删减版电影|
国产欧美日韩精品丝袜高跟鞋|
√天堂中文官网8在线|
成人影院久久久久久影院|
亚州av综合色区无码一区|