18722 稀疏矩阵的运算

news2024/9/24 20:07:17

思路:
快速转置算法的基本思想是预先计算出转置后的三元组在新数组中的位置,然后直接将元素放到对应的位置上。这样做的好处是只需要遍历一次原数组,就可以完成转置操作。

步骤如下:
1. 初始化一个新的三元组数组,用于存储转置后的矩阵。
2. 初始化一个数组,用于存储原矩阵每列的非零元素个数。
3. 遍历原矩阵的三元组,统计每列的非零元素个数。
4. 根据每列的非零元素个数,计算出转置后的三元组在新数组中的位置。
5. 遍历原矩阵的三元组,将每个元素放到新数组的对应位置上。

伪代码:
```
function fastTranspose(M, T):
    初始化数组 numCols 和 position
    for i in range(1, M.cols+1):
        numCols[i] = 0
    for i in range(1, M.t+1):
        numCols[M.data[i].j] += 1
    position[1] = 1
    for i in range(2, M.cols+1):
        position[i] = position[i-1] + numCols[i-1]
    for i in range(1, M.t+1):
        j = position[M.data[i].j]
        T.data[j].i = M.data[i].j
        T.data[j].j = M.data[i].i
        T.data[j].e = M.data[i].e
        position[M.data[i].j] += 1
```

C++代码:

#include <iostream>
#include <vector>

using namespace std;

struct Triple {
    int i, j, e;
};

void fastTranspose(vector<Triple>& M, vector<Triple>& T, int n, int m, int k) {
    vector<int> numCols(m+1, 0), position(m+1, 0);
    T.resize(k+1);
    for (int t = 1; t <= k; ++t)
        ++numCols[M[t].j];
    position[1] = 1;
    for (int col = 2; col <= m; ++col)
        position[col] = position[col-1] + numCols[col-1];
    for (int t = 1; t <= k; ++t) {
        int j = position[M[t].j];
        T[j].i = M[t].j;
        T[j].j = M[t].i;
        T[j].e = M[t].e;
        ++position[M[t].j];
    }
}

int main() {
    int n, m, k;
    cin >> n >> m >> k;
    vector<Triple> M(k+1), T;
    for (int t = 1; t <= k; ++t)
        cin >> M[t].i >> M[t].j >> M[t].e;
    fastTranspose(M, T, n, m, k);
    for (int t = 1; t <= k; ++t)
        cout << T[t].i << " " << T[t].j << " " << T[t].e << "\n";
    return 0;
}


这段代码首先定义了一个结构体 Triple,用于存储三元组的行号、列号和值。然后定义了一个函数 fastTranspose,用于进行快速转置。最后在 main 函数中,读取输入的矩阵,调用 fastTranspose 函数进行转置,并输出转置后的矩阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库性能监控如何做?简单3步实现慢SQL、长事务监控!

1.背景说明 对于使用关系型数据库的系统而言&#xff0c;在系统投产上线后&#xff0c;及时发现程序运行中的慢SQL语句&#xff0c;能有效降低系统运行风险&#xff1b;对于分布式应用系统来说&#xff0c;在系统日常运行中&#xff0c;为避免因数据库长事务导致主备切换风险&…

2024年 AI大模型我该买一张什么卡?

有钱啥也不用说&#xff0c;买张最贵的就是了。对囊中羞涩的我还说&#xff0c;我该买张什么样的显卡呢&#xff1f; 我的旧显卡RTX1060 6G&#xff0c;满负荷消耗功率110多瓦&#xff0c;几乎达到设计最大TDP&#xff0c;周日时拿了朋友的RTX3060Ti 8G&#xff0c;发现是锁算…

免费与付费代理IP工具的优缺点分析

面对市场上众多的代理IP工具&#xff0c;选择合适的工具成为一项挑战。本文将深入分析免费与付费代理IP工具的优缺点&#xff0c;协助您做出明智的选择。 一、免费代理IP工具的优缺点 优点&#xff1a; 零成本&#xff1a;最大的优点在于无需任何费用。对于预算有限的用户&a…

【资源一号02C卫星】

资源一号02C卫星 资源一号02C卫星是中国航天科技集团公司所属中国空间技术研究院负责研制生产的一颗重要遥感卫星。以下是关于该卫星的详细介绍&#xff1a; 一、基本信息 发射时间&#xff1a;2011年12月22日11时26分发射地点&#xff1a;中国太原卫星发射中心运载火箭&am…

加载数据模型:在数据采集中实现动态数据处理

介绍 在现代网络爬虫技术中&#xff0c;数据的动态处理成为了提升采集效率和准确性的重要手段。随着目标网站数据的多样性和复杂性增加&#xff0c;静态数据采集方法逐渐无法满足需求。本文以拼多多为例&#xff0c;探讨如何通过加载数据模型实现动态数据处理&#xff0c;并结…

