13

严蔚敏视频 笔记13

第五章 数组和广义表

5.1 数组的类型定义

多维数组

ADT Array {
   
数据对象:

    D={aj1j2…jn|n>0
称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2…jn∈ElemSet}
   
数据关系:

    R={R1,R2,…,Rn}
    Ri={<aj1…ji…jn,aj1…ji+1…jn>|
        0<=jk<=bk-1,1<=k<=n,
       
k<>i,0<=ji<=bi-2,
        aj1…ji…jn,aj1…ji+1…jn∈D,
        i=2,3…n}
   
基本操作:

    InitArray(&A,n,bound1,…,boundn)
构造
    DestroyArray(&A)
销毁
    Value(A,&e,index1,…indexn)
取值
    Assign(&A,e,index1,…indexn)
赋值
}

5.2 数组的顺序表示和实现
类型特点:
1
)只有引用型操作,没有加工型操作
2
)数组是多维的结构而存储空间是一个一维的结构

有两种顺序映象的方式:
行序为主序(低下标优先)
列序为主序(高下标优先)

LOC[j1,j2,…jn]=LOC[0,0,…0]+Σciji
其中cn=L,ci-1=bi*ci,1<i<=n

基地址

n维数组的映象函数

数组元素的存储位置是其下标的线性函数

5.3 稀疏矩阵的压缩存储

假设mn列的矩阵含t个非零元素,则称
δ
t/(m*n) 为稀疏因子
δ<=0.05
的矩阵为稀疏矩阵

用二维数组表示出现的问题:
1
)零值元素占空间很大
2
)运算中进行了很多零值的运算

解决问题的原则:
1
)尽可能少存或不存零值元素
2
)尽可能减少没有实际意义的运算
3
)运算方便:
能尽可能快的找到与下标(i,j)对应的元素
能尽可能快的找到同一行或同一列的非零值元素

1)特殊矩阵的压缩存储
例如:三角矩阵、对角矩阵

2)随机稀疏矩阵的压缩存储
非零元分布不规则

一、三元组顺序表
#define MAXSIZE 12500
typedef struct {
    int i,j; //
该非零元的行下标和列下标
    ElemType e;
} Triple;

typedef union {
    Triple data[MAXSIZE+1];
    int mu,nu,tu; //
行数、列数、非零元的个数

} TSMatrix;

从第一个下标开始

求转置矩阵的操作:
用常规的二维数组表示的算法:
for(col=1;col<=nu;++col)
    for(row=1;row<=mu;++row)
        T[col][row]=M[row][col];

时间复杂度:O(mu*nu)

如何实现一次到位?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值