当前位置: 首页 > news >正文

【数据结构】kmp算法介绍+模板代码

目录

1.kmp算法介绍

2.应用场景

3.KMP与暴力算法比较

4.模板代码


KMP算法是一种高效的字符串匹配算法,用于在文本串中快速查找模式串的所有出现位置。其核心思想是通过预处理模式串,避免在匹配失败时进行不必要的回溯,从而将时间复杂度优化至 O(n + m)(n为文本长度,m为模式串长度)。

2.应用场景

  • 大规模文本中的高效匹配(如编辑器、病毒扫描)。

  • 多次使用同一模式串时的预处理优势。

  • 需要线性时间复杂度的场景(如实时处理)。

3.KMP与暴力算法比较

特性KMP算法暴力算法
文本指针无需回退可能多次回退
时间复杂度O(n + m)O(n*m)
空间复杂度O(m)(存储LPS数组)O(1)

4.模板代码

void getnext(char *p)
{
	int lenp=strlen(p);
	nextt[0]=-1;
	int k=-1;
	int j=0;
	while(j<lenp-1)
	{
		if(k==-1||p[j]==p[k])
		{
			j++;
			k++;
			nextt[j]=k;

		}
		else
		{
			k=nextt[k];
		}
	}
	return;
}

int KMP(char *s,char *p)
{
	int i=0;
	int j=0;
	int lens=strlen(s);
	int lenp=strlen(p);
	while(i<lens&&j<lenp)
	{
		if(j==-1||s[i]==p[j])
		{
			j++;
			i++;
		}
		else
		{
			j=nextt[j];
		}
	}
	if(j==lenp)
	return 1;
	else
	return 0; 
}

相关文章:

  • 树莓集团落子海南,解读数字产业新势力
  • 2014-2023年各区县数字普惠金融指数数据
  • 【设计模式】C++ 单例模式总结与最佳实践
  • 3DMAX曲线生成器插件CurveGenerator使用方法
  • C语言【动态内存管理】详解
  • Beans模块之工厂模块注解模块@Qualifier
  • 计算机组成原理和计算机网络常见单位分类及换算
  • 机器学习算法实战——天气数据分析(主页有源码)
  • 算法及数据结构系列 - 树
  • 「AI+办公」共学(四):办公综合应用
  • Python 打造高效开发辅助全能工具箱
  • mysql( 8.3.0) LISTAGG
  • 使用Multiprocessing模块创建子进程,需要放到__main__中
  • 【最后203篇系列】021 Q201再计划
  • 《慢慢变富》第三章 估值篇:价值的锚与安全边际
  • 广度优先搜索(BFS)完全解析:从原理到 Java 实战
  • 信创-人大金仓数据库创建
  • 昆仑技术重构AI大模型落地范式,长期作“加法”迎来国产生态化“拐点”
  • Performance Hub Active Report
  • 机器学习之KL散度推导
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款
  • 青岛双星名人集团管理权之争:公司迁址,管理层更迭
  • 李公明︱一周书记:浪漫主义为什么……仍然重要?
  • 马上评|持续对标国际一流,才有22项“全球最优”
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 中国电信财务部总经理周响华调任华润集团总会计师