HOWTO · Csharp
C# 中的 Graph 庫
在本文中,我們將瞭解什麼是圖、QuickGraph 庫,以及 C# 中使用的工具。
本頁內容
假設你有一個專案,你現在必須處理活動依賴關係的網路表示;在這個專案上工作的最佳方式是什麼?答案是圖。
在這種情況下,圖非常方便,並且它們還具有幾個基本功能,使你的工作變得更加簡單。
C# 中的圖是什麼
當你想到圖時,你可能會想到那些代表數值的長豎條,你曾經在學校的數學書中看到過那種(也許現在仍然如此)。
但這些不是我們在這裡討論的圖;相反,想想一個蜘蛛網狀的結構,其相互連線的部分代表一個整體。
那麼,讓我們深入研究一下圖是什麼;通常,圖有兩個基本元件,稱為 Node 和 Edge。Nodes 使用 Edges 連線;前兩個 Nodes 使用 Edges 連線;那麼,節點可以連線任意數量。
因此,圖非常出色,因為當你想要表示某些概念或實體之間的關係時它們的結構方式。你可以使用不同的表示型別、演算法和資料結構。
不只有一種型別的圖。有幾種型別的圖。型別取決於許多區分因素,圖中邊和節點的功能通常定義其型別。
例如,一種稱為樹的型別,其中任何節點都可以通過一條路徑連線到任何其他節點。
許多系統的複雜性只能通過電腦科學中的網路來解釋;因此,圖論非常有用。
C# 中的資料結構
既然你已經定義並確定了你的專案需要使用圖,那麼你現在需要做的是為你的專案選擇一個資料結構。
由於資料結構因你的需求而異,因此請仔細確定你的資料結構以最有效地使用圖。決定使用何種資料結構的最重要因素是記憶體和時間複雜度。
C# 中的演算法
其次,你應該在圖中包含演算法;這將大大簡化你的任務。你可能永遠不需要建立一些新穎的演算法,因此請記住你需要的常用演算法並在圖中使用它們。
讓自己對現有的相簿感到滿意。你可以在相簿中找到的演算法針對時間和記憶體複雜性進行了很好的優化。
因此,在使用圖時,它們是你最好的選擇!
C# 圖中使用的工具
以下工具將用於圖,因此請熟悉它們。
- 使用演算法查詢和變異
- 序列化/反序列化
- 視覺化
C# 中的 QuickGraph 庫是什麼
QuickGraph 由 Jonathan ‘Peli’ de Halleux 於 2003 年建立,是 C# 的圖結構和演算法的 .NET 庫。它提供直接/間接圖資料結構。
它的演算法是深度優先搜尋、呼吸優先搜尋、A*搜尋、最短路徑、k-最短路徑和最大流量。
它使用的一些平臺是 .NET Standard 1.3+、.NET Core 1.0+、.NET Framework 3.5+(和其他)。
QuickGraph 是免費的開源軟體,允許你在 .NET 中構建資料結構和演算法。它還提供基本的序列化/反序列化支援和一些視覺化功能,儘管它們並不穩定。
QuickGraph 的演算法庫非常通用,幾乎包括你需要的任何東西;它在可用性方面很少達不到要求,並且資料結構涵蓋了很多領域,並且會在大多數情況下為你提供所需的東西。
QuickGraph 的主要缺陷是其極其不正確的文件;它幾乎沒有用,在某些情況下,根本不正確,非常簡單且缺乏多樣性。API 發生了變化,而文件在許多情況下不遵守此更改。
這將使你依賴手動檢查庫源,從而使過程複雜化;因此非常令人沮喪。
造成這種情況的主要原因可能是維護不善,因為該專案仍停留在其 3.6 版本,而此更新是在 2011 年中期,即十多年前!對開發商的許多讚賞;但是,保養必須更好。
儘管如此,儘管它有所下降,但它仍然是最好的選擇。
C# 中圖的反序列化
反序列化意味著將圖的格式從一種更改為另一種;當你需要將圖匯出到其他應用程式、更新其上下文並根據你的需要使用時,這一點很重要。
儘管 QuickGraph 為你提供了序列化為 GraphML 的選項,但你需要為許多其他格式自行編寫序列化程式碼,因為有許多格式,例如 XML 和 CSV。
C# 中的圖中的 GraphDB
GraphDB 允許你將節點和邊視為記錄或值,而不是表之間的隱式關係,就像關聯式資料庫一樣。
這為你提供了更自然、更實用的圖資料處理。
C# 中的圖視覺化
視覺化是任何過程中最重要的方面之一,因為為程式碼提供圖表示使其更易於理解和互動。它使工作更加流暢和快捷。
有各種可用的視覺化工具,其中之一是 yEd 圖編輯器。這個應用程式太棒了,它甚至更好,因為它是免費的!
它的佈局引擎以及隨附的自定義工具非常棒。
然後是 GraphViz,它是開源的,在學術界廣泛用於圖視覺化;使用 DOT 語言指令碼。它允許你將原理圖儲存為圖片(例如 SVG)。
然後是 Microsoft Automatic Graph Layout。這類似於 GraphViz,但更基本且與 Windows 和 .NET 生態系統相容。
最後,Gephi 是一個非常複雜的工具,不僅可以用於視覺化。它也是免費和開源的。
它提供了廣泛的外掛支援。它是最有效的視覺化工具。