【圖論】 Graph.jl 操作匯總

文章目錄

  • 圖論的集合類操作
      • Base.getindex
      • Base.intersect
      • Base.join
      • Base.reverse
      • Base.reverse!
      • Base.size
      • Base.sum
      • Base.sum
      • Base.union
    • 圖生成與轉換
      • Graphs.cartesian_product`
      • Graphs.complement
      • Graphs.compute_shifts
      • Graphs.crosspath
      • Graphs.difference
      • Graphs.egonet
      • Graphs.induced_subgraph
      • Graphs.merge_vertices!
      • Graphs.merge_vertices
      • Graphs.symmetric_difference
      • Graphs.tensor_product
    • 其他函數
      • SparseArrays.blockdiag
      • SparseArrays.sparse

參考鏈接:
https://juliagraphs.org/Graphs.jl/stable/core_functions/operators/

圖論的集合類操作

Base.getindex

方法

g[iter]

返回由 iter 誘導的子圖。等價于 induced_subgraph(g, iter)[1]

Base.intersect

方法, 邊的交集

intersect(g, h)

返回一個僅包含同時存在于圖 g和圖 h 中的邊的圖。

實現說明:此函數可能生成度數為 0 的頂點。保留輸入圖的 eltype。

示例

using Graphs
g1 = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
g2 = SimpleDiGraph([0 1 0; 0 0 1; 1 0 0])
foreach(println, edges(intersect(g1, g2)))

Base.join

方法

join(g, h)

返回一個組合圖 g 和 h 的圖(使用 blockdiag),然后添加 g中的頂點與 h 中的頂點之間的所有邊

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = join(star_graph(3), path_graph(2))
println(g) # 輸出: {5, 9} undirected simple Int64 graph
foreach(println, edges(g))

Base.reverse

函數 反向圖

reverse(g)

返回一個有向圖,其中所有邊的方向都與原始有向圖 g` 相反。

實現說明:保留輸入圖的 eltype。

示例

using Graphs
g = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
foreach(println, edges(reverse(g)))

Base.reverse!

函數

reverse!(g)

有向圖 g 的就地反轉(修改原圖)。非修改版本請參見 Base.reverse。

Base.size

方法 頂點數

size(g, i)

如果 i=1 或 i=2,則返回圖 g` 的頂點數,否則返回 1。

示例

using Graphs
g = cycle_graph(4)
println(size(g, 1)) # 輸出: 4
println(size(g, 2)) # 輸出: 4
println(size(g, 3)) # 輸出: 1

Base.sum

方法 頂點度

sum(g, i)

返回圖的入度(i=1)或出度(i=2)值的向量。

示例

using Graphs
g = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
println(sum(g, 2)) # 輸出: [1, 1, 2, 1, 1]
println(sum(g, 1)) # 輸出: [1, 1, 1, 2, 1]

Base.sum

方法 邊數

sum(g)

返回圖 g` 中的邊數。

示例

using Graphs
g = SimpleGraph([0 1 0; 1 0 1; 0 1 0])
println(sum(g)) # 輸出: 2

Base.union

方法 頂點的并,邊的并

union(g, h)

通過取所有頂點和邊的集合并集,返回一個組合圖 g 和 h 的圖。

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = SimpleGraph(3); h = SimpleGraph(5)
add_edge!(g, 1, 2); add_edge!(g, 1, 3)
add_edge!(h, 3, 4); add_edge!(h, 3, 5); add_edge!(h, 4, 5)
f = union(g, h)
foreach(println, edges(f))

圖生成與轉換

Graphs.cartesian_product`

方法

cartesian_product(g, h)

返回 g 和 h 的笛卡爾積圖。

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = cartesian_product(star_graph(3), path_graph(3))
println(g) # 輸出: {9, 12} undirected simple Int64 graph
foreach(println, edges(g))

Graphs.complement

方法

complement(g)

返回圖 g` 的補圖。

實現說明:保留輸入圖的 eltype。

示例

using Graphs
g = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
foreach(println, edges(complement(g)))

Graphs.compute_shifts

方法

compute_shifts(n::Int, x::AbstractArray)

確定 x 中的所有元素中有多少個小于 ii 從 1 到 n

Graphs.crosspath

函數

crosspath(len::Integer, g::Graph)

