C# 中的 Graph 库
假设你有一个项目,你现在必须处理活动依赖关系的网络表示;在这个项目上工作的最佳方式是什么?答案是图。
在这种情况下,图非常方便,并且它们还具有几个基本功能,使你的工作变得更加简单。
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
是一个非常复杂的工具,不仅可以用于可视化。它也是免费和开源的。
它提供了广泛的插件支持。它是最有效的可视化工具。
相关文章
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:198 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:171 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:187 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中发出 HTTP POST Web 请求
发布时间:2024/02/04 浏览次数:131 分类:编程语言
-
在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求
在 C# 中运行命令提示符命令
发布时间:2024/02/04 浏览次数:130 分类:编程语言
-
Process 类可用于在 C# 中运行命令提示符命令。在 C# 中使用 Process.Start() 函数运行命令提示符命令
在 C# 中调整图像大小
发布时间:2024/02/04 浏览次数:203 分类:编程语言
-
有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保
在 C# 中下载图片
发布时间:2024/02/04 浏览次数:138 分类:编程语言
-
有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据
在 C# 中使用秒表
发布时间:2024/02/04 浏览次数:139 分类:编程语言
-
我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。
在 C# 中获取可执行路径
发布时间:2024/02/04 浏览次数:200 分类:编程语言
-
有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径