C++中的开源随机数生成算法?

7
我需要连续生成1-10000范围内的随机数,且不重复。有什么建议吗?
描述:我们正在为应用程序构建新版本,该版本在Sqlite数据库中维护记录。在我们应用程序的上一个版本中,每个记录没有唯一的键。但是现在,随着新升级版本的推出,我们需要支持从旧版本的数据库中导入数据。因此,我们读取旧数据库中的每条记录并为其生成一个随机数作为唯一键,并将其存储在新数据库中。在这里,我们可能需要连续导入多达10000条记录。

2
为什么不给新数据库的记录分配顺序唯一键呢?我看不出使用随机键有什么好处。 - TimB
为什么不使用顺序键呢?让数字变得随机对于连接键来说毫无意义。它并不能增加安全性或可靠性... - Toybuilder
实际上问题是,先前的应用程序具有MFC(序列化)对象数据库,现在我们正在将其移动到SQLite,因此出于兼容性原因,我们在此版本中提供了两个数据库。此外,我们需要导入旧的数据库(不包含唯一键)和新的数据库文件(包含唯一键)。 - TG.
为什么你要将范围限制在10000以内?如果你将限制提高到20000,那么重复就不是什么大问题了。(我假设你正在检查“随机”ID是否已经被使用--即使没有其他安全措施!) - Captain Segfault
14个回答

2

虽然你可能需要生成一系列不重复的值,但你不能称其为“随机”的。真正的随机性与重复的缺失关系不大,而与序列中数值的分布有关。


2
生成随机数太重要了,不能交给偶然。 -- 罗伯特·R·科维尤,奥克里奇国家实验室

0

C语言数值计算这本书有一个专门的章节介绍随机数生成。其中有几种实现方法,从简单明了到具有良好统计特性的复杂方法。


-1 表示链接到含有盗版内容的种子站点。 - Eugene Bujak

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接