6.2.圖的存儲結構-鄰接矩陣法

一.鄰接矩陣法存儲不帶權圖:

結點不帶權值:

1.左圖的無向圖中,A到B直達的有一條路,所以A行B列的值為1;

左圖的無向圖中,A到F沒有直達的路,所以A行F列的值為0;

結論:無向圖中采用鄰接矩陣法,0表示兩個頂點不鄰接,1表示兩個頂點鄰接,邊對應兩個1;

2.右圖的有向圖中,A到B直達的有一條路,所以A行B列的值為1,

B到A沒有直達的路,所以B行A列的值為0;

結論:有向圖中采用鄰接矩陣法,1表示有向邊(弧),有向邊(弧)對應一個1;

3.上述圖片中的代碼,頂點表是要存入邊表的即表中存點;

4.頂點表也可以是其他類型,如整型,自定義數據類型;

5.int型表示邊占4個字節(4B)或者8個字節(8B),用bool型或枚舉型變量表示邊則占1個字節(1B);

6.注:表中的頂點是有下標(編號)的,這樣是為了在表中方便尋找兩個頂點的關系,如A的下標為0,B的下標為1,這樣比如在左圖的無向圖中只需要找第0行第1列就可以查找頂點A和B的關系;

7.如何求頂點的度(針對無向圖和有向圖),入度和出度(只針對有向圖):

  • 無向圖:如上述圖片中的B結點,在B結點這一行中,有幾個非0元素就有幾個度,顯然A,E,F列為1即不為0,因此B的度為3(看B結點這一列也可以,結果一致)

結論:第i個結點的度=第i行(第i列)的非零元素個數,時間復雜度為O(n)或者O(|v|),v是頂點數

  • 有向圖:某個結點的出度的個數就是該結點所在行(不能是列)中非0元素的個數,如A結點的出度為1;

    某個結點的入度的個數就是該結點所在列(不能是行)中非0元素的個數,如A結點的入度為2;

    有向圖中某個結點的度等于該結點入度的個數加出度的個數,時間復雜度為O(n)或者O(|v|),v是頂點

    數,因此A結點的度為3;


二.鄰接矩陣法存儲帶權圖(網):

1.帶權圖中存儲的就是權值,比如左圖的無向圖A直達B的權值為5,那么A行B列的值為5,

左圖的無向圖B直達C不存在權值即B直達不了C,那么B行C列的值可以用無窮來表示;

2.權值的類型可以是整型,浮點型或者自定義數據類型等;

3.有時也會把自己指向自己的權值設為0,如A到A的權值為0;

4.鄰接矩陣法存儲帶權圖(網)中結點到結點的權值如果為0或者是無窮,那么表示與之對應的兩個結點之間不存在邊:


三.鄰接矩陣法的性能分析:

1.如果圖中有n個頂點(結點),那么存儲該圖的頂點就需要一個一維數組,此時存儲頂點的空間復雜度為O(n),

還需要定義一個n * n的二維數組來存儲和這些頂點相關的邊的信息,所以存儲邊的空間復雜度為O(n * n),

所以總共空間復雜度為O(n)+O(n * n),等價于O(n * n),

結論:鄰接矩陣法的空間復雜度為O(n * n)或O(|v| * |v|),v為頂點數-->只和頂點數有關,和實際的邊數無關,導致的弊端就是如果頂點很多,但邊比較少,就會使得存儲邊的二維數組空間浪費,因此鄰接矩陣法適用于存儲稠密圖即邊多的圖;


四.鄰接矩陣法的性質:討論不帶權值的圖即矩陣元素只有0,1

0表示從一個頂點到另一個頂點沒有路徑,1表示從一個頂點到另一個頂點有路徑,

A到B到D的長度為2,符合要找的路徑長度,所以算了進去;

注:簡單圖中自己到自己的權值為0;

上述圖片中右下角的矩陣中的值表示的是頂點到頂點長度為2的路有幾條,如A行C列中頂點A到頂點C長度為2的路有1條;


五.總結:

