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

`算法知识` 字符串哈希

catalog

  • 经验谈
    • 映射从1开始
    • 字符串的哈希冲突
  • 代码模板
  • 字符串哈希


经验谈


映射从1开始

假如是从0开始映射, 则abc 和 bc, 他们的对应的P进制是: (0) (1) (2) 和 (1) (2)

如果采用(前高位)的哈希顺序, 则他们对应的10进制值都是: (1 * P + 2), 就冲突了;

其原因在于: 两者的长度不同; 如果长度相同, 不会出现: 前导零的情况;

一般, 最好都从(1)开始映射


字符串的哈希冲突

由于字符串哈希, 不像整数哈希是有探测法(即整数哈希 不会出现哈希冲突, 探测法解决了这点)

而字符串哈希没有探测法, 因此, 字符串哈希是会发生冲突的; 假如他发生冲突, 目前是没有解决办法的!

只能去尝试更换: 字符串哈希的取模值: 将(默认的1e9+7) 改为: (1e9 + 21)


代码模板


字符串哈希

原理: 两个不同的P进制数, 他对应的十进制数, 是不同的;

假如P = 26, 两个P进制数: (a1) (a2) (a3) 和 (b1) (b2) (b3)
如果存在: ai != bi, 那么其对应的10进制数, 即(a1 * P^2 + a2 * P + a3)是不同的

这就像是, 假如P为熟悉的十进制, 那么(012) 和 (022)是不同的;

因此, 对于一个P进制数(也可以看做是一个P进制字符串), 他所对应的十进制数, 就称为他的(哈希值)


基于此, 假如一个字符串有P个不同的字符, 则对应一个P进制, 每个字符映射到[0, P)之中
由于其对应的十进制数, 会爆出LL, 需要使用取模操作;

相关文章:

  • 打造这样的“超级云APP”有什么优势?
  • 一篇文章带你理解Thread(多线程)的基础用法
  • harbor部署实录
  • 计算机毕业设计ssmEE的仓库管理系统93c6b系统+程序+源码+lw+远程部署
  • MySQL group by后取每个分组中最新一条数据
  • JVM:(十六)垃圾回收器
  • 节点流和处理流详解
  • MySQL binlog 数据恢复
  • ArcGIS中添加在线地图(影像图、街道图等)
  • Opencv图像模板匹配
  • c语言进阶: 指针的进阶(上)
  • python使用PIL模块加载图像、通过resize函数改变图像的大小、使用save函数保存处理过的图像
  • Python点云显示:open3d快速上手
  • vue转electron项目以及使用fs报错:Module not found: Error: Can‘t resolve ‘fs‘ in解决办法
  • 【MATLAB教程案例14】基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用
  • JavaScript-如何实现克隆(clone)函数
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • css属性的继承、初识值、计算值、当前值、应用值
  • ES6 学习笔记(一)let,const和解构赋值
  • FastReport在线报表设计器工作原理
  • HTTP那些事
  • JavaScript设计模式系列一:工厂模式
  • Java到底能干嘛?
  • Lsb图片隐写
  • MD5加密原理解析及OC版原理实现
  • Object.assign方法不能实现深复制
  • Redis在Web项目中的应用与实践
  • Redis中的lru算法实现
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Unix命令
  • Webpack 4 学习01(基础配置)
  • WePY 在小程序性能调优上做出的探究
  • 跨域
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前嗅ForeSpider采集配置界面介绍
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • Semaphore
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​ubuntu下安装kvm虚拟机
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #mysql 8.0 踩坑日记
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)bark-ml
  • (7)STL算法之交换赋值
  • (9)目标检测_SSD的原理
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C++)八皇后问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)JAVA使用POI操作excel