【问题标题】:If I topologically sort a DAG, can I drop half the adjacency matrix?如果我对 DAG 进行拓扑排序,我可以删除一半的邻接矩阵吗?
【发布时间】:2009-04-22 14:52:32
【问题描述】:

我想我已经理解了如下所述的特定情况,但是我缺乏进行证明的理论知识,并且找不到任何提及它的来源。如果我的理解是正确的,我可以在我的邻接矩阵上节省一半的空间,如果不是,我可能会有非常奇怪的错误。所以我想确定一下,如果有更扎实背景的人可以审查我的推理,我将不胜感激。

假设我在 n * n 邻接矩阵中表示 n 个顶点的 DAG,如果从顶点 i 到顶点 j 有一条边,则条目 i,j1,否则为 0。因为图是有向无环图,所以如果i,j = 1,那么j,i = 0。如果我现在对矩阵中的节点进行排序,使得 in 处的节点的拓扑级别等于或大于 in-1 处的节点,那么它在我看来,一半的邻接矩阵总是只包含0s,如下例所示:

V 1 V 2 从 V 1 2 3 4 5 6 7 8 / \ / \ / \ / \ 到V 1 0 0 0 0 0 0 0 0 / \ / \ 2 0 0 0 0 0 0 0 0 e1/ e2\ e3/ e4\ 3 1 0 0 0 0 0 0 0 / \ / \ 4 1 1 0 0 0 0 0 0 V 3 V 4 V 5 5 0 1 0 0 0 0 0 0 /|\ / 6 0 0 0 1 0 0 0 0 / | \ / 7 0 0 0 1 0 0 0 0 / | \ / 8 0 0 0 1 1 0 0 0 e5/ e6| e7\ e8/ / | \ / V 6 V 7 V 8

也许我是对的,但是有正式的方法来检查这个吗?

【问题讨论】:

    标签: graph-theory


    【解决方案1】:

    adj[i][j] 成为从节点i 到节点j 的邻接条目,并且您已经对其进行了排序,使得对于所有节点i < j,节点i 在拓扑层次结构中高于节点@987654326 @。

    让我们暂时假设您的假设不正确:我们有一个反例,adj[i][j] == 1 对应于i > j(即矩阵表示的右上半部分的一个)。这意味着必须有一个包含ij 的循环,因为我们的排序保证节点j 比节点i 更高,但我们有adj[i][j] == 1 意味着我们可以“爬上”层次结构。这是一个矛盾,因为我们知道我们有一个 DAG。因此,我们已经证明您的假设是正确的。

    【讨论】:

    • 谢谢。这就是我的直觉。我在这方面的培训太少了。
    【解决方案2】:

    只有当你的邻接矩阵是用图 labels 以排序顺序构造时,这才是正确的。举一个反例,构造 B->C->A 的邻接矩阵。

    如果您将真实节点的散列保留到其拓扑排序位置并从中构造邻接矩阵,则可以在大矩阵上节省一些空间,因为您在矩阵中使用 O 节省了 O(n²) 空间(n) 大小哈希表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2019-07-25
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多