稀疏矩阵的快速转置

首先,我们使用三元组来描述稀疏矩阵,三元组包含矩阵元素的位置信息和元素值。使用三元组表来描述所有的非0元素。

然后,转置指的是将矩阵第i行第j列的元素调整到第j行第i列上。

一、一般的转置算法

一般的转置算法是首先遍历三元组表A,找到列数为0的元素,依次转置到B中。

然后,再次遍历遍历三元组表A,找到列数为1的元素,依次转置到B中。

遍历三元组表A,找到列数为2的元素,依次转置到B中。

.。。。

遍历三元组表A,找到列数为n-1的元素,依次转置到B中。

经过这样的遍历,算法时间复杂度为O(t*n)。 t为三元组个数,n为矩阵列数。

二、稀疏矩阵快速转置

那么,快速转置到底快在什么地方呢?

它通过找到一些规律,从而不需要多次遍历三元组表,只需要遍历一次三元组表就能将每一个元素转置成功,但它额外利用了辅助数组,因此它是以空间换时间。所以时间复杂度为O(n+t)。扫描三元组表是O(t),初始化数组是O(n)。所以时间复杂度是O(n+t)。

它找到的是什么规律呢?

1.转置前元素列号j就是转置后元素的行号

2.第j列中第一个非零元素在转置矩阵中的存储位置为:前j列元素的个数之和

有了以上两点发现后,就可以实现快速转置了。

num[]数组用来记录每一列的非零元素个数,k[j]数组计算前j列元素的个数和。

这样,每一列的第一个非0元素就可以填入自己的位置,k[j]数组进行+1操作,为本列其他非0元素提供存储的位置下标。

相关推荐
生态遥感监测笔记11 分钟前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲40 分钟前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东1 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
pumpkin845142 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的2 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
mit6.8242 小时前
7.6 优先队列| dijkstra | hash | rust
算法
2401_858286112 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
guygg883 小时前
基于matlab的FIR滤波器
开发语言·算法·matlab
双叶8363 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
ysh98884 小时前
PP-OCR:一款实用的超轻量级OCR系统
算法