【问题标题】:Need an algorithm to generate an integer hash value for a String in C需要一种算法来为 C 中的字符串生成整数哈希值
【发布时间】:2015-04-22 16:52:23
【问题描述】:

我正在使用uthash.h 在 C 中实现哈希。我正在使用哈希表进行基本的字数统计练习。我有一个包含单词的文件,我必须计算每个单词的频率。 uthash.h的实现需要我为每个条目生成一个整数id,我想计算每个字符串对应的唯一整数。我尝试使用 md5 哈希算法,但它生成带有数字和字母的字符串,所以它没有用。有人可以建议我这样的算法。

【问题讨论】:

  • 一个好的 md5 散列实现应该能够为您提供原始的 16 字节数组。将其拆分为 4 个 32 位整数并将它们异或在一起。该字母数字字符串只是用于显示哈希的修道院表示。
  • @user1929959,您提到的第二个链接具有返回无符号长值的散列函数,但在uthash.h 实现中,id 必须是整数。我不知道这是否可行。我将尝试这种方法并在完成后发布我的结果。同时,如果您有更多建议,请发表。
  • I head murmur3 非常适合字符串。
  • 请不要为此使用 md5 或任何其他加密哈希函数。它们的计算比良好的非加密哈希函数慢得多。

标签: c algorithm


【解决方案1】:

使用 Robert Sedgewick 的 algorithm 进行散列

unsigned int GenerateHash(char* str, unsigned int len)
{
   unsigned int result = 0;
   unsigned int b    = 378551;
   unsigned int a    = 63689;
   unsigned int i    = 0;

   for(i=0; i<len; str++, i++)
   {
      result = result*a + (*str);
      a = a*b;
   }

   return result;
}

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2015-04-26
    • 2011-04-26
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多