0%

Lec16 贪婪算法,最小生成树

MIT算法导论课程:Lec16 贪婪算法,最小生成树,对应书上的章节:16.1-16.3 and 22.1, Chapter 23

1. Graph representation

Graphs

图分为有向图和无向图,可以用\(G=(V,E)\)表示。

\(|E|=O(V^2)\),又因为图是联通的,所以\(|E|\geq|V|-1\),因此\(\lg |E|=\Theta(\lg V)\).

Adjacency-matrix representation

也可以用权重。\(\Theta(V^2)\) storage,dense representation。

Adjacency-list representation

用表\(Adj[v]\)表示v点指向的节点。

对于无向图:\(|Adj[v]|=degree(v)\).

对于有向图:\(|Adj[v]|=out-degree(v)\).

Handshaking Lemma:对于无向图\(\sum degree(v)=2|E|\)

所以Adjacency list是一个sparse representation,\(\Theta(V+E)\),经常比邻接矩阵要好。

2. Minimum spanning trees

输入:一个联通无向图\(G=(V,E)\),和权重函数\(w:E->\R\)。为了简化,所有边都是互异的。

输出:一个生成树T,连接所有节点并且权重最小。\(w(T)=\sum_{(u,v)\in T}w(u,v)\).

3. Optimal substructure

移去最小生成树中的任意一个边,然后T被分为了两个子树\(T_1\)\(T_2\).

Theorem: 子树\(T_1\)是子图\(G_1\)的最小生成树,子树\(T_2\)是子图\(G_2\)的最小生成树。

Proof: cut and paste方法:\(w(T)=w(u,v)+w(T_1)+w(T_2)\).

如果\(T_1'\)是比\(T_1\)对于\(G_1\)更小的生成树这样\(T'=\{(u,v)\}\cup T'\cup T_2\)就是比\(T\)更小的生成树。这是与假设冲突的。

4. Greedy choice

Greedy-choice property:一个局部最优解也是全局最优解。

Theorem: \(T\)\(G\)的最小生成树,\(A\)\(V\)的子集,假设\((u,v)\in E\)\(A\)\(V-A\)权重最小的边,那么\((u,v)\in T\).

Proof: 假设\((u,v)\notin T\),cut and paste.考虑T中从u到v的唯一简单路径。(u,v)和这条路径的第一个A到V-A的边交换,这样T变得更小了,假设冲突。

5. Prim’s greedy MST algorithm

IDEA: V-A维护为一个优先队列Q,将A与V之间最小权值边的权值当作Q的key.

不同数据结构时间复杂度对比:

如今最好算法:

  • Karger, Klein, and Tarjan [1993].
  • Randomized algorithm.
  • O(V + E) expected time
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道