【问题标题】:graph representation with minimum cost (time and space)以最小成本(时间和空间)的图形表示
【发布时间】:2013-05-18 12:19:00
【问题描述】:

我必须在 java 中表示一个图,但既不是邻接列表也不是邻接矩阵..

基本思想是如果

deg[i]

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

edges[i][j]在哪里

i <= j <= deg[i]

,但鉴于

edges[][]

必须用一些我不知道如何使它与邻接矩阵不同的值进行初始化..

有什么建议吗?

【问题讨论】:

  • 必须是数组吗?可以是 ArrayList 吗?
  • 列表的问题在于时间成本。 arrayList 在时间成本上是否优于邻接列表?

标签: java list graph matrix


【解决方案1】:

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

  • 要么使用邻接矩阵
  • 或使用发生矩阵

你可以制作一个关联矩阵

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

【讨论】:

  • 邻接表、关联表也是有效的图表示。事实上,邻接列表是最常见的列表之一。
【解决方案2】:

您正在与这个问题的下限作斗争。图的两种主要表示方式已经非常适合各自使用。

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

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

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

还可以查看sparse matrix representations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多