1.稀疏矩阵:矩阵中绝大多数的元素值为零,只有少数的非零元素值;
2.对稀疏矩阵采用压缩存储的目的是为了节省存储空间,并且,稀疏矩阵压缩存储后,还要能够比较方便地访问其中的没个元素(包括零元素和非零元素);
3.对稀疏矩阵进行压缩存储有两种方法:稀疏矩阵的三列二维数组表示和十字链表方法。
稀疏矩阵的三列二维数组表示:
(1)每个非零元素用三元组表示:(i,j,v)分别对应(行,列,非零元素);
(2) 为了表示唯一性,除了每个非零元素用一个三元组表示外,在所有的非零元素三元组之前添加一组信息(I,J,V)对应(总行数,总列数,非零元素个数),也就是说,我们要确定确切的稀疏矩阵,必须先知道该稀疏矩阵的总行数,总列数,非零个数;
(3)为了便于在三列二维数组B中访问稀疏矩阵A中的各元素,通常还附设两个长度与稀疏矩阵A的行数相同的向量POS与NUM。其中POS[K]表示稀疏矩阵A中的第k行的第一个非零元素(如果有的话)在三列二维组B中的行号;NUM[k]表示稀疏矩阵A中第k行中非零元素的个数;
pos[0]=0; pos[k]=pos[k-1]+num[k-1]
4.三列二维数组表示的稀疏矩阵类如下:
文件名:X_Array.h
#include <iostream>
#include <iomanip>
using namespace std;
template <class T>
struct B
{int i; //非零元素所在行号int j; //非零元素所在列号T v; //非零元素值
};
//三列二维数组表示的稀疏矩阵类
template <class T>
class X_Array
{
private:int mm; //稀疏矩阵行数int nn; //稀疏矩阵列数int tt; //非零个数B<T> *bb; //三列二维数组空间int *pos; //某行第一个非零元素在b中的下标int *num; //某行非零元素的个数
public:void in_X_Array(); // 以三元组形式键盘输入稀void cp_X_Array(int,int,int,B<T>[]); // 复制三元数组void th_X_Array(int,int,T[]); // 由一般稀疏矩阵转换void prt_X_Array(); // 按行输出稀疏矩阵X_Array tran_X_Array(); // 稀疏矩阵转置X_Array operator +(X_Array &); // 稀疏矩阵相加X_Array operator *(X_Array &); // 稀疏矩阵相乘};// 以三元组形式键盘输入稀疏矩阵非零元素template <class T>
void X_Array<T>::in_X_Array()
{int k,m,n;cout<<"输入行数 列数 非零元素个数:"<<endl;cin>>mm
本文发布于:2024-01-28 19:39:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064419499794.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |