第五章 数组 5.1 数组的定义 5.2 数组的表示和实现* 5.3 数组的压缩.

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

易經與花相 國學研究法專題報告.
马克思主义哲学发展史(下).
戚继光抗倭.
历史上的中日关系.
“四文”交融,虚实并举,打造具有鲜明职教特色的校园文化 ——江苏省扬州商务高等职业学校校园文化建设汇报
规范母婴保健服务 努力降低孕产妇死亡率 市卫生局基妇科 朱静.
数据结构 2014年3月.
第五章 数组和广义表.
数据结构 课程性质:专业基础课 授课时段:2004年下半学期 授课单位:软件学院 任课教师:李青山、徐学洲.
第十章 内部排序 10.1 概述 10.2 插入排序 直接插入排序 其他插入排序 希尔排序
第2章 数组与结构 本章主题:ADT数组、结构与共同体、ADT多项式、矩阵 教学目的:掌握ADT数组的定义、运算及存储结构
第4章 串、数组和广义表 丽水学院工学院.
第二章 矩阵(matrix) 第8次课.
第五章 数组和广义表 £5.1 数组 £5.2 矩阵的压缩存储 £5.3 广义表 £5.1.1 数组的定义 £5.2.1 特殊矩阵
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
第五章 数组和广义表.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
Array & General List.
第 4章 串和数组(二) 本讲主要内容: 数组的定义及其顺序表示和实现。 矩阵的压缩存储。 广义表的定义。
串和数组.
数据结构 第5章 数组与广义表.
第 3 讲 线性表(一).
第一章 绪论.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
第4章 串、数组和广义表 4.1 串 4.2 数组 4.3 广义表.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
資料結構 第4章 堆疊.
第4章 串和数组 本章主要介绍下列内容: 串的定义、存储结构和基本运算 数组的定义、基本运算和存储结构 特殊矩阵的压缩存储.
顺序表的插入.
淑明女子大學 在哪裡?. 淑明女子大學 在哪裡? 學校週遭 第一次 剛到淑大時?
从zval看PHP变量
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第五章 数组和广义表.
第6章 数组与广义表 6.1 数组的定义及其基本操作 6.2 数组的顺序存储结构 6.3 矩阵的压缩存储 6.4 广义表的概念
Chapter 05 Sparse Matrix & Lists 第五章 稀疏数组和广义表
顺序表的删除.
线性代数 第二章 矩阵 §1 矩阵的定义 定义:m×n个数排成的数表 3) 零矩阵: 4) n阶方阵:An=[aij]n×n
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
第5章 数组和广义表 本章主题:多维数组、特殊矩阵和广义表 教学目的:掌握数组和广义表的定义、运算及存储结构 教学难点:矩阵的压缩存储
第四章 串和数组 4.1 串的定义* 4.2 串的表示和实现* 4.3 数组 4.4 数组的压缩.
单链表的基本概念.
顺序查找.
第1章 绪论(二) 教学目标 理解算法的特性及评价标准 掌握算法时间复杂度和空间复杂度的分析方法 1/
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
第 六 讲 栈和队列(一).
本 章 说 明 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的存贮结构
树和图 tree and graph 蔡亚星.
第七、八次实验要求.
第三章 行列式 第一节 线性方程组与行列式 第二节 排列 第三节 n阶行列式 第四节 余子式与行列式展开 第五节 克莱姆规则.
2.2矩阵的代数运算.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
线 性 代 数 厦门大学线性代数教学组 2019年5月12日4时19分 / 45.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 正文匹配模式 5.4 正文编辑 5.5 数组 5.6 数组的压缩.
Ch.5 数组和广义表 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
恩典夠用.
基于列存储的RDF数据管理 朱敏
数据结构概论 第5章 数组和广义表 董黎刚 浙江工商大学信电学院.
定义5 把矩阵 A 的行换成同序数的列得到的矩阵,
4.2 图的存储结构(cont.) v1 v2 v3 v4 v5 vertex= v1 v2 v3 v4 v5 v
顺序查找与二分查找复习.
插入排序的正确性证明 以及各种改进方法.
§4.5 最大公因式的矩阵求法( Ⅱ ).
第5章 其他线性数据结构.
第二章 线性表 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
‘人因罪與神隔絕’ 左邊代表每一個人像你和我。 黑暗代表我們的罪。 聖經說: 世人都犯了罪,虧缺了神的榮耀。 (羅3:23)
Presentation transcript:

第五章 数组 5.1 数组的定义 5.2 数组的表示和实现* 5.3 数组的压缩

