朴素模式匹配算法与KMP算法(非重点)

目录

  • [一. 朴素模式匹配算法](#一. 朴素模式匹配算法)
    • [1.1 什么是字符串的匹配模式](#1.1 什么是字符串的匹配模式)
    • [1.2 朴素模式匹配算法](#1.2 朴素模式匹配算法)
    • [1.3 通过数组下标实现朴素模式匹配算法](#1.3 通过数组下标实现朴素模式匹配算法)
  • [二. KMP算法](#二. KMP算法)
    • [2.1 算法分析](#2.1 算法分析)
    • [2.2 用代码实现(只会出现在选择题,考察代码的概率不大)](#2.2 用代码实现(只会出现在选择题,考察代码的概率不大))
  • [三. 手算next数组](#三. 手算next数组)
  • [四. KMP算法的进一步优化](#四. KMP算法的进一步优化)
    • [4.1 优化分析](#4.1 优化分析)
    • [4.2 手算nextval数组](#4.2 手算nextval数组)

\quad

一. 朴素模式匹配算法

\quad

\quad

1.1 什么是字符串的匹配模式

\quad


\quad

\quad

1.2 朴素模式匹配算法

\quad



\quad

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

\quad


鄙人所写

javascript 复制代码
int Indexps(SString* a, SString* b) //朴素模式匹配算法
{
	int i = 1, j = 1;
	for (int k = 0; i < a->length - b->length + 1; k++)
	{
		while(j<=b->length)
		{
			if (a->ch[i] != b->ch[j])
			{
				break;
			}
			i++;
			j++;
		}

		if (j > b->length)
		{
			return i - b->length;
		}

		i = i - j + 2;
		j = 1;


		if (i >= a->length - a->length + 2)
		{
			return 0;
		}


	}
}

优化

\quad

二. KMP算法

\quad

\quad

2.1 算法分析

\quad





\quad
\quad
\quad

第二种情况



根据上面的经验,i不变,变的是j,而j是未知, 我们不妨先把j指向0



\quad

2.2 用代码实现(只会出现在选择题,考察代码的概率不大)

\quad

先不管next数组如何实现, 会手动算就行


\quad

三. 手算next数组

\quad





\quad
\quad

使用next数组进行模式匹配

练习题

\quad

四. KMP算法的进一步优化

\quad

\quad

4.1 优化分析

\quad



\quad
\quad
\quad
\quad


\quad
\quad

不是所有的next数组的值都可以被优化

\quad

\quad

4.2 手算nextval数组

\quad





相关推荐
燕山罗成3 个月前
【动态规划-状态机模型】:大盗阿福、股票买卖Ⅳ、股票买卖Ⅴ、设计密码【已更新完成】
c++·算法·动态规划·字符串·kmp算法·状态机
故事与酒✘4 个月前
内存函数详解,包含部分字符串函数
c语言·kmp算法·内存函数
蒋劲豪5 个月前
算法-KMP算法
java·算法·kmp算法
dulu~dulu5 个月前
数据结构(六)----串
数据结构·kmp算法··朴素模式匹配算法
挽天java5 个月前
数据结构--KMP算法
数据结构·算法·kmp算法
YIN_尹1 年前
KMP算法详解
算法·kmp算法·字符串匹配
DAY Ⅰ1 年前
【数据结构】朴素模式匹配 & KMP算法
数据结构·c++·kmp算法··朴素模式匹配