鄰接矩陣法的空間復雜度為O(n*n),n為頂點數,由此可看出鄰接矩陣法的空間復雜度較高,不適合存儲稀疏圖,如果使用鄰接矩陣法存儲稀疏圖,會造成大量的空間浪費。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895701.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【VB語言】EXCEL中VB宏的應用

【VB語言】EXCEL中VB宏的應用 文章目錄 [TOC](文章目錄) 前言一、EXCEL-VB1.實驗過程2.代碼 二、EXCEL-VB 生成.c.h文件1.實驗過程2.代碼 四、參考資料總結 前言 1.WPS-VB擴展包 提示:以下是本篇文章正文內容,下面案例可供參考 一、EXCEL-VB 1.實驗過…

用deepseek學大模型05邏輯回歸

deepseek.com:邏輯回歸的目標函數,損失函數,梯度下降 標量和矩陣形式的數學推導,pytorch真實能跑的代碼案例以及模型,數據,預測結果的可視化展示, 模型應用場景和優缺點,及如何改進解決及改進方法數據推導。…

2025年02月17日Github流行趨勢

項目名稱:OmniParser 項目地址url:https://github.com/microsoft/OmniParser 項目語言:Jupyter Notebook 歷史star數:8971 今日star數:969 項目維護者:yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kris…

RocketMQ 5.0安裝部署

0.前言 在微服務架構逐漸成為主流的今天,消息隊列如同數字世界的快遞員,承擔著系統間高效通信的重要使命。 Apache RocketMQ 自誕生以來,因其架構簡單、業務功能豐富、具備極強可擴展性等特點被眾多企業開發者以及云廠商廣泛采用。歷經十余…

Ubuntu 22.04.5 LTS 安裝企業微信,(2025-02-17安裝可行)

一、依賴包(Ubuntu 20.04/Debian 11) 點擊下載https://www.spark-app.store/download_dependencies_latest 1、 下載最新的依賴包。 請訪問星火應用商店依賴包下載頁面, 下載最新的依賴包。2、解壓依賴包 </

如何使用 HPjtune 分析 Java GC 日志并優化 JVM 性能

HPjtune 是一款用于分析 Java 應用程序垃圾回收&#xff08;GC&#xff09;日志的工具&#xff0c;主要用于優化 JVM 性能。雖然 HPjtune 本身并不直接生成 HTML 格式的報告&#xff0c;但可以通過結合其他工具或方法將分析結果導出為 HTML 格式。以下是實現這一目標的步驟和方…

國產FPGA開發板選擇

FPGA開發板是學習和開發FPGA的重要工具&#xff0c;選擇合適的開發板對學習效果和開發效率至關重要。隨著國產FPGA的發展&#xff0c;淘寶上的許多FPGA開發板店鋪也開始進行國產FPGA的設計和銷售&#xff0c;本文將對國產FPGA和相關店鋪做個簡單梳理&#xff0c;幫助有需要使用…

Java高頻面試之SE-22

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天又來了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中的Optional了解多少&#xff1f; 在 Java 中&#xff0c;Optional 是 Java 8 引入的一個容器類&#xff0c;用于顯式處理可能為 null 的…

使用OBS和nginx實現直播流

使用OBS和nginx實現直播流&#xff0c;如 1&#xff0c;下載OBS OBS用于視頻錄制和直播的免費開源軟件。在 Windows、Mac 或 Linux 上快速輕松地下載并開始流式傳輸。官網下載 2&#xff0c;下載nginx 注意nginx需要下載帶gryghon版本&#xff0c;這個才有rtmp模塊&#xff0…

PyTorch 源碼學習:閱讀經驗 代碼結構

分享自己在學習 PyTorch 源碼時閱讀過的資料。本文重點關注閱讀 PyTorch 源碼的經驗和 PyTorch 的代碼結構。因為 PyTorch 不同版本的源碼實現有所不同&#xff0c;所以筆者在整理資料時盡可能按版本號升序&#xff0c;版本號見標題前[]。最新版本的源碼實現還請查看 PyTorch 倉…

python實現jaccard系數得出兩個集合的相似度

