日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Graph邻接矩阵

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Graph邻接矩阵 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在本教程中,您將了解什么是鄰接矩陣。 此外,您還可以在 Python 中找到鄰接矩陣的工作示例。

鄰接矩陣是一種將圖表示為布爾矩陣(0 和 1)的方法。 有限圖可以在計(jì)算機(jī)上以方陣的形式表示,其中矩陣的布爾值表示兩個(gè)頂點(diǎn)之間是否存在直接路徑。

例如,我們有下面的圖表。

我們可以用矩陣形式表示這個(gè)圖,如下所示。

上表/矩陣中的每個(gè)單元格都表示為 AijA_{ij}Aij?,其中 iiijjj 是頂點(diǎn)。 AijA_{ij}Aij? 的值是 1 還是 0,取決于是否存在從頂點(diǎn) iii 到頂點(diǎn) jjj 的邊。

如果存在從 iiijjj 的路徑,則 AijA_{ij}Aij? 的值為 1,否則為 0。例如,從頂點(diǎn) 1 到頂點(diǎn) 2 有一條路徑,因此 A12A_{12}A12? 為 1,并且沒有從頂點(diǎn) 1 到 3 的路徑, 所以 A13A_{13}A13? 為 0。

在無向圖的情況下,矩陣關(guān)于對(duì)角線對(duì)稱,因?yàn)槊織l邊 (i,j)(i,j)(i,j),也有一條邊 (j,i)(j,i)(j,i)

鄰接矩陣的優(yōu)點(diǎn)

  • 添加邊、刪除邊以及檢查是否存在從頂點(diǎn) iii 到頂點(diǎn) jjj 的邊等基本操作是非常省時(shí)的恒定時(shí)間操作。
  • 如果圖密集且邊數(shù)很大,則應(yīng)首選鄰接矩陣。 即使圖和鄰接矩陣是稀疏的,我們也可以使用稀疏矩陣的數(shù)據(jù)結(jié)構(gòu)來表示它。
  • 然而,最大的優(yōu)勢(shì)來自于矩陣的使用。 硬件的最新進(jìn)展使我們能夠在 GPU 上執(zhí)行甚至昂貴的矩陣運(yùn)算。
  • 通過對(duì)鄰接矩陣執(zhí)行操作,我們可以深入了解圖的性質(zhì)及其頂點(diǎn)之間的關(guān)系。

鄰接矩陣的缺點(diǎn)

  • 鄰接矩陣的 V×VV \times VV×V 空間要求使其成為內(nèi)存占用者。 圖通常沒有太多的連接,這就是為什么鄰接表是大多數(shù)任務(wù)的更好選擇的主要原因。
  • 雖然基本操作很簡(jiǎn)單,但在使用鄰接矩陣表示時(shí),像 inEdges 和 outEdges 這樣的操作代價(jià)高昂。

Python中的鄰接矩陣代碼

# Adjacency Matrix representation in Pythonclass Graph(object):# Initialize the matrixdef __init__(self, size):self.adjMatrix = []for i in range(size):self.adjMatrix.append([0 for i in range(size)])self.size = size# Add edgesdef add_edge(self, v1, v2):if v1 == v2:print("Same vertex %d and %d" % (v1, v2))self.adjMatrix[v1][v2] = 1self.adjMatrix[v2][v1] = 1# Remove edgesdef remove_edge(self, v1, v2):if self.adjMatrix[v1][v2] == 0:print("No edge between %d and %d" % (v1, v2))returnself.adjMatrix[v1][v2] = 0self.adjMatrix[v2][v1] = 0def __len__(self):return self.size# Print the matrixdef print_matrix(self):for row in self.adjMatrix:for val in row:print('{:4}'.format(val)),printdef main():g = Graph(5)g.add_edge(0, 1)g.add_edge(0, 2)g.add_edge(1, 2)g.add_edge(2, 0)g.add_edge(2, 3)g.print_matrix()if __name__ == '__main__':main()

鄰接矩陣應(yīng)用

  • 在網(wǎng)絡(luò)中創(chuàng)建路由表
  • 導(dǎo)航任務(wù)

參考資源

[1] Adjacency Matrix

總結(jié)

以上是生活随笔為你收集整理的Graph邻接矩阵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。