數據結構秘籍(二)圖(含圖的概念、存儲以及圖的兩大搜索)

1 引言

線性數據結構的元素滿足唯一的線性關系,每個元素(初第一個和最后一個外)只有一個直接前趨和一個直接后繼。樹形數據結構的元素之間有著明顯的層次關系。但是圖形結構的元素之間的關系是任意的。

什么是圖?

簡單來說,圖就是由頂點的有窮非空集合和頂點之間的邊組成的集合。通常表示為:G(V,E),其中,G表示一個圖,V表示頂點的集合,E表示邊的集合。

上圖所展示的就是圖,而且是一個有向圖(帶箭頭)?

2 圖的基本概念

拿好友關系舉例

2.1 頂點

圖中的數據元素我們稱之為頂點,圖中至少有一個頂點(非空有窮集合)

對應到好友關系圖,每一個用戶就代表一個頂點。

2.2 邊

頂點之間的關系用邊表示。

對應到好友關系圖,兩個用戶是好友的話,那兩者之間就存在一條邊。

2.3 度

度表示一個頂點包含多少條邊,在有向圖中,還分為出度和入度,出度表示從該頂點出去的邊的條數,入度表示進入該頂點的邊的條數。

對應到好友關系圖,度就代表了某個人的好友數量。

2.4 無向圖和有向圖

邊表示的是頂點之間的關系,有的關系是雙向的,比如同學,A是B的同學,那么B也肯定是A的同學,那么在表示A和B的關系時,就不用關注方向,用不帶箭頭的邊表示,這樣的圖就是無向圖。

有的關系是有方向的,比如抖音,我關注了你,你沒有關注我,這樣我們之間的關系就是單向的,我們用箭頭表示二者之間的關系,這樣的圖就是有向圖。

2.5 無權圖和帶權圖

對于一個關系,如果我們只關心關系的有無,而不關心關系有多強,那么就可以用無權圖來表示二者的關系。

對于一個關系,如果我們既關心關系的有無,也關心關系的強度,比如某某某的好感度,你對人家好感度百分百,人家對你好感度百分之零(一個悲傷的故事),那么就可以用帶權圖來表示,帶權圖中每一條邊用一個數值表示權值,代表關系的強度。

把上面的有向圖進行加工就是一個帶權有向圖

3 圖的存儲

3.1 鄰接矩陣存儲

鄰接矩陣將圖用二維矩陣存儲,是一種較為直觀的表示方式。

如果第i個頂點和第j個頂點之間有關系,且關系權值為n,則A[i][j]=n。

在無向圖中,我們只關心關系的有無,所以當頂點i和頂點j有關系時,A[i][j]=1,當頂點i和頂點j沒有關系時,A[i][j]=0。如下圖所示。

值得注意的是:無向圖的鄰接矩陣是一個對稱矩陣,因為在無向圖中,頂點i和頂點j有關系,那么就必定是雙方的。

鄰接矩陣存儲的方式優點是簡單直接(直接用一個二維數組即可),并且,在獲取兩個頂點之間的關系時也非常高效(直接獲取指定位置的數組元素的值即可)。但是吧,這種存儲方式的缺點也很明顯,那就是比較浪費空間。

3.2?鄰接表存儲

針對上面鄰接矩陣比較浪費內存空間的問題,誕生出了另外一種存儲方法--鄰接表。

鄰接鏈表使用一個鏈表來存儲某個頂點的所有后繼相鄰頂點。對于圖中每個頂點Vi,把所有鄰接于Vi的頂點Vj鏈成一個單鏈表,這個單鏈表稱為頂點Vi的鄰接表。如下圖所示:

可以數一數鄰接表中所存儲的元素的個數以及圖中邊的條數:

在無向圖中,鄰接表元素個數等于邊的條數的兩倍,如左圖所示的無向圖中,邊的條數為7,鄰接表存儲的元素個數為14。

在有向圖中,鄰接表元素個數等于邊的條數,邊的條數為8,那么鄰接表存儲的元素個數就為8.?

