数据结构第五章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年11月1日 21
(2)只存放上三角部分 对于对称矩阵,除了用下三角形式存放外,还可以用上三角形 式存放,这时a[0][0]存入s[0],a[0][1]存入s[1],a[0][2]存入 s[2],…,a[0][n-1]存入s[n],a[1][1]存入s[n+1],…,a[n1][n-1]存入s[ n ( n + 1) - 1 ] 中,具体参见图5-5。
2012年11月1日 13
2.三角矩阵 (1)上三角矩阵 即矩阵上三角部分元素是随机的,而下三角部分元素全部 相同(为某常数C或全为0),具体形式见图5-2(a)。 (2)下三角矩阵 即矩阵的下三角部分元素是随机的,而上三角部分元素全 部相同(为某常数C或全为0),具体形式见图5-2(b)。
2012年11月1日
2012年11月1日
11
5.3 特殊矩阵及其压缩存储
所谓压缩存储是指:为多个值相同的元素只分配一个存储空 间,值为零的元素不分配空间。或者理解为:将二维数组 (矩阵)压缩到一个占用存储单元数目较少的一维数组中。 但是,在进行压缩存储时,虽然节约了存储单元,但怎样在 压缩存储后直接找到某元素呢?因此还必须给出压缩前下标 (二维数组的行、列)和压缩后(一维数组的下标)下标之 间的变换公式,才能使压缩存储变得有意义。下面将分几种 情况的特殊矩阵来讨论。
2012年11月1日
24
当i>j时,由对称关系,交换i与j即可。 即有k=j*n-+i-j。 故s[k]与a[i][j]的对应关系为: i*n-+j-i i≤j K= j*n-+i-j i>j
2012年11月1日
25
2.三角矩阵 (1)下三角矩阵 下三角矩阵的压缩存放与对称矩阵用下三角形式存放类似, 但必须多一个存储单元存放上三角部分元素,使用的存储 单元数目为n(n+1)/2+1。故可以将nn的下三角矩阵压缩存 放到只有n(n+1)/2+1个存储单元的向量中。
2012年11月1日
4
3.多维数组 同理,三维数组最多可有三个直接前驱和三个直接后继, 三维以上的数组可以作类似分析。因此,可以把三维以上 的数组称为多维数组,多维数组可有多个直接前驱和多个 直接后继,故多维数组是一种非线性结构。
2012年11月1日
5
5.1.2 多维数组在计算机内的存储
怎样将多维数组中的元素存入到计算机内存中呢?由于计 算机内存结构是一维的(线性的),因此,用一维内存存 放多维数组就必须按某种次序将数组元素排成一个线性序 列。
但是,将n阶对称方阵压缩存放到一个向量空间s[0]到 s[n(n+1)/2-1] 中,我们怎样找到s[k]与a[i][j]的一一对应关系 呢?使我们在s[k]中能直接找到a[i][j]。
2012年11月1日
18
我们仅以行优先顺序存放且分两种方式讨论:
(1)只存放下三角部分 由于对称矩阵关于主对角线对称,故我们只需存放主对角线 及主对角线以下的元素。这时,a[0][0]存入s[0],a[1][0] 存 入s[1],a[1][1]存入s[2],…,a[n-1][n-1]存入n ( n + 1) s -1 中,具体过程参见图5-4。 2
2012年11月1日
2
2.二维数组 二维数组可以看成是向量的推广。例如,设A是一个有m 行n列的二维数组,则A可以表示为:
a 00 a 10 A = a m -10
2012年11月1日
0
1
2
3
4
5
6
7
……
n ( n +1 ) 2
-3
n ( n +1 ) 2
-2
n ( n +1 ) -1 2
a00 a01 a02 a03 a04 a05 a06 a07
……
an-2n-2
an-2n-1
an-1n-1
2012年11月1日
(b)上三角矩阵的压缩存储形式 图5-5 对称矩阵及用上三角压缩存储
第5章 多维数组和广义表
本章学习内容
5.1 多维数组
5.2 多维数组的存储结构
5.3 特殊矩阵及其压缩存储
5.4 稀疏矩阵
5.5 广义表
2012年11月1日 1
5.1 多维数组
5.1.1 多维数组的概念
1.一维数组
一维数组可以看成是一个线性表或一个向量(第2章中 已经介绍),它在计算机内是存放在一块连续的存储 单元中,适合于随机查找。
2012年11月1日
6
5.2 多维数组的存储结构
由于数组是先定义后使用,且为静态分配存储单元。本章中, 仅重点讨论二维数组的存储,三维及三维以上的数组(多 维),可以作类似分析。 多维数组的顺序存储有下面两种形式:行优先顺序存储和列 优先顺序存储。
2012年11月1日
7
5.2.1 行优先顺序
1.存放规则 行优先顺序也称为低下标优先存储,或左边下标优先于右 边下标。具体实现时,按行号从小到大的顺序,先将第一 行中元素按列号从小到大全部存放好,再存放第二行元素, 第三行元素,依此类推……
2012年11月1日
8
2.地址计算 设a00的内存地址为LOC(a00),则aij的内存地址按等差数列 计算为LOC(aij)=LOC(a00)+(i×n+j)×d。 同理,三维数组Am×n×p按行优先顺序存放的地址计算公式 为:LOC(aijk)=LOC(a000)+(i×n×p+j×p+k)×d。
16
图5-3 一个7×7的三对角矩阵
5.3.2 压缩存储
在上面介绍的几种特殊矩阵(对称矩阵、上三角矩阵、下 三角矩阵、三对角矩阵、多对角矩阵等)中,元素的分布 有规律,从节省存储单元的角度来考虑,可以进行压缩存 储。
2012年11月1日
17
1.对称矩阵
若矩阵Ann是对称的,对称的两个元素可以共用一个存储单 元,这样,原来n 阶方阵需n2个存储单元,若采用压缩存储, 仅需n(n+1)/2个存储单元,将近节约一半存储单元,这就是 实现压缩的好处。
2012年11月1日
12
5.3.1 特殊矩阵
2 3 1 A= 5 4 2 4 6 3
图5-1 一个对称矩阵
1.对称矩阵 若一个n阶方阵A中元素满足下列条件: aij=aji 其中0≤i, j≤n-1,则称A为对称矩阵。 例如,如图5-1所示是一个3×3的对称矩阵。
2012年11月1日
9
Βιβλιοθήκη Baidu.2.2 列优先顺序
1.存放规则 列优先顺序也称为高下标优先存储,或右边下标优先于 左边下标。具体实现时,按列号从小到大的顺序,先将 第一列中的元素按行号从小到大的顺序全部存放好,再 存放第二列元素,第三列元素,依此类推……
2012年11月1日
10
2.地址计算
对二维数组Am×n有:LOC(aij)=LOC(a00)+(j×m+i)×d 对三维数组Am×n×p有: LOC(aijk)=LOC(a000)+(k×m×n+j×m+i)×d
a 00 a 10 a 20 ... n -10 a
2012年11月1日
a 11 a 21 ... a n -11
a 22 ... a n -12 ... ...
... a n -1n -1
23
这时s[k]与a[i][j]的对应关系可以按下面的方法推出: 当i≤j时,aij在上三角部分中,前面的行号从0~i-1,共有i行, 第0行有n个元素,第1行有n-1个元素,…,第i-1行有n-(i-1) 个元素,因此,前面i行共有n+n-1+…+n-(i-1)=i*n-个元素, 而aij是本行第j-i个元素,故k=i*n-+j-i。
2012年11月1日
20
这时s[k]与a[i][j]的对应关系为: i(i+1)/2+j 当 i≥j k= j(j+1)/2+i 当 i<j
上面的对应关系读者很容易推出: 当i≥j时,aij在下三角部分中,aij前面有i行,共有1+2+3+…+i 个元素,而aij是第i行的第j个元素,即有 k=1+2+3+…+i+j=i(i+1)/2+j。 当i<j时,aij在上三角部分中,但与aji对称,故只需在下三角 部分中找aij即可,故只需将i与j交换即可,即k=j(j+1)/2+i。
假设仍按行优先存放,这时s[k]与a[i][j]的对应关系为: i(i+1)/2+j i≥j k= n(n+1)/2 i<j
2012年11月1日 26
(2)上三角矩阵 和下三角矩阵的存储类似,共需n(n+1)/2+1个存储单元, 假设仍按行优先顺序存放,这时s[k]与a[i][j]的对应关系 为: i*n- i(i-1)/2+j-i i≤j k= n(n+1)/2 i>j
2012年11月1日
15
3.对角矩阵
若矩阵中所有非零元素都集中在以主对角线为中心的带状区 域中,区域外的值全为0,则称为对角矩阵。常见的对角矩阵 有:三对角矩阵、五对角矩阵、七对角矩阵等。 例如,如图5-3所示为7×7的三对角矩阵。
00 a a 10 0 0 0 0 0
2012年11月1日
a 01 a11 a 21 0 0 0 0
0 a12 a 22 a 32 0 0 0
0 0 a 23 a 33 a 43 0 0
0 0 0 a 34 a 44 a 54 0
0 0 0 0 a 45 a 55 a 65
0 0 0 0 0 a 56 a 66
a 01 a 11
a m -11
a 0 n -1 a 1 n -1 a m -1 n - 1
3
在此,可以将二维数组A看成是由m个行向量[X0,X1,…, Xm-1]T组成,其中,Xi=( ai0, ai1, …,ain-1), 0≤i≤m-1; 也可以将二维数组A看成是由n个列向量[y0, y1, …,yn-1] 组成,其中 yi=(ai0, a1i, …,am-1i),0≤i≤n-1。由此可 知二维数组中的每一个元素最多可有两个直接前驱和两个 直接后继(边界除外),故是一种典型的非线性结构。
14
a 00 a 01 ... c ... c a 0 n a 00 1 a c 10 a 11 ... c a 11 ... a 1 n 1 ... ... ... ... ... ... ... ... a c n 10 a n ... a n n 11 1 1 c c a n n 1 1 (a)上三角矩阵 (b)下三角矩阵 图5-2 三角矩阵
2
2012年11月1日
22
00 a ...
a 01 a 11 ...
a 02 a 12 a 22 ...
(a)一个上三角矩阵
a 0n -1 a 1n -1 a 2n -1 ... ... a n -1n -1 ... ... ...
(a)一个下三角矩阵
19
0
1
2
3
4
5
6
7
…
n ( n +1 ) 2
-3
n ( n +1 ) 2
-2
n ( n +1 ) 2
-1
a00 a10 a11 a20 a21 a22 a30 a31 …
an-1n-3
an-1n-2
an-1n-1
(b)下三角矩阵的压缩存储形式 图5-4 对称矩阵及用下三角压缩存储
(2)只存放上三角部分 对于对称矩阵,除了用下三角形式存放外,还可以用上三角形 式存放,这时a[0][0]存入s[0],a[0][1]存入s[1],a[0][2]存入 s[2],…,a[0][n-1]存入s[n],a[1][1]存入s[n+1],…,a[n1][n-1]存入s[ n ( n + 1) - 1 ] 中,具体参见图5-5。
2012年11月1日 13
2.三角矩阵 (1)上三角矩阵 即矩阵上三角部分元素是随机的,而下三角部分元素全部 相同(为某常数C或全为0),具体形式见图5-2(a)。 (2)下三角矩阵 即矩阵的下三角部分元素是随机的,而上三角部分元素全 部相同(为某常数C或全为0),具体形式见图5-2(b)。
2012年11月1日
2012年11月1日
11
5.3 特殊矩阵及其压缩存储
所谓压缩存储是指:为多个值相同的元素只分配一个存储空 间,值为零的元素不分配空间。或者理解为:将二维数组 (矩阵)压缩到一个占用存储单元数目较少的一维数组中。 但是,在进行压缩存储时,虽然节约了存储单元,但怎样在 压缩存储后直接找到某元素呢?因此还必须给出压缩前下标 (二维数组的行、列)和压缩后(一维数组的下标)下标之 间的变换公式,才能使压缩存储变得有意义。下面将分几种 情况的特殊矩阵来讨论。
2012年11月1日
24
当i>j时,由对称关系,交换i与j即可。 即有k=j*n-+i-j。 故s[k]与a[i][j]的对应关系为: i*n-+j-i i≤j K= j*n-+i-j i>j
2012年11月1日
25
2.三角矩阵 (1)下三角矩阵 下三角矩阵的压缩存放与对称矩阵用下三角形式存放类似, 但必须多一个存储单元存放上三角部分元素,使用的存储 单元数目为n(n+1)/2+1。故可以将nn的下三角矩阵压缩存 放到只有n(n+1)/2+1个存储单元的向量中。
2012年11月1日
4
3.多维数组 同理,三维数组最多可有三个直接前驱和三个直接后继, 三维以上的数组可以作类似分析。因此,可以把三维以上 的数组称为多维数组,多维数组可有多个直接前驱和多个 直接后继,故多维数组是一种非线性结构。
2012年11月1日
5
5.1.2 多维数组在计算机内的存储
怎样将多维数组中的元素存入到计算机内存中呢?由于计 算机内存结构是一维的(线性的),因此,用一维内存存 放多维数组就必须按某种次序将数组元素排成一个线性序 列。
但是,将n阶对称方阵压缩存放到一个向量空间s[0]到 s[n(n+1)/2-1] 中,我们怎样找到s[k]与a[i][j]的一一对应关系 呢?使我们在s[k]中能直接找到a[i][j]。
2012年11月1日
18
我们仅以行优先顺序存放且分两种方式讨论:
(1)只存放下三角部分 由于对称矩阵关于主对角线对称,故我们只需存放主对角线 及主对角线以下的元素。这时,a[0][0]存入s[0],a[1][0] 存 入s[1],a[1][1]存入s[2],…,a[n-1][n-1]存入n ( n + 1) s -1 中,具体过程参见图5-4。 2
2012年11月1日
2
2.二维数组 二维数组可以看成是向量的推广。例如,设A是一个有m 行n列的二维数组,则A可以表示为:
a 00 a 10 A = a m -10
2012年11月1日
0
1
2
3
4
5
6
7
……
n ( n +1 ) 2
-3
n ( n +1 ) 2
-2
n ( n +1 ) -1 2
a00 a01 a02 a03 a04 a05 a06 a07
……
an-2n-2
an-2n-1
an-1n-1
2012年11月1日
(b)上三角矩阵的压缩存储形式 图5-5 对称矩阵及用上三角压缩存储
第5章 多维数组和广义表
本章学习内容
5.1 多维数组
5.2 多维数组的存储结构
5.3 特殊矩阵及其压缩存储
5.4 稀疏矩阵
5.5 广义表
2012年11月1日 1
5.1 多维数组
5.1.1 多维数组的概念
1.一维数组
一维数组可以看成是一个线性表或一个向量(第2章中 已经介绍),它在计算机内是存放在一块连续的存储 单元中,适合于随机查找。
2012年11月1日
6
5.2 多维数组的存储结构
由于数组是先定义后使用,且为静态分配存储单元。本章中, 仅重点讨论二维数组的存储,三维及三维以上的数组(多 维),可以作类似分析。 多维数组的顺序存储有下面两种形式:行优先顺序存储和列 优先顺序存储。
2012年11月1日
7
5.2.1 行优先顺序
1.存放规则 行优先顺序也称为低下标优先存储,或左边下标优先于右 边下标。具体实现时,按行号从小到大的顺序,先将第一 行中元素按列号从小到大全部存放好,再存放第二行元素, 第三行元素,依此类推……
2012年11月1日
8
2.地址计算 设a00的内存地址为LOC(a00),则aij的内存地址按等差数列 计算为LOC(aij)=LOC(a00)+(i×n+j)×d。 同理,三维数组Am×n×p按行优先顺序存放的地址计算公式 为:LOC(aijk)=LOC(a000)+(i×n×p+j×p+k)×d。
16
图5-3 一个7×7的三对角矩阵
5.3.2 压缩存储
在上面介绍的几种特殊矩阵(对称矩阵、上三角矩阵、下 三角矩阵、三对角矩阵、多对角矩阵等)中,元素的分布 有规律,从节省存储单元的角度来考虑,可以进行压缩存 储。
2012年11月1日
17
1.对称矩阵
若矩阵Ann是对称的,对称的两个元素可以共用一个存储单 元,这样,原来n 阶方阵需n2个存储单元,若采用压缩存储, 仅需n(n+1)/2个存储单元,将近节约一半存储单元,这就是 实现压缩的好处。
2012年11月1日
12
5.3.1 特殊矩阵
2 3 1 A= 5 4 2 4 6 3
图5-1 一个对称矩阵
1.对称矩阵 若一个n阶方阵A中元素满足下列条件: aij=aji 其中0≤i, j≤n-1,则称A为对称矩阵。 例如,如图5-1所示是一个3×3的对称矩阵。
2012年11月1日
9
Βιβλιοθήκη Baidu.2.2 列优先顺序
1.存放规则 列优先顺序也称为高下标优先存储,或右边下标优先于 左边下标。具体实现时,按列号从小到大的顺序,先将 第一列中的元素按行号从小到大的顺序全部存放好,再 存放第二列元素,第三列元素,依此类推……
2012年11月1日
10
2.地址计算
对二维数组Am×n有:LOC(aij)=LOC(a00)+(j×m+i)×d 对三维数组Am×n×p有: LOC(aijk)=LOC(a000)+(k×m×n+j×m+i)×d
a 00 a 10 a 20 ... n -10 a
2012年11月1日
a 11 a 21 ... a n -11
a 22 ... a n -12 ... ...
... a n -1n -1
23
这时s[k]与a[i][j]的对应关系可以按下面的方法推出: 当i≤j时,aij在上三角部分中,前面的行号从0~i-1,共有i行, 第0行有n个元素,第1行有n-1个元素,…,第i-1行有n-(i-1) 个元素,因此,前面i行共有n+n-1+…+n-(i-1)=i*n-个元素, 而aij是本行第j-i个元素,故k=i*n-+j-i。
2012年11月1日
20
这时s[k]与a[i][j]的对应关系为: i(i+1)/2+j 当 i≥j k= j(j+1)/2+i 当 i<j
上面的对应关系读者很容易推出: 当i≥j时,aij在下三角部分中,aij前面有i行,共有1+2+3+…+i 个元素,而aij是第i行的第j个元素,即有 k=1+2+3+…+i+j=i(i+1)/2+j。 当i<j时,aij在上三角部分中,但与aji对称,故只需在下三角 部分中找aij即可,故只需将i与j交换即可,即k=j(j+1)/2+i。
假设仍按行优先存放,这时s[k]与a[i][j]的对应关系为: i(i+1)/2+j i≥j k= n(n+1)/2 i<j
2012年11月1日 26
(2)上三角矩阵 和下三角矩阵的存储类似,共需n(n+1)/2+1个存储单元, 假设仍按行优先顺序存放,这时s[k]与a[i][j]的对应关系 为: i*n- i(i-1)/2+j-i i≤j k= n(n+1)/2 i>j
2012年11月1日
15
3.对角矩阵
若矩阵中所有非零元素都集中在以主对角线为中心的带状区 域中,区域外的值全为0,则称为对角矩阵。常见的对角矩阵 有:三对角矩阵、五对角矩阵、七对角矩阵等。 例如,如图5-3所示为7×7的三对角矩阵。
00 a a 10 0 0 0 0 0
2012年11月1日
a 01 a11 a 21 0 0 0 0
0 a12 a 22 a 32 0 0 0
0 0 a 23 a 33 a 43 0 0
0 0 0 a 34 a 44 a 54 0
0 0 0 0 a 45 a 55 a 65
0 0 0 0 0 a 56 a 66
a 01 a 11
a m -11
a 0 n -1 a 1 n -1 a m -1 n - 1
3
在此,可以将二维数组A看成是由m个行向量[X0,X1,…, Xm-1]T组成,其中,Xi=( ai0, ai1, …,ain-1), 0≤i≤m-1; 也可以将二维数组A看成是由n个列向量[y0, y1, …,yn-1] 组成,其中 yi=(ai0, a1i, …,am-1i),0≤i≤n-1。由此可 知二维数组中的每一个元素最多可有两个直接前驱和两个 直接后继(边界除外),故是一种典型的非线性结构。
14
a 00 a 01 ... c ... c a 0 n a 00 1 a c 10 a 11 ... c a 11 ... a 1 n 1 ... ... ... ... ... ... ... ... a c n 10 a n ... a n n 11 1 1 c c a n n 1 1 (a)上三角矩阵 (b)下三角矩阵 图5-2 三角矩阵
2
2012年11月1日
22
00 a ...
a 01 a 11 ...
a 02 a 12 a 22 ...
(a)一个上三角矩阵
a 0n -1 a 1n -1 a 2n -1 ... ... a n -1n -1 ... ... ...
(a)一个下三角矩阵
19
0
1
2
3
4
5
6
7
…
n ( n +1 ) 2
-3
n ( n +1 ) 2
-2
n ( n +1 ) 2
-1
a00 a10 a11 a20 a21 a22 a30 a31 …
an-1n-3
an-1n-2
an-1n-1
(b)下三角矩阵的压缩存储形式 图5-4 对称矩阵及用下三角压缩存储