是否有任何其他数据结构来表示除邻接列表或邻接矩阵以外的图形?

时间:2018-04-02 13:56:06

标签: data-structures graph graph-algorithm adjacency-matrix adjacency-list

我正在寻找用于表示Graph的不同数据结构,我来自Nvidia CUDA Toolkit,并找到了在source_indices,destination_offsets的帮助下表示图形的新方法。

这种创新的图表表示着迷,我搜索了其他表示图形的方法。但没有找到任何新的东西。

我想知道除了邻接矩阵或列表之外是否还有其他方式来表示图...

2 个答案:

答案 0 :(得分:2)

  

我想知道是否还有其他方式来表示Graph other   比邻接矩阵或列表...

邻接列表或邻接矩阵有其他选择,例如边缘列表邻接地图前卫明星等等。鉴于此图(从here获取的图像):

Example graph

  • 这是邻接矩阵表示

adjacency matrix representation

  • 这是邻接列表表示

enter image description here

  • 这将是另一种选择,边缘列表

enter image description here

  • 另一个非常常见的是前瞻性明星代表

enter image description here

如果您进入研究领域,您会发现针对特定情况的大量方法,主要是优化,并考虑以下因素:

  • 图表大小(节点数)
  • 图表的密度
  • 定向或无向图
  • 静态或动态图
  • 在编译时已知或在运行时构建的图
  • 节点ID(按顺序标记或不标记)
  • ...

例如,这些优化可以在预处理阶段中支持重新排序节点,以增加引用位置最短路径算法有很多工作,特别是在计算世界地图中的最短路径时。

优化的一个示例是动态图结构Packed-Memory Graph (PMG)),适用于大型交通网络

答案 1 :(得分:0)

使用邻接集表示图的另一种表示形式。它与邻接列表非常相似,但是不使用链接列表,而使用不交集[Union-Find]。您可以了解有关不相交集ADT here的信息。

如果E是图形中的边数,而V是图形中的顶点数,则图形的邻接集表示将占据(E + V)空间。

使用邻接集表示时其他操作的复杂性:

Checking edge between vertex v and w : log(Degree(v))
Iterate over edges incident to vertex v: Degree(v)