![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串匹配
摩尔の
主要方向C/C++后台开发,目前正在向软件驱动开发转型。
什么都懂一点,又什么都不懂。
展开
-
字符串匹配——Sunday算法
1.Sunday算法是什么?Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。2.描述Sunday算法的优点主要体现在以下2点:1)当主串匹配至第3个元素失败时,如下图:此时,模式串的P[2]=T[5],因此直接移动模式串,将i=5和j=2的元素进行比较。移动的步长 = plengt.原创 2021-09-07 14:14:02 · 368 阅读 · 2 评论 -
字符串匹配——BM算法
1.BM算法是什么?BM算法是一种非常高效的字符串搜索算法。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。2.BM算法实现BM算法实际上是在简单的后缀匹配算法的基础上,添加坏字符(__Bad_Char)和好后缀(__Good_Suffix)原则,实现加速移动字符串的速度。/.原创 2021-09-07 10:06:18 · 606 阅读 · 0 评论 -
字符串匹配——KMP算法
1.KMP算法是什么?KMP算法是一种改进的字符串匹配算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。2.描述相比简单匹配算法,KMP算法的优点主要体现在以下2点:1)当主串匹配至第5个元素失败时,如下图:此时,模式串的next[4]=0,因此直接移动模式串,将i=4和k=0的元素进行比较2)当主串匹配至第5个元素失败时,如下图:模式串的next[4]=1,因此.原创 2021-09-03 15:41:37 · 342 阅读 · 0 评论 -
字符串匹配——KR算法
1.RK算法是什么?RK算法,在简单模式匹配算法的基础上,引入字符串hash计算,避免了对字符串的重复比较。2.描述RK算法的原理如下:计算匹配串和主串一定长度子串的hash值。若2个hash值一致,则从当前索引向后,逐字比较主串和匹配串。否则,主串索引+1,重新计算当前hash,重复步骤2。3.示例/* * RK匹配 */char *RK(char *text, char *pattern) { if (text == NULL) return NULL; int t.原创 2021-09-02 14:17:47 · 465 阅读 · 0 评论 -
字符串匹配——BF算法
1.简单模式匹配是什么?简单模式匹配,即两个字符串像物流传送带一般,主串固定,子串一步步像前移动,一位位匹配比较,直到完全匹配找到想要的结果的位置。2.描述简单模式匹配的原理如下:从主串text[i]和字串pattern[j]开始向后遍历。若字符匹配,则索引向后移动。否则,主串回退至第一个匹配的位置 + 1,子串回退至起始位置。3.示例/* * 简单模式匹配 */char *_strstr(char *text, char *pattern) { if (text == N.原创 2021-09-01 17:08:13 · 595 阅读 · 0 评论