【算发设计】近似算法

来源:互联网 发布:域名net用的多么 编辑:程序博客网 时间:2024/06/15 20:29
近似算法的基本思想
由于很多问题都是NP完全问题,时间复杂度都是指数时间的,对于这类问题计算机很难求解。近似算法主要是求得这类问题的近似解,但是可以将时间复杂度降为多项式级别。
顶点覆盖问题
问题描述

输入: 无向图G=(V,E)

输出: CÍV,满足     (1)."(u,v)ÎE,uÎC或者vÎC        (2).C是满足条件(1)的最小集合。


近似算法
近似算法的时间复杂度分析
在第四步中每次取一条边,整个算法结束最多取|E|条边,股整个时间复杂度不超过O(|E|)。
近似比分析

令A={(u, v) | (u, v)是算法第4步选中的边}。若(u,v)属于A,则与(u, v)邻接的边皆从E’中删除。于是,A中无相邻接边。第5步的每次运行增加两个结点到C, |C|=2|A|。设C*是优化解,C*必须覆盖A.由于A中无邻接边,C*至少包含A中每条边的一个结点。于是,|A|<=|C*|,|C|=2|A|<=2|C*|,即|C|/|C*|<2。

旅行商问题

问题描述

输入:完全无向图G=(V,E);代价函数C,E为非负整数集合;C满足三角不等式:C(u,w)<=C(u,v)+C(v,w)。
输出:具有最小代价的Hamilton环。Hamilton环是一个包含V中每个结点一次的简单环。

近似算法
 APPROX-TSP-TOUR(G,C)
 1. 选择一个r属于V[G]作为生成树的根;2. 调用MST-Prim(G, C, r)生成一个最小生成树T;3. 先序遍历T,形成有序结点表L;4. 按照L中的顺序访问各结点,形成哈密顿环.


近似算法的时间复杂度分析

   第2步:  O(|E|+|V|log|V|)=O(|V|^2+|V|log|V|)=O(|V|^2)第3步:  O(|E|)=O(|V|^2), 因为G是完全图,  第4步:  O(|V|)
   故:T(G)=O(|V|^2)


近似比分析

设H*是TSP问题的优化解, H是算法产生的近似解.我们需要证明C(H)<=2C(H*).从H*中删除任意一条边, 可以得到G的一个生成树T’.  
设T是算法第2步产生的导致H的最小生成树, 则C(T)<=C(T')<=C(H*).T的一个full walk W列出了所有结点(第一次访问的和以后从一个子树返回时再访问的). 由于W通过每条边两次, C(W)=2C(T), 进而C(W)<=2C(H*).W不是哈密顿环, 因为它通过某些结点多于一次. 根据三角不等式, 我们可以从W中删除对一个结点的任何访问, 而不增加代价. (例如:从u→v→w 删除v得u→w)反复地应用上述操作, 我们可以从W中删除所有对任何结点的非第一次访问, 得到一个算法中的preoder walk. 由于T的preoder walk导致H, 我们有C(H<=C(W), 即 C(H)<=2C(H*)
















































0 0