数据结构:下三角矩阵(Lower Triangular Matrix)

目录

什么是下三角矩阵?

我们要存哪些元素?一共几个?

推导索引映射公式 

核心问题:给定 (i,j),如何计算 k?


什么是下三角矩阵?

一个 n × n 的矩阵,如果它在主对角线以上的所有元素都是 0,那么它就是一个下三角矩阵。

比如 4×4 的矩阵:

[ a00  0    0    0  ]
[ a10 a11   0    0  ]
[ a20 a21  a22   0  ]
[ a30 a31  a32  a33 ]

我们发现:

  • 只有 行号 ≥ 列号(即 i ≥ j)的位置有非零元素。

  • 其他地方(即 i < j)全是 0,不需要存!

一个矩阵 A 是一个二维的数字表格。对于一个 n×n 的矩阵来说:

  • 它一共有 n 行,每行 n 个元素。

  • 每个元素用两个下标表示:A[i][j],其中 i 是行号,j 是列号。

在 C 或 C++ 中我们常写成:A[i][j]

我们要存哪些元素?一共几个?

我们只存矩阵下三角区域的元素(含对角线),也就是:

  • 第1行:只存1个元素(A₁₁)

  • 第2行:存2个元素(A₂₁,A₂₂)

  • 第3行:存3个元素(A₃₁,A₃₂,A₃₃)

  • ...

  • 第n行:存n个元素(Aₙ₁,...,Aₙₙ)

所以总共要存的元素个数是:1 + 2 + 3 + ... + n = n * (n + 1) / 2 个元素

推导索引映射公式 

假设我们用一维数组 a[k] 来存下三角矩阵的非零值,用行主顺序(row-major order)存储

设矩阵是 n × n,下标从 1开始,那么我们就要构造一个下标转换公式:

你给我 i, j(i ≥ j),我要算出它在数组 a[] 里的位置

我们按行来存:先存第1行,再第2行,再第3行……

例子(n=4)中,存储顺序是:

a[0] = A[1][1]  
a[1] = A[2][1]  
a[2] = A[2][2]  
a[3] = A[3][1]  
a[4] = A[3][2]  
a[5] = A[3][3]  
...

核心问题:给定 (i,j),如何计算 k?

我们想要的 k 是:

第1行:有 1 个元素(j 从 1 到 1)  

第2行:有 2 个元素(j 从 1 到 2)  
...  
第(i-1)行:有 (i - 1) 个元素  

=> 总共 (1 + 2 + ... + (i-1)) = (i-1) * i / 2 个元素

加上当前这一行中第 j 个元素(从左往右第 j 个)

所以:  k = 前 (i - 1) 行的元素个数 + 第 j 列在当前行中的偏移量(j - 1)

✅ 最终公式:k = (i - 1) * i / 2 + (j - 1)

注意:这里的 k 是数组 a[k] 中的下标(从0开始)

⚠️ 重要说明

  • 这个公式只适用于 i ≥ j(也就是下三角部分)

  • 如果你输入了 i < j,就说明这个元素是 0,不在数组中!

 列主顺序存储:(这里不再详细说明)

  示例验证

矩阵如下(n=4):

1 0 0 0  
2 3 0 0  
4 5 6 0  
7 8 9 10

我们来看 A[4][2] 是多少:

  • i = 4, j = 2

  • index = (4 - 1) * 4 / 2 + (2 - 1) = 3 * 4 / 2 + 1 = 6 + 1 = 7

  • a[7] = A[4][2] = 8 

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

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

相关文章

力扣209:长度最小的子数组

力扣209:长度最小的子数组题目思路代码题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回…

采购管理系统哪家性价比高?

在企业数字化转型进程中&#xff0c;采购管理系统已成为降本增效的核心工具。但面对市场上五花八门的产品&#xff0c;“性价比” 成为企业选型时的关键考量 —— 既要功能贴合业务需求&#xff0c;又要成本可控&#xff0c;还需兼顾实施效率与长期扩展性。以下从性价比维度解析…

轻松打造Unity小游戏AR体验

目录 AR会话初始化 平面追踪与相机定位 用户交互处理 实时渲染 Unity 小游戏宿主现已支持 AR 功能&#xff0c;本文介绍如何从零开始创建一个可以在Unity小游戏宿主上运行的AR小游戏&#xff0c;欢迎大家试用&#xff01; 想为你的小游戏注入虚实交融的魔力吗&#xff1f;…

IFCVF驱动+vhost-vfio提高虚拟机网络性能

​​IFCVF (Intel FPGA Virtual Function)​​ 是 Intel 为其基于 FPGA 的智能网卡开发的 ​​SR-IOV 虚拟功能驱动​​,属于 ​​PF4 (Physical Function 4)​​ 架构的一部分。它是专为高性能网络虚拟化场景设计的硬件加速解决方案。 云计算智能网卡(soc)或DPU场景下,IFC…

Hook捕获并拦截文件创建行为

需要用到minhook 先编译DLL #include <Windows.h> #include <string> #include <TlHelp32.h> #include <Shlwapi.h>#include "MinHook.h" // 自动选择正确的MinHook库 #pragma comment(lib, "Shlwapi.lib") #if defined(_M_X64) …

