首先证明这是一个NP问题:
- 因为对于
D
,其中只是一系列点的集合,所以我们可以直接在多项式时间内验证它是不是一个占优集,即直接检查
D 的规模是否满足预算,并标记 D 中每一个点及其邻居,检查是否能覆盖所有的顶点。因此,这是一个 NP 问题
- 因为对于
D
,其中只是一系列点的集合,所以我们可以直接在多项式时间内验证它是不是一个占优集,即直接检查
然后,从顶点覆盖问题规约,来证明它是NP-完全的。
- 令一个顶点覆盖问题求解的图为
G=(V,E) ,则从其中构造占优集的问题的图 G′=(V′,E′) :
- 对于任意 v∈V ,都设对应的 v′ 放入到 V′ 中
- 对于任意的
e∈E
,
e
的两个端点为
u,v ,然后生成多一个点 we 加入到 V′ 中,对应于边 e ,然后将(u′,w′e),(v′,w′e) 加入到 E′ 中。 - 对于任意的 u,v∈V , 将 (u′,v′) 加入到 E′ 中,完成 G′ 的构图。
- 那么此时,若
D
是
G 的一个顶点数为k的顶点覆盖集,然后根据点对应关系构造 D′ ,因为 D 是一个顶点覆盖集,所以G′ 中每个 we 都会有相邻的顶点,同时,因为 we 是相邻的,因此每个 v′ 都会相邻或对应,因此 D′ 是一个 G′ 的占优集。 - 相反,若
D′
是
G′
的一个占优集,然后根据点对应关系构造
D
,其中,对于
we ,则只需取其对应的 e 的其中一个端点即可。则易得每条边的端点都被覆盖到,因此D 是其中一个顶点覆盖集。
- 令一个顶点覆盖问题求解的图为
算法概论8.20题解
最新推荐文章于 2020-04-24 12:59:21 发布