【问题标题】:Hash Function Determination哈希函数确定
【发布时间】:2011-03-16 17:51:43
【问题描述】:

我们如何才能为字符串集找到最有效的哈希函数(冲突的可能性最小)。

假设我们得到了一些字符串..并且字符串的长度也没有定义。 阿杰 维杰 拉基 ....

我们知道没有的数量。可用的字符串,所以我们可以设计一个大小(可用计数)的哈希表。我们可以为此类问题设计的完美哈希函数是什么?

以增量方式将每个字符的 ascii 值乘以 31(素数)会导致哈希值大于 MAX_INT 的值,然后模数将无法正常工作...所以请提供一些有效的哈希函数构建解决方案....

我有几组字符串,假设 count = 10.... 我需要实现一个哈希函数,使所有这 10 个字符串唯一地适合哈希表....任何完美的哈希函数 O( 1)可用,针对这种问题??哈希表大小将是 10,对于这种情况...

只有 C 编程...

请在网站上解释逻辑.... http://burtleburtle.net/bob/c/perfect.c 这看起来很复杂,但对我来说很完美..!!这里使用的算法是什么... 直接读代码,很难!!

谢谢....

【问题讨论】:

  • 哦,亲爱的,这些解决方案无济于事......是否存在任何解决方案可以为给定的字符串集提供完美的哈希值......没有字符串可能非常大...... . 完美的哈希解决方案!!它是否存在..?
  • @Necrolis 推荐的 gperf 程序是一个实际可用的开源程序。您可以下载并查看源代码以了解它是如何完成的。很难想象比这更好的例子了。
  • 那么这个网站上的代码呢……
  • burtleburtle.net/bob/c/perfect.c这个网站看起来不错..完美的哈希函数...但我无法理解它..请帮助...

标签: c algorithm data-structures


【解决方案1】:

检查其中一些,它们显然具有良好的分布

http://www.partow.net/programming/hashfunctions/#HashingMethodologies

【讨论】:

    【解决方案2】:

    您可能想查看perfect hashing.

    【讨论】:

    • Philip,你能举个例子支持一下吗...如果我们有字符串...我们如何从这些字符串列表中获取一个整数(唯一)??
    • @AGeek:如果您查看 Philipp 链接的文章的“外部链接”部分,您会看到几个完美哈希生成器的免费实现。
    • 我需要一个代码....示例...在 C 程序中...并且需要一个完美的哈希函数..可以在 O(1) 时间内给出结果..
    【解决方案3】:

    您可能想看看gperf,如果您不经常这样做并且您的数据集很小,您可以即时执行此操作。如果字符串是提前知道的,那么这是 方法

    【讨论】:

      【解决方案4】:

      哈希表旨在能够处理动态输入。如果你只能保证一组特定的输入,并且你想保证每个输入都有一个特定的槽,那么为什么要散列呢?

      只需为每个已知的可用输入创建一个索引数组。

      【讨论】:

      • 对于一个几乎只有读访问的大型数据集,使用完美哈希之类的东西是明智的。
      • 当你有一组已知的输入并且保证每个输入都有一个槽时,为什么散列是有意义的?您可以跳过散列函数的成本,并为每个“已知输入”使用#defined 索引进行数组查找。
      • “已知输入”是相对的。如果您知道您将对 在运行时提供的 5GiB 数据进行随机访问,那么最好先对其进行完美散列以获得 O(1) 访问权限。
      • 仍然需要将字符串转换为整数以便在表格中查找。你建议如何使用字符串作为数组索引?
      • @Jim,好点子。菲利普的 cmets 是有效的。我已经看到这个问题已经改变了一点,没有考虑到每个输入的完整知识,所以我的答案似乎无关紧要。
      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 2010-11-19
      • 2013-04-13
      • 2016-03-25
      • 2011-02-27
      • 2014-08-17
      相关资源
      最近更新 更多