查找具有固定大小的位数组作为键的表

时间:2019-04-28 16:59:14

标签: c hashmap lookup genetic-algorithm lookup-tables

我有一系列固定大小的二进制值(遗传算法中的个体)数组,我希望将它们与浮点值(适应性值)相关联。这种查找表将具有相当大的大小,受可用内存的限制。由于键的性质,是否有哈希函数可以保证不发生冲突?我尝试了一些尝试,但它们导致碰撞。我可以使用什么其他数据结构来构建此查找系统?

1 个答案:

答案 0 :(得分:0)

要回答您的问题: 没有哈希函数可以保证不发生冲突,除非您创建一个完全对位数组进行编码的哈希函数,这意味着在给定哈希值的情况下,您可以重构位数组。这种类型的功能将是压缩功能。如果您的数组有很多冗余信息(例如,大多数值都是零),则压缩它们可能会有助于减小查找表的总大小。

有关在C中压缩位数组的问题在这里得到回答:Compressing a sparse bit array

由于大多数位都设置为零,所以最简单的解决方案是编写一个函数,该函数将您的位数组转换为整数数组,以跟踪设置为“ 1”的位的位置。然后,如果您再次需要位数组,请编写一个与之相反的函数。您只能将编码数组保存在哈希图中。

另一种减小查找表总大小的方法是删除旧值。由于您使用的是遗传算法,种群数量会随着时间变化,旧值应该变得无用,因此您可以定期从查找表中删除旧值。