当前位置: 首页 > java >正文

【数据结构】稀疏矩阵的快速转置

稀疏矩阵的快速转置

如图给出一个稀疏矩阵,要求表示出它的转置矩阵

在这里插入图片描述

由这个矩阵我们能轻松得到它的三元组顺序表

6行(x坐标)7列(y坐标)8个元素
1212
139
31-3
3614
4324
5218
6115
64-7

接下来我们同样把转置后的矩阵的三元组顺序表表示出来

在这里插入图片描述

7行(x坐标)6列(y坐标)8个元素
13-3
1615
2112
2518
319
3424
46-7
6314

我们要如何才能通过第一个三元组顺序表得到第二个三元组顺序表呢

按照最简单的思路,我们一般会通过双重循环

朴素的双重循环

按照列坐标从头到尾遍历,遇到1的时候,将i j互换放入到第二个三元组顺序表第一个位置

按照这样的方法,每一次都有可能需要遍历n次,一共需要走n趟,时间复杂度会是O(n²)级别


那么有没有一种方法能一步到位呢

快速转置

为实现快速转置,我们引入num数组和cpot数组

num[col]:表示矩阵M中第col列中非零元个数

cpot[col]:指示M中第col列第一个非零元在转置后的三元组顺序表中位置

显然有:

cpot[1] = 1;
cpot[col] = cpot[col - 1] + num[col - 1]; //第col - 1列第一个非零元的位置加上第col - 1列非零元的个数

由此,我们能构建出col、num[col]、cpot[col]的一个表

col1234567
num[col]2221010
cpot[col]1357889

这样我们遍历最开始的三元组顺序表

第一个列是2,我们查找 co l为 2 的 cpot[col] ,为 3,那么将原表第一行放入到转置后的第三个位置,同时 col 为 2 的 cpot[col] += 1

cpot[col] + 1 是因为若这一列还有非零元,那么肯定会是它的下一个位置

代码如下

Status FastTransposeSMatrix( TSMatrix M, TSMatrix &T ) {  // 采用三元组顺序表存储表示,求稀疏矩阵 M 的转置矩阵 TT.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if (T.tu) { // mu行 nu列for (col=1; col<=M.nu; ++col)    num[col] = 0; for (t=1; t<=M.tu; ++t)   ++ num[M.data[t].j];  // 求 M 中各列非零元的个数cpot[1] = 1;for (col=2; col<=M.nu; ++col)  cpot[col] = cpot[col -1] + num[col -1]; // 求 M 中各列的第一个非零元在 T.data 中的序号 for (p=1; p<=M.tu; ++p) {  // 转置矩阵元素  col = M.data[p].j;    q = cpot[col]; T.data[q].i = M.data[p].j;    T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e;   ++ cpot[col];  } // for} // ifreturn OK;
} // FastTransposeSMatrix
http://www.xdnf.cn/news/3797.html

相关文章:

  • 单细胞测序数据分析试验设计赏析(二)
  • Android 输入控件事件使用示例
  • 信息系统监理师第二版教材模拟题第一组(含解析)
  • HTML学习笔记(7)
  • PostgreSQL 的 ANALYZE 命令
  • PostgreSQL 查看索引碎片的方法
  • 论文阅读笔记——STDArm
  • PostgreSQL 判断索引是否重建过的方法
  • 4电池_基于开关电容的均衡
  • Ubuntu 系统上广受好评的浏览器推荐
  • 蘑菇管理——AI与思维模型【94】
  • 【翻译、转载】使用 LLM 构建 MCP
  • 【五一培训】Day 3
  • 机器学习+多目标优化的算法如何设计?
  • AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用
  • 位图的实现和拓展
  • P1603 斯诺登密码详解
  • 【项目篇之统一内存操作】仿照RabbitMQ模拟实现消息队列
  • Android运行时ART加载类和方法的过程分析
  • Python-Django系列—视图
  • 8.2 GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析
  • BUUCTF——Fake XML cookbook
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的爆品力构建研究
  • mysql-内置函数,复合查询和内外连接
  • Axure打开html文件失败,解决方案:
  • 外观模式(Facade Pattern)
  • MIT 6.S081 2020 Lab2 system calls 个人全流程
  • 【ThinkBook 16+ 电脑重做系统type-c接口部分功能失效解决方案】
  • 从github的插件直接导入unity
  • Android之Button、ImageButton、ChipGroup用法