我在stackoverflow和谷歌上搜索,但没找到我要的内容,具体是这样的:
我有一组4字节无符号整数键,最多有100万个左右,我需要将它们用作索引到表中。最简单的方法是将键直接用作数组索引,但我不想在只使用几百万条记录时就拥有一个4GB的数组!表条目和键是连续的,因此我需要一个保留顺序的哈希函数。
例如。 keys = {56, 69, 3493, 49956, 345678, 345679,....etc}
我想将这些键转换为{0, 1, 2, 3, 4, 5,....等}。
这些键可能是任何整数,但总数不会超过200万。数字会因为删除键(及相应的数组条目)而发生变化,但新键始终比以前的最高编号更高。
在上面的例子中,如果删除了键69,则哈希3493返回的哈希整数应为1(而不是2),因为它成为第二低的数字。
我希望我解释得清楚。是否有任何快速高效的哈希解决方案可以实现上述功能?我需要翻译在低100毫微秒内完成,但我预计删除需要更长时间。我查看了CMPH,但找不到任何不涉及从文件获取数据的用法示例。它需要在Linux下运行,并使用纯C编译。
我有一组4字节无符号整数键,最多有100万个左右,我需要将它们用作索引到表中。最简单的方法是将键直接用作数组索引,但我不想在只使用几百万条记录时就拥有一个4GB的数组!表条目和键是连续的,因此我需要一个保留顺序的哈希函数。
例如。 keys = {56, 69, 3493, 49956, 345678, 345679,....etc}
我想将这些键转换为{0, 1, 2, 3, 4, 5,....等}。
这些键可能是任何整数,但总数不会超过200万。数字会因为删除键(及相应的数组条目)而发生变化,但新键始终比以前的最高编号更高。
在上面的例子中,如果删除了键69,则哈希3493返回的哈希整数应为1(而不是2),因为它成为第二低的数字。
我希望我解释得清楚。是否有任何快速高效的哈希解决方案可以实现上述功能?我需要翻译在低100毫微秒内完成,但我预计删除需要更长时间。我查看了CMPH,但找不到任何不涉及从文件获取数据的用法示例。它需要在Linux下运行,并使用纯C编译。
O(log(log N))
……它可能没有帮助,但值得进行基准测试。 - Tony Delroy