4 圖的搜索?

4.1 廣度優先搜索

廣度優先搜索是一層一層向外擴展的

廣度優先搜索的具體實現方式用到了之前學過的線性數據結構--隊列。具體過程如下所示?

4.2 深度優先搜索

深度優先搜索就是從原頂點開始,一直走到沒有后繼節點,才回溯到上一頂點,然后繼續往下走。

?

注意:搜索順序是不唯一的,如果給出了鏈表或矩陣的存儲方式,如下就是用單鏈表存儲,那么搜索順序就是固定的。?

?深度優先搜索的具體實現用到了另一種線性數據結構--棧。(隊列和棧可以從我線性數據結構一文中了解數據結構秘籍(一)線性數據結構(數組、鏈表、棧、隊列一次看完)-CSDN博客)過程如下:

?

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

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

相關文章

printf 與前置++、后置++、前置--、后置-- 的關系

# 前置和前置-- 先看一段代碼 大家是不是認為printf輸出的是 2 3 3 2 1 1 但是實際輸出的是 3 3 3 1 1 1 在這兩行printf函數代碼里,編譯器會先計算 a 和 --a 的值,然后再 從右向左 開始輸出。 printf函數中,如果有多個…

永磁同步電機無速度算法--反電動勢觀測器

一、原理介紹 在眾多無位置傳感器控制方法中,低通濾波反電勢觀測器結構簡單,參數整定容易,易于編程實現。但是該方法估計出的反電勢會產生相位滯后,需要在估計永磁同步電機轉子位置時進行了相位補償。 二、仿真模型 在MATLAB/si…

VS2015 c++和cmake配置編程

Visual Studio 2015:確保安裝了C開發工具,并安裝“使用C的桌面開發”工作負載。CMake:可以從 CMake官網 下載并安裝,并將其添加到系統環境變量中。vs加載項目啟動Visual Studio。選擇“繼續但無代碼”。點擊“文件”。選擇 “打開…

大語言模型揭秘:從誕生到智能

引言 在人工智能飛速發展的今天,大語言模型(Large Language Models, LLMs)無疑是技術領域最耀眼的明星之一。它們不僅能夠理解人類的自然語言,還能生成流暢的文本,甚至在對話、翻譯、創作等任務中表現出接近人類的智能…

MongoDB 高級索引

MongoDB 高級索引 摘要 在數據庫管理中,索引是提高查詢效率的關鍵因素。MongoDB,作為一款流行的NoSQL數據庫,其索引功能尤為強大。本文將深入探討MongoDB的高級索引特性,包括復合索引、部分索引、文本索引、地理空間索引等,旨在幫助數據庫管理員和開發者更好地利用Mongo…

STM32MP1xx的啟動流程

https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根據提供的知識庫內容,以下是STM32 MPU啟動鏈的詳細解析: 1. 通用啟動流程 STM32 MPU啟動分為多階段,逐步初始化外設和內存,并建立信任鏈: 1.1 ROM代碼&…

Collab-Overcooked:專注于多智能體協作的語言模型基準測試平臺

2025-02-27,由北京郵電大學和理想汽車公司聯合創建。該平臺基于《Overcooked-AI》游戲環境,設計了更具挑戰性和實用性的交互任務,目的通過自然語言溝通促進多智能體協作。 一、研究背景 近年來,基于大型語言模型的智能體系統在復…

QT——文件IO

QFile 類 構造函數 QFile() 無參構造 僅僅構建一個QFile 對象,不設定文件名 QFile(文件名) 構建一個QFile對象的同時,設定文件名 但是注意,僅僅設定文件名,并不會打開該文件 設定文件名 QFile file file.setFileName…

HTML第三節

一.初識CSS 1.CSS定義 A.內部樣式表 B.外部樣式表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

xr-frame 3D Marker識別,揚州古牌坊 3D識別技術穩定調研