【大模型-驯化】成功搞懂大模型的jsonl数据格式处理和写入,通过pandas读取和保存JSONL文件

【大模型-驯化】成功搞懂大模型的jsonl数据格式处理和写入&#xff0c;通过pandas读取和保存JSONL文件 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &…

文件上传-php

查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…

简单计算器(python基础代码撰写)

简单计算器&#xff1a;仅适用无括号加减乘除&#xff0c;算法初阶&#xff0c;代码基础&#xff0c;不调库或模块“纯”手撕。 (笔记模板由python脚本于2024年09月22日 12:08:02创建&#xff0c;本篇笔记适合喜欢用python解决实际问题的coder翻阅) 【学习的细节是欢悦的历程】…

Java反射机制入门:解锁运行时类信息的秘密

反射技术&#xff1a; 其实就是对类进行解剖的技术 类中有什么&#xff1f;构造方法 成员方法成员变量 结论&#xff1a;反射技术就是把一个类进行了解剖&#xff0c;然后获取到 构造方法、成员变量、成员方法 反射技术的应用案例&#xff1a; idea框架技术&#xff1a;Spr…

【VMware】虚拟机安装

文章目录 一、安装二、登录配IP1.登录成功后&#xff1a;2.设置DNS地址3.重启网络服务 一、安装 1.tools文件中&#xff0c;准备VMware软件&#xff0c;与CentOS7.4安装包 详情操作 2. VMware软件安装成功后查看网络连接&#xff0c;出现新的以太网&#xff0c;Vmnet1&#xf…

MiniCPM-V 2.6训练时fuse_adam报错

原本pip install deepspeed安装了0.15.1版本的&#xff0c;但是在进行sft训练的时候还是报错。大概就是fuse_adam这个op编译有错&#xff0c;c版本要大于17什么的&#xff0c;一堆错。看了一堆解决方案尝试后发现如下这样的有用&#xff1a; 1.下载DeepSpeend源码 git clone ht…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

4款思维导图在线工具,新手速来!

想要工作更顺畅&#xff0c;办公软件少不了&#xff01;让咱们工作生活变得更加井井有条的小能手——思维导图软件。没错&#xff0c;就是那些能让你在头脑风暴、项目规划、会议记录时&#xff0c;思路瞬间清晰&#xff0c;逻辑一目了然的神奇工具。我亲身体验过的四款款热门软…

Web端云剪辑解决方案,提供前端产品源码

美摄科技作为业界领先的视频技术服务商&#xff0c;匠心打造Web端云剪辑解决方案&#xff0c;以前沿技术赋能企业用户&#xff0c;开启视频创作与编辑的新纪元。 【云端赋能&#xff0c;重塑剪辑体验】 美摄科技的Web端云剪辑解决方案&#xff0c;颠覆了传统视频编辑的局限&a…

Excel VLOOKUP函数怎么用?vlookup函数的使用方法及案例

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50e; 在Excel的世界里&#xff0c;VLOOKUP函数无疑是查询和数据分析中的明星。无论是从庞大的数据表中提取特定信息&#xff0c;还是进行数据的快速匹配&#xff0c;VLOOKUP都能大显身手。今天&#xff0c;我们将深…

多机器学习模型学习

特征处理 import os import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.model_selection import StratifiedShuffleSplit from sklearn.impute import SimpleImputer from sklearn.pipeline import FeatureUnion fr…

行业副教授亲授,好评如潮丨合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等技能,助力精准决策!

目录 第一章 InSAR技术应用现状分析及其发展 第二章 InSAR原理、技术方法讲解 第三章 数据处理环境建立与软件熟悉 第四章 SAR影像数据获取、DEM数据获取 InSAR数据前处理技术 第五章 InSAR地形三维重建 第六章 DInSAR形变信息提取 第七章 时序InSAR技术形变速率与形变时…

【C++】检测TCP链接超时——时间轮组件设计

目录 引言 时间轮思想 设计的核心思路 完整代码 组件接口 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 对于高并发的服务器来说&#xff0c;链接是一种比较珍贵的资源&#xff0c;对不活跃的链接应该及时释放。判断连接是否活跃的策略是——在给定的时间内&#…

04 面部表情识别:Pytorch实现表情识别-表情数据集训练代码

总目录:人脸检测与表情分类 https://blog.csdn.net/whiffeyf/category_12793480.html 目录 0 相关资料1 面部表情识数据集2 模型下载3 训练0 相关资料 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/1…

017_FEA_CSG_in_Matlab新的统一有限元分析工作流之2D几何

Matlab新的统一有限元分析工作流 从2023a开始&#xff0c;Matlab提供了一个统一有限元分析工作流&#xff08;UFEAW&#xff0c;unified finite element analysis workflow&#xff09;。 这个新的工作留提供一个统一的接口来求解三类问题&#xff0c;并且可以用同一套数据随…