【发布时间】:2020-03-05 09:27:23
【问题描述】:
我有以下任务。
我有 10 亿个或更多 20 字节的不同哈希(存储在某个数据库中),其总数
小于Java的Long.MAX_VALUE;
在那之后,我有几乎无限的这种哈希流。
是否有可能从这些 20 字节的不同哈希集中创建一些双射映射
到 0 到 Long.MAX_VALUE 之间的数字集?
一种拉格朗日多项式计算 - 但对于这种情况,可能有一些非常快速有效的方法。
我们需要从这个几乎无限的流中快速计算每个哈希的long 值。
每 20 个字节的哈希值只是一个数字。
在流处理之前我们可以创建映射
20-byte | 8-byte
(hash1 1)
....
(hashN N)
之后,当我们从无限流中获得下一个哈希值时,我们将获得 8 字节哈希值,而无需仅使用算术计算进行查找。
【问题讨论】:
-
你真的在问是否可以将 20 字节的哈希值散列到 唯一 8 字节的哈希值?
-
就像这里描述的 en.wikipedia.org/wiki/Lagrange_polynomial。一种哈希,但没有冲突。
-
所以这不是哈希。我们可以提前构建映射。
-
我不确定您要做什么。您能否添加一些示例以使其不那么抽象?
-
“我们将获得 8 字节哈希值,而无需仅使用算术计算进行查找” 您无法从 20 中计算出 唯一 8 字节值-byte 值,当 20 字节值本身是一个哈希值时,即它已经在使用 20 字节数字空间的全部范围。
标签: hash polynomials polynomial-math