一、归约

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归约 证明原理相关推荐

  1. 密码学归约证明——计数器CTR模式

    1. 计数器CTR模式 选择,计算,.不加密并作为密文的一部分发送. 2. CTR模式的CPA安全 若是,则模式是安全的. 挑战密文在实验中被加密时,设表示初始,表示加密挑战密文每个分组.要求从未被加 ...

  2. 密码学归约证明——基于伪随机函数的消息鉴别码方案

    1. 消息鉴别码实验 运行得到密钥,即. 敌手获得输入,且能够访问预言机,最终输出,其中为消息的鉴别码.设为敌手访问预言机的问询集合. 当且仅当且,实验输出1.其中是鉴别码方案的验证方法. 如果一个消 ...

  3. 密码学归约证明——定长对称加密密钥的敌手不可区分性

    1. 前言 针对任伟译<现代密码学--原理与协议>这本书中,将reduction一词翻译成"规约",根据笔者在网上查阅资料,最终认为翻译成"归约"更 ...

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

    本文首发于本人的:能否通俗地解释下密码学中的归约证明? - ChainingBlocks的回答 - 知乎 https://www.zhihu.com/question/49441102/answer/ ...

  5. 有没有大佬帮我解答一下归约证明的疑惑

    归约证明 基本思想: ​ 假设某个低层次难题很难解决,证明在此难题基础上的加密方案是安全的. 本质: 构造/证明一个逻辑命题:Y 是安全的 → X是安全的.Y是我们的前提假设,X是我们所构造的所要证明 ...

  6. 密码学归约证明——选择明文攻击下的不可区分性

    1. 选择明文攻击不可区分性实验 运行生成密钥 :输出给敌手,敌手可以访问预言机,并输出一对长度相等的消息:选择一个随机比特 ,计算出挑战密文交给 ;敌手继续访问预言机,输出一个比特:如果 ,则,成功 ...

  7. 深入理解Spark 2.1 Core (十一):Shuffle Reduce 端的原理与源码分析

    我们曾经在<深入理解Spark 2.1 Core (一):RDD的原理与源码分析 >讲解过: 为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RD ...

  8. 密码学归约证明——DH密钥交换协议在窃听者存在的情况下的安全性

    1. 密钥交换实验KEA,Πeav(n)KE^{eav}_{A,\Pi}(n)KEA,Πeav​(n) 持有1n1^n1n的通信方执行Π\PiΠ协议.之后得到通信双方发送的所有的消息的副本以及双方输出 ...

  9. 密码学归约证明——哈希签名范式的安全性

    1. 哈希碰撞发现实验HashcollA,H(n)Hashcoll_{A,H} (n)HashcollA,H​(n) 产生密钥s←Gen(1n)s\leftarrow Gen(1^n )s←Gen(1 ...

  10. js数组中filter、map、reduce、find等方法实现的原理

    filter用法和原理实现 filter 过滤,filter()使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组. let arr=[2,4,6,8]; let arr1=arr. ...

最新文章

  1. SQL语句判断数据库、表、字段是否存在
  2. 关于for中思维卡机的小悲剧
  3. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
  4. 《与mysql零距离接触》视屏学习笔记
  5. 【转】Dynamics CRM 365零基础入门学习(一)Dynamics介绍以及开发工具配置
  6. 我国自主播放软件暴风影音挑落微软
  7. Windows 10环境下「MSCOCO Captions」评估代码踩坑记录
  8. kudu : 扩容报错 Bad status: Not found: Unable to initialize catalog manager
  9. 如何强制子div为父div的高度的100%而不指定父级的高度?
  10. 关于VMWare版本下载选择
  11. 转:Visio 2010 产品秘钥 亲测可用的
  12. python分词原理_结巴分词原理
  13. mysql表结构指哪些_gp数据库查看表结构
  14. js 实现表格合并单元格
  15. php网页能实现飘窗吗,网站飘窗广告的实现方法
  16. 蒙特卡罗法(Python实现)
  17. php自动生成phpunit,PHP单元测试框架PHPUnit的使用
  18. 51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)
  19. 透彻分析JAVA内存泄漏和内存溢出的区别
  20. MySQL数据库-设置数据完整性

热门文章

  1. H3C题库HCNE的 最新
  2. java基础 第四章 下(数组)
  3. 544. Top k Largest Numbers【medium】
  4. memcache使用方法测试 # 转自 简单--生活 #
  5. 关于eclipse总是出现adb refused request的问题(转)
  6. linux sshd 开机自启动
  7. 贝叶斯估计与最大似然估计
  8. C++重载箭头操作符的理解--c++primer这里有错误
  9. jquery mysql jsp搜索功能_jquery实现的一个提前搜索功能
  10. mysql 数据生成_mysql生成数据