字符串匹配Sunday算法C++实现
来源:互联网 发布:java message类 编辑:程序博客网 时间:2024/05/17 02:09
模式匹配算法都需要一个源串的滑动指针i和模式串的滑动指针j。普通的匹配算法在字符失配时需要同时回溯i和j,复杂度为o(m*n)。而改进的KMP匹配算法算法就是在失配时不回溯源串指针i,只回溯j到最长前缀处使得复杂度达到哦o(n)。而Sunday算法不仅不回溯i,而且可以使i跨越模式串前进,进一步降低复杂度,而且如果不谈Sunday算法的原理,单就算法本身和实现来讲要比KMP算法简单很多,更加容易理解。KMP算法的关键NEXT数组的创建对于刚接触的人来说还是有一定的理解难度的。关于KMP算法,见上一篇博文KMP字符串匹配算法的分析实现。下边是Sunday算法的流程:
1. i,j分别指向源串和模式串首, m指向源串中与模式串长度相等的后一位置m= i + pattern.size();
2. 滑动i,j, j == pattern.size() - 1,则返回,失配则执行3
3. 向右滑动模式串直到找到一个与m匹配的位置,重新设置i为当前与模式串首字符对齐的字符在源串的位置, m= i + pattern.size(),执行2
算法的图示和示例Sunday算法百度百科 讲的非常详细。接下来贴上简单的算法实现:
int SundaySearch(string text, string pattern){ int i = 0, j = 0, k; int m = pattern.size(); if(pattern.size() <= 0 || text.size() <= 0) return -1; for(; i<text.size();) { if(text[i] != pattern[j]) { for(k=pattern.size() - 1; k>=0; k--) { if(pattern[k] == text[m]) break; } i = m-k; j = 0; m = i+pattern.size(); } else { if(j == pattern.size()-1) return i-j; i++; j++; } } return -1;}
1 0
- 字符串匹配--Sunday算法-C语言实现
- 字符串匹配Sunday算法实现
- 字符串匹配Sunday算法实现
- Sunday字符串匹配算法,java实现
- 字符串匹配Sunday算法C++实现
- 字符串匹配Sunday算法C++实现
- 字符串匹配sunday算法java实现
- 字符串匹配算法Sunday实现(二)
- 字符串匹配---Sunday算法
- 字符串匹配Sunday算法
- 字符串匹配-sunday算法
- 字符串匹配--Sunday算法
- 字符串匹配 sunday算法
- 字符串匹配sunday算法
- Sunday 字符串匹配算法
- Sunday字符串匹配算法
- 字符串匹配-Sunday算法
- sunday 字符串匹配算法的实现(支持二进制匹配)
- Hadoop的Partitioner
- scp总结
- 小白学习R语言——R函数
- List (迭代器)
- Java使用List作冒泡排序
- 字符串匹配Sunday算法C++实现
- IOS 内部测试与开发账号
- 推荐算法学习笔记一
- Android学习笔记----在一个应用程序中启动另一个应用程序
- Java/Android中线程池的应用
- [2009国家集训队]小Z的袜子(hose)(莫队算法)
- 02-2016面试准备
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
- question_019-JAVA之Map之TreeMap案例