C语言朴素模式匹配算法实例代码

 更新时间:2021年06月04日 10:47:49   作者:bfhonor  
朴素模式匹配算法也称为布鲁特-福斯算法,感觉很是高大上,但是实现起来很简单。这篇文章主要给大家介绍了关于C语言朴素模式匹配算法的相关资料,需要的朋友可以参考下

一、什么是字符串的模式匹配?

字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。

注意:

①、子串——主串的一部分,一定存在。

②、模式串——不一定能在主串中找到

 

二、朴素模式匹配算法

主串长度为n,模式串长度为m。

朴素模式匹配算法:将主串中所有长度为m的子串依次与模式串匹配对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。

最多对比n-m+1个子串

(一)通过数组下标实现朴素模式匹配算法

若当前⼦串匹配失败,则主串指针 i 指向下⼀个⼦串的第⼀个位置,模式串指针 j 回到模式串的第⼀个位置

j > T.length,则当前⼦串匹配成功,返回当前⼦串第⼀个字符的位置 —— i - T.length

int Index(SString S, SString T){
	int i=1,j=1;
	while(i <= S.length && j<=T.length){
		if(S.ch[i]==T.ch[j]){
			++i;
			++j;	//继续比较后继字符
		}
		else{
			i=i-j+2;
			j=1;	//指针后退重新开始匹配
		}
	}
	if(j > T.length)
		return i-T.length;
	else
		return 0;
}

(二)时间复杂度

设主串⻓度为 n,模式串⻓度为 m,则

①、最坏时间复杂度 = O(nm)

②、最好时间复杂度 = O(n) 1. 最坏时间复杂度O(nm)

最坏的情况,每个⼦串都要对⽐ m 个字符,共 n-m+1 个⼦串,复杂度 = O((n-m+1)m) = O(nm)

注:很多时候,n >> m

2. 最好时间复杂度O(n)

最好的情况,每个⼦串的第⼀个字符就匹配失败,共 n-m+1 个⼦串,复杂度 = O(n-m+1) = O(n)

注:很多时候,n >> m

总结

到此这篇关于C语言朴素模式匹配算法的文章就介绍到这了,更多相关C语言朴素模式匹配算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    这篇文章主要为大家通俗易懂的讲解了C语言快速排序和归并排序的时间复杂度分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • C++ leetcode之删除并获得点数的示例代码

    C++ leetcode之删除并获得点数的示例代码

    这篇文章主要介绍了C++ leetcode之删除并获得点数的示例代码,本文给大家分享问题解析及解决方案,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • c++基础语法:普通继承

    c++基础语法:普通继承

    基类成员的private成员不但对于对象是不可见的,对于派生类也是不可见的,只能被基类成员或者友元访问
    2013-09-09
  • C++中this指针理解及作用

    C++中this指针理解及作用

    这篇文章主要介绍了C++中this指针理解及作用,文章通过举例展开相关详细内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • C语言深入讲解栈与堆和静态存储区的使用

    C语言深入讲解栈与堆和静态存储区的使用

    对大多数C 语言初学者来说,堆栈却是一个很模糊的概念。堆栈是一种数据结构,一个在程序运行时用于存放的地方,相信这可能是很多初学者共同的认识,静态存储区即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在
    2022-04-04
  • C++函数重载的定义与原因详解

    C++函数重载的定义与原因详解

    这篇文章主要为大家详细介绍了Python实现学生成绩管理系统,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言中atoi函数模拟实现详析

    C语言中atoi函数模拟实现详析

    atoi函数功能是将数字字符串转换为整数,比如数字字符串"12345"被atoi转换为12345,数字字符串"-12345"被转换为-12345,下面这篇文章主要给大家介绍了关于C语言中atoi函数模拟实现的相关资料,需要的朋友可以参考下
    2022-10-10
  • C++使用waveIn实现声音采集

    C++使用waveIn实现声音采集

    在Windows上实现录音比较简单的方法是使用winmm,其中的waveIn模块就可以打开录音设备,这篇文章主要为大家介绍了C++如何使用waveIn实现声音采集,需要的可以了解下
    2023-10-10
  • C++ OpenCV实战之零部件的自动光学检测

    C++ OpenCV实战之零部件的自动光学检测

    这篇文章主要为大家介绍一个C++ OpenCV的实战——零部件的自动光学检测,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • static关键字的作用详解

    static关键字的作用详解

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
    2013-04-04

最新评论