宁波网站建设企业网站制作/谷歌网站优化

宁波网站建设企业网站制作,谷歌网站优化,大庆疫情最新消息,成都市成华区建设路商务中心网站字符串哈希的基本概念和数学原理分析 1. 字符串哈希的定义和基本概念 哈希函数的定义 哈希函数(Hash Function)是一种将任意长度的输入映射为固定长度输出的函数。对于字符串而言,哈希函数通过某种算法将字符串转换成一个整数,…

字符串哈希的基本概念和数学原理分析

1. 字符串哈希的定义和基本概念

哈希函数的定义

哈希函数(Hash Function)是一种将任意长度的输入映射为固定长度输出的函数。对于字符串而言,哈希函数通过某种算法将字符串转换成一个整数,该整数称为哈希值。良好的哈希函数通常具有以下特性:

  • 确定性(Deterministic):相同的输入必须产生相同的哈希值。
  • 均匀分布(Uniformity):不同输入的哈希值应尽可能均匀分布,避免哈希冲突(不同输入产生相同哈希值)。

字符串哈希的作用

将字符串转换为哈希值,可以显著提升字符串比较和查找的效率。例如,在字符串匹配算法 Rabin-Karp 中,哈希值可以用于快速筛选可能匹配的位置,从而减少逐字符比较的次数。

哈希冲突及其处理

由于哈希函数将庞大的输入空间映射到有限的输出空间,不可避免地会发生哈希冲突(Collision)。即,可能存在 Hash(S) = Hash(T),但 S ≠ T

解决哈希冲突的方法:

  • 数据结构层面(哈希表)
    • 开链法:使用链表存储冲突元素。
    • 开放地址法:在哈希冲突时寻找下一个可用槽位(线性探测、二次探测、双重哈希)。
  • 字符串算法层面
    • 双哈希(Double Hashing):使用两个不同的哈希函数,只有两个哈希值都相等时才认为字符串相等。
    • 增大哈希空间:选取更大的模数 M M M 以减少冲突概率。
    • 最终验证:在哈希值相等时进行字符串逐字符比对。

2. 字符串哈希的数学原理

多项式哈希(Polynomial Hashing)

字符串哈希常用的方法之一是多项式哈希,其基本思想是将字符串视为某个进制的数,并进行模运算。形式化定义如下:

H ( S ) = ( s 1 × B n − 1 + s 2 × B n − 2 + ⋯ + s n × B 0 ) m o d M . H(S) = \big( s_1 \times B^{n-1} + s_2 \times B^{n-2} + \dots + s_n \times B^0 \big) \bmod M \,. H(S)=(s1×Bn1+s2×Bn2++sn×B0)modM.

其中:

  • s i s_i si:第 i i i 个字符的数值(如 ASCII 编码)。
  • B B B:基数(通常选 31、131、13331 等)。
  • M M M:模数(通常选大质数,如 1 0 9 + 7 10^9+7 109+7)。

示例:
对于字符串 "abcde",假设 a=1, b=2, ..., e=5,且 B = 31 B=31 B=31,则:
H ( " a b c d e " ) = ( 1 × 3 1 4 + 2 × 3 1 3 + 3 × 3 1 2 + 4 × 3 1 1 + 5 × 3 1 0 ) m o d M . H("abcde") = (1 \times 31^4 + 2 \times 31^3 + 3 \times 31^2 + 4 \times 31^1 + 5 \times 31^0) \bmod M. H("abcde")=(1×314+2×313+3×312+4×311+5×310)modM.

基数 B B B 和模数 M M M 的选择

  • 模数 M M M
    • 应选大质数,以减少哈希冲突,如 1 0 9 + 7 10^9+7 109+7
    • 也可选 2 64 2^{64} 264 直接利用整数溢出(非质数)。
  • 基数 B B B
    • 通常选取比字符集大小更大的质数,如 31、131、13331。
    • 选质数可减少哈希值模式性,提高均匀分布性。

滚动哈希(Rolling Hash)

滚动哈希是一种 O ( 1 ) O(1) O(1) 时间计算滑动窗口子串哈希的方法,推导如下:

H ( i ) H(i) H(i) 表示 S[i:i+m-1] 的哈希值:
H ( i ) = ( s i × B m − 1 + s i + 1 × B m − 2 + ⋯ + s i + m − 1 × B 0 ) m o d M . H(i) = (s_i \times B^{m-1} + s_{i+1} \times B^{m-2} + \dots + s_{i+m-1} \times B^0) \bmod M. H(i)=(si×Bm1+si+1×Bm2++si+m1×B0)modM.

计算 H ( i + 1 ) H(i+1) H(i+1) 时,可由 H ( i ) H(i) H(i) 推导:
H ( i + 1 ) = ( H ( i ) × B − s i × B m + s i + m ) m o d M . H(i+1) = \Big( H(i) \times B - s_i \times B^m + s_{i+m} \Big) \bmod M. H(i+1)=(H(i)×Bsi×Bm+si+m)modM.

