算法设计 第十章 PSPACE:EXTENDING TRACTABILITY 扩展解的易解性



1 前言

我们已经看到NPC问题以及PSPACEC问题是非常难解的问题,但是存在一些特殊情况,使得这些难解的问题变得容易求解。比如 这种问题有某种结构,我们利用这种结构信息来降低复杂度。相当于有了部分先验。

2 例子

2.2寻找最小点集覆盖

给定G(V,E)和整数k,找到一个大小不超过k的顶点覆盖集。
假设顶点个数为n,那么有 C n k C_n^k Cnk个不同子集,验证每个子集是否顶点覆盖需要O(kn)(两个循环 k*n/2)。总时间 O ( k n C n k ) = O ( k n k + 1 ) O(knC_n^k)=O(kn^{k+1}) O(knCnk)=O(knk+1)

定理一:
如果G(V,E)有n个顶点,顶点最大的度不超过d,并且有一个大小不超过k的顶点覆盖,则G最多有kd条边。
推论:
最大的度不可能超过n-1,因此G最多有k(n-1)<kn条边。

所以利用推论的结果,分治法

e={u,v}是G的任意一边。G有一个大小不超过k的顶点覆盖当且仅当
G-{u}或者G-{v}有一个大小不超过k-1的顶点覆盖。
这里的删除是指删除u或v为端点的边以及节点。

分治算法
在这里插入图片描述
在这里插入图片描述
时间复杂度由 O ( k n k + 1 ) O(kn^{k+1}) O(knk+1)变为 2 k c k n 2^kckn 2kckn,关于n变为多项式而非指数,当n较大时可以求解。
总结:利用了图的结构知识降低复杂度。

2.3 solving NP-hard problems on trees

求G的最大独立集的势是多少,是npc问题,但是当G是树结构时,问题变得可解。
在这里插入图片描述

最大独立集一定包含叶节点。

因此贪婪法:

  • e(u,v)是一条边,将叶节点加入S集合,同时删除与u,v关联的边,注意删除边,保留节点。
  • 迭代直到没有边,将剩余孤立节点加入S

加权的独立集
每个节点有个权重,找到独立集,极大化权重和。

(u,v)是一条边,v是叶节点,OPT包括u或者包括包括所有与u相连的节点。

因此可以用动态规划
在这里插入图片描述
树结构的优点:一个树可以分解为多个子树。天然的适合分支以及动态规划求解,原问题分解为多个子问题。

2.4 圆弧覆盖物问题

波分复用:不同的波长可以用同一段电缆。
在这里插入图片描述
不同的颜色代表不同的波长。
k个颜色,m个圆弧,n个节点。
暴力算法需要O( k m k^m km)次计算。
通过切割
在这里插入图片描述
n个阶段每次 k ! k! k!次迭代。O(nk!)
最后对比切口处是否有一致的颜色。
在这里插入图片描述

2.5 二部图中的点集覆盖

二部图的最小覆盖的势等于最大匹配。
最大匹配=>构建最大流,求出最小覆盖。
在这里插入图片描述
在这里插入图片描述
证明暂略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值