首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

设计一个稀疏矩阵,该如何处理

2012-03-04 
设计一个稀疏矩阵说明:该矩阵行列数都比较大,能达到几十上百万;要求:无论按行还是按列查询,时间复杂度在lo

设计一个稀疏矩阵
说明:该矩阵行列数都比较大,能达到几十上百万;
要求:无论按行还是按列查询,时间复杂度在log(n)以内;
  方便插入和整列整行的删除操作;
  尽量节省空间;

[解决办法]
看看这种, Hmxn 
H a00 a01 a02 …… a0n-1
…… …… …… …… ……
am-1 0 …… am-1 n-1
//只是存储非0值的列值和值

//每行中的一个值
typedef struct tag_Ver
{
int col; //该值在这一行中的位置
int nValue; //值
struct tag_Ver *pNext; //右边的一个
}Ver;
//每一行
typedef struct tag_Row
{
Ver *pVer; //指向这一行中的值
struct tag_Row *pNext; //指向下一行
}Row;
typedef struct tag_Matrix
{
int m; //m
int n; //n
Row *pHead; //行的开始
}Matrix;
图形说明如下:
■代表一行 
○代表这一行中具体的值节点
//矩阵图形如下:
H

pHead

■→○→○→ …… →○

■→○→○→ …… →○

……

■→○→○→ …… →○

//实现说明
他的加实现起来有点复杂,乘法实现起来比较简单
插入行比较简单,但是插入列就有点麻烦了

当然如果你不怕麻烦可以用《数据结构》严蔚敏 编著 上的十字链表

热点排行