使用遗传编程/算法改进哈希

时间:2014-11-04 11:17:30

标签: hash genetic-algorithm evolutionary-algorithm genetic-programming

我正在编写一个程序,它可以显着减少使用哈希函数时发生的冲突次数,例如key mod table_size'。为此,我想使用遗传编程/算法。但我对此并不了解。即使在阅读了很多文章和例子之后,我也不知道在我的情况下(如在程序定义中)什么是适应度函数,目标(目标通常是所需的结果),什么会构成人口/个人和父母等。

如果可能的话,请帮我识别上述内容以及一些代码/伪代码片段,因为这是我的项目。

没有必要使用遗传编程/算法,它可以是使用进化编程/算法的任何东西。

感谢..

2 个答案:

答案 0 :(得分:1)

我的建议是:不要这样做。关于散列函数的文献是巨大的,我们或多或少地理解什么是良好的散列函数。我们知道足够的数学不是盲目地寻找它们。 如果您需要使用哈希函数,有很多可供选择。

但是,如果这是你的uni项目而且你无法改变主题或将其引导到一个更易于管理的方向,那么正如你所注意到的那样,将会出现复杂的问题,即获得适应度函数和变异算子。据我所知,没有明显的候选人。

您可以查找,例如“严格的雪崩标准”并试着看看你是否可以在适应性和突变方面进行推理。

另一个问题是你想如何表现你的功能?只是一个布尔表达式?从AND,XOR,NOT,ROT等单词操作构建的东西? 根据您的约束(或更确切地说,假设),适应性和变异的问题将会有所不同。

答案 1 :(得分:0)

广泛的适应性显然可以最大限度地减少“哈希模数表大小”模型中的冲突数量。 显而易见的部分是采用适当大的(非常重要的)代表性密钥分布并通过“候选”功能将其丢弃。

然后你可以通过'hash modulo table-size'为一个或多个table-size值传递它们,并评估出现分布的“niceness”度量。

那么归结为什么是要尝试的表大小以及应用什么样的好处度量。 好是取决于上下文。 您可以测量“最完整的桶”作为“最坏情况”插入/查找时间的度量。 您可以根据按键查找中的均匀分布来测量铲斗尺寸的平方和,作为“平均”插入/查找时间的度量。

最后,您需要确定要测试的表大小(或大小)。 传统智慧经常使用素数,因为哈希模数素数对于散列中的所有比特往往是非常易变的,其中诸如散列模2 ^ n之类的东西仅涉及较低的n-1比特。 为了减少计算量,你可能会认为下一个素数系列大于每个2的幂。 5(> 2 ^ 2)11(> 2 ^ 3),17(> 2 ^ 4)等,直到并包括大于你的'样本'大小的2的第一次幂。

还有其他考虑适应性的方法但没有实际应用的问题(当然)是不明确的。

如果潜在散列函数的“空间”并非都具有相同的执行时间,那么您也应该考虑“成本”。 定义非常好的散列函数相当容易,但执行时间可能是一个重要因素。