服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言朴素模式匹配算法实例代码

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

2021-11-12 15:47bfhonor C/C++

朴素模式匹配算法也称为布鲁特-福斯算法,感觉很是高大上,但是实现起来很简单。这篇文章主要给大家介绍了关于C语言朴素模式匹配算法的相关资料,需要的朋友可以参考下

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

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

注意:

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

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

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

二、朴素模式匹配算法

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

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

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

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

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

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

若当前⼦串匹配失败,则主串指针 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)

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

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

注:很多时候,n >> m

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

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

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

注:很多时候,n >> m

总结

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

原文链接:https://blog.csdn.net/qq_44096670/article/details/117473063

延伸 · 阅读

精彩推荐