字符串的哈希函数

时间:2015-01-11 16:00:04

标签: c++ algorithm hash

我正在为一组短长度字符串(每个字符串的长度小于50)寻找一个哈希函数表,它具有一个特殊功能,即每当我们在该表中搜索字符串时,如果字符串在表中它返回该字符串的关联对象或特定的唯一编号,如果该字符串不在表中,则它给出与输入非常相似的字符串的ID。 为了定义两个字符串之间的相似性,我们可以定义不同的函数,但假设我们将其定义为需要将一个字符串转换为另一个字符串的最小操作数。 三点说明:

  1. 每个查询字符串的长度和保存的字符串总是相似并且修复。
  2. 字符串的字母仅限于5个不同的字符。
  3. 当然记忆和速度对我来说都很重要。
  4. 我不是在寻找最终的解决方案,但欢迎任何建议或在类似条件下介绍类似方法的论文。

1 个答案:

答案 0 :(得分:1)

如果字符串集是有限且已知的, 考虑使用GPERF生成完美的哈希函数。

使用SOUNDEX(字符串)的散列进行跟踪,该散列使用链接列表进行冲突解决。

使用第一组进行精确查找。 使用第二组进行近距离比赛。

编辑:         由于您的字母表只有5个字符,因此您有机会创建一些哈希表来减少N的大小。

预处理您的密钥,识别每个独特的字母。它可能是AAAAA,它只是A的关键。 AABBBB是AB或ABCDEF。大约有5个因子。 120根据哈希树,如果需要,可以使用单独的哈希函数。

我有点担心,因为不清楚字符串实际存储在哪里。可能性是您的哈希会发生冲突。你打算怎么解决这个问题?散列到搜索地址列表,这将通过读取磁盘上的实际字符串来验证正确的哈希值?