CS170 Efficient Algorithms and Intractable Problems Hw3
课程主页:
https://inst.eecs.berkeley.edu/~cs170/fa18/
课程视频:
https://www.bilibili.com/video/BV1wK411g7ck
这次回顾Hw3。
2. Disrupting a Network of Spies
(a)
假设
证明:
如果存在
(b)
假设
由条件可得,不存在
(c)
注意到如果存在和
和(c)类似,依然是使用旋转的方式,所以只要判断是否会增加
(d)
注意到
以及如果
所以可以分两轮计算
层序遍历计算
:初始化
for
: :如果
是叶节点,- continue
否则,
for
in 的子节点:
时间复杂度:
层序遍历:
对每个节点和边各遍历一次,所以时间复杂度为
(e)
- 初始化
。 - 选择节点
,对 调用dfs得到搜索树 时间复杂度 。 的子节点个数。- 利用(d)部分的算法计算其余
,这步时间复杂度为 。
总时间复杂度为
3. Inverse FFT
(a)
记矩阵
那么
注意到
因此
(b)
那么
结论成立。
(c)
由多项式的定义可得
(d)
推导同课程笔记,只要将
https://doraemonzzz.com/2021/02/21/%E7%AE%97%E6%B3%95%E6%A6%82%E8%AE%BA(DPV)%E7%AC%AC2%E7%AB%A0%20%E5%88%86%E6%B2%BB%E7%AE%97%E6%B3%95%20%E6%80%BB%E7%BB%93/#toc-heading-9第2章 分治算法 总结/#toc-heading-9)
4. Vandermonde matrix
(a)
注意到
(b)
所以
(c)
取
5. Connectivity vs Strong Connectivity
(a)
因为是连通图,所以DFS得到一颗搜索树,那么删除搜索树任意叶节点即可。
(b)
a -> b -> c -> d -> a
那么删除任意一个节点都不够成强连通图。
(c)
反证法,如果存在节点对
6. Finding Clusters
初始化
计算
的SCC,得到每个节点的强连通分量编号 以及图元 ,图元的节点数量为 ,初始化线性化图元,顺序为
。for
:for
:
时间复杂度:
- 计算
的SCC: - 线性化图元:
- 循环1:每个节点和每个边各访问一次,
- 循环2:
所以时间复杂度为
7. Arbitrage
(a)
(b)
可以转化为单源最短路径问题,利用Bellman-Ford算法即可。
8. Bounded Bellman-Ford
返回Bellman-Ford算法的第
- procedure
BF
- procedure shortest-paths
- for all
: - repeat
times:- for all
:
- for all
解释:
考虑最短路径树,那么BF算法第
9. Matrix Filling
将第
选择未访问的节点
。合并
,当且仅当存在 ,使得 并且 ,记for
:- 如果
:- 如果
: - 如果
:- return false
- 如果
- 如果
:- 如果
: - 如果
:- return false
- 如果
- 如果
标记
为访问过。
重复上述操作,最后剩下
000111000
110000001
001000010
......
111111011
上图中,标记为
时间复杂度:
每次合并的时间复杂度为