生成大小为X的随机数的算法

Dun*_*ter 9 java random algorithm math

在我的移动应用程序中,我必须为用户提供随机的唯一X字母数字代码,以便用户可以使用该字母数字代码进行回复以执行某些任务.

要使用此应用程序的用户数量约为100万人,消息流量约为每天10万条消息.

我只能使用26个大写字母,26个低位字母和10个数字.如果随机数大小为5,那么我可以生成916132832个唯一组合.在组合耗尽之后,我想再次回收这个数字代.

我正在寻找一种算法方法.是否有任何算法方法来解决这个问题?

JB *_*zet 6

如果您接受回收随机数,为什么要在回收之前等待组合耗尽?

  • 这使得数字在到达组合集的末尾时越来越随机
  • 这会强制您维护一些数据库以了解哪些数字已被使用,哪些数字尚未使用.

我会生成随机数,如果已经使用它们就不用关心.

如果你真的想像你问的那样保留它,那么你可以这样做:

  • 生成所有组合并将它们放入数据库表中
  • 将此表的大小存储在某个变量中
  • 生成1和表大小之间的随机数R.
  • 获取存储在表的第R行的组合
  • 从表中删除Rth行,并减小size变量
  • 当表为空(并且size变量为0)时,再次启动

您可以通过将使用过的数字从一个表移动到另一个表来改进它,并在第一个表为空时使用第二个表而不是第一个表.

你也可以在记忆中做到这一点,如果你有足够的.


Pet*_*hev 0

首先,为什么不使用UUID

但如果您想自己生成数字,请尝试以下操作:

预生成 10-2000 万个组合并将它们保存在内存中的一组中。当你想要下一个 id 时,从它们中获取一个随机组合并将其从集合中删除。

当集合变空时,用原始组合重置集合(您可以保留原始集合的第二个副本以进行快速重置)。