gpt4 book ai didi

random - 将数字序列转换为具有随机外观的ID?

转载 作者:行者123 更新时间:2023-12-04 16:57:09 25 4
gpt4 key购买 nike

我正在开发需要生成唯一的,非顺序的ID的应用程序。我的约束之一是它们必须由3位数字后跟2个字母(仅约60万个ID)组成。考虑到我的ID池相对较小,我正在考虑仅生成所有可能的ID,将它们改组并将其放入数据库中。由于在内部,我将使用一个简单的,顺序的ID,因此很容易一次将它们拔出并确保没有重复。

这感觉不是一个非常令人满意的解决方案。有没有人比这种“抽奖”方法更有意思的从有限的池中生成唯一ID的方法呢?

最佳答案

根据您要优化的内容(速度,内存使用情况等),可以采用许多不同的方法来完成此操作。

ID模式= ddd c 1 c [0]

选项1(本质上类似于哈希,类似于Zak的哈希值):
1生成一个介于0和可能性数之间的随机数(676k)。
2-将数字转换为组合

    ddd = random / (26^2)
c[0] = random % (26)
c[1] = (random / 26) % 26

3-查询数据库是否存在ID,并递增,直到找到一个可用的ID。

选项2(线性反馈移位寄存器,请参见wikipedia):
1-随机数在(0,676k)范围内的种子。 (请参阅下文,为什么不能以'0'作为种子)
2-通过将以下内容应用于当前ID号,生成后续的随机数
    num = (num >> 1) ^ (-(num & 1u) & 0x90000u);

3-跳过ID大于范围(即0xA50A0 +)
4-将数字转换为ID格式(如上所述)
*您将需要保存生成的用于ID的最后一个数字,但是您无需查询数据库以查看其是否被使用。由于LFSR的工作方式,此解决方案将枚举除[000 AA]以外的所有可能的ID。

[edit]由于您的范围实际上大于所需范围,因此您可以在转换为ID之前先减去1,然后取回[000 AA],然后将有效范围设为(0,0xA50A0]

关于random - 将数字序列转换为具有随机外观的ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com