伊莉討論區
標題:
請問如何讓每次出現的數字都不重複?
[打印本頁]
作者:
ycess87009
時間:
2011-12-25 11:26 AM
標題:
請問如何讓每次出現的數字都不重複?
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
aaystx
時間:
2011-12-25 04:17 PM
回復
1#
ycess87009
rand() % 360000 是整數亂數取出之後除以360000後得到的餘數, 那如果rand() % 5 就是只有可能是0, 1, 2, 3, 4. 那原PO的for loop 是做360000次, 那可能會有三十幾萬個數據會重複. 希望我沒有理解錯原PO的問題.
作者:
刃丑
時間:
2011-12-25 11:56 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
runeray2000
時間:
2011-12-26 12:17 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
tony01111299
時間:
2011-12-26 03:51 AM
承接樓上,這種寫法大致如下:
#define N (360000)
int array[N];
for(int i=0;i<N;i++)
array[i]=i+1; // 先產生 1~360000
srand(time(NULL));
for(int i=N-1,j;i>0;i--){
j=rand()%(i+1);
swap(array[i],array[j]);
}
複製代碼
作者:
android123
時間:
2011-12-26 10:40 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
goodbye_mylove
時間:
2011-12-26 11:24 AM
本帖最後由 goodbye_mylove 於 2011-12-26 11:25 AM 編輯
回復
4#
runeray2000
重複隨機交換的次數越多資料就越亂。
這結論是錯的。
關於 shuffle 目前網路上都是隨便說說而已,shuffle 細節也有人提出了 7, 8 種,
但根本沒經過實際證明,只是憑「感覺」會愈來愈亂而妄下定論。
考慮均勻機率分配問題時,應參照 Knuth Shuffle。其作法已有文獻實證過,
其中 #5F 之 tony~ 之程式碼便為 Knuth Shuffle 之實現,可參考之。
回復
6#
android123
android123 之方式有點費時,採用之資料結構為環狀鏈結 (可以 array 實作沒錯),
且機率分佈圖形亦不會是均勻分佈,但此想法確實提供另一新穎思緒。
作者:
runeray2000
時間:
2011-12-27 09:15 PM
提示:
作者被禁止或刪除 內容自動屏蔽
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!