NP-完全性介绍

【0】README

0.1) 本文总结于 数据结构与算法分析, 旨在 理解 “NP-完全性” 的idea ;


【1】难与易

1.1)不可判定问题:正如实数不足以表示 x^2 < 0 的解那样,可以证明, 计算机不可能解决碰巧发生的每一个问题,这些不可能解出的问题叫做不可判定问题;
1.2)停机问题:一个特殊的不可判定问题是 停机问题——是否能够让你的C 编译器拥有一个附加的特性,即不仅能够检查语法错误,而且还能够检查所有的无线循环?
1.3)递归不可判定问题:上述问题之所以是不可判定问题的原因在于, 这样一个程序可能很难检查它自己, 由于这个原因, 有时这些问题叫做是 递归不可判定的;


【2】NP类问题

2.0)网络转载:

  • 2.0.1)P类问题定义: 如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么该问题就是P类问题;
  • 2.0.2)NP问题定义:指可以在多项式的时间里验证一个解的问题, 也可以说:可以在多项式的时间里, 猜出解的问题;(通常,我们找一个解很困难,但是验证一个解却很容易, 验证一个解只需要花费O(n)的时间复杂度, 也就是说我们可以花 O(n)的时间吧我猜的路径长度加起来);
    • 2.0.2.1)为什么要定义NP问题? 是因为通常只有NP问题才能找到多项式的时间可以解决的算法, 所以P类问题属于NP类问题;
    • 2.0.2.2)人们普遍认为 P≠NP类问题: 就是因为在研究NP问题的过程中 找出一类非常特殊的NP问题——NPC类问题(NP完全问题);
  • 2.0.3)NPC问题(NP完全问题)定义:存在这样一个NP问题, 所有的NP问题都可以约化到它。 换句话说, 只要解决了这个问题,那么所有的NP类问题都解决了。这样的NP类问题不止一个,是一类, 这一类问题就叫做NPC问题(NP完全问题);

2.1)NP定义: NP代表非确定型多项式时间(nondeterministic polynomimal-time), NP类问题在难度上 逊色于不可判定问题的类;
2.2)确定型机器和非确定型机器:

  • 2.2.1)确定型机器: 它在每一时刻都在执行一条指令。根据这条指令, 机器再去执行某条接下来的指令,这是唯一可以确定的;
  • 2.2.2)非确定型机器:而一台非确定型机器对其后的步骤是有选择的。它可以自由进行它想要的任意的选择, 如果这些后面的步骤中有一条导致问题的解,那么它将总是选择这个正确的步骤。因此,非确定型机器具有非常好的猜测(优化)能力;

2.3)如何检验一个问题是否属于 NP 的简单方法是用 是否问题(yes/no) 的语言描述该问题?
如果我们在多项式时间内能够证明一个问题的任意“是”的实例是正确的, 那么该问题属于NP类问题;以哈密尔顿圈问题为荔枝, 一个“是”的实例就是图中任意一个包含所有顶点的简单回路, 由于给定一条路径,验证它是否真的是哈密尔顿是一件简单的事情, 所以哈密尔顿圈问题是 NP类问题;
Attention)不是所有的可判定问题都属于NP类问题。 考虑确定一个图是否(没有哈密尔顿圈)的问题。证明一个图有哈密尔顿圈时相对简单的一件事情——我们只需要展示一个即可。然后却没有人知道如何以多项式时间证明一个图没有哈密尔顿圈。似乎人们只能枚举所有的圈并且将它们一个一个地验证才行。因此,无哈密尔顿圈 的问题不知道属不属于 NP类问题;


【3】NP完全问题

3.1)NPC问题(NP完全问题)的定义:存在这样一个NP问题, 所有的NP问题都可以规约到它。 换句话说, 只要解决了这类问题,那么所有的NP类问题都解决了。这样的NP类问题不止一个,是一类, 这一类问题就叫做NPC问题(NP完全问题);
3.2)如何将问题P1规约到P2:

  • 3.2.1)规约描述: 设有一个映射, 使得P1 的任何实例都可以变换成P2 的一个实例。求解P2, 然后将答案映射回原始的解答。
  • 3.2.2)看个荔枝: 考虑吧数以10进制输入到一个计算器中,将这些10进制数转化成2进制数,所有的计算都用2进制进行。然后, 再把最后答案转变成十进制显示。对于可多项式地归约成P2的P1, 与变换相联系的所有的工作必然以多项式时间完成;

3.3)NP完全问题是最难的NP问题的原因在于: 一个NP完全问题基本上可以用作NP中任何问题的子程序, 其花费只不过是多项式的开销量;因此,如果任意NP完全问题有一个多项式时间的解, 那么NP中的每一个问题必然都有一个多项式时间的解。这使得NP完全问题是所有NP问题中最难的问题;
3.4)设我们有一个NP完全问题P1, 并设P2已知属于NP, 证明P2也是NPC类问题。再进一步假设P1多项式地归约成P2, 使得我们可以通过使用P2求解P1而只多损耗了 多项式时间。由于P1是NP完全问题的, NP中的每一个问题都可以多项式地归约成P1。应用多项式的封闭性, 我们看到, NP中的每一个问题均可归约成P2: 我们把问题归约成P1, 然后再把P1归约到P2, 因此P2是NP完全的;


