首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于表示图的高效数据结构

用于表示图的高效数据结构
EN

Stack Overflow用户
提问于 2019-06-18 21:32:40
回答 2查看 513关注 0票数 4

我必须实现一个有向图(digraph),它允许有多个弧(multigraph),就像在链接的图像中一样。必须对图进行优化,以处理大量节点,但其中两个节点之间的一些边。图必须频繁更新,并且必须支持有效的路径搜索。在查询所用空间和时间之间取得折衷的有效数据结构是什么?该语言是标准C语言(仅限libc)。

graph example

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-18 21:43:15

假设你有NODE_COUNT节点。您可以创建长度为NODE_COUNT的向量GRAPH。在条目X上,您有一个大小可变的数组(动态分配)。每个条目看起来都像GRAPH[X]=[A1, A2, A3],表示边的{ (X,A1), (X,A2), (X,A3) }

如果您需要搜索某些边,在条目GRAPH[X]上使用二进制搜索树也很方便。如果每个节点有6条以上的边,也可以考虑这种可能性,而不是在位置GRAPH[X]上使用无序数组。

因为图有很多节点和很少的边,所以不应该使用矩阵。

如果您有数百万或数十亿个节点,那么问题就不同了,您应该考虑使用BDDs。这是另一个话题,我不会在这个帖子中详细介绍。其思想是,图可以表示为表示该图的集合的特征函数。

票数 2
EN

Stack Overflow用户

发布于 2019-06-18 21:41:29

您可以使用邻接矩阵。它本质上是一个显示邻接列表的二维数组。

下面是一个例子。我相信它们是相当快的,它需要Θ(1)时间来确定图中是否存在边。

如果“频繁更新”指的是更新边,这将是很好的,因为更新其中一个值需要恒定的时间。(即添加边( 3, 2 )将需要恒定的时间,因为您只需将矩阵中3,2处的值递增)

对于确定最短路径,Dijkstra算法将是您最好的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56650400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档