CCF刷题计划——矩阵运算(同时转置+乘法)

矩阵运算

计算机软件能力认证考试系统

现在这分也越来越难挣咯~这也超时,那也超时的。但是也给我们一个矩阵优化的思路,那就是 同时转置+乘法。下面给出超时和AC。

暴力超时法:70分

#include <iostream>
#include <vector>
using namespace std;
#define ll long long


int n,d;//矩阵大小 

vector<vector<ll>> Trans(vector<vector<ll>>K)	//转置
{
	vector<vector<ll>>temp(d,vector<ll>(n,0));
	for(int i=0;i<d;i++)
	for(int j=0;j<n;j++)
		temp[i][j]=K[j][i];
	
	return temp;
 } 
 
 
ll Mul_tensor(int row,int col,vector<vector<ll>>Q,vector<vector<ll>>K)
{
	ll c=0;
	for(int i=0;i<Q[0].size();i++)	c+=Q[row][i]*K[i][col];
	return c;
}
 
vector<vector<ll>> Mul_matrix(vector<vector<ll>>Q,vector<vector<ll>>K)
{
	vector<vector<ll>>temp(Q.size(),vector<ll>(K[0].size(),0));
	for(int i=0;i<Q.size();i++)	//取Q的行数 
	{
		for(int j=0;j<K[0].size();j++)	//K的列数 
		{
			temp[i][j]=Mul_tensor(i,j,Q,K);
		}
	}
	
	return temp;
}


int main() 
{
	cin>>n>>d; 
	vector<vector<ll>>Q(n);
	vector<vector<ll>>K(n);
	vector<vector<ll>>V(n);
	
	int t;
	for(int i=0;i<n;i++)
		for(int j=0;j<d;j++)
		{
			cin>>t;
			Q[i].push_back(t);
		} 
		
	for(int i=0;i<n;i++)
		for(int j=0;j<d;j++)
		{
			cin>>t;
			K[i].push_back(t);
		} 
	
	vector<vector<ll>>Kt=Trans(K);
	vector<vector<ll>>QKt=Mul_matrix(Q,Kt);


	for(int i=0;i<n;i++)
		for(int j=0;j<d;j++)
		{
			cin>>t;
			V[i].push_back(t);
		}
	
	int w;
	for(int i=0;i<n;i++)
	{
		cin>>w;
		for(int j=0;j<QKt[0].size();j++)
			QKt[i][j]*=w;
	}
		
	
	vector<vector<ll>>ans=Mul_matrix(QKt,V);
	for(int i=0;i<ans.size();i++)
	{
		for(int j=0;j<ans[0].size();j++)
			cout<<ans[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}

优化:将乘法和转置一起处理

我们发现,当矩阵过大的时候,转置啊乘法啊什么的就会很费事。所以这里我们将转置合并到乘法里面去,同时在乘第二个矩阵的时候也把W乘进去。具体规律我写到了代码中,大家也可以自己手动画画。

AC:

#include <iostream>
#include <vector>
using namespace std;
#define ll long long

//答案,优化策略是K一边置换一边乘V 

const int N=1e4+2; 
const int D=22; 

int n,d;//矩阵大小 
int K[N][D],Q[N][D],V[N][D]; 
int W[N];

int main()
{
	cin>>n>>d; 
	
	ll temp[D][D]={0};
	for(int i=0;i<n;i++)
		for(int j=0;j<d;j++)
			cin>>Q[i][j];
		
	for(int i=0;i<n;i++)
		for(int j=0;j<d;j++)
			cin>>K[i][j];
	
	for(int i=0;i<n;i++)
			for(int j=0;j<d;j++)
				cin>>V[i][j];
				
	for(int i=0;i<n;i++)	cin>>W[i];
	
	//转置和乘V一步到位
	//例如,C00=A00*B00+A01*B10+A02*B20,假如A是转置后的值,那转置前就是:A00,A10,A20
	//转化成就是C00= A00*B00+A10*B10+A20*B20
	// 同理,C01=A00*B01+A01*B11+A02*B21--> C01=A00*B01+A10*B11+A20*B21
	//总结出规律,我们发现AB都是相同行的值在乘 : 
	for(int i=0;i<d;i++)
		for(int j=0;j<d;j++)
			for(int k=0;k<n;k++)
				temp[i][j] += K[k][i] * V[k][j];	//相同行匹配 

	
	ll ans[N][D]={0};
	//乘Q乘w一步到位 
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<d;j++)
		{
			for(int k=0;k<d;k++)
				ans[i][j]+=Q[i][k]*temp[k][j];
			ans[i][j]*=W[i];
		}
	}
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<d;j++)
			cout<<ans[i][j]<<" ";
		cout<<endl;
	}

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的在线购物平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线购物平台&am…

基于SpringBoot+Vue的超市外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

sqli-labs靶场自动化利用工具——第6关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生&#xff0c;或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢&#xff1f;可能有些人会说不是有sqlmap&#…

9月11号作业

头文件 #include <cmath> #include <QApplication> #include <QMainWindow> #include <QLabel> #include <QTimer> #include <QVBoxLayout> #include <QRandomGenerator> #include <QTimerEvent> #include <QTextT…

MySQL分页查询(DQL)

