计算最小完美哈希的更简单方法?

时间:2019-01-18 23:43:05

标签: hash perfect-hash

我有32个无符号32位整数的小(?)集(范围从0到100)。对于给定的集合,我想拿出最少的参数来描述给定集合的最小(理想)完美哈希。我用来试验该想法的高级代码最终得到如下结果:

def murmur(key, seed=0x0):
    // Implements 32bit murmur3 hash...
    return theHashedKey

sampleInput = [18874481, 186646817, 201248225, 201248705, 201251025, 201251137, 201251185, 184472337, 186649073, 201248625, 201248721, 201251041, 201251153, 184473505, 186649089, 201248657, 201251009, 201251057, 201251169, 186646818, 201248226, 201248706, 201251026, 201251138, 201251186, 186649074, 201248626, 201248722, 201251042, 201251154, 186649090, 201248658, 201251010, 201251058, 201251170]

for seed in range(11111): // arbitrary upper seed limit
    for modulus in range(10000):
        hashSet = set((murmur(x, seed=seed) % modulus for x in sampleInput))
        if len(hashSet) >= len(allValves):
            print('minimal modulus', modulus, 'for seed', seed)
            break

这只是2轴蛮力搜索的基本伪代码。我通过跟踪不同的值来添加行,可以找到可以提供完美哈希值的种子值和模量值,然后选择模数最小的值。

在我看来,应该采用一种更优雅/确定性的方式来提出这些价值观吗?但这就是我的数学技能溢出的地方。

我目前正在使用Python进行实验,但最终希望在小型嵌入式平台上用C实现某些功能。

0 个答案:

没有答案