图像平滑处理

图像平滑处理四种常用方式1. 均值滤波 (cv2.blur())2. 高斯滤波 (cv2.GaussianBlur())3. 中值滤波 (cv2.medianBlur())4、双边滤波 (cv2.bilateralFilter())总结存图时遇到一个中文版乱码问题四种常用方式 平滑处理&#xff08;也称为模糊处理&#xff09;&#xff0c;用于减少…

fortigate的waf功能

在系统管理----可见功能----web应用防火墙打开waf功能Web 应用程序防火墙 &#xff08;WAF&#xff09; 配置文件可以检测和阻止已知的 Web 应用程序攻击。您可以将 WAF 配置文件配置为使用签名和约束来检查 Web 流量。您还可以强制实施 HTTP 方法策略&#xff0c;该策略控制与…

AI Compass前沿速览:可灵创意工坊、字节Coze StudioCoze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源

AI Compass前沿速览&#xff1a;可灵创意工坊、字节Coze Studio&Coze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态&#xff0c;通过六大核心模块的系统化组织&#xff0c;为不同层次的学…

SpringCloud之Gateway

SpringCloud之Gateway 官网地址&#xff1a; https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories 1. 什么是gateway Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架&#xff0c;定位于取代 Net…

关于获取某目录及子目录下所有文件且不包含隐藏文件

最近比较忙&#xff0c;很少写blog了&#xff01;&#xff01;&#xff01;关于获取目录及子目录下所有文件是常遇到的功能&#xff0c;一般通过递归遍历实现。而生产场景中&#xff0c;一般是遍历nas上的目录&#xff0c;在nas上利用File.listFiles(),在linux系统上无法获取含…

docker可视化管理工具lazydocker

Lazydocker 是一个用 Go 语言编写的命令行 Docker 管理工具。它提供了一个简洁、直观的终端界面&#xff0c;支持键盘和鼠标操作&#xff0c;可通过方向键与快捷键实时查看和管理容器、镜像、网络等资源&#xff0c;大幅简化了原本复杂的命令行操作&#xff0c;提升操作效率。2…

少林寺用什么数据库?

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;15年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝15万 擅长主流Oracle、MySQL、PG、高斯及…

C语言---万能指针(void *)、查找子串(strncmp函数的应用)多维数组(一维数组指针、二维数组指针)、返回指针值函数、关键字(const)

一、字符串与指针用字符指针指向一个字符串&#xff0c;可以不定义字符数组&#xff0c;而定义字符指针。用字符指针指向字符串中的字符。不能使用指针去改变不能修改的空间。eg1. 运用指针将 src 的内容拷贝到 dest 中去void Strcpy(char *dest, char *src) {while(*src ! \0)…

Keepalived 实战

一、高可用集群基础核心概念与指标集群类型&#xff1a;LB&#xff08;负载均衡&#xff09;&#xff1a;如 LVS、HAProxy、Nginx&#xff0c;提升吞吐量&#xff1b;HA&#xff08;高可用&#xff09;&#xff1a;保障核心服务&#xff08;数据库、Redis&#xff09;连续性&am…

窗口函数替代子查询的复杂查询简化技巧

窗口函数通过单次扫描完成分析计算&#xff0c;能大幅简化子查询结构并提升性能&#xff0c;尤其在排名、累计计算等场景‌15。以下是核心优化技巧&#xff1a;一、排名场景替代方案‌部门工资排名‌传统子查询需自连接和聚合计数&#xff1a;sqlSELECT e1.name, e1.salary, (S…

深度学习:预训练和warm up的区别

“预训练&#xff08;Pre-training&#xff09;”和“Warm-up&#xff08;预热&#xff09;”是深度学习中常见的两个训练策略&#xff0c;它们虽然都在训练初期起作用&#xff0c;但本质和目的完全不同。一、预训练&#xff08;Pre-training&#xff09;1. 定义预训练是指&…

Apache Ignite中分布式信号量(Distributed Semaphore)的说明和使用示例

这段内容是关于 Apache Ignite 中 分布式信号量&#xff08;Distributed Semaphore&#xff09; 的说明和使用示例。我们来一步步解析&#xff0c;帮助你深入理解它的含义和用途。&#x1f539; 一、什么是 Semaphore&#xff08;信号量&#xff09;&#xff1f; 在并发编程中&…

怎么提升服务器的防攻击能力!

提升服务器的防攻击能力需要从​​架构设计、技术防护、运维管理​​等多维度入手&#xff0c;覆盖网络层、系统层、应用层及数据层的安全防护。以下是具体的策略和实践方法&#xff1a;​​一、基础安全加固&#xff1a;消除自身漏洞​​服务器自身的脆弱性是最常见的攻击入口…

vscode配置rust环境

1.官网下载vscode&#xff0c;安装 2.vscode命令行运行&#xff1a; Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后&#xff1a; .\rustup-init.exe3.验证 先配置path&#xff1a; $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器?

最新版 HarmonyOS NEXT 开发工具安装教程&#xff1a;如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器&#xff1f; 什么是 DevEco Studio&#xff1f; DevEco Studio 是华为为 HarmonyOS 开发的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为开发 Harmony…