【模式匹配】之 —— Sunday算法
本文代码下载地址
Sunday算法思路
Sunday算法的思想和BM算法中的坏字符思想非常类似。
完整的Sunday算法
#include <stdio.h>
#include <string.h>bool BadChar(const char *pattern, int nLen, int *pArray, int nArrayLen)
{if (nArrayLen < 256){return false;}for (int i = 0; i < 256; i++){pArray[i] = -1;}for (int i = 0; i < nLen; i++){pArray[pattern[i]] = i;}return true;
}int SundaySearch(const char *dest, int nDLen,const char *pattern, int nPLen,int *pArray)
{if (0 == nPLen){return -1;}for (int nBegin = 0; nBegin <= nDLen-nPLen; ){int i = nBegin, j = 0; for ( ;j < nPLen && i < nDLen && dest[i] == pattern[j];i++, j++);if (j == nPLen){return nBegin;}if (nBegin + nPLen > nDLen){return -1;}else{nBegin += nPLen - pArray[dest[nBegin+nPLen]];}}return -1;
}void TestSundaySearch()
{int nFind;int nBadArray[256] = {0};// 1 2 3 4//0123456789012345678901234567890123456789012345678901234const char dest[] = "abcxxxbaaaabaaaxbbaaabcdamno";const char pattern[][40] = {"a","ab","abc","abcd","x","xx","xxx","ax","axb","xb","b","m","mn","mno","no","o","","aaabaaaab","baaaabaaa","aabaaaxbbaaabcd","abcxxxbaaaabaaaxbbaaabcdamno",};for (int i = 0; i < sizeof(pattern)/sizeof(pattern[0]); i++){BadChar(pattern[i], strlen(pattern[i]), nBadArray, 256);nFind = SundaySearch(dest, strlen(dest), pattern[i], strlen(pattern[i]), nBadArray);if (-1 != nFind){printf("Found \"%s\" at %d \t%s\r\n", pattern[i], nFind, dest+nFind);}else{printf("Found \"%s\" no result.\r\n", pattern[i]);}}}int main(int argc, char* argv[])
{TestSundaySearch();return 0;
}
输出结果:
Found "a" at 0 abcxxxbaaaabaaaxbbaaabcdamno
Found "ab" at 0 abcxxxbaaaabaaaxbbaaabcdamno
Found "abc" at 0 abcxxxbaaaabaaaxbbaaabcdamno
Found "abcd" at 20 abcdamno
Found "x" at 3 xxxbaaaabaaaxbbaaabcdamno
Found "xx" at 3 xxxbaaaabaaaxbbaaabcdamno
Found "xxx" at 3 xxxbaaaabaaaxbbaaabcdamno
Found "ax" at 14 axbbaaabcdamno
Found "axb" at 14 axbbaaabcdamno
Found "xb" at 5 xbaaaabaaaxbbaaabcdamno
Found "b" at 1 bcxxxbaaaabaaaxbbaaabcdamno
Found "m" at 25 mno
Found "mn" at 25 mno
Found "mno" at 25 mno
Found "no" at 26 no
Found "o" at 27 o
Found "" no result.
Found "aaabaaaab" no result.
Found "baaaabaaa" at 6 baaaabaaaxbbaaabcdamno
Found "aabaaaxbbaaabcd" at 9 aabaaaxbbaaabcdamno
Found "abcxxxbaaaabaaaxbbaaabcdamno" at 0 abcxxxbaaaabaaaxbbaaabcdamno
本文代码下载地址
【模式匹配】之 —— Sunday算法相关推荐
- 【算法】Sunday算法(模式匹配)
#背景 Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配.相对比较KMP和BM算法而言,简单了许多. #原理 平均性能的时间复杂度为O(n): 最差情况的时间复杂度为O ...
- 浅析 Sunday 算法
背景 Sunday 算法是 Daniel M.Sunday 于 1990 年提出的字符串模式匹配. 其效率在匹配随机的字符串时比其他匹配算法还要更快.Sunday 算法的实现可比 KMP,BM 的实现 ...
- BF、KMP、BM、Sunday算法讲解
原文地址: https://www.cnblogs.com/Syhawk/p/4077295.html BF.KMP.BM.Sunday算法讲解 字串的定位操作通常称作串的模式匹配,是各种串处理系统中 ...
- Sunday算法java实现
简介 Daniel M.Sunday于1990年提出的字符串模式匹配.其效率在匹配随机的字符串时比其他匹配算法还要更快,同时其实现方式比KMP,BM的实现容易太多. 算法原理 作为一个字符串模式匹配算 ...
- Java实现Sunday算法
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配.其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率.相比于 ...
- Sunday 算法详解
Sunday 算法 Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配.其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提 ...
- Sunday算法介绍及Java实现
前言 最初想写这篇文章的原因是在LeetCode上看到了一道实现strStr函数的题: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haysta ...
- sunday算法特征码_sunday 算法
sunday 算法 编辑 锁定 Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配.其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的 ...
- sunday算法c语言实现,C / C++学习笔记:实现Sunday算法
Sunday算法 Sunday 算法于 1990 年 Daniel M.Sunday 提出的字符串模式匹配.其效率在匹配随机的字符串时比其他匹配算法还要更快.Sunday 算法的实现可比 KMP,BM ...
最新文章
- JScrollPane 双滚动条
- spring mvc + freemarker 整合
- 算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)
- 为什么1000 == 1000返回为False,而100 == 100会返回为True?
- Jetty架构解析及应用示例
- HTTP协议快速入门
- 如何解决python中编码错误的问题_【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法...
- linux下多线程之pthread_detach(pthread_self())
- 百度无人巴士阿波龙首次面向公众开放试乘
- 信息学奥赛一本通 1150:求正整数2和n之间的完全数
- Windows 2000安装和配置RIS服务
- 程序—java记事本
- linux 标准函数注释,Linux 驱动程序中相关函数注释汇总(跟新中)
- DensePose开源了,2D变3D人体姿势实时识别 | Facebook@CVPR 2018
- Android 实时数据库工具Database Inspector
- Datalogic得利捷携突破性无线充电技术推出三款最新产品
- 原创 | 罗勇:立足敏捷开放,推动直销银行向智能银行迈进
- 深度学习 (一)计算机如何处理和识别图片揭秘
- 数组、链表、LinkedList源码分析、跳表
- ACM入门及STL简介