首页 > 其他分享 >字符串 hash

字符串 hash

时间:2024-03-26 17:46:30浏览次数:20  
标签:判断 hash WA LCP strash 字符串

(由于字符串 hash 和整数 hash 是两个东西,以下将字符串 hash 称作 strash)

前情提要:

strash:我来!(非常好数据,使我的 strash WA 掉)

strash 是什么?strash 有什么用?该如何避免上述情况?

strash 是什么

strash 的原理其实很简单:

将一个字符串当作 \(b\) 进制数。

So you wrote a wrong code because of this $\LARGE{b > |\Sigma|}$

注意不是 \(\large{\ge}\)!

我的建议是第 \(i\) 个字符的位权为 \(b^{i - 1}\)(静态位权,方便维护)。

strash 有什么用

以下应用均不包含预处理 \(O(N)\) 时间。

\(O(1)\) 判断两个字符串相等

直接 strash 然后判断相等即可。

\(O(\log N)\) 判断两个字符串的字典序谁大谁小和求 LCP

二分 LCP,strash 判断相等,最后比较后面一个字符的大小。

同理还可以在 \(O(N \log N)\) 时间内判断某个字符串在另一个字符串中的出现位置(KMP:???)。

该如何避免“非常好数据,使我的 strash WA”

猜猜看,一个房间内至少有多少个人才能使得有至少 \(\dfrac{1}{2}\) 的 概率有两个人的生日相同(不考虑年份)?

答案其实令人惊讶:只需要 \(23\) 个。

所以,strash 的错误率还挺高的。

下面提供两种解决这个问题的方法(多选):

  1. 开大模数。更大的模数会使你的失误率变得更小。

  2. 多重哈希。一个 strash 的失误率可能很大,但是如果你开到 5 个甚至 15 个,心力交瘁的就是 hacker 了。

最后,祝大家 for(;;){rp += LLONG_MAX;}

标签:判断,hash,WA,LCP,strash,字符串
From: https://www.cnblogs.com/hhc0001deljbk/p/18097032

相关文章

  • js使用正则从字符串中取出img标签
    要使用正则表达式从字符串中提取<img>标签,您可以使用以下代码:conststr=`Sometext<imgsrc="image.jpg"alt="Image">andmoretext<imgsrc="another.png"alt="Another">`;constregex=/<img[^>]*>/g;constimgTags......
  • 字符串中的第一个唯一字符
    题目:给定一个字符串s,找到它的第一个不重复的字符,返回它的索引 。如果不存在,则返回-1。代码:classSolution{public:intfirstUniqChar(strings){intsize=s.size();intindex=-1;//用unordered_map集合存取键值对unorder......
  • 字符串
    基础使用#获取字符串中的某一个字符s[0]s[1]#字符串的索引从0开始,切片s[0]取出第0个位置的字符s[2:7]取出第2-6位置的字符s[2:]取出第2个字符及其后面的所有字符s[:2]取出0-1位置的字符s[::]输出所有字符串s[::-1]反向输出所有字符串s*n将字符串......
  • 【python】字符串(Str)
    字符串是python中最常用的数据类型,在整个变成阶段都起到了关键性的作用。目录前言正文一、字符串的定义二、字符编码转换1、编码的历史(了解即可)2、字符串的编码转换    1)、encode()    2)、 decode()三、转义字符四、字符串的基本操作1、访......
  • 字符串逆序
    文章目录一、字符串?二、思路三、运行代码 一、字符串?在C语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。二、思路从左++和右--到中间。赋值最左边和最右边给指针left、right,然后通过left++、right--进行逆序。......
  • java------字符串
    Java中字符串理解:1.字符串不可变,它们的值在创建后不能被更改。这里说的是,他们的值而不是地址值。 当我们使用Strings=“hello”;语句创建字符串的时候,首先会去常量池中查找,如果有,就返回这个常量的地址,如果没有,在常量池中创建并返回。world也是这样的。比如这里的“hello”......
  • 学点儿Java_Day10_集合框架(List、Set、HashMap)
    1简介ArrayList:有序(放进去顺序和拿出来顺序一致),可重复HashSet:无序(放进去顺序和拿出来顺序不一定一致),不可重复 @Testpublicvoidtest1(){String[]array=newString[3];//List:有序可重复//有序:放入顺序与拿出顺序......
  • HashMap---数据结构
    目录一、基本数据结构二、树化与退化三、索引计算四、put方法和扩容五、并发问题六、key的设计一、基本数据结构        在jdk1.7版本的时候,hashmap结构主要是使用数组+链表的格式,而在jdk1.8版本中,hashmap的数据结构增加了一种“红黑树”的结构,即数组+(......
  • R语言中拆分长字符串
     00196,GO:0051093,GO:0051094,GO:0051171,GO:0051172,GO:0051173,GO:0051239,GO:0051240,GO:0051241,GO:0051246,GO:0051247,GO:0051248,GO:0051252,GO:0051254,GO:0051704,GO:0051716,GO:0051896,GO:0051897,GO:0051960,GO:0051961,GO:0051962,GO:0055082,GO:0060147,GO:......
  • 蓝桥杯算法基础(29)字符串匹配(RabinKarp)(KMP)(前缀树,字典树,trie,后缀数组,高度数组)
     RabinKarpRabinKarpS:ABABABm个P:ABBn个1.朴素算法,挨个匹配2.哈希法hash->滚动哈希c0*31^2+c1*31^1+c2类似于进制的求法求hash值(c0*31+c1)*31+c2hash(p)=o(n)hash(s)=o(m*n)privatestaticvoidmatch(Stringp,Strings){longhash_p=hash(p);......