【发布时间】:2017-02-08 19:33:27
【问题描述】:
我必须将传入的 ipv4 片段散列到大小为 20 的结构的静态数组中。用于散列的字段是 IP-ID(16 位)、协议(8 位)、源 IP 地址(32 位)和目标 IP 地址(32 位)。散列应该很快而且在 C 中实现起来不是很复杂。在这种情况下,什么是好的散列函数?
【问题讨论】:
-
考虑到总的密钥空间,这听起来非常小,您要将 88 位的密钥空间粉碎成不到 5 位的“索引空间”。这听起来好像很可能会发生碰撞。如果项目会一直存在和/或快速出现,则哈希表可能会非常满(或具有非常长的外部链)。
-
记录一些真实的实时数据并分析不同的散列函数,如果它们均匀分布在你的 20 个数组条目上。但是,由于数组非常小,您会遇到很多冲突。
-
你说的是 20 字节或位的数组吗?如果它是 20 个字节,则您不必散列,但您可以
memcpy他们。 -
20 我的意思是没有条目是 20