数据结构第四章——串、数组和特殊矩阵

本文详细阐述了串的定义、实现方式,包括定长、动态分配和链式存储,以及串的模式匹配算法,特别是KMP算法及其优化。同时讨论了数组和特殊矩阵,如对称矩阵的压缩存储和稀疏矩阵的特性。
摘要由CSDN通过智能技术生成


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


目录

文章目录

一、串

(一)串的定义和实现

1.串的定义

2.串的存储结构

(1)定长的存储结构

(2)动态分配

(3)链式存储

3.串的基本操作

(二)串的模式匹配算法

1.简单模式匹配算法

2.KMP算法

3.KMP算法的优化

二、数组和特殊矩阵

(一)数组

(二)特殊矩阵的压缩存储

1.对称矩阵

2.三角矩阵

3.三对角矩阵

4.稀疏矩阵

一、串

(一)串的定义和实现

1.串的定义

相关概念:

(1)串是由零个或多个字符组成的有限序列;

(2)串中任意多个连续的字符组成的序列是该串的子串;包含子串的串称为主串;

(3)某个字符在串中的序号称为该字符在串中的位置;

(4)子串在主串中的位置以子串的第1个字符在主串中的位置来表示;

(5)当两个串的长度相等且每个对应位置的字符都相等时,称这两个串是相等的。

(6)由一个或多个空格(空格是特殊字符)组成的串称为空格串,空格串不是空串,长度为串中空             格字符的个数。

2.串的存储结构

(1)定长的存储结构

所谓定长的存储结构就是利用字符数组来存字符串;

//串的存储结构
#define maxsize 100
typedef struct{
	char ch[maxsize];
	int length;
}SString;
(2)动态分配
typedef struct{
	char *ch;
	int length;
}HString;
(3)链式存储

类似于线性表的链式存储结构,也可采用链表方式存储串值。由于串的特殊性(每个元素只有一个字符),在具体实现时,每个结点既可以存放一个字符,也可以存放多个字符。每个结点称为块,整个链表称为块链结构。

3.串的基本操作

(二)串的模式匹配算法

1.简单模式匹配算法

(1)算法思想

将主串中长度与模式串长度相等的子串依次与模式串比较,直到找到一个匹配的子串,或者所有的子串都不匹配。

(2)代码

//简单的模式匹配算法
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;
	}
}

(3)效率分析

空间效率分析:只用到了常数级的辅助空间,空间复杂度为O(n)

时间效率分析:最坏情况下,也就是模式串与子串没有匹配,在这种情况下时间复杂度O(nm),其中n,m分别是主串和模式串的长度。

最好情况下,也就是第一个子串就与模式串匹配,即时间复杂度为O(n)其中n为模式串的长度

2.KMP算法

关于KMP算法,只要掌握了如何求next数组就不会有太大问题,这里首先要会模拟KMP算法的执行过程,初学者需要注意的是:对于第n个元素匹配失败时,主串指针不变,模式串指针j变为xx,j每次变为什么取决于模式串,也就是说模式串不同,j的变化也就不同,这里j的变化不存在什么规律

图中第一行表示模式串的第几个元素,第二行是元素对应的 j 的值。这里值得注意的是任何模式串的next[1]都是0,next[2]都是1。408中对于KMP算法掌握手动推理过程即可

KMP算法的时间复杂度:O(m+n),其中求next数组时间复杂度O(m),匹配过程中最坏时间复杂度O(n)。因此KMP算法的时间复杂度为O(m+n)。

3.KMP算法的优化

核心在于求nextval数组,注意nextval[1]永远都是0;

二、数组和特殊矩阵

(一)数组

存储结构

一维数组:

二维数组:

行下标:[0,h1],列下标[0,h2]

行优先:

列优先:

(二)特殊矩阵的压缩存储

1.对称矩阵

对称矩阵:若n阶方阵中任意一个元素都有a(i,j)= a(j,i) 则该矩阵为对称矩阵

压缩存储:只存储主对角线+下三角区,或者只存储主对角线和上三角区

按照行优先的方式将矩阵存储在一个一维数组中,数组下标与元素之间的对应关系如下

列优先存储

推导过程:

2.三角矩阵

三角矩阵的压缩存储与对称矩阵基本上很相似,不同之处在于多了一个存储常量的位置

3.三对角矩阵

三对角矩阵,也称带状矩阵

压缩存储:只存储带状区域

行优先:

前  i-1行共3(i-1)-1个元素

a(i,j)是第 i 行的 j-i+2个元素

所以a(i,j)是第2i+j-2个元素

反过来,第k=1个元素,在第几行第几列

前i-1行共 3(i-1)-1个元素

前i行共 3i-1 个元素

显然,3(i-1)-1<k+1s 3i-1

解不等式 得:

4.稀疏矩阵


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值