目錄 識別物體規范 3D Marker 識別目標文件 map 生成 生成任務狀態解析 服務耗時&#xff1a; 對傳入的視頻有如下要求&#xff1a; 對傳入的視頻建議&#xff1a; 識別物體規范 為提高Marker質量&#xff0c;保證算法識別效果&#xff0c;可參考Marker規范文檔 Marker規…

html+js 輪播圖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>輪播圖示例</title><style>/* 基本樣式…

NAT 代理服務 內網穿透

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; NAT 技術背景二&#xff1a;&#x1f525; NAT IP 轉換過程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服務器&#x1f98b; 正向…

[Web 安全] PHP 反序列化漏洞 —— PHP 魔術方法

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] 反序列化漏洞 - 學習筆記-CSDN博客 PHP 魔術方法 - 簡介 - PHP 魔術方法 - 簡單教程&#xff0c;簡單編程PHP 中&#xff0c;以兩個下劃線 ( __ ) 開頭方法稱之為 「 魔術方法 」 這些 「 魔術方法 」 在 [PHP](/l/yufei/php…

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式 2025/3/4 16:47 緣起&#xff1a;128GB的TF卡&#xff0c;只能格式化為NTFS/exFAT/ext4。 在飛凌的OK3588-C下&#xff0c;NTFS格式只讀。 exFAT需要改內核來支持。 現在只剩下ext4了。 linux R4默認不支持exFAT…

跨域問題解釋及前后端解決方案(SpringBoot)

一、問題引出 有時,控制臺出現如下問題。 二、為什么會有跨域 2.1瀏覽器同源策略 瀏覽器的同源策略 &#xff08; Same-origin policy &#xff09;是一種重要的安全機制&#xff0c;用于限制一個源&#xff08; origin &#xff09;的文檔或 腳本如何與另一個源的資源進行…

【NLP 30、文本匹配任務 —— 傳統機器學習算法】

目錄 一、文本匹配任務的定義 1.狹義解釋 2.廣義解釋 二、文本匹配的應用 1.問答對話 2.信息檢索 3.文本匹配任務應用 三、智能問答 1.智能問答的基本思路 依照基礎資源劃分&#xff1a; 依照答案產出方式劃分 依照NLP相關技術劃分 四、智能問答的價值 1.智能客服 2.Faq知識庫問…

開源表單、投票、測評平臺部署教程

填鴨表單聯合寶塔面板深度定制,自寶塔面板 9.2 版本開始,在寶塔面板-軟件商店中可以一鍵部署填鴨表單系統。 簡單操作即可擁有屬于自己的表單問卷系統,快速賦能業務。即使小白用戶也能輕松上手。 社區版體驗地址:https://demo.tduckapp.com/home 前端項目地址: tduck-fro…

Elasticsearch 限制索引大小與索引模板匹配沖突解決方案

文章目錄 背景介紹環境限制索引大小創建 ILM&#xff08;索引生命周期管理&#xff09;策略創建 ILM 策略 創建索引模板并關聯 ILM 策略使用索引模板應用 ILM 策略 解決索引模板匹配沖突? 解決方案&#x1f539; 方案 1&#xff1a;修改 index_patterns&#xff08;推薦&#…

[LeetCode]day33 150.逆波蘭式求表達值 + 239.滑動窗口最大值

逆波蘭式求表達值 題目鏈接 題目描述 給你一個字符串數組 tokens &#xff0c;表示一個根據 逆波蘭表示法 表示的算術表達式。 請你計算該表達式。返回一個表示表達式值的整數。 注意&#xff1a; 有效的算符為 ‘’、‘-’、‘*’ 和 ‘/’ 。 每個操作數&#xff08;運…

論文閱讀筆記:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

論文閱讀筆記&#xff1a;UniFace: Unified Cross-Entropy Loss for Deep Face Recognition 1 背景2 創新點3 方法3.1 回顧softmax損失3.2 統一交叉熵損失3.3 人臉驗證中的UCE損失3.4 進一步的優化3.4.1 邊際UCE損失3.4.2 平衡BCE損失 4 實驗4.1 消融實驗4.2 和SOTA方法對比 論…