algorithm - Tinyurl 风格的唯一代码 : potential algorithm to prevent collisions

标签 algorithm language-agnostic math puzzle hash-code-uniqueness

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

  • 我使用的是 base-20 系统(没有大写字母、数字、元音字母或 l 以防止混淆和恶语)
    • base-20 允许 6400 万种组合
  • 我可能会一次插入 5-10,000 个条目,所以理论上我会使用批量插入,这意味着使用唯一键可能不会有效或不美观(特别是如果开始出现大量冲突时)
  • 填充 10% 的组合并非不可能,因此很可能会发生大量碰撞
  • 我想确保代码不是连续的

我有一个想法,听起来可行,但我的数学还不够好,不知道如何实现它:如果我从 0 开始,递增 N,然后转换为 base-20,看起来就像 N 应该有一些值,让我在重复任何值之前从 0-63,999,999 计算每个值。

例如,从 0 到 9 使用 N=3(所以 10 mod 3):0、3、6、9、2、5、8、1、4、7。

是否有一些神奇的数学方法可以计算出某个更大的数字的 N 值,并且能够在不重复的情况下计算整个范围?理想情况下,我选择的数字会在集合中跳来跳去,以至于没有明显的模式,但我不确定这有多大可能。

或者,保证 0-6400 万值的唯一性的哈希算法可以工作,但我太笨了,不知道这是否可行。

最佳答案

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

关于algorithm - Tinyurl 风格的唯一代码 : potential algorithm to prevent collisions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257825/

相关文章:

algorithm - 计算任意 30 天期间的最大总和

algorithm - 快速选择中的枢轴元素选择

c++ - 找到集合并集的最快方法

language-agnostic - 引用功能数据结构时使用哪个术语 : persistent or immutable?

performance - 具有最多重复元素的数组的快速排序算法?

python - 这个数学运算程序是否已经存在?

algorithm - 在不使用循环或条件的情况下打印字符串 X 次

c# - 在 C# 中这个反正弦近似的实现有什么问题

actionscript-3 - 在 2D 位图上找到质心

javascript - 查找离点击点最近的元素