我需要在邻接矩阵上存储一个带有多个节点的非有向图(大小未知......可能很大)。 2D arrayList是一种有效的存储方式吗?如果没有,那么存储这些数据的更好方法是什么?任何评论都表示赞赏。
答案 0 :(得分:4)
我肯定会选择2d ArrayList。您可以在O(n)时间内添加行/列(n是行数),如果在末尾插入(这是有意义的)。访问列表是O(1),删除任意行将是O(n 2 )。
另一种选择是使用双向链表。在这种情况下,插入到末尾将是O(n)时间,访问是O(n),并且删除行是O(n 2 )。
所以看起来对于矩阵来说,ArrayList是最好的,但这只是因为访问效率更高。
答案 1 :(得分:1)
你说邻接名单可能“庞大”。如果它也是稀疏的,那么使用某种稀疏矩阵表示可能会更好。甚至可能是因为内存占用量大大减少,它的性能优于2d ArrayList。
答案 2 :(得分:0)
我认为如果您还要将图表的大小存储在文件的第一行中会更容易。这样,分配和整个过程将更加高效,而不会有任何其他损失。
如果你需要在增加矩阵时进行分配,你应该从相关域的合理大小开始,然后用乘数2增加它,这样随着时间的推移,分配的数量趋于增加稳定,你不必多次重新分配和重新复制内容。
希望有所帮助!