最低成本(时间和空间)的图表表示

时间:2013-05-18 12:19:01

标签: java list graph matrix

我必须在java中表示图形,但既不作为邻接列表也不作为邻接矩阵。

基本思想是,如果

deg[i]

是顶点i的退出度,那么它的neigboors可以存储在

edges[i][j]其中

i <= j <= deg[i]

,但鉴于此

edges[][]
必须用一些值初始化

我不知道如何使它与邻接矩阵不同..

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

据我所知,只有两种方法可以用语言表示图形。

  • 使用邻接矩阵
  • 或使用发生率矩阵

您可以制作像

这样的关联矩阵
  

E1 E2 E3 E4   
V1 1 2 1   1
V2 2   1 2 1
V3   1 1 1 2   
V4 1 1 2 1

答案 1 :(得分:0)

你正在反对这个问题的下限。该图的两个主要表示已经非常适合各自的使用。

  • 邻接列表,最小化空间。您将很难使用比每个边缘1个指针更少的内存。空间:O(V * E)。搜索:O(V)
  • 邻接矩阵,非常快,代价为v ^ 2空间。空间:O(V ^ 2)。搜索:O(1)

因此,为了制作对空间和时间都更好的东西,你必须将两者的想法结合起来。也意识到会有更好的实际性能,理论上你不会改进O(1)搜索或O(V * E)大小。

我的想法是将所有图形节点存储在一个数组中。然后,对于每个节点,具有表示为位向量的邻接列表。这基本上是一个类似矩阵的表示,但仅适用于图中存在的那些节点,使您的尺寸小于矩阵。由于可以针对位向量测试查询节点,因此相对于邻接列表将略微改进搜索。

另请查看sparse matrix representations