我有以下情况:我想生成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()对于这种方法工作是否足够好,还是会产生问题? –