使用关联矩阵数据结构而不是更广泛的邻接矩阵来解决图表上的哪些问题(使用big-O)更快?
答案 0 :(得分:7)
结构的空间复杂性是:
邻接:O(V ^ 2) 发生率:O(VE)
结果是,如果顶点比边缘多得多,则入射结构可以节省空间。
您可以查看一些典型图形操作的时间复杂度:
查找与顶点相邻的所有顶点: 调整:O(V) Inc:O(VE)
检查两个顶点是否相邻: 调整:O(1) Inc:O(E)
计算顶点的价数: 调整:O(V) Inc:O(E)
等等。对于任何给定的算法,您可以使用上述构建块来计算哪种表示为您提供更好的总体时间复杂度。
最后要注意的是,除了最密集的图表之外,使用任何类型的矩阵对于除了最密集的图之外的所有图表都是极其空间效率低的。我建议不要使用其中任何一个,除非您有意识地驳回了邻接列表等替代方案。
答案 1 :(得分:3)
我个人从未在编程竞赛或研究问题中找到事件矩阵表示的真实应用。我认为这对于证明一些定理或一些非常特殊的问题可能是有用的。一本书给出了一个“计算生成树数”的例子,作为这种表示有用的问题。
这种表示的另一个问题是存储它是没有意义的,因为从边缘列表中动态计算它(以回答给定单元格包含的内容)非常容易。
然而,在超图中它可能看起来更有用,但只有它很密集。
所以我的观点是 - 它只适用于理论工作。