该方法避免了重新计算每个子串的哈希值,大幅提升效率。


3. 字符串哈希的常见算法

Rabin-Karp 算法

Rabin-Karp 通过滑动窗口 + 哈希匹配实现高效字符串查找:

  1. 计算模式串 P P P 的哈希值 H ( P ) H(P) H(P)
  2. 在文本串中滑动窗口计算每个子串哈希值 H T ( i ) H_T(i) HT(i)
  3. H T ( i ) = H ( P ) H_T(i) = H(P) HT(i)=H(P),则进一步验证字符串是否完全匹配。

时间复杂度分析

  • 朴素匹配算法: O ( n m ) O(nm) O(nm)
  • Rabin-Karp:
    • 预处理模式串: O ( m ) O(m) O(m)
    • 计算 n − m + 1 n-m+1 nm+1 个子串哈希: O ( n ) O(n) O(n)
    • 平均复杂度 O ( n + m ) O(n+m) O(n+m),最坏情况下(哈希冲突过多) O ( n m ) O(nm) O(nm)

4. 字符串哈希的时间与空间复杂度

操作朴素方法哈希方法
单次字符串比较 O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)
查找子串 O ( n m ) O(nm) O(nm) O ( n + m ) O(n+m) O(n+m)(Rabin-Karp)
哈希计算 O ( n ) O(n) O(n) O ( n ) O(n) O(n)
滚动哈希更新 O ( n m ) O(nm) O(nm) O ( n ) O(n) O(n)
哈希表查找 O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)(均摊)

5. 字符串哈希的应用场景

字符串匹配

  • 单模式匹配:Rabin-Karp 算法。
  • 多模式匹配:对多个模式串建立哈希表。

重复字符串检测

  • 大数据集合查重:Bloom Filter 结合哈希可快速去重。
  • 文档查重:对固定长度子串进行哈希比对。

哈希索引(数据存储)

  • 哈希表(Hash Table):字符串键值存储,如 Python dict
  • 数据库索引:MySQL 等数据库采用哈希索引加速查询。

数据完整性校验

  • 文件哈希(MD5、SHA-256):用于数据校验、防止篡改。
  • Git 版本管理:Git 采用 SHA-1 哈希标识文件版本。

分布式系统

  • 一致性哈希:用于负载均衡,如缓存服务器的分片管理。
  • DHT(分布式哈希表):用于 P2P 网络中的数据存储。

总结

字符串哈希是一种强大且高效的字符串处理技术,广泛应用于字符串匹配、查重、数据存储和分布式计算等领域。合理选择哈希函数的参数(如基数 B B B 和模数 M M M),并结合滚动哈希双重哈希等技术,可以大幅提升字符串处理的性能,并降低哈希冲突带来的影响。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建

从新加坡《AI系统安全指南配套手册》看可信AI全生命周期防护框架构建 一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术以前所未有的速度蓬勃发展,已然成为推动各行业变革与创新的核心驱动力。从医疗领域辅助疾病诊断,到金融行业的风险预测与智能投顾,再到交通领…

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…

HTMLS基本结构及标签

HTML5是目前制作网页的核心技术&#xff0c;有叫超文本标记语言。 基本结构 声明部分位于文档的最前面&#xff0c;用于向浏览器说明当前文档使用HTML标准规范。 根部标签位于声明部分后&#xff0c;用于告知浏览器这是一个HTML文档。< html>表示文档开始&#xff0c;&l…

eMMC存储器详解(存储区域结构、EXT_CSD[179]、各分区介绍、主要引脚、命令格式与类型等)

读本篇博文所需要的先行知识 关于芯片内部的ROM的作用、工作原理的介绍&#xff0c;链接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145969584 eMMC的物理结构、特点、用途 这个标题的相关内容见我的另一篇博文&#xff0c;博文链接如下&#xff1a…

杰和科技工业整机AF208|防尘+静音+全天候运行

在特殊的工业环境中&#xff0c;实现快速生产离不开各类工业计算机的强大支持。杰和科技工业计算机AF208&#xff0c;作为核心控制单元&#xff0c;凭借其坚固可靠的外壳、先进的散热技术以及紧凑灵活的部署特点&#xff0c;发挥着关键作用。 硬实力外壳&#xff0c;无惧尘埃 …

Lua | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…

Fiji —— 基于 imageJ 的免费且开源的图像处理软件

文章目录 一、Fiji —— 用于科学图像处理和分析1.1、工具安装&#xff08;免费&#xff09;1.2、源码下载&#xff08;免费&#xff09; 二、功能详解2.0、Fiji - ImageJ&#xff08;Web应用程序&#xff09;2.1、常用功能&#xff08;汇总&#xff09;2.2、Fiji - Plugins&am…

PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()

