数据结构与算法学习笔记串和数组
Posted ChinaManor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法学习笔记串和数组相关的知识,希望对你有一定的参考价值。
串和数组
1:
数据结构与算法
串和数组
2:
串
目标
数组
本章目标
能够说出串的基本概念及其抽象数据类型的描述
了解串的存储结构
了解串的基本能操作
了解数组的定义、操作和存储结构
了解矩阵的压缩存储
3:
01
第一节:串
The first chapter
内容展示
4:
目标
串
数组
1 串
1.1 串的概念
串的基本概念:
1、串:
是由零个或多个字符组成的有限序列。
一般记为s= “a1a2…an”, 其中s为串名,引号括起来的字符序列是串值。
2、串的长度:
串中字符的个数。
3、空串:
长度为0的串,即不包含任何字符的串,表示为""。
4、空白串:
由一个或多个空白字符组成的串,如: " "。
注意:空串与空白串的区别
串也是一种特殊的线性表。
5:
报告人:XXX
目标
串
数组
1 串
1.1 串的概念
5、子串:
主串:
串中任意个连续字符组成的子序列称为该串的子串。
包含子串的串相应地称为主串。
6、字符在串中的位置:
子串在主串中的位置:
如:s1= “cdababef”, s2= “ab” s3=“a”
字符在串中的序号值。
子串在主串中出现时第一个字符在主串中的序号值。
注意:空串是任意串的子串,任意串是其自身的子串。
串的基本概念:
6:
报告人:XXX
目标
串
数组
1 串
1.1 串的概念
串的基本操作:
clear( )
1)串的置空操作:
isEmpty( )
2)串的判空操作:
length( )
3)求串的长度操作:
4)取字符元素操作:
5)截取子串操作:
charAT(index)
substring( bengin,end )
6)插入操作:
insert(offset,str )
delete(begin,end )
7)删除操作:
concat(str )
8)串的连接操作:
compareTo(str )
9)串的比较操作:
10)子串定位操作:
indexOf(str,begin)
7:
报告人:XXX
目标
串
数组
1 串
1.2 串的存储结构
串的存储结构:
顺序存储结构
链式存储结构
8:
报告人:XXX
目标
串
数组
1 串
1.2 串的存储结构
串的顺序存储结构:
串的顺序存储结构与线性表的顺序存储结构类似,可以采用一组地址连续的存储单元来存储串字符序列。顺序存储的串称为顺序串,顺序串的类型描述如下:
public class SeqString implements IString{
private char[] strvalue; //存放串值
private int curlen; //存放串的长度
…
}
9:
报告人:XXX
目标
串
数组
1 串
1.2 串的存储结构
串的顺序存储结构:
I a m a b o y
10:
报告人:XXX
目标
串
数组
1 串
1.2 串的存储结构
串的链式存储结构:
11:
报告人:XXX
目标
串
数组
1 串
1.3 串的模式匹配
什么叫模式匹配:
这是串的一种重要操作,很多软件,若有“编辑”菜单项的话,则其中必有“查找”子菜单项。
设s,t 是两个串,s= “s1s2…sn”,t= “t1t2…tm”(0≤m≤<n)在s串中寻找等于t的子串的过程称为模式匹配。(即,子串的定位操作)
其中:s:主串, t:模式串
用一个函数实现:
匹配成功:返回t在s中start位置后首次出现的序号
匹配不成功:返回-1
模式匹配是各种串处理系统中最重要的操作之一
12:
报告人:XXX
目标
串
数组
1 串
1.3 串的模式匹配
模式匹配算法:
1、简单算法
(Brute-Force模式匹配算法 )
2、KMP算法
(D.E.Knuth, V.R.Pratt,J.H.Morris)
13:
报告人:XXX
目标
串
数组
1 串
1.3 串的模式匹配
BF算法:
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法 BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配, 若相等,则继续比较S的第二个字符和 T的第二个字符; 若不相等,则比较S的第二个字符和T的第一个字符, 依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
简而言之,就是暴力循环
http://interview.wzcu.com/%E7%AE%97%E6%B3%95/BF%E7%AE%97%E6%B3%95%E5%92%8CKMP%E7%AE%97%E6%B3%95.html
14:
报告人:XXX
目标
串
数组
1 串
1.3 串的模式匹配
KMP算法:
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。 KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)
15:
第二节数组
The second chapter
内容展示
02
16:
目标
数组
串
2 数组
2.1 数组的基本概念
数组的基本概念:
数组是n(n≥1)个具有相同类型的数据元素a0,a1,…,an-1构成的有限序列,并且这些数据元素占用一片地址连续的内存单元。其中:n称为数组的长度。
一维数组可以看成一个顺序存储结构的线性表 。
数组元素是一维数组的数组称为二维数组,也称为矩阵。
17:
目标
数组
串
2 数组
2.1 数组的基本概念
二维数组/矩阵的基本概念:
a0,0 a0,1 …… a0,j …… a0,m-1
a1,0 a1,1 …… a1,j …… a1,m-1
an-1,1 an-1,2 …… an-1,j …… an-1,m-1
…
…
…
…
ai,1 ai,2 …… ai,j …… ai,m-1
…
…
…
…
二维数组中的每一个数据元素ai,j 都受到两个关系的约束:行关系和列关系
18:
目标
数组
串
2 数组
2.2 数组的顺序存储结构
数组的顺序存储结构:
有两种顺序映象的方式:
1)以行序为主序(行优先顺序);
2)以列序为主序(列优先顺序)。
数组的顺序存储表示要解决的是一个"如何用一维的存储地址来表示多维的关系"的问题。
19:
目标
数组
串
2 数组
2.2 数组的顺序存储结构
以“行序为主序”的顺序存储映象:
例如:二维数组3*3
称为基地址或基址。
二维数组A[m][n]中任一元素ai,j 的存储位置
LOC(i,j) = LOC(0,0) + (n×i+j)×
a0,1
a0,0
a0,2
a1,0
a1,1
a1,2
a0,1
a0,0
a0,2
a1,0
a1,1
a1,2
L
L
a2,0
a2,1
a2,2
a2,0
a2,1
a2,2
20:
目标
数组
串
2 数组
2.2 数组的顺序存储结构
以“列序为主序”的顺序存储映象:
例如:二维数组
称为基地址或基址。
二维数组A[m][n]中任一元素ai,j 的存储位置
LOC(i,j) = LOC(0,0) + (m ×j +i) ×
a1,0
a0,0
a2,0
a0,1
a1,1
a1,2
a1,0
a0,0
a2,0
L
L
a0,2
a2,1
a2,2
a0,1
a1,1
a1,2
a0,2
a2,1
a2,2
21:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
特殊矩阵的压缩存储:
如果在矩阵中有许多值相同的元素或者是零元素。为了节省存储空间,可以对这类矩阵进行压缩存储。
所谓压缩存储是指:为多个值相同的元素只分配一个存储空间;对零元素不分配空间。
什么是特殊矩阵?
具有许多相同数据元素或零元素,且非零元素在矩阵中的分布有一定规则
例如: 对称矩阵
三角矩阵
稀疏矩阵
http://data.biancheng.net/view/183.html
22:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
对称矩阵的压缩存储:
矩阵中有两条对角线,其中图 1 中的对角线称为主对角线,另一条从左下角到右上角的对角线为副对角线。
对称矩阵指的是各数据元素沿主对角线对称的矩阵。
图1
对称矩阵的实现过程是,存储三角中的元素,只需将各元素所在的行标 i 和列标 j 代入下面的公式:K指一维数组的索引index
i*(i+1)/2+j (i>=j)下三角
K=
j*(j+1)/2+i (i<j)上三角
K=0,1,…,n(n+1)/2
0 1 2 3 4 5 6 7 8 9
K
1 2 4 3 5 6
S
下三角
23:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
下三角矩阵的压缩存储:
i*(i+1)/2+j (i>=j,0≤i,j≤n-1)
K=
空 (i<j,0≤i,j≤n-1)
(下三角矩阵)
K=0,1,…,n(n+1)/2-1
0 1 2 3 4 5 6 7 8 9
K
1 2 4 3 5 6
S
24:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
上三角矩阵的压缩存储:
空
K=
j*(j+1)/2+i (i<=j)
(i<=j,0≤i,j≤n-1)
(i>j,0≤i,j≤n-1)
0 1 2 3 4 5 6 7 8 9
K
1 2 4 3 5 6
S
25:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
稀疏矩阵的定义:
假设 m 行 n 列的矩阵含 t 个非零元素,则称
为稀疏因子δ德尔塔。
通常认为 0.05 的矩阵为稀疏矩阵且零值元素分布是随机的。
有较多零元素且非零元素分布无规律的矩阵为稀疏矩阵。
26:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
稀疏矩阵的压缩存储:
以常规方法,即以二维数组表示高阶的稀疏矩阵时产生的问题:
- 零值元素占了很大空间;
- 计算中进行了很多和零值的运算,遇除法,还需判别除数是否为零。即计算效率不高。
27:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
稀疏矩阵的压缩存储:
1、三元组顺序表
2、 十字链表
28:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
稀疏矩阵的三元组顺序表–压缩存储:
0 1 14
0 4 -5
1 1 -7
2 0 36
2 3 28
row column value
3
5
5
data
rows
cols
nums
M=
M
29:
目标
数组
串
2 数组
2.3 特殊矩阵的压缩存储
稀疏矩阵的十字链表法–压缩存储:
0
0
3
0
3
5
1
1
-1
2
0
2
^
^
^
^
^
^
^
M.chead
M.rhead
3 4 4
M
3 0 0 5
0 -1 0 0
2 0 0 0
30:
Thank You!
力学笃行 志存高远
以上是关于数据结构与算法学习笔记串和数组的主要内容,如果未能解决你的问题,请参考以下文章