我们一直在写关于高效算法来解决复杂问题,如最短路径欧拉图最小生成树等。这些都是算法设计者的成功故事。 在这篇文章中,讨论了计算机科学的失败故事。

计算机可以解决所有的计算问题吗?

存在计算问题,即使在无限制的时间内,算法也无法解决。例如图灵暂停(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(简介)的更多相关文章

  1. MySQL Cluster 集群简介

    简介 MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术.这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性. My ...

  2. redis(8)集群简介

    一.集群 互联网每天都会产生大量的数据,单实例已经不能满足需求.但是如果依赖于硬件成本的提升,那就不是所有人能够负担的起的. 集群这个时候出现,一定程度上解决了这个问题.它通过互联网,将多个单实例连接 ...

  3. SIGAI机器学习第一集 机器学习简介

    讲授机器学习的基本概念.发展历史与典型应用 大纲: 人工智能简介机器学习简介为什么需要机器学习机器学习的发展历史机器学习的典型应用人工智能主要的公司本课程讲授的算法 机器学习并不是人工智能一上来就采用 ...

  4. MySQL Group Replication-MGR集群简介

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  5. Redis集群简介及部署

    1简介 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. Apache Commons 工具集使用简介

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成的东西,我只是做了一个汇总整理. 一.Comm ...

  7. 集群技术(二) MySQL集群简介与配置详解

    when?why? 用MySQL集群? 减少数据中心结点压力和大数据量处理(读写分离),采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据 ...

  8. RabbitMQ集群简介

    一个RabbitMQ消息代理是一个由一个或多个Erlang节点组成的逻辑组,其中的每个节点都共享users, virtual hosts, queues, exchanges, bindings, a ...

  9. LVS集群简介及使用

    什么是集群 一组通过高速网络互联的计算组,并以单一系统的模式加以管理 将很多服务器集中在一起,提供一种服务,在客户端看来就象是只有一个服务器 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的 ...

随机推荐

  1. python学习笔记 loop&&raw_input 7&& if

    1.首先要说range(x) 其返回的是一个list:[0,1,2,....x-1] >>> range(5) [0,1,2,3,4] 2.Loop 共有两种形式,一种for x i ...

  2. Foundation框架的小总结

    一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数 ...

  3. php 7.2 一些注意事项.

    <?php $b = array(); each($b); // Deprecated: The each() function is deprecated. This message will ...

  4. NYOJ 417 死神来了 鸽巢原理

    死神来了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 有一天,王小子在遨游世界时,遇到了一场自然灾害.一个人孤独的在一个岛上,没有吃的没有喝的.在他饥寒交迫将要死亡时 ...

  5. C# Dictionary根据Key排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  6. PHP如何强制下载文件

    很多网站都需要做文件下载的功能.如果直接给连接的方式下载的话有很多的弊处...因为有时候需要对下载权限的检查,对下载次数的检查.所以一般采用php的方法进行安全下载.但是下载的时候如果是txt jpg ...

  7. 分享一些JAVA相关资源

    前言 以前在学习JAVA时,因为搜索相关资源过于不便,所以在搜集了一些好用的资源之后,将此分享. 文档主要包括面试文档, JAVA的技术文档(如JAVA并发实战.设计模式之类),LINUX的相关文档以 ...

  8. django模板语法之include

    假如我们有以下模板index.html,代码为: <!DOCTYPE html> <html lang="en"> <head> <met ...

  9. IP协议和网络传输中的封装与分用。

    关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html 因为四层模型用的比较多,这里只拿四层模型来分析. 1.四层模型中的最下层是链 ...

  10. 基于winpcap的以太网流量分析器(java)

    开发工具 IDE:eclipse -neon JDK:1.8 OS:Win10-64bit 主要功能 1.要求完成一个基于Winpcap的网络流量统计分析系统,具有易用.美观的界面. 2.完成局域网( ...