Hash 使用遗传编程/算法改进散列

Hash 使用遗传编程/算法改进散列,hash,genetic-algorithm,evolutionary-algorithm,genetic-programming,Hash,Genetic Algorithm,Evolutionary Algorithm,Genetic Programming,我正在编写一个程序,它可以显著减少使用诸如“key mod table_size”之类的散列函数时发生的冲突数量。为此,我想使用遗传编程/算法。但我对它了解不多。即使在阅读了许多文章和例子之后,我也不知道在我的情况下(如在程序定义中),什么是适应度函数、目标(目标通常是要求的结果)、什么是人口/个人和父母等 请帮助我识别上述内容,如果可能,请使用一些代码/伪代码片段,因为这是我的项目 不必使用遗传规划/算法,它可以是任何使用进化规划/算法的东西 谢谢。我的建议是:不要那样做。关于散列函数的文献非

我正在编写一个程序,它可以显著减少使用诸如“key mod table_size”之类的散列函数时发生的冲突数量。为此,我想使用遗传编程/算法。但我对它了解不多。即使在阅读了许多文章和例子之后,我也不知道在我的情况下(如在程序定义中),什么是适应度函数、目标(目标通常是要求的结果)、什么是人口/个人和父母等

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

不必使用遗传规划/算法,它可以是任何使用进化规划/算法的东西


谢谢。

我的建议是:不要那样做。关于散列函数的文献非常丰富,我们或多或少了解什么是好的散列函数。我们懂得足够的数学知识,不会盲目地去寻找它们。 如果您需要使用散列函数,那么有很多选择

然而,如果这是你的uni项目,你不可能改变主题或将其引导到一个更易于管理的方向,那么正如你所注意到的,将有一个复杂的问题,那就是如何正确使用适应度函数和变异算子。据我所知,没有明显的候选人

你可以查阅例如“严格雪崩标准”,试着看看你是否能从适应性和突变方面对此进行推理

另一个问题是,您希望如何表示您的函数?只是一个布尔表达式?从诸如AND、XOR、NOT、ROT等字操作构建的东西?
根据您的约束条件(或者更确切地说,假设条件),适应度和变异的问题将有所不同。

广义上,适应度显然是最小化“哈希模表大小”模型中的冲突数量。 最明显的部分是采取一个适当大的和(非常重要的)有代表性的密钥分发,并通过您的“候选”功能将其丢弃

然后,您可以通过“哈希模表大小”传递一个或多个表大小值,并评估所产生分布的“精确性”度量

所以归根结底就是要尝试什么样的表大小以及应用什么样的精确性度量。 准确度取决于语境。 您可以测量“最满桶”作为“最坏情况”插入/查找时间的度量。 您可以测量桶大小的平方和,作为“平均”插入/查找时间的度量,该时间基于在键查找中的均匀分布

最后,您需要决定测试的表大小。 传统智慧通常使用素数,因为散列模素数往往对散列中的所有位都具有很好的易变性,而像散列模2^n这样的东西只涉及较低的n-1位。 为了减少计算量,你可以考虑下一个素数的级数大于两个幂的级数。5(>2^2)11(>2^3)、17(>2^4)等,不超过并包括大于“样本”大小的2的一次幂

还有其他考虑健康的方法,但如果没有实际应用,这个问题(当然)定义不清

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