python實現jaccard系數得出兩個集合的相似度 1、簡介 計算兩個集合之間的Jaccard系數是一種常用的方法,用于衡量這兩個集合的相似度。 Jaccard系數定義為兩個集合交集大小與它們并集大小的比值。 Jaccard 系數的值范圍在 0 到 1 之間,值越大表示兩個集合越相似。 2、求兩個…

小愛音箱控制手機和電視聽歌的嘗試

最近買了小愛音箱pro&#xff0c;老婆讓我扔了&#xff0c;吃灰多年的舊音箱。當然舍不得&#xff0c;比小愛還貴&#xff0c;剛好還有一臺紅米手機&#xff0c;能插音箱&#xff0c;為了讓音箱更加靈活&#xff0c;買了個2元的藍牙接收模塊Type-c供電3.5接口。這就是本次嘗試起…

Pycharm+CodeGPT+Ollama+Deepseek

首先&#xff0c;體驗截圖&#xff1a; 接著&#xff1a; 1、下載Ollama&#xff1a; Download Ollama on macOS 2、下載模型 以1.5b為例&#xff0c;打開命令行&#xff0c;輸入: ollama run deepseek-r1:1.5b 3、Pycharm安裝Code GPT插件 打開PyCharm&#xff0c;找到文…

如何確保 for...in 循環按照特定順序遍歷對象屬性

由于 for...in 循環遍歷對象屬性的順序在 ECMAScript 規范中沒有嚴格規定&#xff0c;若要確保按照特定順序遍歷對象屬性&#xff0c;不能直接依賴 for...in 本身&#xff0c;不過可以借助一些其他方法來實現。以下是幾種常見的解決方案&#xff1a; 1. 使用數組存儲屬性名并排…

25/2/17 <嵌入式筆記> 桌寵代碼解析

這個寒假跟著做了一個開源的桌寵&#xff0c;我們來解析下代碼&#xff0c;加深理解。 代碼中有開源作者的名字。可以去B站搜著跟著做。 首先看下main代碼 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…

Qt中基于開源庫QRencode生成二維碼(附工程源碼鏈接)

目錄 1.QRencode簡介 2.編譯qrencode 3.在Qt中直接使用QRencode源碼 3.1.添加源碼 3.2.用字符串生成二維碼 3.3.用二進制數據生成二維碼 3.4.界面設計 3.5.效果展示 4.注意事項 5.源碼下載 1.QRencode簡介 QRencode是一個開源的庫&#xff0c;專門用于生成二維碼&…

【Android開發】華為手機安裝包安裝失敗“應用是非正式版發布版本,當前設備不支持安裝”問題解決

問題描述 我們將Debug版本的安裝包發送到手機上安裝&#xff0c;會發現華為手機有如下情況 解決辦法 在文件gradle.properties中粘貼代碼&#xff1a; android.injected.testOnlyfalse 最后點擊“Sync now”&#xff0c;等待重新加載gradle資源即可 后面我們重新編譯Debug安裝…

前端面試手寫--虛擬列表

目錄 一.問題背景 二.代碼講解 三.代碼改裝 四.代碼發布 今天我們來學習如何手寫一個虛擬列表,本文將把虛擬列表進行拆分并講解,然后發布到npm網站上. 一.問題背景 為什么需要虛擬列表呢?這是因為在面對大量數據的時候,我們的瀏覽器會將所有數據都渲染到表格上面,但是渲…

vue項目本地svg圖標使用

提前準備&#xff1a; 1、一個本地的svg圖片 這個直接從網上找一個就行 2、文件整體目錄 安裝插件 npm i vite-plugin-svg-iconsvite.config.ts中配置插件 完整代碼 import { fileURLToPath, URL } from node:url import { resolve } from path import { defineConfig } f…

Go: 使用VS Code配置Go項目支持Windows與Linux雙系統調試

在現代軟件開發中&#xff0c;越來越多的開發者開始使用VS Code等集成開發環境&#xff08;IDE&#xff09;來提高生產力&#xff0c;特別是在支持遠程開發時。VS Code的遠程SSH功能&#xff0c;使得開發者可以在本地Windows電腦上&#xff0c;通過遠程SSH連接到Linux服務器&am…