返回一個將圖 g 重復 len 次的圖,并通過路徑將每個頂點與其副本連接起來。

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = crosspath(3, path_graph(3))
println(g) # 輸出: {9, 12} undirected simple Int64 graph
foreach(println, edges(g))

Graphs.difference

方法

difference(g, h)

返回一個圖,其邊在圖 g 中但不在圖 h 中。

實現說明:此函數可能會生成具有 0 度頂點的圖。保留輸入圖的 eltype。

示例

using Graphs
g1 = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
g2 = SimpleDiGraph([0 1 0; 0 0 1; 1 0 0])
foreach(println, edges(difference(g1, g2)))

Graphs.egonet

方法

egonet(g, v, d, distmx=weights(g))

返回由距離頂點 v 為 d 的鄰居誘導的子圖,使用可選的權重 distmx(默認使用 weights(g))。這等價于 induced_subgraph(g, neighborhood(g, v, d, dir=dir))[1]`。

可選參數

  • dir=:out:如果 g 是有向圖,此參數指定相對于 v 的邊方向(即 :in 或 :out`)。

Graphs.induced_subgraph

方法

induced_subgraph(g, vlist)
induced_subgraph(g, elist)

返回由頂點列表 vlist 或邊列表 elist 誘導的圖 g 的子圖,以及一個將新頂點映射回舊頂點的向量 vmap(子圖中的頂點 i 對應于原始圖中的頂點 vmap[i])。

返回的圖有 length(vlist) 個頂點,新頂點 i 對應于原始圖中 vlist 的第 i 個頂點。

使用示例

using Graphs
g = complete_graph(10)
sg, vmap = induced_subgraph(g, 5:8)
println(nv(sg)) # 輸出: 4
println(ne(sg)) # 輸出: 6
println(vm[4])  # 輸出: 8sg, vmap = induced_subgraph(g, [2,8,3,4])
println(sg == g[[2,8,3,4]]) # 輸出: trueelist = [Edge(1,2), Edge(3,4), Edge(4,8)]
sg, vmap = induced_subgraph(g, elist)
println(sg == g[elist]) # 輸出: true

Graphs.merge_vertices!

方法

merge_vertices!(g, vs)

將 vs 中指定的頂點合并為單個頂點,其索引將是 vs 中的最小值。所有連接到 vs` 中頂點的邊都將連接到新的合并頂點。

返回一個向量,其中新頂點值由原始頂點索引索引。

實現說明:僅支持 SimpleGraph`。

示例

using Graphs
g = path_graph(5)
foreach(println, edges(g)) # 輸出原始邊
vmap = merge_vertices!(g, [2, 3])
println(vmap) # 輸出新頂點映射
foreach(println, edges(g)) # 輸出合并后的邊

Graphs.merge_vertices

方法

merge_vertices(g::AbstractGraph, vs)

創建一個新圖,其中 vs 中的所有頂點都被別名為同一個頂點 minimum(vs)

示例

using Graphs
g = path_graph(5)
foreach(println, edges(g)) # 輸出原始邊
h = merge_vertices(g, [2, 3])
foreach(println, edges(h)) # 輸出新圖的邊

Graphs.symmetric_difference

方法

symmetric_difference(g, h)

返回一個圖,其邊來自圖 g 但不在圖 h 中,或來自圖 h 但不在圖 g 中。

實現說明:此函數可能會生成包含 0 度頂點的圖。保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = SimpleGraph(3); h = SimpleGraph(3)
add_edge!(g, 1, 2)
add_edge!(h, 1, 3); add_edge!(h, 2, 3)
f = symmetric_difference(g, h)
foreach(println, edges(f))

Graphs.tensor_product

方法

tensor_product(g, h)

返回 g 和 h 的張量積圖。

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g = tensor_product(star_graph(3), path_graph(3))
println(g) # 輸出: {9, 8} undirected simple Int64 graph
foreach(println, edges(g))

其他函數

SparseArrays.blockdiag

方法

blockdiag(g, h)

返回一個具有 |V(g)| + |V(h)| 個頂點和 |E(g)| + |E(h)| 條邊的圖,其中圖 h 的頂點和邊附加到圖 g

實現說明:保留輸入圖的 eltype。如果生成的圖的頂點數超出 eltype 的范圍,則會報錯。

示例

