数据结构-矩阵

介绍

数据结构中的矩阵主要涉及以下几种:

  1. 对称矩阵:若矩阵A n*n中的元素特点是a[ij]=a[ji],则称之为n阶对称矩阵。对称矩阵的每一对元素占用一个存储单元,那么对于n阶矩阵,可以压缩到n(n+1)/2个元素的存储单元。
  2. 对角矩阵:对角矩阵是指矩阵中的非0元素都集中在以主对角线为中心的带状区域。也就是除了主对角线和直接在对角线上、下方若干条对角线上的元素除外,其余的元素均为0。
  3. 三角矩阵:包括上三角矩阵和下三角矩阵。上三角矩阵的对角线以下(不包括对角线)的元素均为常数0;下三角矩阵的对角线以上(不包括对角线)的元素均为常数0。

实现举例

对称矩阵
#include<iostream>
using namespace std;class SymmetricMatrix {
private:int n;int *matrix;public:SymmetricMatrix(int n) {this->n = n;matrix = new int[n*(n+1)/2];}~SymmetricMatrix() {delete [] matrix;}int get(int i, int j) {if (i < j) {swap(i, j);}return matrix[i*(i+1)/2 + j];}void set(int i, int j, int value) {if (i < j) {swap(i, j);}matrix[i*(i+1)/2 + j] = value;}void print() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << get(i, j) << " ";}cout << endl;}}
};int main() {SymmetricMatrix sm(3);sm.set(0, 0, 1);sm.set(0, 1, 2);sm.set(0, 2, 3);sm.set(1, 1, 4);sm.set(1, 2, 5);sm.set(2, 2, 6);sm.print();return 0;
}
举例说明

这个程序定义了一个SymmetricMatrix类,该类包含一个一维数组用于存储对称矩阵的元素,以及几个用于操作这个矩阵的方法。get方法用于获取矩阵中的元素,set方法用于设置矩阵中的元素,print方法用于打印矩阵的内容。在main函数中,我们创建了一个3x3的对称矩阵,并设置了其元素的值,然后打印了这个矩阵的内容。

对角矩阵
#include <iostream>
#include <vector>
using namespace std;class DiagonalMatrix {
private:int n;vector<int> diagonal;public:DiagonalMatrix(int n) {this->n = n;diagonal.resize(n, 0);}int get(int i, int j) {if (i == j) {return diagonal[i];} else {return 0;}}void set(int i, int j, int value) {if (i == j) {diagonal[i] = value;}}void print() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << get(i, j) << " ";}cout << endl;}}
};int main() {int n = 5;  // 矩阵的大小为5x5DiagonalMatrix dm(n);  // 创建一个大小为5x5的对角矩阵dm.set(0, 0, 1);  // 设置对角线上的元素值为1, 2, 3, 4, 5dm.set(1, 1, 2);dm.set(2, 2, 3);dm.set(3, 3, 4);dm.set(4, 4, 5);dm.print();  // 打印矩阵的内容return 0;
}
举例说明

这个示例中,定义了一个DiagonalMatrix类,该类包含一个一维数组用于存储对角线上的元素,并定义了几个方法,包括获取元素值、设置元素值以及打印矩阵内容。在main函数中,我们创建了一个大小为5x5的对角矩阵,并设置了对角线上的元素值,然后打印了这个矩阵的内容。由于对角矩阵只有对角线上的元素不为0,因此在get方法中,如果传入的行列号不相等,直接返回0即可。在set方法中,只有当传入的行列号相等时,才会将对角线上的元素值进行设置。这个示例中,创建的对角矩阵是一个单位矩阵,即对角线上的元素值都为1。

三角矩阵
#include <iostream>
#include <vector>
using namespace std;class TriangularMatrix {
private:int n;vector<vector<int>> matrix;public:TriangularMatrix(int n) {this->n = n;matrix.resize(n, vector<int>(n));}int get(int i, int j) {if (i >= j) {return matrix[i][j];} else {return 0;}}void set(int i, int j, int value) {if (i >= j) {matrix[i][j] = value;}}void print() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << get(i, j) << " ";}cout << endl;}}
};int main() {int n = 5;  // 矩阵的大小为5x5TriangularMatrix tm(n);  // 创建一个大小为5x5的下三角矩阵// 设置下三角矩阵的元素值,其中对角线及其下方的元素值不为0tm.set(0, 0, 1);  // 第一行第一列的元素值为1tm.set(1, 0, 2);  // 第二行第一列的元素值为2tm.set(1, 1, 3);  // 第二行第二列的元素值为3tm.set(2, 0, 4);  // 第三行第一列的元素值为4tm.set(2, 1, 5);  // 第三行第二列的元素值为5tm.set(2, 2, 6);  // 第三行第三列的元素值为6tm.print();  // 打印矩阵的内容return 0;
}
举例说明

