小编典典

产生随机数的算法

mysql

我正在寻找一个随机数,并将其发布到特定user_id的数据库表中。问题是,相同的数字不能使用两次。有上百万种方法可以做到这一点,但是我希望对算法非常热衷的人能够以一种优雅的解决方案巧妙地解决问题,因为它满足以下条件:

1)最少查询数据库。2)通过内存中的数据结构进行的爬网次数最少。

本质上,这个想法是要执行以下操作

1)创建一个从0到9999999的随机数
2)检查数据库以查看该数字是否存在

2)在数据库中查询所有数字
3)查看返回的结果是否与数据库中的数据匹配
4)如果匹配,则重复步骤1,如果没有,问题就解决了。

谢谢。


阅读 237

收藏
2020-05-17

共1个答案

小编典典

没有,您的算法不可扩展。我之前做过的事情是连续发行数字(每次+1),然后通过XOR操作使数字混乱,从而给我看似随机的数字。当然,它们并不是真正随机的,但是在用户看来,它们是如此。


[编辑] 附加信息

该算法的逻辑如下:您使用已知序列生成唯一数字,然后确定性地操作它们,因此它们不再看起来是连续的。通用的解决方案是使用某种形式的加密,在我的情况下是XOR触发器,因为它能获得最快的速度,并且可以保证数字永远不会冲突。

但是,如果您希望使用看起来更随机的数字而不是速度,则可以使用其他形式的加密(例如,您不需要一次生成许多ID)。现在,选择加密算法的重点是“保证数字永不冲突”。证明加密算法是否可以满足此保证的一种方法是,检查原始数字和加密结果是否具有相同的位数,并且该算法是可逆的(双射)。

[感谢 Adam LissCesarB 在解决方案方面的 出色 表现]

2020-05-17