3.5)巡回售货员问题:

  • 3.5.1)问题定义: 给定一完全图G=(V, E), 它的边的值以及整数K, 是否存在一个访问所有顶点并且 总值<= K 的简单圈?
  • 3.5.2)巡回售货员问题的应用: 印刷电路板需要穿一些孔使得芯片、电阻器和其它的电子元件可以置入;定位所需要的时间依赖于从孔到孔间行进的距离, 定位的时间越少越好;
  • 3.5.3)巡回售货员是NPC(NP完全)问题。如何证明它是NPC问题?
    为了证明它是NPC的, 我们可多项式地将哈密尔顿圈问题归约到巡回售货员问题。为此,可以构造一个新的图G’, G’ 和 G 有相同的顶点。对于G’ 的每一条边(v, w), 如果(v, w)属于G, 那么它就有权1, 否则权2;容易验证, G有一个 哈密尔顿圈当且仅当G’ 有一个总权为 |V| 的巡回售货员的巡回路线(如下图所示);
    这里写图片描述

3.6)如何证明某个新问题是NP完全的? 必须证明它属于NP, 然后将一个适当的NPC问题变换到该问题;
3.7)我们不禁要问:第一个NPC问题是如何具体地被证明是NPC(NP完全)的;
3.8)引入可满足性问题:第一个被证明是NPC问题的是 可满足性问题, 这个可满足性问题吧一个布尔表达式作为输入并提问是否该表达式对式中各变量的一次赋值取值为1;

3.9)证明可满足性问题是NPC的: 在1971年,Cook通过直接证明NP中的所有问题都可以变换成可满足性问题而证明了可满足性问题是 NP完全的;为此,Cook用到了对NP中每一个问题都已知的事实: NP中的每一个问题都可以用一台非确定型计算机在多项式时间内求解;
3.10)引入图灵机:计算机的一个形式化的模型称作图灵机;
Cook指出这台机器的动作如何能够用一个及其复杂但仍然是多项式的冗长的布尔公式来模拟。 该布尔公式为真, 当且仅当由图灵机运行的程序对其输入得到一个“是”的答案;
3.11)其他的NPC问题: 除开可满足性问题外, 我们已经考察过的 哈密尔顿回路问题、巡回售货员问题、最长路径问题都是 NPC(NP完全)问题, 此外,还有 装箱问题, 背包问题, 图的着色问题以及团的问题都是著名的NPC类问题;
3.12)NPC类问题相当广泛: including 操作系统(调度和安全)、数据库系统、运筹学 、逻辑学特别是图论等不同领域的问题;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python发邮件给多个人发送消息_python发送邮件(带附件)、发送给多人、抄送给多人的示例...

python发送邮件(带附件)、发送给多人、抄送给多人的示例#!/usr/bin/env python# -*-encoding: utf-8 -*-import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText#image包可以发送图片形式的附件# from email.mime.image import MI…

camel apache_Apache Camel 3只有2个月的路程

camel apache骆驼队正忙于为 Apache Camel 3.今天&#xff0c;第二个候选版本已构建并发布在暂存库中&#xff0c;供早期的适配器尝试 。 当我自己很忙的时候&#xff0c;我只想写一篇简短的博客文章&#xff0c;以使社区了解Apache Camel 3即将发布&#xff0c;并且我们希望…

浅谈java代理

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java代理机制 的基础知识&#xff1b; 【1】代理相关 1.1&#xff09;利用代理可以在运行时创建一个实现了一组给定接口的新类&#xff0c; 这种功能只有在 编译时无法确定需要实…

织梦mysql安装教程视频教程_织梦DedeCMSV6系统安装步骤教程

DedeCMSV6系统基于PHP7.*MySQL开发&#xff0c;本篇文档将介绍如何下载DedeCMSV6系统&#xff0c;并且通过之前已经部署好的系统环境来安装配置一个安全的站点。准备工作&#xff1a;主机一台(PHP7.0以上MYSQL)域名(做好解析绑定工作)源码下载通过DedeCMSV6系统下载页面可以获取…

无法创建t的通用数组_创建通用数组的问题

无法创建t的通用数组在这篇文章中&#xff0c;我们将介绍一篇全面的文章&#xff0c;其中介绍了创建通用数组的问题。 Java编程语言于2004年9月在Java 5.0“ Tiger”发行版中添加了泛型。 泛型或类型参数化系统在提供类型安全性的同时扩展了Java现有的类型系统。 1.简介 Java具…

贪婪算法+小应用(调度问题)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c; 旨在 理解 “DFS应用——贪婪算法” 的idea&#xff1b; 【1】贪婪算法 1.1&#xff09;已经看到的三个贪婪算法&#xff1a; Dijkstra算、Prim算法 和 Kruskal 算法&#xff1b;&#xff08;Dijkstr…

