稀疏矩阵-压缩存储-列转置法- 一次定位快速转置法

稀疏矩阵的压缩存储

压缩存储值存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,行优先级先后顺序依次存放。


wKiom1cU23Cx-s6VAAAuw18ILQU698.png

压缩存储:行优先一行一行扫 有效数据存入以为矩阵_arr

列转置法 : 从前向后遍历压缩矩阵,先找列号为0的存入 转置矩阵的压缩矩阵.然后从前向后找列号为1的 。。。直到转置矩阵的压缩矩阵大小和 原矩阵的一样大 这时就找完了

时间复杂度为    O(原矩阵列数 * 压缩矩阵长度)

一次定位快速转置法:

wKiom1cU3jTjgSceAABV3efSk_k745.png设置两个辅助矩阵 RowCounts 和 RowStart

RowCounts 记录 矩阵每列的有效元素元素的个数 (这里Row指的是转置矩阵的行 RowCount指的也就是转置矩阵 的 行有效元个数)


RowStart 记录的是  原矩阵 每列首个有效元素 在 转置矩阵 的压缩矩阵中的坐标 (也就是 转置矩阵 的 每行首个有效元素 在 转置矩阵 的压缩矩阵的 坐标)

RowStart[n]可以由 RowCount[n-1]和上一个RowStart[n-1]求得 n>0

RowStart[0] = 0;

利用 RowStart 可以实现 由 原矩阵 的压缩矩阵元素 到 转置矩阵的压缩矩阵 的一次快速定位

如:

wKioL1cU4xOQBDaRAAF397TvVtc149.png


#define _CRT_SECURE_NO_WARNINGS 1


#include <iostream>

#include <assert.h>

#include <vector>

#include <string>

using namespace std;


/***

*

*稀疏矩阵 

*压缩存储

*转置 (一般 和 快速转置)

*2016-4-18


*bozi

******************/



//三元组

template<class T>

struct Triple

{

size_t _row;

size_t _col;

T _value;


Triple()

{}


Triple(size_t row, size_t col, T value)

:_row(row)

,_col(col)

,_value(value)

{}

};


//稀疏矩阵

template<class T>

class SparesMatrix

{

public:

SparesMatrix();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值