algorithm - 与 ASCII 值的常规求和相比,累积分量总和哈希码函数有什么好处?
问题描述
在常规哈希表编码文本的情况下。是不是因为数字范围更大,所以碰撞更少?
编辑:累积分量总和是返回字符串 ASCII 值的阶乘的函数。即 s="string" -> s[0] + (s[0]+s[1])+ (s[0]+s[1]+s[2]) ... 直到 len(s)。
常规总和只是 s[0]+s[1]+s[2]...
解决方案
通常几个英语单词使用完全相同的字母,但顺序不同。(这些词是彼此的字谜)。(例如,天使/角度/收集)。
因为在简单的加法中顺序并不重要,所以一个单词的所有字谜都有相同的和。因此,当两个不同的键是彼此的字谜时,使用简单的和作为散列函数总是会导致冲突。
我从未听说过“累积分量总和哈希码”一词,但根据您的描述,它与Fletcher's checksum的第二部分相同。
使用以不同顺序为相同字母提供不同结果的哈希函数,例如 Fletcher 校验和的第二部分(或整个 Fletcher 校验和),可以减少哈希表中的冲突。
推荐阅读
- python - 从表中用python抓取网页
- javascript - 数组是如何在 JavaScript 中实现的?好旧的清单怎么了?
- android - 如何强制 Jacoco 在 Gradle 中使用特定版本
- java - 根据用户输入的内容进行四舍五入?
- flutter - 如何在 WebView 中加载 JS 库?
- c++ - 绕过 NSIS 中的 8192 字节 var 限制?
- python - snowflake.connector.errors.ProgrammingError: 100016 (22000): Field delimiter ',' found while expecting record delimiter '\n' 文件第 178 行,第 178 行
- html - 在“href=”之后立即写入的变量在 html 中有何作用?
- telerik - 当前上下文中不存在名称“上下文”
- php - 在 codeigniter 上从 POST 接收 NULL 数据