算法导论 22.1-4 通用汇点 O(V)
来源:互联网 发布:免费数据库同步软件 编辑:程序博客网 时间:2024/05/16 09:08
问题
如果我们用邻接矩阵来存储图,那么绝大多数图算法的运行时间都是Ω(|V|2)(V为一个图的顶点集),但还是有些例外。比如,给定一个有向图G的邻接矩阵A,我们可以在Ο(|V|)时间内判断图G是否包含一个通用汇点,即一个入度为|V|-1出度为0的顶点。请给出这样的算法。
Solution
命题1:若A[i,j]==1,i不是通用汇点
命题2:若A[i,j]==0,j不是通用汇点
这两条都可以用定义轻易证明
我们可以在O(V)时间内判断k是否是通用汇点,如下:
我们的判断函数里应该调用O(1)次这个函数
我们有如下
循环不变式:每次迭代前,i之前和j之前但不包括i的点都不是通用汇点。
注意到这个循环不变式与
“每次迭代前,j之前和i之前但不包括j的点都不是通用汇点”的区别
在这里我们可以把这个问题想象成在矩阵中找到这样一个十字:
行上全为0,列上全为1,交点处为0
这就是i与j地位有些许差异区别的原因
下面我来详细证明一下:
1.if A[i,j]==1, 表明i不可能是通用汇点,因为第i行上有了1,i++,依旧满足循环不变式
2.If A[i,j]==0, 说明第j列上有了0,如果j不在对角线上的话j就不是通用汇点,但会有i==j时的A[j,j]==0的情况,这显然是对的,这怎么办呢?这时候就体现出了我们这个循环不变式的优势了,j++即可,这时i还是原来的j,循环不变式依旧成立。
最后,如果i>V,则全都不符合,否则j>V,可能的只有i,检验后输出即可。
参考资料:http://www.ithao123.cn/content-8148817.html
阅读全文
0 0
- 算法导论 22.1-4 通用汇点 O(V)
- 《算法导论(第二版)》习题22.1-6:图的通用汇点(Universal Sink)
- 《算法导论》习题解答 Chapter 22.1-6(求universal sink 通用汇点)
- 《算法导论(第二版)》习题22.1-6:图的通用汇点(Universal Sink)
- [原创+翻译]《算法导论(第二版)》习题22.1-6:图的通用汇点(Universal Sink)
- 算法导论 22.5-5 O(V+E)求有向图的分支图
- 算法导论思考题:14-1 最大重叠点 ---O(logn)插入,删除,查找 + O(1)最大重叠点寻找
- 算法导论 10-4-5 O(n)时间 O(1)空间遍历树
- 算法导论 O(n)时间内反转单链表
- 《算法导论》线性时间O(n)排序
- 【算法导论】33.4:两个最近的点
- 算法导论-14-1-最大重叠点
- 算法导论-14-1-最大重叠点
- 算法导论8.3-4 O(n)时间内对[0..n^-1]之间的n个数排序
- 算法导论8.3-4 O(n)时间内对[0..n^-1]之间的n个数排序 .
- 算法导论8.3-4 O(n)时间内对[0..n^-1]之间的n个数排序
- 算法导论8.3-4 O(n)时间内对[0..n^-1]之间的n个数排序
- 算法导论 第22章 22.1-4
- jain-sip 一些类的初步理解
- Graphics—边缘填充算法
- Linux/Unix IO 多路复用之poll网络编程
- Android 必知必会
- 在ArrayList中加上Activity
- 算法导论 22.1-4 通用汇点 O(V)
- [python + pillow] 修改图片的尺寸
- 服务器提示Can’t assignrequested address的问题分析
- 【Jmeter】BeanShell断言--数据处理
- python008 -- 函数及高阶函数
- android 换肤
- python ---待修改,ATM取款系统
- DDoS攻击原理及防护方法论
- 毕业