CSP-202305-2-矩阵运算

CSP-202305-2-矩阵运算:题目链接

知识点一:申请矩阵

1.动态分配

// 申请
int** dynamicArray = new int*[rows];
for (int i = 0; i < rows; ++i) {dynamicArray[i] = new int[cols];
}// 释放
for (int i = 0; i < rows; ++i) {delete[] dynamicArray[i];
}
delete[] dynamicArray;

2.静态分配

const int N = 10010, D = 30;
int Array[N][D];

知识点二:矩阵乘法

void matrixMultiplication(long long** A, int rowsA, int colsA, long long** B, int rowsB, int colsB, long long** result) {for (int i = 0; i < rowsA; ++i) {for (int j = 0; j < colsB; ++j) {result[i][j] = 0;for (int k = 0; k < colsA; ++k) {result[i][j] += A[i][k] * B[k][j];}}}
}

难点

1.时间复杂度

  • 若直接按照原题给出的(W⋅(Q×KT))×V计算,由于Q×KT的结果为3*3的矩阵,会显示超时,进而需要改变矩阵的计算顺序,所以要先计算KT*V(结果为2*2)的矩阵,可以通过。

2.long long替换int

  • 防止由于个别数字的大小超过int的范围。

代码

#include <iostream>
using namespace std;void matrixMultiplication(long long** A, int rowsA, int colsA, long long** B, int rowsB, int colsB, long long** result) {for (int i = 0; i < rowsA; ++i) {for (int j = 0; j < colsB; ++j) {result[i][j] = 0;for (int k = 0; k < colsA; ++k) {result[i][j] += A[i][k] * B[k][j];}}}
}int main() {int row, col;cin >> row >> col;// 动态分配二维数组long long** Q = new long long* [row];long long** K_T = new long long* [col];long long** V = new long long* [row];long long** W = new long long* [1];for (int i = 0; i < row; i++) {Q[i] = new long long[col];V[i] = new long long[col];}for (int i = 0; i < col; i++){K_T[i] = new long long[row];}for (int i = 0; i < 1; i++){W[i] = new long long[row];}// 输入for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){cin >> Q[i][j];}}for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){cin >> K_T[j][i];}}for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){cin >> V[i][j];}}for (int i = 0; i < row; i++){cin >> W[0][i];}// result1 = K_T * V (2*3 * 3*2 = 2*2)long long** result1 = new long long* [col];for (int i = 0; i < col; i++){result1[i] = new long long[col];}matrixMultiplication(K_T, col, row, V, row, col, result1);// result2 = Q * result1long long** result2 = new long long* [row];for (int i = 0; i < row; i++){result2[i] = new long long[col];}matrixMultiplication(Q, row, col, result1, col, col, result2);// result2 *= Wfor (int i = 0; i < row; i++){for (int j = 0; j < col; j++){result2[i][j] = W[0][i] * result2[i][j];}}// 输出for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){cout << result2[i][j] << " ";}cout << endl;}// 释放动态分配的内存for (int i = 0; i < row; i++) {delete[] Q[i];delete[] V[i];delete[] result2[i];}for (int i = 0; i < col; i++) {delete[] K_T[i];delete[] result1[i];}delete[] Q;delete[] K_T;delete[] V;delete[] W[0]; delete[] W;delete[] result2;delete[] result1;return 0;
}

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…

gorm day1

gorm day1 gorm简介gorm声明模型 代码样例基本来自官方文档 Gorm简介 什么是ORM&#xff1f; 对象关系映射(Objection Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库(如mysql数据库&#xff09;存在的互不匹配现象的计数。简单来说&#xff0c;ORM是通…

面试经典150题——文本左右对齐(困难)

​"It always seems impossible until it’s done." - Nelson Mandela 1. 题目描述&#xff1a; 这个题目标为困难题目&#xff0c;但是如果我们静下心来把题目读懂了&#xff0c;其实无非就是不同情况下不同考虑而已&#xff0c;也没什么思维上的复杂&#xff0c;还…

深入理解Linux内核之IO多路复用上

目录 Linux代码结构看网络通信 Linux下的IO复用编程 文件描述符FD select poll epoll select、poll、epoll的比较 1、支持一个进程所能打开的最大连接数 2、FD剧增后带来的IO效率问题 3、消息传递方式 总结 Linux代码结构看网络通信 Linux内核的源码包含的东西很多&…

NAS系统折腾记 – Emby搭建家庭多媒体服务器

Emby简介 Emby是一款优秀的媒体服务器软件&#xff0c;致力于为用户提供丰富的多媒体体验。通过Emby&#xff0c;您可以方便地在家庭内的各种设备上观看您喜爱的电影、电视剧和其他视频内容。而且&#xff0c;Emby还具备强大的媒体管理功能&#xff0c;让您的影视资源井然有序…

小米平板6获取root权限教程

1. 绑定账号 1> 打开"设置-我的设备-全部参数-连续点击MIUI版本按钮"&#xff0c;直到提示已打开开发者模式( p s : 这里需要重点关注红框平板型号和 M I U I 版本&#xff0c;例如我这里平板型号是 X i a o m i P a d 6 &#xff0c; M I U I 版本是 14.0.10 &am…

C/C++ 回调函数 callback 异步编程

一、C语言的回调函数 1.小试牛刀 #include <iostream> using namespace std; #include <memory> #include <stdlib.h>int add(int a, int b) {return a b; }void test01() {// 函数指针可以指向任何类型的函数&#xff0c;只要函数的参数列表和返回值类型…

政安晨:示例演绎Python的列表

列表和你可以用它们做的事&#xff1a;包括索引、切片和对象变动 (变异-Mutation) 。 列表 在Python中&#xff0c;列表表示有序的值序列。以下是如何创建列表的示例&#xff1a; primes [2, 3, 5, 7] 我们可以将其他类型的元素放在列表中&#xff1a; planets [Mercury…

股票交易

这里尝试利用单调队列优化&#xff0c;这里不好直接用单调队列的原因是因为(以买为例)\(-ap[i]*k_1\)不是只与下标有关的 所以解决方案一&#xff1a;我们将下标变成一个整体&#xff0c;再把后面的代价换掉然后将与下标无关的直接提出去 解决方案二&#xff1a;利用“蚯蚓”那…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面&#xff0c;旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户&#xff0c;都可以在本文中找到对应的内容&#xff0c;加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

自学网安-IIS服务器

部署环境&#xff1a;win2003 配置环境&#xff1a;winxp ip&#xff1a;10.1.1.2 win2003 ip&#xff1a;10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务&#xff08;IIS&#xff09;” 勾选万维网服务&#xff0c;确定然后下一步 查看端口号;netstat …

Fink CDC数据同步(三)Flink集成Hive

1 目的 持久化元数据 Flink利用Hive的MetaStore作为持久化的Catalog&#xff0c;我们可通过HiveCatalog将不同会话中的 Flink元数据存储到Hive Metastore 中。 利用 Flink 来读写 Hive 的表 Flink打通了与Hive的集成&#xff0c;如同使用SparkSQL或者Impala操作Hive中的数据…