【发布时间】:2016-10-28 08:52:15
【问题描述】:
有没有办法设计一个散列,使得某些键子集故意映射到相同的值(冲突)?
例如,如果我希望将某个 64 位 int A 的所有 (popcount>=4) 个子集映射到 X,并将 B 映射到 Y 等。
我想如果由于碰撞而只有足够的键,我可以节省一些内存。
【问题讨论】:
有没有办法设计一个散列,使得某些键子集故意映射到相同的值(冲突)?
例如,如果我希望将某个 64 位 int A 的所有 (popcount>=4) 个子集映射到 X,并将 B 映射到 Y 等。
我想如果由于碰撞而只有足够的键,我可以节省一些内存。
【问题讨论】:
使用取模运算符,并将您的 64 位值除以 hashKey 集的大小,如下所示:
hashKey = _64BitValue mod popcount
我不知道您使用的是什么语言,但许多现代语言使用 % 作为模运算符,有些使用“mod”。
例如,在java中它看起来像:
long hashKey = _64BitValue % popcount;
这将在您的密钥中平均分配随机 64 位值。
【讨论】: