算法导论22.4拓扑排序 练习总结
2015-12-29 12:57
351 查看
22.4-1 给出算法 TOPOLOGICAL-SORT 运行于图 22-8 上时所生成的结点次序。这里的所有假设和练习 22.3-2 一样。
ANSWER:
22.4-2 请给出一个线性时间的算法,算法的输入为一个有向无环图 G = (V, E) 以及两个结点 s 和 t,算法的输出是从结点 s 到结点 t 之间的简单路径的数量。例如,对于图 22-8 所示的有向无环图,从结点 p 到结点 v 一共有 4 条简单路径,分别是 pov、poryv、posryv 和 psryv。(本题仅要求计数简单路径的条数,而不要求将简单路径本身列举出来。)
ANSWER:给结点附加一个计数属性time,初始化 t.time = 1,其它的 time 均为 0 ,以 s 为源结点进行 DFS,一旦搜索到 t,则 t 马上着黑色(即不继续搜索 t 的后代)。每当结束一个结点的搜索,则该结点的 time 属性 = 该结点所指向的所有结点的 time 之和。最后 s.time 即路径条数。
如图 22-8 的 p 到 v,最后 v.time = 1, y.time = 1, r.time = 1, s.time = 1, o.time = 1, p.time。
22.4-3 给出一个算法来判断给定无向图 G = (V, E) 是否包含一个环路。算法运行时间应该在 O(V) 数量级,且与 |E| 无关。
ANSWER:利用DFS搜索无向图 G,如果搜索过程发现与某一结点相连的结点部位白色,则无向图 G 中存在环。即若图中出现后向边,则出现环。
对于时间复杂度,可以证明若无向图 G 无环,则 |E| < |V|,所以时间复杂度为 O(V)。
22.4-4 证明或反证下述论断:如果有向图 G 包含环路,则在算法 TOPOLOGICAL-SORT(G) 所生成的结点序列里,图 G 中与所生成序列不一致的“坏”边的条数最少。
ANSWER:
22.4-5 在有向无环图 G =(V, E) 上执行拓扑排序还有一种办法,就是重复寻找入度为 0 的结点,输出该结点,将该结点及从其发出的边从图中删除。请解释如何在 O(V+E) 的时间内实现这种思想。如果图 G 包含环路,将会发生什么情况?
ANSWER:首先利用DFS在O(V+E)时间内记录每个结点的入度。然后在每次删除结点后更新每个结点的入度。删除结点时间为O(V),更新结点入度时间为O(E),所以总时间为O(V+E)。
如果图G包含环路,环路中的结点的入度会均大于0,都无法删除。
ANSWER:
22.4-2 请给出一个线性时间的算法,算法的输入为一个有向无环图 G = (V, E) 以及两个结点 s 和 t,算法的输出是从结点 s 到结点 t 之间的简单路径的数量。例如,对于图 22-8 所示的有向无环图,从结点 p 到结点 v 一共有 4 条简单路径,分别是 pov、poryv、posryv 和 psryv。(本题仅要求计数简单路径的条数,而不要求将简单路径本身列举出来。)
ANSWER:给结点附加一个计数属性time,初始化 t.time = 1,其它的 time 均为 0 ,以 s 为源结点进行 DFS,一旦搜索到 t,则 t 马上着黑色(即不继续搜索 t 的后代)。每当结束一个结点的搜索,则该结点的 time 属性 = 该结点所指向的所有结点的 time 之和。最后 s.time 即路径条数。
如图 22-8 的 p 到 v,最后 v.time = 1, y.time = 1, r.time = 1, s.time = 1, o.time = 1, p.time。
22.4-3 给出一个算法来判断给定无向图 G = (V, E) 是否包含一个环路。算法运行时间应该在 O(V) 数量级,且与 |E| 无关。
ANSWER:利用DFS搜索无向图 G,如果搜索过程发现与某一结点相连的结点部位白色,则无向图 G 中存在环。即若图中出现后向边,则出现环。
对于时间复杂度,可以证明若无向图 G 无环,则 |E| < |V|,所以时间复杂度为 O(V)。
22.4-4 证明或反证下述论断:如果有向图 G 包含环路,则在算法 TOPOLOGICAL-SORT(G) 所生成的结点序列里,图 G 中与所生成序列不一致的“坏”边的条数最少。
ANSWER:
22.4-5 在有向无环图 G =(V, E) 上执行拓扑排序还有一种办法,就是重复寻找入度为 0 的结点,输出该结点,将该结点及从其发出的边从图中删除。请解释如何在 O(V+E) 的时间内实现这种思想。如果图 G 包含环路,将会发生什么情况?
ANSWER:首先利用DFS在O(V+E)时间内记录每个结点的入度。然后在每次删除结点后更新每个结点的入度。删除结点时间为O(V),更新结点入度时间为O(E),所以总时间为O(V+E)。
如果图G包含环路,环路中的结点的入度会均大于0,都无法删除。
相关文章推荐
- (转)python requests的安装与简单运用
- [Phonegap+Sencha Touch] 移动开发72 List列表横向滑动操作(仿QQ列表滑动删除)
- VB SENDMESSAGE BM_CLICK
- 每天学习十分钟3之学习心得
- C++ 中获取 可变形參函数中的參数
- js与jQuery操作select大全
- Win10系统中误删的文件怎么恢复?
- 岁末将至:盘点2015年十佳Linux /Android黑客单片机
- (转)win7 64 安装mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
- asp.net 框架搭建 mvc+nodejs
- 如何修改wamp中mysql的密码
- 湖边的烟花,熟悉的拥抱。我牵着她傻笑着赶路。看她孩童般的步伐消失在视野所及的拐角处,我感到幸福.
- 房子
- 复制:为什么你说“就差一个码农了”,我们是拒绝的
- Unity 脚本生命周期流程图
- java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with ...
- [多线程之四]-自定义NSThread
- JVM 深入理解
- Eclipse 下 更改字符集
- 我受的苦,总有一天会照亮我未来的路