首页 > 其他分享 >#1.字符串哈希学习笔记

#1.字符串哈希学习笔记

时间:2024-08-18 22:04:17浏览次数:13  
标签:wiki 字符 hash 笔记 Base 哈希 字符串

“十分简单易懂的字符串哈希教程”

字符串哈希

0x01.什么是哈希

定义(摘自OI wiki)[https://oi-wiki.org/string/hash/]>

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

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

人话:

把字符串以特定的方式表示为一串数,可以直接通过比较这一串数来判断字符串是否(相等/不同)。

0x02.为什么要哈希

——复杂度优化

我们记字符串长度为L,显然,直接比较是O(L)的,但如果将字符串以特定的方式映射为整数,那么就可以O(1)比较,大大节约了时间(祖传空间换时间awa)

0x03.“特定的方式”

我们不妨用S[i]表示字符串的各位字符,A(x)表示字符x对应的ASCII值

十分粗糙与简陋的思路:

容易想到将A(S[i])乘以一个正整数(Base),再将各位加起来。
hash+=s[i]*Base

太弱了

Hack:对于任意A(S[m])+A(S[n])=A(S[i])的,甚至只需要相同字符,排列方式不同的字符串都能使上述哈希失去正确性。这种情况我们称其为哈希冲突

0x04.哈希冲突

标签:wiki,字符,hash,笔记,Base,哈希,字符串
From: https://www.cnblogs.com/Ydoc770/p/18366191

相关文章

  • 学习笔记 韩顺平 零基础30天学会Java(2024.8.14)
    P500集合体系图     单列集合是指自己只有一个值,双列集合是像键值对这样的P501Collection方法     对于第三点,像Set这样的,存放进去的和取出来的顺序可能不是一样的,所以就叫无序的P502迭代器遍历在调用iterator.next()方法之前必须要调用iterator.ha......
  • web前端之根据字符串长度从长到短排序、中文字符串优先、样式循环、禁止冒泡、悬浮、
    MENU前言效果图htmlstyleJavaScript前言1、代码段由HTML、CSS(使用Sass语法)和JavaScript组成,创建一个文本框,用户可以在其中输入内容,并通过点击按钮进行操作。2、代码段的主要功能是允许用户输入一系列以、分隔的项,并根据长度对这些项进行排序(中文字符优先),然后......
  • 面向对象三大特征(三)—多态学习笔记
    1.概述:多态是指在继承/实现情况下的一种现象,表现为:对象多态、行为多态。(1)对象多态:同一个对象(事物),可以以不同形态呈现。 (2)行为多态:同一行为,有不同表现。 2.多态的前提:(1)有继承/实现关系(2)存在父类引用子类对象(3)存在方法重写3.注意事项:多态是对象、行为的多态,Java中......
  • Intellij IDEA学习笔记
    1.工具介绍:为常见的JavaIDE(集成开发环境)工具,把代码编写、编译、执行多种功能综合到一起的开发工具,有代码提示、错误提醒等功能。2.下载安装:官网下载,推荐下载旗舰版。3.IDEA管理Java程序的结构:①project(项目、工程)②moduel(模块)③package(包)④class(类)4.新建项目:......
  • Java基础语法学习笔记
    1.注释:在程序中用于解释说明的文字,不影响程序执行使用快捷键也可以进行注释2.字面量:数据在程序中的书写格式,字面量可以理解为值特殊的字符:\n,\t3.变量:变量是用来记住程序要处理的数据。(其实可以理解为一个装数据的盒子)(1)定义格式:数据类型变量名称=数据(2)变量......
  • 洛谷P1083 [NOIP2012 提高组] 借教室 && 差分学习笔记
    传送门:P1083[NOIP2012提高组]借教室"八骏日行三万里,穆王何事不重来。"可惜啊,他再也没有回来……题目大意:给你每天能够租借的教室数量和几份租借申请每份申请包含租界时间(从第几天到第几天)和每天需要租借的教室数量问你能否满足所有的租借要求,如果不能,驳回一份最前......
  • 不可变字符串string的相关操作
    staticvoidMain(string[]args){//截取字符串stringstr1="ABCDEFGHIJKLMN";stringstr2=str1.Substring(0,4);//从0位开始截取,共截取4位;Console.WriteLine(str2);Console.WriteLin......
  • 浅谈哈希长度扩展攻击
    攻击原理:我们首先需要了解一下MessageAuthenticationcodes(MACs),称为消息验证码,一般用于服务器验证消息的真实性。服务器把密钥和消息连接起来,用摘要算法获取摘要,对于H(secret+data)此类构造的散列函数,在密钥长度****和数据已知的情况下,通常可以使用哈希长度扩展攻击。......
  • Leetcode每日一题 20240817 3137.K周期字符串需要的最少操作次数
    题目描述给你一个长度为n的字符串word和一个整数k,其中k是n的因数。在一次操作中,你可以选择任意两个下标i和j,其中0<=i,j<n,且这两个下标都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。也就是说,将子串word[i…i+k......
  • 初识指针2の学习笔记
    目录1>>前言2>>野指针2.1>>野指针是如何形成的?2.2>>那么我们如何规避野指针呢?3>>assert断言4>>指针的传地址调用5>>数组名的理解6>>数组and指针的等价打印7>>结语1>>前言    今天我会继续分享一些我做的笔记,以及我对指针的理解,后续会持续分享指针几天,......