基础字符串算法及其运用

哈希

哈希的思想是构造一个映射,将定义域内的不好刻画的元素
(字符串等)映射成较易刻画的整数。
判断两个在$ 2^{64}$以内的数是否相同是容易的,那么我们的问题就是将数组到树构造这个映射。
考虑哈希冲突的概率,由于base是我们任取的,而P又是一个素数。所以若发生
取模,那么我们可以将其看做一个在 [0,P) 均匀独立随机的数。
对于两个不同的,未取模的状态,他们的哈希值显然不会相
等。对于两个取模过后的状态,由于他们都是独立生成的,所以
冲突的概率为 \(1/p\),这是很小的。

字典树(Trie)

字典树,英文名 trie。顾名思义,就是一个像字典一样的树。

这棵字典树用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。

字典树最基础的应用——查找一个字符串是否在「字典」中出现过。

01字典树

他的核心思想是将一个数看作一个二进制下的01字符串,串长不超过\(log2\)V。除此之外,他和普通的字典树没有什么本质区别。

kmp

数组的前缀和后缀的最大公共部分,由数组\(next[i]\)记录长度为\(i\)时的长度
\(kmp\)正是通过\(next\)数组来求的,我们求到两个数组不同时,第一个数组就跳到下一次出现前缀的地方,正是这,优化了时间复杂度

posted @ 2025-08-05 22:32  ᝰꫛꫀꪝ_yqy  阅读(15)  评论(0)    收藏  举报
/**手机适配**/ @media only screen and (max-width: 767px) { header{width:100%} .banner{width: 100%;height: 100px;} .avatar{width: 80px;height: 80px;margin: 6px;} .avatar a{padding-top: 59px;width: 80px;height: 80px;background-size: 80px 78px;} .avatar a span{margin-top: 0px; padding-top: 0px; width: auto;height: auto;} .bloglist h3 {margin: 20px 0 10px 10px;} .bloglist figure {width:auto;margin-left: 4px;} .bloglist figure img {width: 90px;height: 60px;} .bloglist ul{width:64%} .dateview {width:100%;padding-left:4px;} .dateview span {margin: 0 3px;} .weixinnone,.thumbs{display: none} .right{width: 100%;margin-top: 22px} .right ul{width:64%;margin-left: 22px;} .weather{margin: 20px 50px;} .bloglinkli{display: block} footer{width:100%} }