NP完整性| 集1(简介)
我们一直在写关于高效算法来解决复杂问题,如最短路径,欧拉图,最小生成树等。这些都是算法设计者的成功故事。 在这篇文章中,讨论了计算机科学的失败故事。
计算机可以解决所有的计算问题吗?
存在计算问题,即使在无限制的时间内,算法也无法解决。例如图灵暂停(Turing Halting)问题(给定一个程序和一个输入,程序是否会在使用该输入运行时终止,否则将永远运行)。Alan Turing证明,解决所有可能的程序输入对的停止问题的一般算法不可能存在。证明的关键部分是,图灵机被用作计算机和程序的数学定义(源停止问题)。
NP完全问题是另一个失败的故事,NP完全问题是问题的状态是未知的。对于任何NP完全问题,还没有发现多项式时间算法内可以解决,也没有任何人能够证明任何一个都不存在多项式时间算法。有趣的是,如果在多项式时间内可以解决NP完全问题中的任何一个,那么所有这些都可以解决。
什么是NP,P,NP完成和NP-Hard问题?(提示:昨天我写过一篇文章里面有介绍)
P问题是一系列可以在多项式时间内在确定的机器上可以被解决的问题。
NP问题是一系列的可以由一个在多项式时间内在非确定性图灵机实现的问题。P是NP的子集(多项式时间中可以通过确定性机器求解的任何问题也可以在多项式时间内由非确定性机器求解)。
非正式地,NP是通过“幸运算法”的多项式时间解决的决策问题集合,这是一种在给定的选择集合(Source Ref 1)中始终作出正确猜测的神奇算法。
NP完整的问题是NP集中最难的问题。
一个决策问题是一个NP完全问题,当且仅当下面条件成立:
1) L在NP中(NP的完整问题的任何给定解决方案可以快速验证,但没有有效的已知解决方案),则决策问题L为NP完成。
2) NP中的每个问题在多项式时间内可以减少为L(减少定义如下)。
一个问题是NP-Hard如果遵循上述属性2,不需要遵循属性1.因此,NP-Complete问题也是NP-Hard问题的一个子集。