因DataGrip我的激活到期&#xff0c;也没太多精力去破解&#xff0c;最后换了Navicat&#xff0c;实际上操作是一样的&#xff0c;不变。 先看我的表数据&#xff0c;以我的数据作为例子 基本语法 select 字段列表 from 表名 起始索引&#xff0c;查询记录数。 1.查询第1页员…

多线程学习篇一:启动多线程的三种方式

1. 继承 Thread 类 Slf4j public class MyThread extends Thread {Overridepublic void run() {log.info("MyThread run ...");}public static void main(String[] args) {MyThread myThread new MyThread();myThread.start();} } 2. 实现 Runnable 接口 Slf4j pu…

基于微信小程序的宿舍报修系统的设计与实现

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的宿…

linux 操作系统下cp命令介绍及案例应用

linux 操作系统下cp命令介绍及案例应用 cp命令是Linux操作系统中用于复制文件和目录的基本命令。它的功能强大&#xff0c;适用于各种文件管理任务 cp命令概述 基本语法:bashcp [options] <source> <destination> 功能: 复制单个文件或多个文件到指定位置。 递…

python基础知识(一)

目录 1.注释 2.关键字 3.标识符 4.常见命名方法 5.变量 6.常见的数据类型 1.注释 注释&#xff1a;在程序中&#xff0c;对代码进行解释说明的文字。 在Python中&#xff0c;注释分为两类&#xff1a; &#xff08;1&#xff09;单行注释&#xff1a;# # 注释文字内容…

降维打击 华为赢麻了

文&#xff5c;琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗&#xff1f; 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…

AUTOSAR_EXP_ARAComAPI的5章笔记(3)

返回目录 5.3.4 Finding Services Proxy Class提供类(静态)方法来查找“连接”的服务实例。由于服务实例的可用性本质上是动态的(因为它有一个生命周期)&#xff0c;所以ara::com提供了如下两种不同的方法来实现“FindService ”: StartFindService是一个类方法&#xff0c;…

k8s环境搭建(续)

查看节点信息并做快照 kubectl get nodes 将components.yml文件上传到master主机 创建nginx&#xff0c;会在添加一个新的pod kubectl run nginx --imagesnginx:latest 查看nginx的pod信息 [rootk8s-master ~]# kubectl get po -Aowide|grep nginx 出现错误&#xff0c;查…

需求分析概述

为什么要进行需求分析呢&#xff1f; 笑话&#xff1a;富翁娶妻 某富翁想要娶老婆&#xff0c;有三个人选&#xff0c;富翁给了三个女孩各一千元&#xff0c;请 她们把房间装满。第一个女孩买了很多棉花&#xff0c;装满房间的1/2。第 二个女孩买了很多气球&#xff0c;装满…

网络视频流解码显示后花屏问题的分析

问题描述 rtp打包的ps视频流发送到客户端后显示花屏。 数据分析过程 1、用tcpdump抓包 tcpdump -i eth0 -vnn -w rtp.pcap 2、用wireshark提取rtp的payload 保存为record.h264文件 3、用vlc播放器播放 显示花屏 4、提取关键帧 用xxd命令将h264文件转为txt文件 xxd -p…

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致前言 因为产品的更新换代&#xff0c; 把所有温湿度传感器都换成 SHT40 &#xff0c;替换以前的 SHT21。在 STM32 系列产品上的替换都正常&#xff0c;但是在一块 51 内核的无线产品上面&#xff0c;数据…

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设&#xff08;中断、I2C、USART、SPI等配置&#xff09;在STM32CubeMX中的设置为主&#xff0c;对驱动代码编写不做记录&#xff0c;所以阅读本文最好有标准库开发经验。除第2节外&#xff0c;使用的都是韦东山…

C++的流提取(>>)(输入) 流插入(<<)(输出)

什么是输入和输出流 流提取&#xff08;<<&#xff09;(输入) 理解&#xff1a;我们可以理解为&#xff0c;输入到io流里面&#xff0c;比如是cin&#xff0c;然后从输入流中读取数据 流插入&#xff08;<<&#xff09;&#xff08;输出&#xff09; 理解&#xff…

网络协议头分析

目录 数据的传输与封装过程 以太网完整帧 以太网头部 IP头 TCP头 数据的传输与封装过程 以太网完整帧 ● 对于网络层最大数据帧长度是1500字节 ● 对于链路层最大数据长度是1518字节&#xff08;150014CRC&#xff09;● 发送时候&#xff0c;IP层协议栈程序检测到发送数…

前端 + 接口请求实现 vue 动态路由

前端 接口请求实现 vue 动态路由 在 Vue 应用中&#xff0c;通过前端结合后端接口请求来实现动态路由是一种常见且有效的权限控制方案。这种方法允许前端根据用户的角色和权限&#xff0c;动态生成和加载路由&#xff0c;而不是在应用启动时就固定所有的路由配置。 实现原理…

路由器的固定ip地址是啥意思?固定ip地址有什么好处

‌在当今数字化时代&#xff0c;‌路由器作为连接互联网的重要设备&#xff0c;‌扮演着举足轻重的角色。‌其中&#xff0c;‌路由器的固定IP地址是一个常被提及但可能让人困惑的概念。‌下面跟着虎观代理小二一起将深入探讨路由器的固定IP地址的含义&#xff0c;‌揭示其背后…