using Graphs
g1 = SimpleDiGraph([0 1 0 0 0; 0 0 1 0 0; 1 0 0 1 0; 0 0 0 0 1; 0 0 0 1 0])
g2 = SimpleDiGraph([0 1 0; 0 0 1; 1 0 0])
g = blockdiag(g1, g2)
println(g) # 輸出: {8, 9} directed simple Int64 graph
foreach(println, edges(g))

SparseArrays.sparse

方法

sparse(g)

返回圖 g` 的默認鄰接矩陣。

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

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

相關文章

【鏈表 - LeetCode】146. LRU 緩存

146. LRU 緩存 題解&#xff1a; class LRUCache {list<pair<int,int>>v;unordered_map<int,list<pair<int,int>>::iterator>idx;int capacity; public:LRUCache(int capacity):capacity(capacity){}int get(int key) {if(idx.count(key) 0) …

Elasticsearch vs Solr vs OpenSearch:搜索引擎方案對比與索引設計最佳實踐

Elasticsearch vs Solr vs OpenSearch&#xff1a;搜索引擎方案對比與索引設計最佳實踐 隨著大數據和實時分析需求的爆發&#xff0c;搜索引擎已成為許多業務系統中的核心組件。本篇文章將從“技術方案對比分析型”角度切入&#xff0c;重點比較三大主流搜索引擎&#xff1a;El…

光頡科技)Viking)的CS25FTFR009 1225 0.009R/9mR 3W電阻介紹-華年商城

“**華年商城”**小編為您介紹&#xff1a;光頡科技&#xff08;Viking&#xff09;的CS25FTFR009 1225 0.009R/9mR 3W電阻 光頡CS25FTFR009合金電阻&#xff1a;0.009Ω/9mΩ 3W 1%精密采樣電阻 光頡科技&#xff08;Viking&#xff09;的CS25FTFR009是一款高性能的電流檢測電…

港科大開放世界長時域具身導航!LOVON:足式機器人開放詞匯目標導航

作者&#xff1a;Daojie Peng1^{1}1, Jiahang Cao1,2^{1,2}1,2, Qiang Zhang1,2^{1,2}1,2, Jun Ma1,3^{1,3}1,3單位&#xff1a;1^{1}1香港科技大學&#xff08;廣州&#xff09;&#xff0c;2^{2}2北京人形機器人創新中心&#xff0c;3^{3}3香港科技大學論文標題&#xff1a;L…

【前端教程】JavaScript 數組對象遍歷與數據展示實戰

在前端開發中&#xff0c;處理數組和對象是日常工作的基礎。無論是篇文章將通過一個具體案例&#xff0c;詳細講解如何使用JavaScript遍歷包含對象的數組&#xff0c;并將數據以清晰的格式展示在頁面上。我們會從基礎語法開始&#xff0c;逐步優化代碼&#xff0c;最終實現一個…

無重復字符的最長子串,leetCode熱題100,C++實現

題目來源&#xff1a;leetCode 3. 無重復字符的最長子串 - 力扣&#xff08;LeetCode&#xff09; 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長 子串 的長度。 解法 class Solution { public:int lengthOfLongestSubstring(string s) {unordered_set<…

卷積神經網絡中1×1卷積的作用

part I &#xff1a;來源part II &#xff1a;應用part III &#xff1a;作用&#xff08;降維、升維、跨通道交互、增加非線性&#xff09;part IV &#xff1a;從fully-connected layers的角度理解一、來源&#xff1a;[1312.4400] Network In Network &#xff08;如果11…

VMware設置Ubuntu虛擬機橋接模式完整教程

VMware 設置 Ubuntu 虛擬機橋接模式完整教程 下面是一個詳細的、避免出錯的 VMware Ubuntu 橋接模式設置教程&#xff0c;包含常見問題的解決方案。 準備工作 確保宿主機&#xff08;Windows 11&#xff09;已連接到網絡&#xff08;有線或無線&#xff09;確認您有管理員權限關…

淺析NVMe協議:DIF

文章目錄概述DIF數據格式盤片支持DIFFormatPILPIMSETLBAF協議命令DIF支持PRACTPRACT0PRACT1PRCHK相關參考概述 NVMe協議將DIF信息作為元數據的一部分進行攜帶。 DIF數據格式 DIF的PI由多個字段組成&#xff0c;包括&#xff1a; Guard字段&#xff1a;基于邏輯塊數據計算的C…

【觀成科技】蔓靈花User下載者加密通信分析

概述2025年5月7日&#xff0c;蔓靈花&#xff08;BITTER&#xff09;組織針對巴基斯坦電信公司工作人員發起釣魚郵件攻擊&#xff0c;投遞偽裝為安全簡報的惡意郵件&#xff0c;附件為IQY類型的Web查詢文件。該文件在用戶執行后通過HTTP協議獲取遠程CMD指令并執行&#xff0c;進…

Redis 保證數據不丟失

Redis 保證數據不丟失&#xff08;或最大限度減少丟失&#xff09;的核心是通過 持久化機制 結合 合理的配置策略 實現的。具體方案如下&#xff1a;一、核心&#xff1a;開啟 Redis 持久化&#xff08;防止進程崩潰丟失數據&#xff09;Redis 提供兩種持久化方式&#xff0c;可…

NUMA/SNC 4種組合下Stream+MLC性能對決:雙路服務器BIOS調優全攻略

關于調整 BIOS NUMA 與 SNC 選項的 Stream / MLC 性能測試總結一、測試背景與目的在現代多路 Intel Xeon 服務器上&#xff0c;NUMA&#xff08;Non-Uniform Memory Access&#xff09;與 SNC&#xff08;Sub-NUMA Clustering&#xff09;是兩項決定內存訪問延遲與帶寬的關鍵 B…

Java-113 深入淺出 MySQL 擴容全攻略:觸發條件、遷移方案與性能優化

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-31- 千呼萬喚始出來 GPT-5 發布&#xff01;“快的…

Kafka Connect + Streams 用到極致從 CDC 到流處理的一套落地方案

關鍵目標&#xff1a; 零丟失&#xff1a;端到端 Exactly Once&#xff08;Source 端事務 Streams exactly_once_v2 Sink DLQ&#xff09;。低延遲&#xff1a;Producer 端批量壓縮 Streams 緩存 合理 poll/commit 間隔。可恢復&#xff1a;Connect/Streams 的 rebootstrap…

# `std::basic_istream`總結

std::basic_istream總結 文章目錄std::basic_istream總結概述常用類型定義全局對象核心成員函數1. 格式化輸入2. 非格式化輸入3. 流定位4. 其他功能繼承的功能來自 std::basic_ios狀態檢查狀態管理來自 std::ios_base格式化標志流打開模式特點說明例子std::basic_istream全面用…

人工智能——課程考核

課程考核包括平時測驗&#xff08;75%&#xff09;和討論&#xff08;25%&#xff09;兩個環節&#xff0c;測驗采用線上隨堂考試&#xff08;2-3次&#xff0c;具體會在本課堂發布&#xff09;重點考核&#xff1a;A*算法、極大極小過程&#xff08;α-β剪枝&#xff09;、不…

機器學習-時序預測1

最近面試過程中&#xff0c;Predict-then-Optimize是運籌優化算法工程師未來的發展方向。就像我之前寫過的運籌優化&#xff08;OR&#xff09;-在機器學習&#xff08;ML&#xff09;浪潮中何去何從&#xff1f;-CSDN博客&#xff0c;機器學習適合預測、運籌優化適合決策。我研…

vim-plugin AI插件

文章目錄一、vim 插件管理vim-plug二、如何使用和配置 vim-plug第 1 步&#xff1a;安裝 vim-plug第 2 步&#xff1a;配置你的 .vimrc / init.vim第 3 步&#xff1a;安裝插件常用 vim-plug 命令三、配置vim-aivim-aivim-deepseekvim升級四、配置 AI 插件GitHub Copilot第 1 步…

Adobe Photoshop 2025 最新下載安裝教程,附PS2025下載

點擊獲取&#xff1a;Adobe Photoshop 2025 安裝教程&#xff1a; 1、安裝包下載后&#xff0c;鼠標右鍵解壓安裝包 添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09; 2、雙擊打開解壓后的安裝包文件夾 3、打開setup文件夾 添加圖片注釋&#xff0c;不超過…

LeetCode算法日記 - Day 27: 計算右側小于當前元素的個數、翻轉對

目錄 1. 計算右側小于當前元素的個數 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 翻轉對 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 計算右側小于當前元素的個數 315. 計算右側小于當前元素的個數 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums &#xf…