http 安全性和幂等性_HTTP方法:幂等性和安全性

http 安全性和幂等性幂等性和安全性是HTTP方法的属性。 HTTP RFC定义了这些属性&#xff0c;并告诉我们哪些HTTP方法是安全且幂等的。 服务器应用程序应确保正确执行安全和幂等的语义&#xff0c;如客户端期望的那样。 安全的HTTP方法 如果HTTP方法不更改服务器状态&#xff0…

Huffman编码(Huffman树)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在 理解 “Huffman编码&#xff08;Huffman树&#xff09;” 的idea 并用源代码加以实现&#xff1b; 0.2&#xff09; Huffman树的构建算法属于 贪婪算法&#xff0c;…

java获取文件列表_java获取指定目录中的文件列表

最近项目中会动态生成文件html及相关资源文件(css,js,png,mp3)&#xff0c;为了防止文件名重复&#xff0c;需要获取目录中相同类型文件的最大编号&#xff0c;下面我用代码来实现获得文件列表。public static void getFiles(String path) {File file new File(path);// 如果这…

jep290涉及jdk版本_针对JDK 14提议的另外六个JEP

jep290涉及jdk版本Mark Reinhold最近的消息宣布了六个新的“建议针对JDK 14的JEP ”&#xff1a; JEP 345 &#xff0c; JEP 361 &#xff0c; JEP 363 &#xff0c; JEP 364 &#xff0c; JEP 365和JEP 367 。 假设没有异议由11月7日提出&#xff0c;这些JEPs将有针对性地JDK …

近似装箱问题(三种联机算法实现)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在 理解 “近似装箱问题&#xff08;三种联机算法实现&#xff09;” 的idea 并用源代码加以实现&#xff1b; 0.2&#xff09; 近似装箱问题的三种联机算法 分别是&am…

java 随机数种子_Java--随机数和随机数种子(转)

在计算机中并没有一个真正的随机数发生器&#xff0c;但是可以做到使产生的数字重复率很低&#xff0c;这样看起来好象是真正的随机数&#xff0c;实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多&#xff0c;如果要详细地讨论&#xff0c;需要厚厚的一本…

java 堆转储快照_捕获Java堆转储的7个选项

java 堆转储快照堆转储是诊断与内存相关的问题的重要工件&#xff0c;例如内存泄漏缓慢&#xff0c;垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。 有很棒的工具&#xff0c;例如Eclipse MAT和Heap Hero&#xff0c;可以分析堆转储。 但是&…

java 提取url参数_Java提取URL某个参数的值

ASP&period;NET Core 中文文档 第四章 MVC(4&period;3)过滤器原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...jquery插件-表单提交插件-jQuery&peri…

近似装箱问题(两种脱机算法实现)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在 理解 “近似装箱问题&#xff08;两种脱机算法实现&#xff09;” 的idea 并用源代码加以实现&#xff1b; 0.2&#xff09; 近似装箱问题的两种联机算法 分别是&am…

vaadin 10+_Vaadin 10+作为CUBA UI的未来

vaadin 10从一开始&#xff0c;Vaadin就成为CUBA平台用户界面的基石和重要组成部分。 凭借其创新的方法&#xff0c;它帮助CUBA将企业用户界面开发带到了一个非常有希望&#xff08;当今是默认&#xff09;的WEB领域。 Vaadin最令人兴奋的部分之一是整个开发都是同构的&#xf…

java 信息增益_对信息增益(IG,Information Gain)的理解和计算

可能理解的不对。决策树构建中节点的选择靠的就是信息增益了。信息增益是一种有效的特征选择方法&#xff0c;理解起来很简单&#xff1a;增益嘛&#xff0c;肯定是有无这个特征对分类问题的影响的大小&#xff0c;这个特征存在的话&#xff0c;会对分类系统带来多少信息量&…

使用文本编辑器和jdk_JDK 14:记录,文本块等

使用文本编辑器和jdk今天的Mark Reinhold帖子“ 建议JEP针对JDK 14&#xff1a;305、343、359、366和368 ”建议将另外五个JEP针对JDK 14 。 该组中有一些备受期待的功能&#xff0c;但建议将所有功能都“预览”或“孵化”&#xff1a; JEP 305 &#xff1a;instanceof的模式匹…

java compareable接口_Java对象比较-Comparable和Comparator接口使用

最近在学习贪心算法和动态规划的过程中&#xff0c;里面有一段自然排序的操作&#xff0c;顺便简单了解一下Java中对象比较后排序要使用的两个接口&#xff1a;Comparable和Comparator。如果是数字&#xff0c;直接比较就行&#xff0c;但是如果是对象&#xff0c;如何比较后排…

java初学者指南_Java代理初学者指南

java初学者指南尽管Java初学者很快学会了键入public static void main来运行他们的应用程序&#xff0c;但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支持&#xff1a; premain和agentmain方法。 这两种方法都允许所谓的Java代理在驻留在其自己的…