当前位置: 首页 > news >正文

字符串基础

字符串Hash

我们定义一个把字符串映射到整数的函数 \(f\) ,这个 \(f\) 称为是 \(Hash\) 数。

我们希望这个函数 \(f\) 可以方便地帮我们判断两个字符串是否相等。

基础公式:

$f(s)= {\textstyle \sum_{i=1}^{l}} s[i] \times b^{l-i} $ \((mod\) \(m)\)**

哈希冲突

指在一定模数下,两个不同的字符串映射到相同\(Hash\)值。

我们设 \(Hash\) 的取值空间(所有可能出现的字符串的数量)为\(d\),计算次数(要计算的字符串数量)为\(n\)

\(Hash\) 冲突的概率为:

\(p(n,d)=1-\frac{d!}{d^n(d-n)!}\approx 1-exp(-\frac{n(n-1)}{2d})\)

赛场常用技巧

  1. 自然溢出:使用\(unsigned\) \(long\) \(long\)定义\(Hash\)值变量,此时模数为\(2^{64}\),优点是方便、代码简单,缺点是极其容易被卡,详见oi-wiki。

  2. 双值\(Hash\):同时使用两种不同模数求出一个字符串的\(Hash\)值。当两个字符串相同时,两值必定都相同。优点是不容易被卡、应对赛场环境足以,缺点是代码复杂。

  3. 多次询问\(Hash\)值:令\(f_i(s)\)表示字符串\(s\)的长度为\(i\)的前缀的\(Hash\)值,可以得到\(f(s[l..r])=f_r(s)-f_{l-1}(s)\times b^{r-l+1}\)成立。

  4. 二分求最长公共子字符串

常用\(Hash\)

  1. 998244353

  2. 1000000007

  3. 19260817

  4. 自然溢出

http://www.rkmt.cn/news/12818.html

相关文章:

  • Kubernetes 进阶实战:CRD、Gateway API 与优先级调度 - 实践
  • 单片机 -- USART总线 - 实践
  • 题解:P11667 [USACO25JAN] Astral Superposition B
  • 北极通讯网络题解(做题记录)
  • 个人学习——前端react项目框架
  • 软件基础第一次作业
  • 7、revision 是 Maven 3.5+ 引入的现代版本管理机制 - 实践
  • 如何有效提升代码覆盖率:从单元测试到集成测试的实践指南
  • 深入解析:SSM网络游戏交易系统a9n72(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 调度器的各项指标以及计算方式
  • ​CentOS 7 安装 net-tools.rpm 包步骤详解(附 rpm 命令和 yum 方法)​附安装包
  • 29.Linux防火墙管理 - 详解
  • 昇腾多机推理极速上手:10倍简化的 DeepSeek R1 超大规模模型部署
  • B站油管抖音一键笔记
  • 对于Hash冲突的处理
  • 完整教程:事件驱动与CDS:基于FHIR R5 Subscriptions与Bulk Data的再考察(上)
  • 进程调度的时机,切换与过程
  • 网站多媒体加载卡顿?视频压缩 + 音频优化,加载速度提升 75% 的实操方法 - 实践
  • 用 Zig 实现英文数字验证码识别
  • 完整教程:数组(Java基础语法)
  • 深入解析:python+django/flask哈利波特书影音互动科普网站
  • 深入解析:CodeForces479A-Expression(数学+枚举)
  • 英语_阅读_Robot
  • 深入解析:PyTorch张量切片的陷阱:视图与副本
  • 英语_阅读_Industry 4.0_待读
  • Python获取CPU和内存使用率
  • 深入解析:实战:基于 BRPC+Etcd 打造轻量级 RPC 服务——从注册到调用的核心架构与基础实现
  • 完整教程:从另一个视角看Transformer:注意力机制就是可微分的k-NN算法
  • ACM 杂题选做 题解合集
  • Kubernetes技巧:使用Prometheus监控Pod性能指标