除了邻接表或邻接矩阵之外,还有其他数据结构可以表示图吗?
Is there any other Data structure to represent Graph other than Adjacency List or Adjacency Matrix?
我一直在寻找不同的数据结构来表示图形,我偶然发现了 Nvidia CUDA 工具包,并在 source_indices、destination_offsets.[=10= 的帮助下找到了表示图形的新方法]
我被这种创新的图形表示法所吸引,开始寻找其他表示图形的方法。但是没有发现任何新东西。
我想知道除了邻接矩阵或列表之外是否还有其他方法来表示图...
I was wondering if there was any other way to represent Graph other
than Adjacency Matrix or Lists...
有替代邻接表或邻接矩阵的方法,例如边列表、邻接图或转发 star 等等。给定这张图(图片取自 here):
- 这是邻接矩阵表示:
- 这是邻接表表示法:
- 这将是另一种选择,边缘列表:
- 另一个很常见的是前向星表示:
如果你进入这个研究领域,你会发现很多方法,主要是针对特定情况的优化,同时考虑到因素如:
- 图表大小(节点数)
- 图表的密度
- 有向图或无向图
- 静态或动态图
- 在编译时已知或在运行时构建的图
- 节点 ID(按顺序标记或不标记)
- ...
例如,这些优化可以支持在预处理阶段重新排序节点以增加参考位置。 最短路径算法有很多工作要做,特别是在计算世界地图中的最短路径时。
优化的一个例子是动态图结构(Packed-Memory Graph (PMG)),它适用于large-scale交通网络。
还有另一种使用邻接集表示图的方法。它与邻接表非常相似,但不是使用链表,而是使用不相交集 [Union-Find]。您可以阅读不相交集 ADT here.
若E为边数,V为图中顶点数,则图的邻接集表示占(E+V)space.
使用邻接集表示时其他操作的复杂性:
Checking edge between vertex v and w : log(Degree(v))
Iterate over edges incident to vertex v: Degree(v)
我一直在寻找不同的数据结构来表示图形,我偶然发现了 Nvidia CUDA 工具包,并在 source_indices、destination_offsets.[=10= 的帮助下找到了表示图形的新方法]
我被这种创新的图形表示法所吸引,开始寻找其他表示图形的方法。但是没有发现任何新东西。
我想知道除了邻接矩阵或列表之外是否还有其他方法来表示图...
I was wondering if there was any other way to represent Graph other than Adjacency Matrix or Lists...
有替代邻接表或邻接矩阵的方法,例如边列表、邻接图或转发 star 等等。给定这张图(图片取自 here):
- 这是邻接矩阵表示:
- 这是邻接表表示法:
- 这将是另一种选择,边缘列表:
- 另一个很常见的是前向星表示:
如果你进入这个研究领域,你会发现很多方法,主要是针对特定情况的优化,同时考虑到因素如:
- 图表大小(节点数)
- 图表的密度
- 有向图或无向图
- 静态或动态图
- 在编译时已知或在运行时构建的图
- 节点 ID(按顺序标记或不标记)
- ...
例如,这些优化可以支持在预处理阶段重新排序节点以增加参考位置。 最短路径算法有很多工作要做,特别是在计算世界地图中的最短路径时。
优化的一个例子是动态图结构(Packed-Memory Graph (PMG)),它适用于large-scale交通网络。
还有另一种使用邻接集表示图的方法。它与邻接表非常相似,但不是使用链表,而是使用不相交集 [Union-Find]。您可以阅读不相交集 ADT here.
若E为边数,V为图中顶点数,则图的邻接集表示占(E+V)space.
使用邻接集表示时其他操作的复杂性:
Checking edge between vertex v and w : log(Degree(v))
Iterate over edges incident to vertex v: Degree(v)