`
kmplayer
  • 浏览: 510171 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Sunday算法

阅读更多
1,Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法。

2,Sunday算法其实思想跟BM算法很相似,只不过Sunday算法是从前往后匹配,在匹配失败时关注的是文本串中参加匹配的最末位字符的下一位字符。如果该字符没有在匹配串中出现则直接跳过,即移动步长= 匹配串长度+ 1;否则,同BM算法一样其移动步长=匹配串中最右端的该字符到末尾的距离+1。

3,举例:

匹配串:abcbczdxzc
模式串:zbcac

这里我们看到z-a没有对上,我们就看匹配串中的z在模式串的位置,然后对齐。
匹配串:abcbczdxzc
模式串:         zbcac

如果模式串中的没有那个字符的话就跳过去。
匹配串:abcbcedxzcs
模式串:zbcac
e不在模式串中出现,那么我们就
匹配串:abcbcedxzcs
模式串:           zbcac

4,实例代码:
#include <iostream>
#include <cstring>
using namespace std;

int sunday(const char* src, const char* des)
{
	int len_s = strlen(src);
	int len_d = strlen(des);
	int next[26] = {0};
	for (int j = 0; j < 26; ++j)
		next[j] = len_d + 1;
	for (int j = 0; j < len_d; ++j)
		next[des[j] - 'a'] = len_d - j; //记录字符到最右段的最短距离+1
	//例如:des = "abcedfb"
	//next = {7 1 5 4 3 2 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8}
	int pos = 0;
	while (pos < (len_s - len_d + 1)) //末端对齐
	{
		int i = pos;
		int j;
		for (j = 0; j < len_d; ++j, ++i)
		{
			if (src[i] != des[j])
			{
				pos += next[src[pos + len_d] - 'a'];
				//不等于就跳跃,跳跃是核心
				break;
			}
		}
		if ( j == len_d )
			return pos;
	}
	return -1;
}


int main()
{
    char src[]="abcdacdaahfacabcdabcdeaa";
    char des[]="abcde";
    cout<<sunday(src,des)<<endl;
    return 0;
}


分享到:
评论

相关推荐

    模式匹配之Sunday算法

    《模式匹配之Sunday算法详解》 在信息技术领域,模式匹配是一项基础且重要的任务,它广泛应用于文本搜索、生物信息学、网络安全等多个领域。其中,Sunday算法作为一项经典的字符串匹配算法,以其高效性和简洁性备受...

    字符串匹配算法之Sunday算法C++实现

    字符串匹配算法之Sunday算法C++实现

    Sunday算法特征码搜索极速定位基址和call地址C++(支持通配符)

    "Sunday算法特征码搜索极速定位基址和call地址C++(支持通配符)"这一主题涉及了程序逆向工程中的关键技术,主要是利用特定的算法来搜索内存中的特征码,以便快速找到代码的执行起点或者关键功能点,如函数调用地址...

    sunday算法

    ### Sunday算法概述 Sunday算法是一种高效的子字符串搜索算法,由Daniel Sunday提出,旨在解决子字符串在文本中的查找问题。此算法的设计目标是提高搜索效率,尤其是在处理大量文本数据时能够比传统的Boyer-Moore...

    sunday算法的c语言实现

    《Sunday算法的C语言实现详解》 在计算机科学领域,字符串搜索算法是处理文本数据时不可或缺的一部分。其中,Sunday算法,又称Sunday最短查找算法,是一种简单且高效的线性时间复杂度的字符串搜索方法。本篇文章将...

    BM算法和sunday算法相关的原始论文

    BM算法和sunday算法是两种高效且广泛应用的字符串搜索算法,它们在计算机科学,特别是文本处理和信息检索领域中占有重要地位。这两种算法都致力于解决在一个大文本中查找子串出现位置的问题,对于大量数据的处理具有...

    SUNDAY 算法的c#实现

    SUNDAY 算法 (初步想用它来做字符匹配度的标准) 参考:http://hi.baidu.com/blackcode/blog/item/583d1c38bb3621f3b211c7bd.html

    字符串匹配之Sunday算法(英文原版)

    ### Sunday算法概述 Sunday算法是一种高效的子字符串搜索算法,它比经典的Boyer-Moore算法在某些情况下表现更优。该算法由Daniel Sunday提出,并在实际应用中得到了广泛的采纳。 ### Sunday算法的基本思想 Sunday...

    Sunday算法实现

    字符串模式匹配算法 sunday算法实现。说到字符串匹配算法,立马就想到了KMP算法,谁让KMP这么经典呢,各种算法教材里必然有KMP啊。但是KMP算法太复杂了,比KMP更简单更高效的算法就是Sunday算法。

    Sunday字符串匹配算法

    - BM(Boyer-Moore)算法更注重预处理,通过坏字符规则和好后缀规则实现快速跳过部分字符,效率通常高于Sunday算法,但在某些特定情况下的性能可能不如Sunday算法。 总的来说,Sunday算法是一种高效的字符串匹配...

    C#,字符串匹配(模式搜索)Sunday算法的源代码

    Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行...

    字符串匹配算法 Sunday算法 C实现

    字符串匹配算法 Sunday算法 一种线性字符串模式匹配算法 C语言实现。

    java实现sunday算法示例分享

    Sunday算法是一种高效的字符串匹配算法,它的核心思想与Boyer-Moore算法中的坏字符规则有相似之处,但处理方式略有不同。在Sunday算法中,当匹配失败时,它不是像BM算法那样根据坏字符表来确定跳过的步数,而是考察...

    c#实现sunday算法实例

    Sunday算法,全称为Sunday's search algorithm,是一种字符串匹配算法,主要应用于快速查找一个长文本(主串)中是否存在一个特定的短字符串(模式串)。它与Bad Character Heuristic(坏字符规则)的BM(Boyer-...

    C/C++,判断索引超出了数组的界限的Sunday算法及其源代码

    C/C++,判断索引超出了数组的界限的Sunday算法及其源代码

    sunday.cpp

    用C++实现字符串模式匹配算法中的sunday算法

    PHP实现的字符串匹配算法示例【sunday算法】

    在众多字符串匹配算法中,Sunday算法是一种高效的模式匹配算法,它特别适合于对长文本串进行模式查找。Daniel M. Sunday在1990年提出了这一算法,它以其作者的名字命名,并且具有较好的平均性能表现。 ### Sunday...

Global site tag (gtag.js) - Google Analytics