当前位置: 首页 > news >正文

数据结构实验6.2:稀疏矩阵的基本运算

文章目录

  • 一,实验目的
  • 二,问题描述
  • 三,基本要求
  • 四、算法分析
    • (一)稀疏矩阵三元组表示法存储结构
    • (二)插入算法
    • (三)创建算法
    • (四)输出算法
    • (五)相加算法
    • (六)相乘算法
    • (七)转置算法
  • 五,实验操作
  • 六,示例代码
  • 七,运行效果


一,实验目的

  1. 深入理解数组的存储结构与操作原理,熟练掌握矩阵的基本运算规则,包括矩阵的加法、乘法等,能够运用数组准确表示矩阵并实现相关运算,提升对数据结构中基础内容的应用能力。
  2. 全面掌握稀疏矩阵的三元组表示方法,清晰理解其存储原理,包括非零元素的行、列和值如何在三元组中记录,能够灵活运用该表示方法对稀疏矩阵进行高效存储与操作。
  3. 熟练掌握基于稀疏矩阵三元组表示的各种运算,如矩阵的转置、加法、乘法等,通过实际编程实现这些运算,深入体会稀疏矩阵在节省存储空间和提高运算效率方面的优势,增强对复杂数据结构运算的编程实现能力。

二,问题描述

设有两个6×6稀疏矩阵A、B如下:

编程实现稀疏矩阵的下列运算:

  • 向稀疏矩阵三元组插入一个新元素;
  • 求两个稀疏矩阵相加:C = A + B;
  • 求两个稀疏矩阵相乘:C = A × B;
  • 求稀疏矩阵A的转置矩阵AT。

三,基本要求

  • 设计稀疏矩阵三元组表示法的存储结构;
  • 设计基于三元组的稀疏矩阵的插入、创建及输出算法;
  • 设计基于三元组表示的稀疏矩阵的相加、相乘及求转置的算法;
  • 设计求解稀疏矩阵各种运算问题的完整程序,设计测试数据,上机调试、测试,保存和打印测试结果,对结果进行分析;
  • 掌握本实验中的各种算法。改写主函数,改用菜单控制方式完成本实验。

四、算法分析

(一)稀疏矩阵三元组表示法存储结构

采用结构体来定义三元组存储结构,结构体包含行索引、列索引和元素值三个成员,同时为了方便记录矩阵的行数、列数和非零元素个数,可再设计一个结构体来管理三元组数组。例如:

typedef struct {int row;int col;int value;
} Triple;typedef struct {Triple data[MAXSIZE];int rows;int cols;int num;
} SparseMatrix;

这种结构可以高效地存储稀疏矩阵,只记录非零元素的相关信息,大大节省存储空间。

(二)插入算法

遍历三元组数组,根据新元素的行索引和列索引确定插入位置。如果存在相同位置的元素,则更新其值;否则,将后续元素后移,插入新元素,并更新矩阵的非零元素个数。时间复杂度为 O ( n ) O(n) O(n),其中 n n n 是三元组数组中元素的个数,因为在最坏情况下需要遍历整个数组来确定插入位置。

(三)创建算法

从输入获取矩阵的行数、列数和非零元素个数,然后依次输入每个非零元素的行索引、列索引和值,按照插入算法的逻辑将元素插入到三元组数组中。时间复杂度取决于输入非零元素的个数,若有 m m m 个非零元素,则时间复杂度为 O ( m ) O(m) O(m)

(四)输出算法

遍历三元组数组,按照矩阵的格式输出非零元素,对于非非零元素位置输出0。时间复杂度为 O ( n ) O(n) O(n),其中 n n n 是三元组数组中元素的个数。

(五)相加算法

同时遍历两个稀疏矩阵的三元组数组,根据行索引和列索引判断元素是否对应。若对应,则将元素值相加,若结果不为0则存入结果矩阵的三元组数组;若不对应,则将较小索引对应的元素直接存入结果矩阵。时间复杂度为 O ( m + n ) O(m + n) O(m+n),其中 m m m n n n 分别是两个稀疏矩阵三元组数组中元素的个数。

(六)相乘算法

对于矩阵A的每一个非零元素,遍历矩阵B中相同列索引(即A元素的列索引等于B元素的行索引)的非零元素,将它们的值相乘并累加到结果矩阵对应位置。时间复杂度较高,为 O ( m × n × p ) O(m \times n \times p) O(m×n×p),其中 m m m n n n p p p 分别是矩阵A、B三元组数组中元素的个数以及结果矩阵可能的非零元素个数。

