两个类(c1和c2)实现完美的散列函数(h)。什么是c3的最佳哈希函数,通过c1和c2的组合多态

时间:2017-09-03 23:17:27

标签: hash

由于标题上的字数限制,我无法指定我的意思"完美的哈希函数"和#34;最佳哈希函数"。

h ,完美的哈希函数只对碰撞的不可能性而言是完美的,而不是它的分布。

c3的哈希函数应该仅基于其c1c2类型的两个字段来实现,它应该能够避免冲突,但不一定能提供好的哈希的分布。

无论答案是什么,我想对函数背后的数学进行解释,以及为什么它避免碰撞,所以我可以在下次遇到类似情况时瞄准相同的数学。

(下面的代码用C#编写,但问题很普遍,不能将其授予[C#]标签)

编辑:请注意,所涉及的所有散列函数都需要返回32位整数。

class C3
{
    C1 _c1Field;
    C2 _c2Field;
    public override int GetHashCode()
    {
        //what to do here?
    }
}

EDIT2:关于声称我的问题的重复是:我根据正常标准不想要一个好的哈希函数。我以为我说得那么清楚,但显然我没有。我需要一个完全忽略分布均匀性的哈希函数。我根本不需要关心这一点。我只需要一个避免冲突的功能。我不是要求它完美,并且从不碰撞,那将是愚蠢的。我要求的功能是,在理想(和纯粹假设的) h 功能下给出两个图像,输出的图像与另一对不同的图像碰撞的可能性最小。 ħ

我不知道这种功能的任何其他名称,因此我将其称为哈希函数。问题可能在于我缺乏专业词汇,因为我只是为了爱好而出于爱,而不是为了生活。

1 个答案:

答案 0 :(得分:0)

您可以将_c1Field_c2Field都哈希为32位。将其中一个向左移位32位,然后将左移位值添加到未移位值以获得64位整数。然后,您可以根据需要使用标准散列函数将64位整数散列为32位。