数组与链表算法-矩阵算法

目录

 数组与链表算法-矩阵算法

矩阵相加

C++代码

矩阵相乘

C++代码

转置矩阵

C++代码

稀疏矩阵

C++代码


 数组与链表算法-矩阵算法

矩阵相加

矩阵的相加运算较为简单,前提是相加的两个矩阵对应的行数与列数必须相等,而相加后矩阵的行数与列数也是相同的。【

C++代码

#include<iostream>
using namespace std;void MaterixAdd(int* arrA, int* arrB, int* arrC, int dimX, int dimY) {if (dimX <= 0 || dimY <= 0) {cout << "矩阵维数必须大于0" << endl;return;}for (int row = 0; row < dimX; row++) {for (int col = 0; col < dimY; col++) {arrC[row * dimX + col] = arrA[row * dimX + col] + arrB[row * dimX + col];}}
}void PrintArr(int* arr, int dimX, int dimY) {for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimY; j++) {cout << arr[i * dimX + j] << "\t";}cout << endl;}
}int main() {const int Row = 3;const int Col = 3;int A[Row][Col] = { {1,3,5},{7,9,11},{13,15,17} };int B[Row][Col] = { {9,8,7},{6,5,4},{3,2,1} };int C[Row][Col] = { 0 };cout << "矩阵A的各个元素:" << endl;PrintArr(&A[0][0], Row, Col);cout << "矩阵B的各个元素:" << endl;PrintArr(&B[0][0], Row, Col);MaterixAdd(&A[0][0], &B[0][0], &C[0][0], Row, Col);cout << "矩阵C的各个元素:" << endl;PrintArr(&C[0][0], Row, Col);return 0;
}

输出结果

 

 

矩阵相乘

两个矩阵A和B的相乘受到某些条件的限制。首先,必须符合A为一个m\times n的矩阵,B为一个n\times p的矩阵,A\times B之后的结果为一个m\times p的矩阵C。

C++代码

#include<iostream>
using namespace std;void MaterixMultiply(int* arrA, int* arrB, int* arrC, int dimX, int dimY) {if (dimX <= 0 || dimY <= 0) {cout << "矩阵维数必须大于0" << endl;return;}for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimX; j++) {int Temp = 0;for(int k = 0;k< dimY;k++){arrC[i * dimX + j] += (arrA[i * dimY + k] * arrB[k * dimX + j]);}}}
}void PrintArr(int* arr, int dimX, int dimY) {for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimY; j++) {cout << arr[i * dimY + j] << "\t";}cout << endl;}
}int main() {const int Row = 2;const int Col = 3;int A[Row][Col] = { {1,2,3},{4,5,6} };int B[Col][Row] = { {3,4},{6,1},{2,7} };int C[Row][Row] = { 0 };cout << "矩阵A的各个元素:" << endl;PrintArr(&A[0][0], Row, Col);cout << "矩阵B的各个元素:" << endl;PrintArr(&B[0][0], Col, Row);MaterixMultiply(&A[0][0], &B[0][0], &C[0][0], Row, Col);cout << "矩阵C的各个元素:" << endl;PrintArr(&C[0][0], Row, Row);return 0;
}

输出结果

转置矩阵

转置矩阵(A^{t})就是把原矩阵的行坐标元素与列坐标元素相互调换。假设A^{t}A的转置矩阵,则有A^{t}[j,i] = A[i,j]

C++代码

#include<iostream>
using namespace std;void MaterixTranspose(int* arr, int dimX, int dimY) {for (int i = 0; i < dimX; i++) {for (int j = 0; j <= i; j++) {int Temp = arr[i * dimY + j];arr[i * dimY + j] = arr[j * dimY + i];arr[j * dimY + i] = Temp;}}
}void PrintArr(int* arr, int dimX, int dimY) {for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimY; j++)cout << arr[i * dimY + j] << "\t";cout << endl;}
}int main() {const int Row = 3;const int Col = 3;int arr[Row][Col] = { {1,2,3},{4,5,6},{7,8,9} };cout << "原始矩阵:" << endl;PrintArr(&arr[0][0], Row, Col);MaterixTranspose(&arr[0][0], Row, Col);cout << "转置矩阵:" << endl;PrintArr(&arr[0][0], Row, Col);return 0;
}

输出结果

稀疏矩阵

稀疏矩阵(Sparse Matrix)就是指一个矩阵中的大部分元素为0。对于稀疏矩阵而言,因为矩阵中的许多元素都是0,所以实际存储的数据项很少,如果在计算机中使用传统的二维数组方式来存储稀疏矩阵,就十分浪费计算机的内存空间。

