Tinyurl风格的独特代码:防止冲突的潜在算法

Dan*_*een 7 language-agnostic puzzle algorithm math hash-code-uniqueness

我有一个系统,需要一个唯一的6位数代码来表示一个对象,我正在考虑一个很好的算法来生成它们.以下是预先要求:

  • 我正在使用基础20系统(没有帽子,数字,元音或l来防止混淆和顽皮的话)
    • base-20允许6400万种组合
  • 我将一次插入5-10万个条目,所以理论上我会使用批量插入,这意味着使用一个唯一的密钥可能不会有效或漂亮(特别是如果开始出现大量冲突)
  • 填满10%的组合并不是不可能的,因此很有可能发生大量碰撞
  • 我想确保代码是非连续的

我有一个想法听起来像它会工作,但我在数学上不够好,无法弄清楚如何实现它:如果我从0开始并增加N,然后转换为基数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百万的唯一性的散列算法可以工作,但我太愚蠢了,不知道这是否可行.

小智 8

您只需要一个与密钥空间无关的数字.最简单的价值是使用素数.您可以谷歌搜索大型素数,或使用http://primes.utm.edu/lists/small/10000.txt