这个示例中,定义了一个TriangularMatrix类,该类包含一个二维数组用于存储下三角矩阵的元素,并定义了几个方法,包括获取元素值、设置元素值以及打印矩阵内容。在main函数中,我们创建了一个大小为5x5的下三角矩阵,并设置了其中一些元素的值,然后打印了这个矩阵的内容。由于下三角矩阵只有对角线及其下方的元素不为0,因此在get方法中,如果传入的行号小于列号,直接返回0即可。在set方法中,只有当传入的行号大于等于列号时,才会将对应位置的元素值进行设置。这个示例中,创建的下三角矩阵是一个普通的下三角矩阵,你可以根据需要修改这个示例代码来实现你想要的功能。同时,你也可以根据类似的方法实现上三角矩阵。

总结

在数据结构中,矩阵通常用于存储和处理大量数据,例如图像处理、机器学习、线性代数等领域。这些特殊类型的矩阵(对称矩阵、对角矩阵、三角矩阵)在存储和处理时可以利用其特性进行优化,例如对称矩阵可以只存储一半的元素,对角矩阵可以只存储对角线上的元素,从而节省存储空间和提高处理效率。

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

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

相关文章

C++初阶:STL之vector类模板

目录 一.vector的介绍及使用 1.1.vector的介绍 1.2.vector的使用 1.2.1.vector的定义 1.2.2.vector iterator的使用 1.2.3.vector的空间增长问题 1.2.4.vector的增删查改 1.3.vector在OJ中的使用 题一&#xff1a;只出现一次的数字 题二&#xff1a;杨辉三角 题三&a…

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 &#xff08;1&#xff09;filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印&#xff1a; &#xff08;2&#xff09;map方法取到的是包含指定项的数组&#xff0c;如果满足…

使用splice修改数组数据 数据被修改了 但是页面视图不更新

场景 <el-tagv-for"(tag, index) in arr":key"tag":closable"true"close"onClose(index, $event)" >{{ tag }} </el-tag>// 标签关闭时触发onClose(index, e) {console.log("标签关闭", index);this.arr.splic…

解决PP材质粘合问题用PP专用UV胶水

PP材料已经广泛应用于各行各业&#xff0c;在粘接中会有不同的问题需求&#xff0c;那么使用专用于PP的UV胶水可能是解决PP材质粘合问题的一种有效方法。 主要在于&#xff1a;UV胶水在紫外线照射下可以快速固化&#xff0c;形成坚固的连接。所以使用PP专用UV胶水时可以考虑&am…

基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 目录 &#x1f680;一. Amazon SageMaker &#x1f50e;1.1 新功能发布&#xff1a;A…

AtCoder Beginner Contest 327

A - ab (atcoder.jp) AC代码: #include<bits/stdc.h> #define endl \n //#define int long long using namespace std; int n; string s; void solve() {cin>>n>>s;for(int i0;i<(int)s.size()-1;i){if((s[i]a&&s[i1]b)||(s[i]b&&s[i1]…

基于PCIe的NVMe学习

一&#xff1a;基本概念 1.UltraScale&#xff1a;是Xilinx ZYNQ 系列产品 2.spec&#xff1a;大家现在别纠结于具体的命令&#xff0c;了解一下就好。老板交代干活的时候&#xff0c;再找spec一个一个看吧————猜测估计是命令表之类的。 3.TLP报文部分&#xff1a; 二&…

关于Yii2基础controller和model的封装

如题&#xff0c;在实战项目中我们我们经常会要使用相同的逻辑&#xff0c;比如post/get获取参数&#xff0c;接口返回、参数校验等&#xff0c;因此可以将其封装起来调用。 这里分为根目录下的控制器controllers和处理数据库的models两个文件&#xff0c;其他业务逻辑放在modu…