决策与优化问题
NP完整性适用于决策问题的领域。这样做是因为比较优化问题的决策问题的难度比较容易。实际上,尽管在多项式时间内能够解决决策问题通常也可以使我们在多项式时间内解决相应的优化问题(使用多项式调用决策问题)。因此,讨论决策问题的难度通常与讨论优化问题的难度相当。(来源参考文献2)。
例如,考虑顶点覆盖问题(给定一个图形,找出覆盖所有边缘的最小尺寸顶点集)。这是一个优化问题。相应的决策问题是,给定无向图G和k,是否存在大小为k的顶点覆盖?
什么是约简?
令 L1和L2是两个决策问题。假设算法A2求解L2。也就是说,如果y是L2的一个输入,则算法A2将输出是,不根据是否属于L2来回答是或否。
该思想是找到从L1到L2的变换,使得算法A2可以是算法A1的一部分,从而求解L1。
学习约简是非常重要的。例如,如果我们有库函数来解决某些问题,如果我们可以将一个新的问题归纳到一个解决的问题,我们节省了大量的时间。考虑一个问题的例子,我们必须在给定的有向图中找到最小产品路径,其中路径的乘积是沿着路径的边的权重的乘积。如果我们有Dijkstra算法的代码找到最短路径,我们可以采用所有权重的记录,并使用Dijkstra的算法找到最小的产品路径,而不是为这个新问题写一个新的代码。
如何证明给定的问题是NP完成?
从NP-complete问题的定义看,似乎不可能证明问题L是NP-Complete。根据定义,它要求我们显示NP中的每个问题都是多项式时间可以约简到L.幸运的是,有一种替代方法来证明它。这个想法是采取已知的NP-Complete问题并将其减少到L.如果可以进行多项式时间减少,我们可以证明L是通过减少传递性的NP-Complete(如果在多项式中可以将NP完全问题简化为L时间,则所有问题都可以在多项式时间内缩减为L)。
NP-Complete的第一个问题是什么?
NP-Complete问题的定义必然会出现一些第一个NP-Complete问题。 SAT(布尔可满足性问题)是Cook证明的第一个NP-Complete问题(见CLRS书的证明)。
了解NP-Completeness甚至对于工程师来说总是有用的。假设您被要求编写一个有效的算法来解决贵公司极其重要的问题。经过很长时间的思考,你只能拿出指数时间的方法,这是不切实际的。如果您不了解NP完整性,您只能说我无法使用高效的算法。如果您了解NP完整性,并证明问题为NP完成,您可以自豪地说多项式时间解决方案不太可能存在。如果有多项式时间解可行,那么该解决方案解决了许多科学家多年来一直在努力的计算机科学的一个大问题。
我们很快将讨论更多的NP-Complete问题及其对NP完整性的证明。
NP完整性| 集1(简介)的更多相关文章
- MySQL Cluster 集群简介
简介 MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术.这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性. My ...
- redis(8)集群简介
一.集群 互联网每天都会产生大量的数据,单实例已经不能满足需求.但是如果依赖于硬件成本的提升,那就不是所有人能够负担的起的. 集群这个时候出现,一定程度上解决了这个问题.它通过互联网,将多个单实例连接 ...
- SIGAI机器学习第一集 机器学习简介
讲授机器学习的基本概念.发展历史与典型应用 大纲: 人工智能简介机器学习简介为什么需要机器学习机器学习的发展历史机器学习的典型应用人工智能主要的公司本课程讲授的算法 机器学习并不是人工智能一上来就采用 ...
- MySQL Group Replication-MGR集群简介
简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...
- Redis集群简介及部署
1简介 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- Apache Commons 工具集使用简介
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成的东西,我只是做了一个汇总整理. 一.Comm ...
- 集群技术(二) MySQL集群简介与配置详解
when?why? 用MySQL集群? 减少数据中心结点压力和大数据量处理(读写分离),采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据 ...
- RabbitMQ集群简介
一个RabbitMQ消息代理是一个由一个或多个Erlang节点组成的逻辑组,其中的每个节点都共享users, virtual hosts, queues, exchanges, bindings, a ...
- LVS集群简介及使用
什么是集群 一组通过高速网络互联的计算组,并以单一系统的模式加以管理 将很多服务器集中在一起,提供一种服务,在客户端看来就象是只有一个服务器 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的 ...
随机推荐
- 腾讯 AI Lab 计算机视觉中心人脸 & OCR团队近期成果介绍(3)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:周景超 在上一期中介绍了我们团队部分已公开的国际领先的研究成果,近期我们有些新的成果和大家进一步分享. 1 人脸进展 人脸是最重要的视觉 ...
- 逆向实用干货分享,Hook技术第二讲,之虚表HOOK
逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...
- 第七届C/C++B-方格填数 DFS
方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+- ...
- 利用纯CSS美化checkbox和radio和滑动按钮的实现
W3C提供的CheckBox和radio的原始样式非常的丑,而且在不同的额浏览器表现还不一样,使用常规的方法添加样式没法进行修改样式 一, 单选按钮 <html> <head> ...
- ArcGIS jsAPI (4.x)本地部署字体符号乱码
在下载了新版arcigs 的 JS API 后,每次部署在IIS中都会出现部件字体乱码的问题,需配置响应标头和添加文件映射 一. HTTP响应标头配置 在 IIS 中的 HTTP响应标头 中加入以下配 ...
- python 3.6 MJ小工具
2017.07.14 update 做了个界面,不需要使用cmd命令行+文件路径的方式来使用了: 链接如下: http://www.cnblogs.com/chenyuebai/p/7150382.h ...
- request和response中文乱码问题后台处理办法
request接收参数的中文乱码的处理: GET: 方法一:使用String的构造方法: new String(request.getParameter("传过来的name").g ...
- jquery on()动态绑定元素的的点击事件无反应的问题记录
1.jquery使用版本:v2.0 2.重现代码: html <table class="table"> <thead> <tr> <th ...
- STL之容器适配器stack的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...
- 解析XML文件之使用SAM解析器
XML是一种常见的传输数据方式,所以在开发中,我们会遇到对XML文件进行解析的时候,本篇主要介绍使用SAM解析器,对XML文件进行解析. SAX解析器的长处是显而易见的.那就是SAX并不须要将全部的文 ...