【问题标题】:What is the most efficient way to store an adjacency matrix without knowing its size?在不知道其大小的情况下存储邻接矩阵的最有效方法是什么?
【发布时间】:2011-02-16 21:09:58
【问题描述】:

我需要在邻接矩阵上存储一个具有多个节点(大小未知......可能很大)的无向图。 2D arrayList 会是存储它的有效方法吗?如果不是,那么存储这些数据的更好方法是什么?任何意见表示赞赏。

【问题讨论】:

  • 什么时候知道它的大小?
  • 节点存储在输入文件中。所以文件读取完成后。

标签: java graph arraylist adjacency-matrix


【解决方案1】:

我肯定会选择 2d ArrayList。如果在末尾插入(这很有意义),您可以在 O(n) 时间内添加行/列(n 是行数)。访问列表是 O(1),删除任意行是 O(n2)。

另一种选择是使用双向链表。在这种情况下,插入到末尾将是 O(n) 时间,访问是 O(n),删除一行是 O(n2)。

所以对于矩阵来说,ArrayList 似乎是最好的,但这只是因为访问效率更高。

【讨论】:

    【解决方案2】:

    您说邻接列表可能是“巨大的”。如果它也是稀疏的,那么使用某种稀疏矩阵表示可能会更好。甚至可能由于内存占用大大减少,它的性能优于 2d ArrayList。

    【讨论】:

      【解决方案3】:

      我认为如果您还将图形的大小存储在文件的第一行中会更容易。这样分配和整个过程会更有效率,不会有任何其他方面的损失。

      如果您需要在增加矩阵时进行分配,您应该从相关域的合理大小开始,然后以 2 的倍数增加它,这样随着时间的推移,分配的数量会趋于稳定,您不必多次重新分配和重新复制内容。

      希望有帮助!

      【讨论】:

      • 好吧,试试我当时提到的第二种选择。也看看肯的回答。
      猜你喜欢
      • 2021-02-24
      • 2022-11-01
      • 2019-06-18
      • 1970-01-01
      • 2019-02-18
      • 2019-09-21
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多