字符串哈希相关问题
2021/12/23 23:07:54
本文主要是介绍字符串哈希相关问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
字符串哈希相关问题
如何对一个字符串进行哈希呢?
字符串哈希公式
\[str[i]: 表示字符串第i个位置的字符 \\ P: 质数 \\ \begin{aligned} hash(str[0..n]) &= str[0] * P ^ n + str[1] * P ^ {(n - 1)} + \cdots + str[n] * P ^ 0 \\ &= hash(str[0..{n - 1}]) * P + str[n] \end{aligned} \]哈希是指☞将元素映射为一个确定的数值。
input: anything output: number
- 参考文章:https://blog.csdn.net/u012835097/article/details/79407591
哈希函数的应用场景:散列表中用于确定元素在散列表中的位置。
那么上述的哈希公式会不会问题呢?
是有的,就是当输入的元素越来越多时,难免会出现哈希碰撞。这种情况对于一些需要唯一值的场景就很搞。
那么有什么解决方法吗?
最简单的方法,就加多一个哈希函数,采用双哈希的方法,来确定唯一值。一般这种方法基本不会出现哈希碰撞。
除了哈希碰撞外,这个公式还有其他问题吗?
没错,当字符串长度大到一定程度时会溢出。
此时,可以采用取模来解决此问题。
\[hash(str[0..n]) = ((hash({n - 1}) * P\quad mod \quad N) + str[n])\quad mod \quad N \]
如何求子串的哈希值?
\[\begin{aligned} hash(str[i..j]) &= hash(str[0..j]) - hash(str[0..{i-1}]) * P ^ {(j - i + 1)} \\ &= (str[0] * P ^ j + str[1] * P ^ {(j - 1)} + \cdots + str[{i-1}] * P ^ {(j - i + 1)} + \cdots + str[j] * P ^ 0) - (str[0] * P ^ {(i - 1)} + str[1] * P ^ {(i - 2)} + \cdots + str[{i - 1}] * P ^ 0) * P ^ {(j - i + 1)} \\ &= (str[0] * P ^ j + str[1] * P ^ {(j - 1)} + \cdots + str[{i-1}] * P ^ {(j - i + 1)} + \cdots + str[j] * P ^ 0) - (str[0] * P ^ j + str[1] * P ^ {(j - 1)} + \cdots + str[{i - 1}] * P ^ {(j - i + 1)}) \\ &= str[i] * P ^ {(j - i)} + \cdots + str[j] * P ^ 0 \end{aligned} \]相关算法题:
- 重复的DNA序列
- 最长重复子串
这篇关于字符串哈希相关问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?
- 2025-01-10实现精准执行:团队协作新方法
- 2025-01-10如何使用工具提升活动策划团队的工作效率?几个必备工具推荐
- 2025-01-10WiX 标签使用介绍:打造专业安装程序的利器