5.1数组的定义 ADT Array{ 数据对象:D={aj1aj2…ajn| aj1aj2…ajn∈Elemset, ji=0,1,…bi-1,bi是数组第i维的长度,n是位数} 数据关系:R={R1,R2…Rn} Ri={< aj1…aji…ajn , aj1…aji+1…ajn >| aj1…aji…ajn , aj1…aji+1…ajn ∈D,i=2,3…n 0<=jk<=bk-1,1<=k<=n,k!=I 0<=ji<=bi-1 }

基本操作 : 二维数组定义 N维数组定义 initArray(&A,n,bound1,bound2...boundn) DestroyArray(&A) Value(A,&e,index1,index2......indexn) Assign(&A,e,index1,index2......indexn) }ADT Array 二维数组定义 其数据元素是一维数组的线形表 N维数组定义 其数据元素是N-1维数组的线形表

5.2数组的顺序表示和实现 数组元素的两种存储方式 数组中元素在内存映象中的关系: 行主序存储 列主序存储 二维数组A[m][n] LOC(i,j)=LOC(0,0)+(i*n+j)*L 三维数组B[p][m][n] LOC(i,j,k)=LOC(0,0,0)+(i*m*n+j*n+k)*L 多维: LOC(j1,j2…jn)=LOC(0,0…0)+(b2*…*bn*j1+ b3*…*bn*j2 +…+bn*jn-1+jn )*L=LOC(0,0…0)+∑ciji cn=L,ci-1=bi*ci,1<i<=n

数组应用 例寻找两个串最长的公共子串 通常的匹配算法复杂度O(m*n2) 利用二维数组构造串之间的关系来求解 S1=“sgabacbadfgbacst” S2=“gabadfgab” 最大公共子串“badfg”。 算法时间复杂度 O(m*n)

s g a b c d f t 特征值 i-j=0 特征值 i-j=-(n-1) i-j 为固定值 特征值 i-j=m-1 Mat[0,0] Mat[m-1,n-1]

5.3 数组的压缩 特殊形状矩阵的存储表示(下标从0开始) 对称矩阵:A[n][n]存储到B[n(n+1)/2] A[i,j]->B[k] k=(i+1)i/2+j i>=j k=(j+1)j/2+i i<j 三角矩阵:A[n][n]存储到B[n(n+1)/2] A[i,j]->B[k] k=(i+1)i/2+j i>=j 0 i<j 带状矩阵A[n][n]存储到B[3n-2] A[i,j]->B[k] k=3i-1+(j-i+2)-1=2i+j |i-j|<=1 随机稀疏矩阵 非零元比零元少的多且分布无规律的矩阵。

随机稀疏矩阵的存储表示 三元组顺序表 const MAXSIZE=1000 typedef struct{ int i,j; ElementType e; }Triple; Triple data[MAXSIZE+1]; int mu,nu,tu; }TSMatrix;

三元组顺序表示例 (下标从1开始) (b) T.data (a) M.data i j e 1 2 12 3 9 -3 6 14 4 24 5 18 15 -7 i j e 1 3 -3 6 15 2 12 5 18 9 4 24 -7 14 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 (b) T.data (a) M.data cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1] 2<=col<=nu col 1 2 3 4 5 6 7 num[col] cpot[col] 8 9

矩阵转置 “按需点菜”的思想 “按位就座”的思想 void transpose(ElemType M[][],T[][]) 时间复杂度O(n×m) “按需点菜”的思想 复杂度O(M.nu×M.tu) “按位就座”的思想 建立辅助数组 num[n] cpot[n] void createpos(TSMatrix M) 快速转置 status fastTransposeSMatrix(TSMatrix M, TSMatrix T) 时间复杂度 O(M.nu+M.tu)

逻辑链接的顺序表 为了能随机存取三元组表示数组的任意一行非零元素,在建立三元组顺序表存储结构同时建立rpos[n]辅助数组,这种带行链接信息的三元组表称为“逻辑连接的顺序表” typedef struct{ Triple data[MAXSIZE+1]; int rpos[MAXMN+1]; int mu,nu,tu; }RLSMatrix;

十字链表 矩阵运算增加或减少非零元时,使用链表结构来表示三元组序列。 typedef struct OLNode{ int i,j; ElementType e; struct OLNode *rnext,*cnext; }OLNode,*Olink; typedef struct { Olink *rhead,*chead; int mu,nu,tu; }CrossList;

谢 谢

对称阵

条带阵

三元组存储数组的快速转置 Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) { // 算法5.2 // 采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if (! T.tu) return FAIL; for (col=1; col<=M.nu; ++col) num[col] = 0; for (t=1; t<=M.tu; ++t) // 求 M 中每一列所含非零元的个数 ++num[M.data[t].j]; cpot[1] = 1; // 求 M 中每一列的第一个非零元在 b.data 中的序号 for (col=2; col<=M.nu; ++col) cpot[col] = cpot[col-1]+num[col-1]; for (p=1; p<=M.tu; ++p) { col = M.data[p].j; q = cpot[col]; T.data[q].i =M.data[p].j; T.data[q].j =M.data[p].i; T.data[q].e =M.data[p].e; ++cpot[col]; } // for } // FastTransposeSMatrix