提高内存空间利用率的方法是使用三项式(3-Tuple)的数据结构。我们把每一个非零项用(i, j, item-value)的形式来表示,假如一个稀疏矩阵有n个非零项,那么可以使用一个A(0:n, 1:3)的二维数组来存储这些非零项。

其中,A(0, 1)存储这个稀疏矩阵的行数,A(0,2)存储这个稀疏矩阵的列数,而A(0,3)则存储这个稀疏矩阵非零项的总数。另外,每一个非零项以(i, j, item-value)来表示。其中i为此矩阵非零项所在的行数,j为此矩阵非零项所在的列数,item-value则为此矩阵非零项的值。

A(0, 1):表示此矩阵的行数。

A(0, 2):表示此矩阵的列数。

A(0, 3):表示此矩阵非零项的总数。

这种利用3项式数据结构来压缩稀疏矩阵的方式可以减少对内存的浪费。

C++代码

#include<iostream>
using namespace std;void MaterixSparse(int* arrSparse, int* arrCompress, int dimX, int dimY) {int temp = 1;for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimY; j++) {if (arrSparse[i * dimY + j] != 0) {arrCompress[temp * 3 + 0] = i;arrCompress[temp * 3 + 1] = j;arrCompress[temp * 3 + 2] = arrSparse[i * dimY + j];temp++;}}}
}void PrintArr(int* arr, int dimX, int dimY) {for (int i = 0; i < dimX; i++) {for (int j = 0; j < dimY; j++)cout << arr[i * dimY + j] << "\t";cout << endl;}
}int main() {const int Row = 8;const int Col = 9;const int NotZero = 8;int Sparse[Row][Col] = { {0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,7,0,0,0,0},{0,0,0,0,0,0,0,0,5}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,6,1,8,0,0,0,2}, {4,0,0,0,0,0,3,0,0} };int Compress[NotZero + 1][3]{ 0 };Compress[0][0] = Row;Compress[0][1] = Col;Compress[0][2] = NotZero;cout << "稀疏矩阵:" << endl;PrintArr(&Sparse[0][0], Row, Col);MaterixSparse(&Sparse[0][0], &Compress[0][0], Row, Col);cout << "压缩矩阵:" << endl;PrintArr(&Compress[0][0], NotZero + 1, 3);return 0;
}

输出结果

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

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

相关文章

鼎鑫鸿鄴引入“能源互联网+”理念 打造共赢

近年来&#xff0c;随着全球能源消耗的不断增长和环境问题的日益突出&#xff0c;清洁能源转型成为全球共同关注的话题。中国作为全球最大的能源消费国&#xff0c;也在积极推动能源结构的优化和清洁能源的发展。鼎鑫鸿鄴新能源科技有限公司在推动清洁能源转型方面制定了一系列…

Linux内核代码中常用的数据结构

Linux内核代码中广泛使用了数据结构和算法&#xff0c;其中最常用的两个是链表和红黑树。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。 链表的每个元素都是离散…

el-table添加固定高度height后高度自适应

0 效果 1 添加自定义指令 新建目录src/directive/el-table 在el-table目录下新建文件adaptive.js import { addResizeListener, removeResizeListener } from element-ui/src/utils/resize-event// 设置表格高度const doResize async(el, binding, vnode) > {// 获取表格…

S32K144芯片焊接完成后使用S32DS初次下载无法下载解决方法

一、问题现象如下&#xff0c;S32DS Debug下报错 二、原因&#xff0c;原厂芯片出厂时的FLASH Memory的安全机制是激活的&#xff0c;仿真器是可以连上&#xff0c;但是没法读取Flash Memory的内容 三、解决方法 参考图示&#xff0c;解锁后即可正常Debug

深入理解Java中的转义字符

最近在学习《两周自制脚本语言》这本书&#xff0c;在词法分析的一些复杂的正则中用到了大量的转义字符’\&#xff0c;比如正则字符串中包含了这个部分\\\\\"你知道它是匹配什么的么&#xff1f; 反斜杠在字符串和正则表达式中都有特殊作用。今天让我们来深入理解一下Ja…

数据分享 I 地级市人口和土地使用面积基本情况

数据地址&#xff1a; 地级市人口和土地使用面积基本情况https://www.xcitybox.com/datamarketview/#/Productpage?id394 基本信息. 数据名称: 地级市人口和土地使用面积基本情况 数据格式: ShpExcel 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据…

【计算机毕设经典案例】基于微信小程序的图书管理系统

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 &#x1f449;IT源码社-SpringBoot优质案例推荐&#x1f448; &#x1f449;IT源码社-小程序优质案例…