(七)转置算法

交换原矩阵三元组数组中元素的行索引和列索引,同时更新矩阵的行数和列数。为了保持三元组数组按行优先顺序存储,需要对交换后的数组进行重新排序。时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是三元组数组中元素的个数,主要是排序操作带来的时间消耗。

五,实验操作

1,双击Visual Studio程序快捷图标,启动程序。
在这里插入图片描述

2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。
在这里插入图片描述

3,单击选择【空项目】——单击【下一步】按钮。
在这里插入图片描述

4,编辑好项目的名称和存放路径,然后单击【创建】按钮。
在这里插入图片描述

5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。
在这里插入图片描述
6,输入项目名称,单击【添加】按钮。
在这里插入图片描述

7,编写代码,单击运行按钮,运行程序。
在这里插入图片描述

六,示例代码

#include <iostream>
using namespace std;#define MAXSIZE 100 // 假设的最大非零元个数
typedef int ElemType;
typedef struct {int i; // 行int j; // 列ElemType v; // 值
} Triple;
typedef struct {Triple data[MAXSIZE + 1]; // 0下标不用int mu; // 行数int nu; // 列数int tu; // 非零元个数
} Tripletable;// 状态码定义
#define OK 1
#define ERROR 0
typedef int Status;// (1)稀疏矩阵三元组的插入运算
Status InsertTriple(Tripletable& M, int i, int j, ElemType v)
{// 将一个三元组(i, j, v)插入到稀疏矩阵三元组M中,插入后的M按行、列有序int k;if (i < 1 || j < 1 || M.tu >= MAXSIZE) return ERROR; // M.data的0下标不用for (k = M.tu; k > 0; k--) // 从M.tu到插入点之间的三元组逆序依次向后移动一个位置if (M.data[k].i > i || (M.data[k].i == i && M.data[k].j > j)){M.data[k + 1].i = M.data[k].i;M.data[k + 1].j = M.data[k].j;M.data[k + 1].v = M.data[k].v;}elsebreak;M.data[k + 1].i = i;M.data[k + 1].j = j;M.data[k + 1].v = v; // 插入M.tu++; // 调整参数return OK;
}// (2)创建稀疏矩阵三元组
void CreatTriple(Tripletable& M)
{int i, j, v, k, tu;do {printf("  输入稀疏矩阵的(行数,列数,非零元总数)=>");scanf("%d,%d,%d", &M.mu, &M.nu, &tu);} while (M.mu < 1 || M.nu < 1 || tu < 0);M.tu = 0;for (k = 1; k <= tu; k++){do {printf("  输入第%d个非零元素的(行≥1,列≥1,值≠0)=>", k);scanf("%d,%d,%d", &i, &j, &v);} while (i < 1 || j < 1 || v == 0);InsertTriple(M, i, j, v); // 调用插入算法创建稀疏矩阵三元组}
}// (3)输出稀疏矩阵三元组
void PrintTriple(Tripletable M)
{int ia;printf("%4d%4d%4d\n", M.mu, M.nu, M.tu);printf("===============\n");for (ia = 1; ia <= M.tu; ia++)printf("%4d%4d%4d\n", M.data[ia].i, M.data[ia].j, M.data[ia].v);
}// (4)两个稀疏矩阵相加
Status TripleAdd(Tripletable MA, Tripletable MB, Tripletable& MC)
{if (MA.tu + MB.tu >= MAXSIZE) // 溢出判断return ERROR;int ia = 1, ib = 1, ic = 1, k, temp;while (ia <= MA.tu && ib <= MB.tu){if (MA.data[ia].i < MB.data[ib].i || (MA.data[ia].i == MB.data[ib].i && MA.data[ia].j < MB.data[ib].j)){// 若MA中元素的下标(i, j)更小,// 则将MA中的该元素复制到MC中MC.data[ic].i = MA.data[ia].i;MC.data[ic].j = MA.data[ia].j;MC.data[ic++].v = MA.data[ia++].v;}else if (MA.data[ia].i == MB.data[ib].i && MA.data[ia].j == MB.data[ib].j){// 若MA与MB中元素的下标(i, j)相等,则值相加temp = MA.data[ia].v + MB.data[ib].v;if (temp != 0){MC.data[ic].i = MA.data[ia].i;MC.data[ic].j = MA.data[ia++].j;MC.data[ic++].v = temp;}else{ // 若两个元素值相加结果得0,则MA、MB同时取下一个元素ia++;ib++;}}else{ // 否则,MB的下标更小,取MB中的元素到MCMC.data[ic].i = MB.data[ib].i;MC.data[ic].j = MB.data[ib].j;MC.data[ic++].v = MB.data[ib++].v;}}for (k = ia; k <= MA.tu; k++) // 将MA中剩余的三元组复制到MC的尾部{MC.data[ic].i = MA.data[k].i;MC.data[ic].j = MA.data[k].j;MC.data[ic++].v = MA.data[k].v;}for (k = ib; k <= MB.tu; k++) // 将MB中剩余的三元组复制到MC的尾部{MC.data[ic].i = MB.data[k].i;MC.data[ic].j = MB.data[k].j;MC.data[ic++].v = MB.data[k].v;}MC.mu = MA.mu; // 确定MC的行、列数及非零元总数MC.nu = MA.nu;MC.tu = ic - 1;return OK;
}// (5)两个稀疏矩阵相乘
int TripleValue(Tripletable M, int i, int j)
{ // 在M中取(i, j)下标对应的元素值int k;for (k = 1; k <= M.tu; k++)if (M.data[k].i == i && M.data[k].j == j) // 若下标i, j与第k个三元组的i, j对应相等return (M.data[k].v); // 则返回该三元组的元素值,否则返回0return 0;
}
Status TripleMul(Tripletable A, Tripletable B, Tripletable& C)
{ // C=A×Bint i, j, k, p = 1, s; // p用于统计C的非零元个数if (A.nu != B.mu) return ERROR; // 矩阵相乘应满足的条件for (i = 0; i < A.mu; i++){for (j = 0; j < B.nu; j++){s = 0;for (k = 0; k < A.nu; k++){s = s + TripleValue(A, i, k) * TripleValue(B, k, j); // 计算}if (s != 0){C.data[p].i = i;C.data[p].j = j;C.data[p].v = s;p++;}}}C.mu = A.mu; // 确定C矩阵的行、列数及非零元总数C.nu = B.nu;C.tu = p - 1;return OK;
}// (6)求转置矩阵
void TranMat(Tripletable& AT, Tripletable A)
{int col, p, q, num[MAXSIZE], cpot[MAXSIZE];AT.mu = A.nu;AT.nu = A.mu;AT.tu = A.tu;for (col = 1; col <= A.nu; col++) num[col] = 0;for (p = 1; p <= A.tu; ++p) // 计算A中每列非零元的个数num[A.data[p].j]++;cpot[1] = 1;for (col = 2; col <= A.nu; col++) // 计算转置后元素的位置cpot[col] = cpot[col - 1] + num[col - 1];for (p = 1; p <= A.tu; ++p) // 转置{col = A.data[p].j;q = cpot[col];AT.data[q].i = A.data[p].j;AT.data[q].j = A.data[p].i;AT.data[q].v = A.data[p].v;cpot[col]++;}
}// 主函数设计
int main()
{Tripletable A, B, C, AT;printf("(1) 创建稀疏矩阵A的三元组:\n");CreatTriple(A);printf("A的三元组输出:\n");PrintTriple(A);printf("(2) 创建稀疏矩阵B的三元组:\n");CreatTriple(B);printf("B的三元组输出:\n");PrintTriple(B);printf("(3) 求C=A+B。\n");if (A.mu == B.mu && A.nu == B.nu){TripleAdd(A, B, C);printf("C的三元组输出:\n");PrintTriple(C);}elseprintf("A、B不能相加!\n");printf("(4) 求C=A×B。\n");if (A.nu == B.mu){TripleMul(A, B, C);printf("C的三元组输出:\n");PrintTriple(C);}elseprintf("A、B不能相乘!\n");printf("(5) 求A的转置矩阵AT。AT的三元组输出:\n");TranMat(AT, A);PrintTriple(AT);return 0;
}

七,运行效果

1,实验要求效果。
在这里插入图片描述

2,编写程序运行后的效果。
在这里插入图片描述

相关文章:

数据结构实验6.2:稀疏矩阵的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;问题描述三&#xff0c;基本要求四、算法分析&#xff08;一&#xff09;稀疏矩阵三元组表示法存储结构&#xff08;二&#xff09;插入算法&#xff08;三&#xff09;创建算法&#xff08;四&#xff09;输出算法&#xff08;五…...

BDO分厂积极开展“五个一”安全活动

BDO分厂为规范化学习“五个一”活动主题&#xff0c;按照“上下联动、分头准备 、差异管理、资源共享”的原则&#xff0c;全面激活班组安全活动管理新模式&#xff0c;正在积极开展班组安全活动&#xff0c;以单元班组形式对每个班组每周组织一次“五个一”安全活动。 丁二醇单…...

那就聊一聊mysql的锁

MySQL 的锁机制是数据库并发控制的核心&#xff0c;作为 Java 架构师需要深入理解其实现原理和适用场景。以下是 MySQL 锁机制的详细解析&#xff1a; 一、锁的分类维度 1. 按锁粒度划分 锁粒度特点适用场景​全局锁​锁定整个数据库&#xff08;FLUSH TABLES WITH READ LOC…...

Python番外——常用的包功能讲解和分类组合

目录 1. Web开发框架与工具 2. 数据处理与分析 3. 网络请求与爬虫 4. 异步编程 5. 数据库操作 6. 图像与多媒体处理 7. 语言模型与NLP 8. 安全与加密 9. 配置与工具 10. 其他工具库 11.典型组合场景 此章节主要是记录我所使用的包&#xff0c;以及模块。方便供自己方…...

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…...

四月下旬系列

CUHKSZ 校赛 期中考试 DAY -1。 省流&#xff1a;前 1h 切 6 题&#xff0c;后 3h 过 1 题&#xff0c;读错一个本来很【】的题&#xff0c;被大模拟构造创【】了。 本地除了 VSCode 没有 Extensions&#xff0c;别的和省选差不多。使用 DEVC。 前 6 题难度 < 绿&#x…...

计算机网络 3-4 数据链路层(局域网)

4.1 局域网LAN 特点 1.覆盖较小的地理范围 2.较低的时延和误码率 3.局域网内的各节点之间 4.支持单播、广播、多播 分类 关注三要素 &#xff08;出题点&#xff09; ①拓扑结构 ②传输介质 ③介质访问控制方式 硬件架构 4.2 以太网 4.2.1 层次划分 4.2.2 物理层标准…...

WebSocket介绍

在网页聊天项目中&#xff0c;为了实现消息的发送和及时接收&#xff0c;我们使用了WebSocket&#xff0c;接下来就简单介绍一下这个WebSocket。 了解消息的转发逻辑 当两个不同客户端在不同的局域网中互相发送消息时&#xff0c;假如这两个客户端分别是a和b&#xff0c;因为…...

rpcrt4!COMMON_AddressManager函数分析之和全局变量rpcrt4!AddressList的关系

第一部分&#xff1a; 1: kd> x rpcrt4!addresslist 77c839dc RPCRT4!AddressList 0x00000000 1: kd> g Breakpoint 2 hit RPCRT4!OSF_ADDRESS::CompleteListen: 001b:77c0c973 55 push ebp 1: kd> g Breakpoint 11 hit RPCRT4!COMMON_Addr…...

Java Web 之 Tomcat 100问

Tomcat 是什么&#xff1f; Tomcat 是一个开源的 Java Servlet 容器和 Web 容器。 Tomcat 的主要功能有哪些&#xff1f; 三大主要功能&#xff1a; 运行 Java Web 应用。处理 HTTP 请求。管理 Web 应用。 如何安装 Tomcat &#xff1f; 下载 Tomcat 安装包&#xff08;A…...

ESB —— 企业集成架构的基石:功能、架构与应用全解析

企业服务总线&#xff08;Enterprise Service Bus&#xff0c;ESB&#xff09;是一种重要的企业级集成架构&#xff0c;以下为你详细介绍&#xff1a; 一、概念与定义 ESB 是一种基于面向服务架构&#xff08;SOA&#xff09;的中间件技术&#xff0c;它充当了企业内部不同应…...

wordpress SMTP配置qq邮箱发送邮件,新版QQ邮箱授权码获取方法

新版的QQ邮箱界面不同了&#xff0c;以下是新版的设置方法&#xff1a; 1. 进入邮箱后&#xff0c;点右上角的设置图标&#xff1a; 2. 左下角的菜单里&#xff0c;选择“账号与安全” &#xff1a; 3. 然后如下图&#xff0c;开启SMTP 服务&#xff1a; 4. 按提示验证短信&am…...

【操作系统原理04】进程同步

文章目录 大纲一.进程同步与进程互斥0.大纲1.同步2.互斥 二.进程互斥的软件实现方法0.大纲1.单标志法2.双标志先检查法3.双标志后检查法4.Peterson算法 三.进程互斥的硬件实现方法0.大纲1.中断屏蔽方法2.TestAndSet指令3.Swap指令 四.互斥锁五.信号量机制0.大纲1.概念2.整形信号…...

Java ThreadPoolExecutor 深度解析:从原理到实战

在 Java 的多线程编程领域&#xff0c;ThreadPoolExecutor是一个至关重要的工具类&#xff0c;它为开发者提供了强大且灵活的线程池管理能力。合理使用ThreadPoolExecutor&#xff0c;不仅能够提升应用程序的性能和响应速度&#xff0c;还能有效控制资源消耗&#xff0c;避免因…...

MCP 协议——AI 世界的“USB-C 接口”:解锁智能协作的新时代

在过去十年中&#xff0c;科技的进步已经改变了我们日常生活的方方面面。从智能手机的普及到物联网的快速发展&#xff0c;人们的生活被各种创新的技术重新定义。今天&#xff0c;我们即将迎来另一个里程碑式的转折点——MCP 协议的推出&#xff0c;它将为人工智能世界的协作与…...

知识就是力量——一些硬件的使用方式

硬件平台 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09;1.硬件连接2. 软件驱动实现3. 优化与注意事项4. 示例工程参考5. 常见问题 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09; 1.硬件连…...

机器学习(1)— 开发环境安装

机器学习&#xff08;1&#xff09;— 准备开发环境 一、前言 二、Ubuntu开发环境安装 1、NumPy安装 使用如下命令安装&#xff1a; sudo apt-get install python3-numpy2、PyTorch 安装 由于我电脑暂时没有英伟达显卡&#xff0c;暂时安装CPU版&#xff1a; pip3 insta…...

深入实战:使用C++开发高性能RESTful API

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

C++之虚函数 Virtual Function

1. 普通虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;基类中用 virtual 声明&#xff0c;允许派生类 覆盖&#xff08;Override&#xff09;。特点&#xff1a; 基类可提供默认实现。派生类可选择性覆盖&#xff08;若不覆盖&#xff0c;则调用基类版本&a…...

【java实现+4种变体完整例子】排序算法中【选择排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是选择排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、选择排序基础实现 原理 每一轮遍历未排序部分&#xff0c;找到最小元素并交换到当前起始位置&#xff0c;逐步构建已排序序列。 代码示例 pu…...

DNS主从同步实验

dns域名解析原理 实验步骤1、主dns要完成dns解析&#xff1a;192.168.21.128 [rootlocalhost ~]# yum install bind -y [rootlocalhost ~]# systemctl start named [rootlocalhost ~]# vim /etc/named.conf options { listen-on port 53 { any; }; direct…...

UIjavaScritIU

1、直接执行js脚本&#xff1a;document.documentElement.scrollTop1000 document.getElementById(“su”).click() 弊端&#xff1a; js自己带的元素定位方法不如selenium的丰富 不支持xpath css 等 定位元素操作不是很灵活。 需要借助js脚本传入 -selenium定位 js 负责执行动…...

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班 模块一&#xff1a;解密Manus分布式多智能体工作原理和架构内幕  基于Claude和Qwen的大模型智能体Manus为何能够迅速成为全球讨论热度最高、使用体验最好、产业界最火爆的大模型智能体产品&#xff1f;  Ma…...

Java——二维数组

一、概念 二维数组也是一种容器&#xff0c;不同于一维数组&#xff0c;该容器存储的都是一维数组容器。 二、定义格式 1.数据类型[ ] [ ] 变量名; 2.数据类型 变量名 [ ] [ ]; 3.数据类型 [ ] 变量名 [ ]; 三、动态初始化 &#xff08;一&#xff09;书写 1.格式 数据…...

豆瓣图书数据采集与可视化分析(一)- 豆瓣图书数据爬取

文章目录 前言一、数据爬取步骤二、豆瓣图书页面分析​1. 图书分类标签页面分析2. 图书页面分析 三、数据采集实现1. 图书分类标签数据采集2. 图书数据采集3. 把多个分类的CSV数据文件整合到一个CSV文件中 前言 在当今大数据时代&#xff0c;数据的获取与整理对于各个领域的研…...

车载诊断新架构--- SOVD初入门(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

test——自动化测试

目录 一概念 1自动化 2回归测试 3自动化分类 3.1接口自动化 3.2UI自动化 4自动化测试金字塔 5web自动化测试 6工作原理 二函数 1元素定位 1.1cssSelector ​编辑1.2xpath 语法 2操作对象 2.1click() 2.2send_keys() 2.3clear() 2.4text 2.5get_attribu…...

Kubernetes相关的名词解释CoreDNS插件(2)

为什么需要DNS服务&#xff1f; service发现是k8s中的一个重要机制&#xff0c;其基本功能为&#xff1a;在集群内通过服务名对服务进行访问&#xff0c;即需要完成从服务名到ClusterIP的解析。 k8s主要有两种service发现机制&#xff1a;环境变量和DNS。没有DNS服务的时候&am…...

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su &#xff0c;命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…...

代码审计入门 原生态sql注入篇

前置知识&#xff1a; 漏洞形成的原因&#xff1a; 1、可控的参数 2、函数缺陷 代码审计的步骤&#xff1a; 1、全局使用正则搜索 漏洞函数 &#xff0c;然后根据函数看变量是否可控&#xff0c;再看函数是否有过滤 2、根据web的功能点寻找函数&#xff0c;然后根据函数看…...

数据结构0基础学习堆

文章目录 简介公式建立堆函数解释 堆排序O(n logn)topk问题 简介 堆是一种重要的数据结构&#xff0c;是一种完全二叉树&#xff0c;&#xff08;二叉树的内容后面会出&#xff09;&#xff0c; 堆分为大小堆&#xff0c;大堆&#xff0c;左右结点都小于根节点&#xff0c;&am…...

分析虚幻引擎编辑器中使用 TAA 或 TSR 时角色眨眼导致的眼睛模糊问题

1. 引言 用户反馈在使用虚幻引擎编辑器时&#xff0c;当抗锯齿方法设置为时间性抗锯齿 (TAA) 或时间性超级分辨率 (TSR) 时&#xff0c;角色的眼睛在眨眼时会出现模糊现象。时间性抗锯齿和时间性超级分辨率是现代游戏引擎&#xff08;包括虚幻引擎&#xff09;中常用的抗锯齿和…...

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个&#xff0c;都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

【java实现+4种变体完整例子】排序算法中【堆排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是堆排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、堆排序基础实现 原理 基于二叉堆结构&#xff08;最大堆&#xff09;&#xff0c;通过以下步骤实现排序&#xff1a; 构建最大堆&#xff1a;将…...

量化交易 - RSRS(阻力支撑相对强度)策略研究 - 源码

一、介绍 RSRS&#xff08;阻力支撑相对强度&#xff09;是一种基于价格阻力位与支撑位动态变化的市场择时技术指标&#xff0c;由光大证券在2017年提出。其核心原理是通过量化最高价与最低价之间的线性关系&#xff0c;预测市场趋势变化。 原理&#xff1a; 线性回归建模&a…...

从FPGA实现角度介绍DP_Main_link主通道原理

DisplayPort&#xff08;简称DP&#xff09;是一个标准化的数字式视频接口标准&#xff0c;具有三大基本架构包含影音传输的主要通道&#xff08;Main Link&#xff09;、辅助通道&#xff08;AUX&#xff09;、与热插拔&#xff08;HPD&#xff09;。 Main Link&#xff1a;用…...

数据库备份-docker配置主从数据库

创建 Docker Compose 文件 创建一个 docker-compose.yml 文件&#xff0c;定义两个 MySQL 容器&#xff08;一个主库&#xff0c;一个从库&#xff09; services:mysql:image: mysql:8.0.27container_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiM…...

YOLO11改进-Backbone-使用MobileMamba替换YOLO backbone 提高检测精度

轻量化模型的技术瓶颈 CNN 的局限性&#xff1a;传统 CNN&#xff08;如 MobileNet&#xff09;依赖局部感受野&#xff0c;难以捕捉长距离依赖关系&#xff0c;在高分辨率任务&#xff08;如语义分割&#xff09;中需通过增加计算量提升性能&#xff0c;效率低下。 Transforme…...

JavaScript学习教程,从入门到精通,DOM 操作语法知识点及案例代码(20)

DOM 操作语法知识点及案例代码 一、DOM 介绍 1. 什么是 DOM DOM (Document Object Model&#xff0c;文档对象模型) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表示&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结…...

Vue3 + TypeScript中defineEmits 类型定义解析

TypeScript 中 Vue 3 的 defineEmits 函数的类型定义&#xff0c;用于声明组件可以触发的事件。以下是分步解释&#xff1a; 1. 泛型定义 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定义允许的事件名称集合&#xff0c;即组…...

Git命令归纳

初始化git git config --global user.name xxx&#xff1a;设置全局用户名&#xff0c;信息记录在~/.gitconfig文件中git config --global user.email xxxxxx.com&#xff1a;设置全局邮箱地址&#xff0c;信息记录在~/.gitconfig文件中git init&#xff1a;先创建一个目录&am…...

Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障

数据库异常断电,然后启动异常,我接手该库,尝试recover恢复 SQL> recover database; ORA-10562: Error occurred while applying redo to data block (file# 2, block# 63710) ORA-10564: tablespace SYSAUX ORA-01110: ???????? 2: H:\TEMP\GDLISNET\SYSAUX01.DBF O…...

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法&#xff0c;共同保证产品的开发质量。但在刚开始学习ISO26262的时候&#xff0c;又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…...

小测验——已经能利用数据集里面的相机外参调整后看到渲染图像

文章目录 .1 外try——牛的显示.2 try——衣服的显示.3 原生R,T但是部分显示.4 在.3的基础上加上可视化界面.5 调参后能看到东西的.6 能看一点东西+可视化(pytorch3d).7 自己的代码可视化——需要调整.1 外try——牛的显示 import numpy as np import matplotlib.pyplot as …...

2024期刊综述论文 Knowledge Graphs and Semantic Web Tools in Cyber Threat Intelligence

发表在期刊Journal of Cybersecurity and Privacy上&#xff0c;专门讲知识图谱技术和语义Web工具在网络威胁情报领域的作用&#xff0c;还把本体和知识图谱放在相同的地位上讨论。 此处可以明确一点&#xff1a;本体和知识图谱都可以用于网络威胁情报的应用&#xff0c;当然也…...

文件上传及验证绕过漏洞

目录 一、文件上传常见点 二、客户端--JS绕过--PASS-01 1、环境安装 2、禁用JS 3、后缀名绕过 4、修改前端代码 三、服务端黑名单绕过 1、特殊可解析后缀--PASS-03 2、大小写绕过--PASS-06 3、点绕过--PASS-08 4、空格绕过--PASS-07 5、::$DATA绕过--PASS-09 6、配…...

stack和queue的使用和模拟实现

1&#xff1a;stack文档 stack文档 stack的使用 2&#xff1a;queue文档 queue文档 queue的使用 1&#xff1a;队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2&#xff1a;队列作…...

基于Ubuntu2504部署OpenStack E版

OpenStack 初始化环境安装数据库、memcahe、rabbitmq等服务安装keystone服务安装glance服务安装placement服务安装nova服务安装neutron服务安装horizon服务 官网 OpenStack Epoxy 巩固了作为 VMware 替代方案的地位&#xff0c;增强了安全性&#xff0c;并改进了硬件支持 第 3…...

Jsp技术入门指南【七】JSP动作讲解

Jsp技术入门指南【七】JSP动作讲解 前言一、什么是JSP动作&#xff1f;二、核心JSP动作详解1. jsp:include&#xff1a;动态包含其他页面与<% include %>的区别 2. jsp:forward&#xff1a;请求转发到另一个页面3. jsp:param&#xff1a;为动作传递参数4. jsp:useBean&am…...

电脑 访问 github提示 找不到网页,处理方案

1、找到 本机的 host文件 例如 windows 的 一般在 C:\Windows\System32\drivers\etc\hosts 用管理员身份打开 hosts 文件 如果文件中没有 github的配置&#xff0c;需要自己手动添加上去&#xff1b; 如果有&#xff0c;则需要 检查 github.com 与 github.global.ssl.fastly.…...