我有以下情況:我想生成M = 500,000個唯一的隨機數字之間的10 和2 -1。爲了簡化這種情況,我們可以假設,我們需要一個介於1和N = 2之間的數字。Qt:大量的唯一隨機quint64
我已經找到對此問題的參考文獻>here<和>here<和>here<。
但我仍然有這樣的感覺,即如果N很小,參考文獻中提到的方法就可以工作。即將所有數字從1到N列出,並將它們混合並取第一個M是沒有選擇的。並且我認爲應該有比嘗試和錯誤更有效的方法,因爲M < < N.和M < <總是給出N.因此,如果N-M很小或者甚至N = M,那麼該算法不會很好。但不知何故,大n給出我頭疼......
與此相關的問題,我試圖擴大qrand()來獲得一個隨機`quint64與
quint64 MainWindow::longrand()
{
quint64 erg=(quint64)qrand();
for(int i=0;i<4;i++)
erg=(erg<<(RAND_MAX+1))+qrand();
erg=(erg<<16)+(qrand()%16);
return erg;
}
我知道這是不是一個很好的隨機數量,但它會是足夠的還是會給某些算法帶來問題?
因此,您的整個問題只是您的'longrand'功能是否正常?你不是在問如何組織大量的數字並確保它們是唯一的? –
面臨同樣的問題,即C運行時rand和qrand都不能生成質量隨機集。這是自C++ 11以來用現代C++處理的。沒有額外的框架需要:https://stackoverflow.com/questions/14009637/c11-random-numbers – AlexanderVX
@大衛:不,我想問兩個。首先,有沒有2^64標誌運行O(M)的方法?其次,我的longrand()對於這種方法工作是否足夠好,還是會產生問題? –