在 Qt 中&#xff0c;QWidget 类提供了几种不同的上下文菜单策略&#xff0c;这些策略通过 Qt::ContextMenuPolicy 枚举类型来定义&#xff0c;用于控制控件&#xff08;如按钮、文本框等&#xff09;在用户右键点击时如何显示上下文菜单。 以下是 Qt::ContextMenuPolicy 枚举中…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1.2.2倒排索引原理与分词器&#xff08;Analyzer&#xff09;1. 倒排索引&#xff1a;搜索引擎的基石1.1 正排索引 vs 倒排索引示例数据对比&#xff1a; 1.2 倒排索引核心结…

Springboot项目本地连接并操作MySQL数据库

目录 前提 准备工作 用cmd在本地创建数据库、表&#xff1a; 1.创建springboot项目&#xff08;已有可跳过&#xff09; 2.编辑Mybatis配置 3.连接数据库 4.创建模型类&#xff0c;用于与数据库里的数据表相连 5.创建接口mapper&#xff0c;定义对数据库的操作 6.创建…

java和Springboot和vue开发的企业批量排班系统人脸识别考勤打卡系统

演示视频&#xff1a; https://www.bilibili.com/video/BV1KU9iYsEBU/?spm_id_from888.80997.embed_other.whitelist&t52.095574&bvidBV1KU9iYsEBU 主要功能&#xff1a; 管理员管理员工&#xff0c;采集员工人脸特征值存入数据库&#xff0c;可选择多个员工批量排班…

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Docker引擎停止三、解决方法 1、检查服务是否…

Mercury、LLaDA 扩散大语言模型

LLaDA 参考&#xff1a; https://github.com/ML-GSAI/LLaDA https://ml-gsai.github.io/LLaDA-demo/ 在线demo&#xff1a; https://huggingface.co/spaces/multimodalart/LLaDA Mercury 在线demo&#xff1a; https://chat.inceptionlabs.ai/ 速度很快生成

Rust~String、str、str、String、Box<str> 或 Box<str>

Rust语言圣经中定义 str Rust 语言类型大致分为两种&#xff1a;基本类型和标准库类型&#xff0c;前者由语言特性直接提供&#xff0c;后者在标准库中定义 str 是唯一定义在 Rust 语言特性中的字符串&#xff0c;但也是几乎不会用到的字符串类型 str 字符串是 DST 动态大小…

计算机网络——详解TCP三握四挥

文章目录 前言一、三次握手1.1 三次握手流程1.2 tcp为什么需要三次握手建立连接&#xff1f; 二、四次挥手2.1 四次挥手流程2.2 为什么是四次&#xff0c;不是三次&#xff1f;2.3 为什么要等待2msl&#xff1f;2.4 TCP的保活计时器 前言 TCP和UDP是计算机网络结构中运输层的两…

科普|无人机专业术语

文章目录 前言一、飞控二、电调三、通道四、2S、3S、4S电池五、电池后面C是什么意思?六、电机的型号七、什么是电机的KV值?八、螺旋桨的型号九、电机与螺旋桨的搭配 前言 无人机飞控系统控制飞行姿态&#xff0c;电调控制电机转速&#xff0c;遥控器通道控制飞行动作。电池C…

和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设

气象领域与农业、能源、交通、环境科学等国计民生关键领域紧密相连&#xff0c;发挥着不可替代的重要作用。人工智能技术的迅猛发展&#xff0c;为气象领域突破困境带来了新的契机。AI 技术能够深度挖掘气象大数据中蕴含的复杂信息&#xff0c;助力人类更精准地把握自然规律&am…

Redis缓存一致性难题:如何让数据库和缓存不“打架”?

标题&#xff1a;Redis缓存一致性难题&#xff1a;如何让数据库和缓存不“打架”&#xff1f;&#xff08;附程序员脱发指南&#xff09; 导言&#xff1a;当数据库和缓存成了“异地恋” 想象一下&#xff1a;你刚在美团下单了一份麻辣小龙虾&#xff0c;付款后刷新页面&#…

委托者模式(掌握设计模式的核心之一)

目录 问题&#xff1a; 举例&#xff1a; 总结&#xff1a;核心就是利用Java中的多态来完成注入。 问题&#xff1a; 今天刷面经&#xff0c;刷到装饰者模式&#xff0c;又进阶的发现委托者模式&#xff0c;发现还是不理解&#xff0c;特此记录。 举例&#xff1a; ​老板​…

[密码学实战]Java实现SM4加解密(ecb,cbc)及工具验证

前言 在现代信息安全领域,数据加密技术是保障数据安全的核心手段之一。SM4作为中国国家密码管理局发布的对称加密算法,因其高效性和安全性,广泛应用于金融、政务、通信等领域。本文将详细介绍如何使用Java实现SM4的加解密操作,并深入探讨SM4的几种常见加密模式及其原理。 …