一尘不染

Tinyurl样式的唯一代码:防止冲突的潜在算法

algorithm

我有一个系统,需要一个唯一的6位代码来表示一个对象,并且我正在尝试一种生成它们的好的算法。以下是先决条件:

  • 我正在使用以20为基的系统(没有大写字母,数字,元音或l,以防止造成混淆和顽皮的单词)
    • 以20为基数的组合允许6400万种组合
  • 我将一次插入潜在的5万到1万个条目,因此从理论上讲,我将使用批量插入,这意味着使用唯一键可能不会高效或漂亮(尤其是当开始有很多冲突时)
  • 填充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百万之间的唯一性,但是我实在太傻了,无法知道是否可行。


阅读 210

收藏
2020-07-28

共1个答案

一尘不染

您需要的是一个与密钥空间没有任何因素的数字。最简单的值是使用质数。您可以用Google搜索大素数,或使用http://primes.utm.edu/lists/small/10000.txt

2020-07-28