Reduce归约 证明原理

Posted 软件工程小施同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Reduce归约 证明原理相关的知识,希望对你有一定的参考价值。

一、归约

Reducing A(已知的) to B(要证明的)


思想: 我们现在遇到了个问题,可以把它转化到一个某个已解决的问题上,而不是一定要直接解决这个问题
概念描述: 设计一个函数f(x),把问题A的输入A_input转换成问题B的一个输入B_input=f(x),这样就能用问题B的解法来求解。(输出真或假)
A可以被归约到B。


难点:转换函数f(x)的设计必须要保证问题B的输出结果和相应的问题A上的答案保持一致。
 

可视化归约

即A<=B ,B比A难,如果B能解决,即知道B的解集,那么A一定可以被解决。

二、基本归约

  1. 简单的恒等归约:比如最大独立集和最小点覆盖。

(最大独立集)

概念:在n个点的图G中选出m个点,使这m个点两两之间没有边的点中,m的最大值。

性质:顶点数 = 最大独立集 + 最小点覆盖

说明:最小点覆盖的相反就是最大独立集。 

(最小点覆盖)

概念:用最少的点,让每条边都至少和其中一个点关联

性质:最小点覆盖 = 最大匹配

说明:在二分图中,求出了最大匹配后,容易得出,合理分配最大匹配的点去覆盖,未匹配的点一定与覆盖的的某个点有边。

(最小边覆盖)

概念:用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点

性质:最小边覆盖 = 顶点数 - 最小点覆盖

说明:二分图中,最大匹配为m,未匹配的点为x,则总点数n = 2 * m + x,未匹配的点需要x条边去关联x个点,则覆盖边至少为m + x,满足“最小边覆盖 = 顶点数 - 最小点覆盖”。

二分图中的最大独立集,最小点覆盖,最小边覆盖概念 - SummerMingQAQ - 博客园

显然最小点覆盖2, 3, 7恰好跟最大独立集 1, 4, 5, 6互补。

这是因为在independent set中,任意2个结点<u,v>都不会有一条边相连,所以与u,v相连的结点一定在集合外面,所以independent set的补集一定是vertex cover的。 

2. 从特殊情况到一般情况:比如 顶点覆盖 ≤p 集合覆盖。

最小顶点覆盖问题:

(最少的点覆盖所有的边)

是否存在V的一个最小的子集V’,使得|V’|<=|V|,并且G中的每条边e,至少有一个顶点在V’中?

最小集合覆盖问题:

(最少的子集合覆盖所有的元素)
问题定义:
实例:现在有一个集合A,其中包含了m个元素(注意,集合是无序的,并且包含的元素也是不相同的),现在n个集合,分别为B1、B2、…、Bn。

并且这n个集合的并集恰好等于A集合,即:B1UB2UB3U…UBn=A。


问题:是否存在B集合的最小子集,且他们的并集也等于A集合?


例子:集合A=1,2,3,4,5,集合B=1,2,3,2,4,3,4,4,5。可以看出,B集合的并集恰好等于A集合,那么问题的解是:SETCOVER=1,2,3,4,5。


A<=B

step1.找到类比

问题

最小顶点覆盖问题(已知)<= 最小集合覆盖问题(要证明的)

对象

最小顶点覆盖问题中的 边 -----最小集合覆盖问题中的 元素

最小顶点覆盖问题中的 点------最小集合覆盖问题中的 子集合

目的

覆盖所有边----覆盖所有元素

输入

一些点--一些子集合

输出

这些点是否覆盖所有边--这些子集合是否覆盖所有元素

step2. 以A问题的输入构造B问题的输入


 

 

3. 要求掌握同一个问题的最优问题如何多项式时间归约到该问题的判断问题(自身归约);


自归约:将求解问题归约成判断问题,如果判断问题能够解决,那么就可以利用判断问题来解决求解问题。
比如最小点覆盖问题,假如我们能判断一个图中是否存在点数为k的最小点覆盖。于是可以遍历图中的每个顶点,如果删去这个顶点以及和这个顶点相连接的边,图中只存在点数为k-1的点覆盖,那么就可以判定该顶点是最小点覆盖中的顶点,不断重复这个操作,就可以找到最小点覆盖。
 

三、NP和NPC

1. 证明方法

证明NP问题。

这个容易,即给你一个结果,你能在polynomial的时间内验证该结果的正确性

NP(non-deterministic polynomial-time)

证明NP-hard问题。

我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)。即比NPC更难求解
 

证明NP-Complete问题。

分以下两步:
第一步,证明这个问题属于NP;
第二步,证明这个问题是NP-hard的。

所有的NP问题都可以规约到SAT(即NP<=SAT),也就是说SAT至少与NP问题一样难,或者如果解决了3SAT问题,所有的NP问题就解决了。

 

 

2.  NP-Complete间的规约例子

1. 3SAT<=Independent Set

 

 

简单的说,构造好这样的图后,我们想要给每个三角形赋值, 每条边是 冲突的,例如我们选择第一个三角形的y为真值后,与y相连的各个顶点将不能被选择。
加入了3m个点,3m+k条边所以是多项式的时间内完成的规约。

 

2.Vertex Cover <=Independent Set

9. Independent Set <= Clique problem
 

 

3. 证明一个问题是NP-hard


证明NP-hard问题。我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)。
简单说就是:
1)对问题A给定限制条件得到一个特例B问题
2)证明问题B是NPC问题。
 



原文链接:https://blog.csdn.net/lyly1995/article/details/109959064

以上是关于Reduce归约 证明原理的主要内容,如果未能解决你的问题,请参考以下文章

Python入门之经典函数实例——第3关:Map-Reduce - 映射与归约的思想

Python入门之经典函数实例——第3关:Map-Reduce - 映射与归约的思想

跟我一步一步学习MapReduce了解MapReduce和Yarn原理

通俗地解释下密码学中的归约证明

Java8中Stream的归约与收集

stream — 归约与收集