『力扣刷题本』:移除链表元素

一、题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入&a…

在spring boot+vue项目中@CrossOrigin 配置了允许跨域但是依然报错跨域,解决跨域请求的一次残酷经历

首先&#xff0c;说一下我们的项目情况&#xff0c;我们项目中后端有一个过滤器&#xff0c;如果必须要登录的接口路径会被拦下来检查&#xff0c;前端要传一个token&#xff0c;然后后端根据这个token来判断redis中这个用户是否已经登录。 if (request.getMethod().equals(&qu…

css 三栏布局的实现?

目录 前言 用法 代码 理解 高质量图片 1. 左侧栏 - 导航菜单 2. 中间栏 - 主要内容 3. 右侧栏 - 小部件和广告 布局的响应式设计 三栏布局在前端页面设计中是一个常见的布局方式&#xff0c;通常包含左侧、中间和右侧三个部分。这种布局方式在多种场景中都很受欢迎&am…

解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法

今天&#xff0c;我非常荣幸能够在这里与大家分享关于mfc90u.dll丢失的5种解决方法。在我们日常使用电脑的过程中&#xff0c;可能会遇到一些软件或系统错误&#xff0c;其中之一就是mfc90u.dll丢失。那么&#xff0c;mfc90u.dll究竟是什么文件呢&#xff1f;接下来&#xff0c…

【表面缺陷检测】钢轨表面缺陷检测数据集介绍(2类,含xml标签文件)

一、介绍 钢轨表面缺陷检测是指通过使用各种技术手段和设备&#xff0c;对钢轨表面进行检查和测量&#xff0c;以确定是否存在裂纹、掉块、剥离、锈蚀等缺陷的过程。这些缺陷可能会对铁路运输的安全和稳定性产生影响&#xff0c;因此及时进行检测和修复非常重要。钢轨表面缺陷…

spring boot利用redis作为缓存

一、缓存介绍 在 Spring Boot 中&#xff0c;可以使用 Spring Cache abstraction 来实现缓存功能。Spring Cache abstraction 是 Spring 框架提供的一个抽象层&#xff0c;它对底层缓存实现&#xff08;如 Redis、Ehcache、Caffeine 等&#xff09;进行了封装&#xff0c;使得在…

微服务-Feign

文章目录 Feign介绍Feign的基本使用自定义Feign的配置Feign性能优化Feign最佳实践 Feign介绍 RestTemplate远程调用存在的问题&#xff1a;代码可读性差&#xff0c;java代码中夹杂url&#xff1b;参数复杂很难维护 String url "http://userservice/user/" order.g…

有一个带头结点的单链表L,设计一个算法使其元素递增有序

有一个带头结点的单链表L&#xff0c;设计一个算法使其元素递增有序 代码思路&#xff1a; 我这里懒得搞那个指针了&#xff0c;直接遍历一遍链表&#xff0c;把链表的元素复制到数组arr里面 对数组A进行一下排序&#xff0c;排完之后再把元素复制到L里面。 至于排序你用啥算…

1820_ChibiOS中的同步消息

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 看到这里提到的这个模型&#xff0c;我在想是不是我一直没有搞定的多核可以利用这个机制来解决。如果是多核&#xff0c;ChibiOS的这种机制是否依…

【java学习—十】捕获异常(2)

文章目录 1. 什么是异常2. 异常处理机制3. 捕获异常总结3.1. try 和 catch3.2. 捕获异常的有关信息&#xff1a;3.3. finally 1. 什么是异常 如果程序运行时&#xff0c;某一行出现异常&#xff0c;将会使程序中断&#xff0c;不在继续执行&#xff0c;举个例子如下&#xff1…

二进制部署kubernetes集群的推荐方式

软件版本&#xff1a; 软件版本containerdv1.6.5etcdv3.5.0kubernetesv1.24.0 一、系统环境 1.1 环境准备 角色IP服务k8s-master01192.168.10.10etcd、containerd、kube-apiserver、kube-scheduler、kube-controller-manager、kubele、kube-proxyk8s-node01后续etcd、conta…

ARM 汇编指令 orreq 的使用

orreq 阅读代码时&#xff0c;发现有个【组合指令】 orreq&#xff0c; orr 一般是 OR&#xff0c;也就是或操作&#xff0c;后面加个 eq 表示什么呢&#xff1f; 比如下面的代码&#xff1a;前面一个操作&#xff0c; tst&#xff0c;好像没做实际的操作&#xff0c;可能影响…

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源&#xff1a; AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构&#xff0c;是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…