數據結構:下三角矩陣(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
英文地址,請注明出處:http://en.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…