随机生成不重复的数字Python,python产生多个随机整数

  随机生成不重复的数字Python,python产生多个随机整数

  Ok是一个比较麻烦的问题,所以我们转向了堆栈溢出。因为我想不出好的答案。我想要的是Python需要生成一个从0到1,000,000,000的简单数字列表,并将其用于序列号。(因为用的是随机数,不知道分配了多少,还是定时器攻击容易。也就是说推测接下来会出现。)。这些数字与连接的信息一起存储在数据库表(索引)中。他们生成的程序永远不会运行,所以他们不能依赖于内部状态。

  有什么大不了的?创建一个数字列表,转换成数组,然后用Python“random . shuffle(big _ number _ array)”完成。问题是,我想避免保存一个数字列表。因此,读取文件,将它弹出到顶部,保存并关闭它。我宁愿让它们飞起来。是的,我能想到的解决方案有问题:

  1)生成一个随机数并检查它是否正在被使用。如果正在使用,请生成并检查新号码,并根据需要重复,直到找到未使用的号码。这里的问题是我运气不好,可能会产生很多用过的号,得到没用过的号。可能的解决方案:使用非常大的号码池来减少这种机会(但我最终会得到愚蠢的长号码)。

  2)生成一个随机数,并检查它是否正在被使用。如果您使用加号或减号从数字中再次检查,请重复直到您找到未使用的数字。问题是,这不再是一个随机数。因为我引入了偏见。最终我会得到一系列的数字。可以预测下一个数字,获得更大的成功几率。

  3)生成一个随机数,并检查它是否正在被使用。如果添加或减去另一个随机生成的随机数并重新检查,问题只是生成一个随机数,然后返回到类似于解决方案1的检查。

  4)可以使用数字(不打开或关闭文件的批处理),因为有一个守护进程可以吸收它并生成和存储随机列表,然后对它们进行排队。

  5)可以生成一个大得多的随机数,然后散列(即使使用MD5)得到一个较小的值。我们很少发生冲突,但最终我们可以获得比我们需要的更多的数字。

  6)为了减少冲突的几率,我在随机数(即unix时间戳)前添加或添加了基于时间的信息,我再次得到了超过要求的数。

  谁要是有什么巧妙的想法,就会减少“碰撞”的几率。也就是说,生成所获得的随机数。但是,也允许保持“小”的数量。“不到10亿欧洲人=”。

  为什么我接受:

  所以,我可以很容易地用1。我希望这不是一个问题,但如果我可以用一个明确的解决方案生成所有的数字,保存它们并确保获得新的随机数,我可以用9位数字替换“小”数字,即MD5/等。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: