`
bcyy
  • 浏览: 1825133 次
文章分类
社区版块
存档分类
最新评论

KMP算法next数组递归求法

 
阅读更多
//                 +-------+---+-+
//                 |  ...  |i-1|i|  求Next(array, i)
//                 +-------+---+-+
//                       X
//                      / \      -------+
//                     /   \     |      |
//                    /     \    |      |
// 若i-1前面    +---+|      |---|v|---|---|   若i-1之前有元素,
//   无元素     | i-1|      |...|j|...|i-1|   求得j=Next(i-1),
//    返回      +----|      |---|-|---|-|-|   比较array[i-1]与array[j]
//                  /           /   \   |
//                 /           /     \  |----|
//                /           /       \      |
//               0          j+1       ------|v|----     若array[i-1]与array[j]不等,
//                                    | ... |j|j+1|     用array[i-1]替换array[j] 
//                                    +-----+-+----     再求Next(array, j+1)                              
#include <stdio.h>
#include <string.h>
int Next(char array[], int i)
{
	int ret = 0;
	if ( 0 == i )
		ret = -1;
	else if ( i == 1 )
		ret = 0;
	else
	{
		int j = 0;
		int t = 0;

		j = Next( array, i-1);
		if ( array[j] == array[i-1] )
			ret = j+1;
		else
		{
			t = array[i-1];
			array[i-1] = array[j];
			array[j] = t;

			ret = Next(array, j+1);

			t = array[i-1];
			array[i-1] = array[j];
			array[j] = t;
		}
	}
	return ret;
}

void main()
{
	int i = 0;
	char str[] = "abaabcac";

	for ( i=0; i<strlen(str); i++ )
		printf("%d ", Next(str, i));
}

分享到:
评论

相关推荐

    小甲鱼_数据结构与算法(98集全)

    立39_ KMP算法之NEXT数组代码原理分析. mp4二40_ KMP算法之实现及优化. mp4二41树. mp4 四42_树的存储结构. mp443_树的存储结构2. mp4四44_二艾树. mp445_二叉树2. mp4 46_二又树的存数结构. mp447_二又树的...

    c语言数据结构算法演示(Windows版)

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    学习数据结构算法必备

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    数据结构(Java版)(第2版)习题解答

    【习4.3】 习4-9(2) 已知target="ababaab"、pattern="aab",求模式串的next数组,画出其KMP算法的匹配过程,并给出比较次数。 18 第5章 数组和广义表 20 【习5.1】 求一个矩阵的转置矩阵。 20 第6章 树和二叉树 21 ...

    严蔚敏 数据结构算法演示(Windows版)软件

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    数据结构算法演示(Windows版)

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    DSDemo 数据结构

    功能简介 本课件是一个动态演示数据结构算法执行过程的... (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval))

    华南 数据结构上机实验代码 完整代码

    KMP算法 二叉树的构建及遍历操作 实现二叉排序树的各种算法(1) 实现二叉排序树的各种算法(2) 哈夫曼树 顺序查找 二分查找 哈希查找 直接插入排序 折半插入排序 希尔(shell)排序 冒泡排序 快速排序 简单...

    用c描述的数据结构演示软件

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    数据结构演示软件

    (2)求Next 函数值(Get_next)和按Next 函数值进行匹配 (Index_KMP(next)) (3)求 Next 修正值(Get_nextval)和按 Next 修正值进行匹配(Index_KMP(nextval)) 5. 稀疏矩阵 (1)矩阵转置 (Trans_Sparmat) (2)...

    数据结构(C++)有关练习题

    8、 已知A[n]为正数数组,试写出实现下列运算的递归算法; a. 求数组A中的最大整数; b. 求n个数的平均值; c. 求n个整数的平均值; 9、 已知f为单链表的表头指针,链表中存储的都是整型数据,试写...

    数据结构题

    1. 对一个算法的评价,不包括如下( )方面的内容。 A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度 2. 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。 A. p-&gt;next=HL-&gt;next; ...

Global site tag (gtag.js) - Google Analytics