对于英语单词来说,什么是好的哈希函数?

2023-12-24

我有一长串英语单词,我想对它们进行哈希处理。什么是好的哈希函数?到目前为止,我的散列函数对字母的 ASCII 值求和,然后对表大小取模。我正在寻找有效且简单的东西。


简单地对字母求和并不是一个好的策略,因为排列会给出相同的结果。

这个 (djb2 http://www.cse.yorku.ca/%7Eoz/hash.html) 非常流行并且可以很好地处理 ASCII 字符串。

unsigned long hashstring(unsigned char *str)
{
    unsigned long hash = 5381;
    int c;

    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}

更多信息here https://stackoverflow.com/questions/1579721/why-are-5381-and-33-so-important-in-the-djb2-algorithm.

如果您需要更多替代方案和一些绩效衡量标准,请阅读here http://www.strchr.com/hash_functions.

Added:这些都是general散列函数,其中输入域事先未知(也许除了一些非常一般的假设:例如,上面的方法对于 ascii 输入稍好一些),这是最常见的情况。如果您有一个已知的受限域(固定的输入集),您可以做得更好,请参阅 Fionn 的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于英语单词来说,什么是好的哈希函数? 的相关文章

随机推荐

  • 服务器端控件的输入类型

    我正在使用 asp net 构建 ipad web 应用程序 我知道使用input type email 将导致 iPad 上的键盘布局发生更改 以便比默认设置更轻松地处理电子邮件输入 问题是我正在使用服务器端文本框控件 有谁知道如何让服务
  • 如何锁定滑块并防止用鼠标将值更新到 dat.GUI 菜单中

    我尝试实现一种方法来防止用鼠标更新值 实际上当three js动画已开始 通过单击按钮启动 目前 我有以下内容dat GUI menu 单击 开始 按钮后 我想阻止用户用鼠标修改参数 Rotation x and Rotation y 这是
  • 列表作为字典中不可 JSON 序列化的条目

    我需要将列表 或 numpy 数组 保存为 JSON 文件中的条目之一 我收到 不可 JSON 序列化 错误 并且我不知道如何修复它 以及为什么当我手动将列表传递到字典时我没有收到它 My code def get col stats co
  • 使用 AlaSQL 和 JQuery 加载 CSV 文件

    我正在构建一个基于 HTML 的应用程序 用于使用 AlaSQL 查询导入的 CSV 文件 我开始于这个演示 http alasql org demo 008file 并尝试通过设置来实现相同的行为onChange事件通过 JQuery 而
  • 给定多个节点,求 AVL 树的最小和最大高度?

    给定一定数量的节点 是否有公式可以计算 AVL 树的最大和最小高度 例如 课本问题 3 个节点 5 个节点和 7 个节点的 AVL 树的最大 最小高度是多少 课本答案 3 个节点的 AVL 树的最大 最小高度为 2 2 5 个节点的 AVL
  • 如何在 IntelliJ 中配置 dagger

    我下载了 dagger 因为它似乎是 Android 中依赖注入的一个不错的选择 但我在集成编译器时遇到了一些麻烦 有关于正确设置的任何提示吗 我遵循了有关 android 注释的说明 因为这个项目似乎很相似 但这对匕首不起作用 我做了什么
  • 在 p:dataTable 上执行搜索后,p:dataTable 中的 p:fileDownload 不起作用(仅刷新页面)

    我有一个 JSF PrimeFaces Web 应用程序 在一页中
  • Eclipse 中的“与编辑器链接”功能有什么作用?

    我是 Eclipse 新手 也不了解 NetBeans 我正在阅读 eclipse 教程 但我很困惑 无法理解 与编辑器链接 到底是做什么的 Eclipse gt 帮助中说 选择本地工具栏或其中之一的视图菜单中的 与编辑器链接 按钮 导航视
  • 套接字传递十六进制值

    我正在尝试将套接字中的字符串值传递到另一台服务器 另一个服务器应该接收十六进制格式的值 即 如果我的字符串在服务器上是 s 600185838e 它应该收到 60 01 85 83 8e 但是我发送的这些值已转换为 ASCII 并且不是所需
  • 将文本输入放在单选按钮的标签内?

    我正在尝试创建一个指定一堆选项的单选组 以及一个带有要指定的文本输入的额外选项 其他 我正在使用的这个特定单选按钮的代码是
  • 静态成员中的通用参数声明

    为什么不允许定义这样的静态成员 private static final
  • 再次针对特定异常启用中断

    我是 Visual Studio 的新手 我现在正在编程 当我在 Visual Studio 的调试器中启动程序时 一切正常 当我按下一个按钮时 它集中了我的代码并弹出一个框 带有指向有错误的行的箭头 说明错误是什么 但我取消选中了上面的检
  • go 中定期运行一个函数

    我有一个这样的函数 func run cmd string byte out err exec Command cmd Output if error nil log Fatal err return out 我想以这种方式运行这个命令 r
  • 将 2 个嵌套数组合并为一个具有多个值的数组

    我有 2 个这样的嵌套数组 array 1 0 gt array 1 id gt 6 1 gt array 1 id gt 4 array 1 0 gt array 1 id gt 509 1 gt array 1 id gt 256 我正
  • 如何修复预期响应包含数组但获得对象 ANGular js

    我是新人 在调用服务后使用资源模块很难得到这个错误 任何人都可以修改我在代码中出错的地方 或者只是修改其中需要纠正的部分 谢谢 即将到来的数据格式 brands Array 1 0 Object v 0 id 5251a4a34f232fc
  • 配置文件与 gcc/g++ 和 ld 的链接时间

    我正在使用 g 编译和链接一个由大约 15 个 c 源文件和 4 个共享对象文件组成的项目 最近 链接时间增加了一倍多 但我没有可用的 makefile 的历史记录 有没有办法分析 g 以查看链接的哪一部分花费了很长时间 Edit 当我注意
  • 如何确定 PHP 字符串是否仅包含纬度和经度

    我必须使用可能包含纬度 经度数据的字符串 如下所示 query 33 805789 151 002060 query 33 805789 151 002060 query OVER HERE 33 805789 151 002060 就我的
  • 保存片段状态操作栏选项卡

    我正在构建一个由带有选项卡的操作栏组成的应用程序 每个选项卡都包含一个片段 其中一个片段有需要加载的数据 所以我希望数据只在第一次加载 当用户更改选项卡并返回到包含该片段的选项卡时 不会等待再次加载数据 我假设我必须使用某种方式保存数据 以
  • Java中用外国字符替换英文字符的方法?

    在 PHP 中我会使用这个 text Je prends une th chaud s il vous pla t search array etc replace array e i e etc text str replace sear
  • 对于英语单词来说,什么是好的哈希函数?

    我有一长串英语单词 我想对它们进行哈希处理 什么是好的哈希函数 到目前为止 我的散列函数对字母的 ASCII 值求和 然后对表大小取模 我正在寻找有效且简单的东西 简单地对字母求和并不是一个好的策略 因为排列会给出相同的结果 这个 djb2