MapReduce\Shuffle

MapReduce\Shuffle MapReduce 是一种编程模型&#xff0c;用于处理和生成大数据集。这个模型由两个主要步骤组成&#xff1a;Map步骤和Reduce步骤。 Map步骤&#xff1a;在这个步骤中&#xff0c;输入数据集被分割成多个独立的数据块&#xff0c;然后每个数据块被分配给一个M…

云桌面和桌面云是什么?中国桌面云市场谁在领跑?

当我们谈论云桌面和桌面云时&#xff0c;确实很容易产生混淆。它们都涉及到云计算技术在个人计算环境中的应用&#xff0c;但具体的应用场景和侧重点有所不同。 云桌面&#xff1a;虚拟化的桌面环境 云桌面是一种基于云计算的虚拟化技术&#xff0c;它允许用户通过互联网访问一…

Visual Studio开发环境的搭建

1.引言 Visual Studio是微软公司开发的一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员进行各种编程任务&#xff0c;包括设计、开发、测试、调试和部署应用程序。典型功能包括&#xff1a; 代码编辑器。提供高效、智能的代码编辑器&#x…

Docker的私有仓库Harbor

Harbor概述 1.Harbor定义 私有&#xff0c;自定义用户的形式登陆仓库&#xff0c;拉取或者上传镜像。(内部管理的用户) Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 2.Docker Harbor…

【数学建模】《实战数学建模:例题与讲解》第十讲-时间序列预测(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第十讲-时间序列预测&#xff08;含Matlab代码&#xff09; 基本概念移动平均&#xff08;Moving Average, MA&#xff09;:指数平滑法&#xff08;Exponential Smoothing&#xff09;:季节性调整&#xff08;Seasonal Adju…

SpringCloud系列(六)| 聊聊负载均衡

一、负载均衡概述 上一篇文章中&#xff0c;我们在集成OpenFeign的过程中提示我们需要加入了一个依赖就是&#xff1a; spring-cloud-starter-loadbalancer。 顾名思义&#xff0c;这个包的作用就是用来做负载均衡的。 简单解释一下什么是负载均衡&#xff0c;就是当我们的服…

Java8新特性:Lambda表达式

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

图像识别的精度与效率优化研究

基于深度学习的图像识别算法研究 摘要&#xff1a;随着深度学习技术的快速发展&#xff0c;基于深度学习的图像识别算法已经成为计算机视觉领域的研究热点。本文将介绍基于深度学习的图像识别算法的基本原理、研究进展和应用领域&#xff0c;并探讨其未来的发展趋势。 一、引言…

AI 搜索将如何影响 SEO

用户可以与之交互的 AI 搜索结果是肯定的。搜索营销人员要么对此感到生气&#xff0c;什么都不做&#xff0c;要么他们可以调查即将发生的事情并做好准备。 Google SGE 和 Bing 提供了相当相似的 AI 方法&#xff0c;是传统搜索和聊天机器人的混合体。 但这并不一定是当今 AI…

HarmonyOS--基础组件Text

Text组件 可以包含Span子组件。 接口 Text(content? : string | Resource) string: Text(我是ttttt) Resource: Text($r(app.string.aaaaaa)) 先找限定词目录&#xff0c;找不到内容 找base目录 属性 除支持通用属性外&#xff0c;还支持以下属性&#xff1a; 名称 参数…

全国合作商标服大赛决赛完整规则流程

本文是全国合作商标服大赛决赛完整规则流程&#xff0c;有需要的朋友可以参考下。 一、抢答比拼 1、政策管理考核题 系统评分。抢答题共15题/条线&#xff1a;单选10题&#xff0c;多选5题&#xff0c;基础分100分 单选答对10分/答错-5分&#xff0c;多选答对20分/答错-10分…

Mozilla 推出 Solo:借助 AI 帮助零编程用户创建网站

Mozilla 近日推出名为 Solo 的全新项目&#xff0c;面向没有任何编程经验的用户&#xff0c;通过融入 AI 能力&#xff0c;所创建的网站可以媲美专业开发者的开发效果。 Mozilla 表示该项目主要针对中小型企业、个体户&#xff0c;在官方演示中&#xff0c;用户只需要输入文本、…