- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6讲字符串、数组和特殊矩阵解析
6.4 特殊矩阵的压缩存储 矩阵是n×n的方阵,包括: 对称矩阵、三角矩阵、对角矩阵等。 以主对角线对称 1、对称矩阵的压缩存储 即: aij =aji 采用一维数组以行为主序存储下三角部分 a00 a10 a20 a11 a21 a22 … 0行 1行 2行 1、对称矩阵的压缩存储 如下对称矩阵压缩存储 一维数组最大元素个数至少是多少? 下三角元素个数: 1+2+3+…+n= 问题: 对于二维数组A来讲,都是以行号i (0≤i<n-1),列号j (0≤j<n-1)来访问 aij 的,则: 当用一维数组B压缩存储A时,如何根据(i,j)去找 aij 对应的元素 B[k] 呢? 如何根据 (i,j) 判断元素在二维数组中的位置? i=j 对角线处 i<j 上三角阵处 i>j 下三角阵处 必须给出: k= f (i,j) (1) 先计算(i,j) 位置上放的是下三角阵中的第几个元素? 0行~i-1行共存在B中的元素有: m1=1+2+3+…i=i(i+1)/2 i行存到B中的元素有: m2=j+1 由此:aij 是存到 B中的第m个元素: m=m1+m2= i(i+1)/2 +(j+1) 则:矩阵A中aij 在数组B中的下标: k=m-1= i(i+1)/2 +j 推导:k= f (i,j) (2) 而对上三角阵中的元素 aij 只需存取下三角阵中aji 对应的B[k] 故:对称矩阵的压缩存储有 k= i(i+1)/2 +j i≥j k= j(j+1)/2 +i i<j 推导:k= f (i,j) 2、三角矩阵的压缩存储 三角矩阵:上三角矩阵、下三角矩阵 一般情况下,常数C为0 (1) 下三角矩阵 aij= 0 ij 时 可能不为0 i≥j 时 下三角部分以行优先压缩存储到一维数组B中,B的最大元素个数至少为:n(n+1)/2 若aij对应B[k], 则: k= i(i+1)/2 +j i≥j 若 ij时, aij =0 (2) 上三角矩阵 aij= 0 ij 时 可能不为0 i≤j 时 上三角部分以行优先压缩存储到一维数组B中,B的最大元素个数至少为:n(n+1)/2 若aij对应B[k], 则: k= i.n - i(i-1)/2 + j-i i≤j 若 ij时, aij =0 推导 k= f (i,j) 计算(i,j) 位置上放的是上三角阵中的第几个元素? 0行~i-1行共存在B中的元素有: m1=i.n-(1+2+3+…(i-1))=i.n - i(i-1)/2 i行存到B中的元素有: m2=(j+1)-i =j- i+1 由此:aij 是存到 B中的第m个元素: m=m1+m2= i.n - i(i-1)/2 + j- i+1 则:矩阵A中aij 在数组B中的下标: k=m-1= i.n - i(i-1)/2 + j- i 推导:k= f (i,j) 6.5 稀疏矩阵 矩阵Am×n非0元素很少,分布无规律,称为稀疏矩阵。 若非0元素的个数为t,总元素个数为m*n 则当 f = t/(m*n) ≤ 5% 时 1、三元组顺序存储 (1) 存储思想 只存非零元素的行号、列号和对应元素值,按行优先存储到数组中去。 0 2 1 0 4 2 1 0 5 1 5 8 3 1 3 3 5 1 i j v 0 1 2 3 4 5 三元组存储结构: (2) 数据类型定义 假设:矩阵元素类型 int 三元组最大元素数定义 #define MAX 100 三元组一个结点类型 typedef struct{ int i, j; int v
文档评论(0)