我正在用 C 编写程序,该程序旨在快速。
我想在数据流中存储 IP 地址的出现次数。例如,我将分析 100MB 的二进制文件,其中包含大约 2 000 000 个 IP 地址(但也许程序也将用于 x-GB 文件)。
我的想法是使用哈希表,所以我需要这些哈希函数:
20b_int indexToIPv4HashTable = hashIPv4(32b_int addr4);
20b_int indexToIPv6HashTable = hashIPv6(128b_int addr6);
我认为这个函数有时会发生冲突不是问题(我将使用单独的链接解决这个问题)。
- 我应该使用哪些哈希函数?
- 为这个问题使用哈希表是个好主意吗?
小数学:
- 20b 索引 = 1 048 576 个元素(够不够?)
- 32b 元素 = 4B 元素 = 4MB 表大小(这个大小可以吗,什么时候程序将在当前计算机上运行?)
注意:IP 地址可能已指定掩码。例如:IPv4/24 --> 现在只有 2^24 个不同的 IPv4 地址,而不是 2^32。设置掩码时,我应该使用不同的哈希表大小吗?
绝对优先的是速度。