我有一个系统需要一个唯一的 6 位代码来表示一个对象,我正在尝试想一个好的算法来生成它们。以下是先决条件:
- 我使用的是 base-20 系统(没有大写字母、数字、元音或 l 以防止混淆和顽皮的词)
- base-20 允许 6400 万种组合
- 我将一次插入可能 5-10,000 个条目,所以理论上我会使用批量插入,这意味着使用唯一键可能不会高效或漂亮(特别是如果开始有很多冲突)
- 填充 10% 的组合并不是不可能的,因此很有可能发生大量碰撞
- 我想确保代码是不连续的
我有一个听起来像是可行的想法,但我的数学还不够好,无法弄清楚如何实现它:如果我从 0 开始并以 N 为增量,然后转换为 base-20,似乎应该是 N 的某个值,可以让我在重复任何值之前计算 0-63,999,999 之间的每个值。
例如,使用 N=3(所以 10 mod 3)从 0 到 9:0、3、6、9、2、5、8、1、4、7。
是否有一些神奇的数学方法可以计算出某个较大数字的 N 值,该数字能够计算整个范围而不重复?理想情况下,我选择的数字会在系列中跳跃,以至于不明显存在模式,但我不确定这有多大可能。
或者,保证值 0-64 百万的唯一性的散列算法可以工作,但我太愚蠢了,不知道这是否可能。