伊莉討論區

標題: 請問如何讓每次出現的數字都不重複? [打印本頁]

作者: 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

承接樓上,這種寫法大致如下:
  1. #define N (360000)
  2. int array[N];
  3. for(int i=0;i<N;i++)
  4.      array[i]=i+1; // 先產生 1~360000
  5. srand(time(NULL));
  6. for(int i=N-1,j;i>0;i--){
  7.      j=rand()%(i+1);
  8.      swap(array[i],array[j]);
  9.      }
複製代碼

作者: 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!