【发布时间】:2017-05-26 22:12:22
【问题描述】:
我需要构造一个完美的散列函数,将一组整数 [1..2^64 - 1] 映射到自身(这个函数实际上是一些复杂的排列)。
为了解释这个问题,假设我们在数据库中有整数主键序列。我们需要 show 构造一个数字(我们向用户显示),以使关闭的数字对应于彼此尽可能远的主键。
所以,基本上我需要一个用于大量整数的双射函数。例如
- 1 -> X1
- 2 -> X3
- 3 -> X3
- ...
- 2^64 - 1 -> X2^64 - 1
任何建议或参考将不胜感激。
【问题讨论】:
-
接近数字之间的最小“距离”是可接受的?
-
没有硬性限制。基本上我需要在更广泛的范围内传播序列号。
-
模乘以奇数是双射的并保持在该范围内(0映射到自身,因此如果它不在输入范围内,则不在输出范围内)
-
如果你需要保留 0,你总是可以使用 g(x) = f(x) - f(0) 来表示任何双射函数 f
-
使用任何方便的加密功能。
标签: algorithm computer-science hash-function perfect-hash