算法导论习题 通用汇点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论习题 通用汇点相关的知识,希望对你有一定的参考价值。

来自习题22.1-6

给出O(V)时间算法判断有向图G是否存在一个通用汇点(universal sink)。通用汇点指的是入度为|V|-1,出度为0的节点。

思路:

考虑图的邻接矩阵A,假设i为通用汇点,则对于0<=j<n,有A[i][j]=0,且对于所有0<=k<n and k != i,有A[k][i] = 1,注意这里k!=i

相当于在子矩阵A[0..i][0..i]的右边和下边造了一个围墙,最下边全是0,最右边除了右下角外全是1

那么可以令游标从矩阵左上角开始,遇1向下,逢0向右,直到行或列超出矩阵A的界限,注意不是子矩阵。此时若游标所在行没有超出界限,那和这个行号 r 就可能是通用汇点编号。

接下来再根据定义验证 r 是否就是通用汇点。因为可能存在以下的情况:

x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
0 0 0 0 0 0 0 0
x x x x 0 x x x
x x x x 0 x x x
x x x x 0 x x x

矩阵第5行所表示的节点显然不是通用汇点。

以上是关于算法导论习题 通用汇点的主要内容,如果未能解决你的问题,请参考以下文章

《算法导论》第六章 练习题 Exercise

算法导论习题—主方法求渐进紧确界递归树方法

算法导论习题—堆排序快速排序

算法导论之2.3-7练习题

算法导论之2.3-7练习题

算法导论习题:摔杯子