【计算复杂性理论】P可归约(归约,P-reducible)与P、NP、NP-Hard、NP-Complete问题

devtools/2024/10/18 11:08:34/

1 问题背景

        如果想要了解P问题、NP问题、NP-Hard问题、NP-Complete问题之间的关系,那就需要从了解NP-complete问题和归约概念开始。上一篇文章中,我们介绍了计算复杂性理论的奠基之作《The Complexity of Theorem-Proving Procedures》,在这篇文章中,首次正式定义了NP-complete问题的概念,并且证明了第一个NP-Complete问题——布尔表达式可满足性问题(SAT)。

2 什么是归约

        归约在文章《The Complexity of Theorem-Proving Procedures》是指,如果有一个解答器可以立即解决第二个问题,那么第一个问题也可以在多项式时间内被确定性地解决。

        多项式时间归约(Polynomial-Time Reduction, 也叫Karp归约):如果问题A可以在多项式时间内归约到B问题,意味着存在一个多项式时间的算法能够将A问题的每一个实例都转化为B问题的一个实例,并且只要有算法能够求解B问题,那个这个算法也能够求解A问题。也就是说,如果问题 A 可以归约为问题 B,那么B问题至少和A问题一样难,甚至可能更难。

        我们思考,所有的NP问题里面是否有一些代表性的问题,能够将所有的NP问题都归约到这些问题,那么我解决了这些问题,不就解决了所有的NP问题吗。因此有了NP-Complete问题。

3 P、NP、NP-Hard、NP-Complete定义及关系

        P问题:多项式时间内可求解。

        NP问题:多项式时间内可验证。

        NP-Complete问题:①是NP问题;②所有NP问题都能归约到这个问题。

        NP-Hard问题:①可以是NP问题,也可以不是NP问题;②所有NP问题都能归约到这个问题。

        关系图: 

        图来源:

布尔表达式可满足性问题(SAT)与库克-列文定理(上)_boolean satisfiability problem-CSDN博客

3.1 P问题

  • P问题是指那些可以在确定性图灵机上在多项式时间内解决的问题,P代表 "Polynomial time"(多项式时间)。

  • P与NP的关系

    • P问题可以看作是NP问题的子集,因为所有可以在多项式时间内解决的问题也可以在多项式时间内验证解(即P问题显然是NP问题)。
    • 一个关键的未解问题是P是否等于NP。也就是说,我们不知道所有的NP问题(解可以在多项式时间内验证)是否都可以在多项式时间内解决。如果P=NP,那么所有NP问题就都可以通过多项式时间的算法解决;如果P≠NP,那么有些NP问题是无法在多项式时间内解决的。

3.2 NP问题

  • NP问题:NP(Nondeterministic Polynomial time)问题是指那些在多项式时间内可以通过非确定性图灵机(或等效地,能够在多项式时间内验证其解是否正确)的决策问题。换句话说,给定一个问题的解,可以在多项式时间内验证该解是否正确。NP问题并不一定有多项式时间的算法来找到解。

3.3 NP-Complete问题

  • NP完全问题(NP-Complete Problem):NP完全问题是NP问题中的一个子集,这些问题被认为是NP中最难的。一个问题是NP完全的,当且仅当:

    • 它属于NP类。
    • 任何其他NP问题都可以通过多项式时间的归约转换为这个问题。

    换句话说,NP完全问题是NP问题中的“代表”,解决一个NP完全问题可以用来解决所有其他NP问题。因此,NP完全问题被认为是NP类中最难的问题。

3.4 NP-Hard问题

  • NP难(NP-hard)指的是至少和NP问题一样难的问题。
  • 一个问题是NP难的,如果每一个NP问题都可以多项式时间归约到它。也就是说,如果我们能在多项式时间内解决这个问题,那么所有NP问题也都可以在多项式时间内解决。
  • 重要的是,NP难问题不一定是NP问题。这意味着,它们的解不一定能在多项式时间内验证,甚至可能不是决策问题(比如优化问题)。

注:3.1-3.4节内容来自于大语言模型。

4 文章推荐

        由于知识有限,本文只是提一些概念,这里推荐两篇写得非常好的文章,有讲推导过程。

布尔表达式可满足性问题(SAT)与库克-列文定理(上)_boolean satisfiability problem-CSDN博客

         上篇文章主要讲了计算复杂理论的一些基础知识,内容完整、思路清晰,非常值得刚入门的同学做了解!

布尔表达式可满足性问题(SAT)与库克-列文定理(下)_库克列文定理证明过程-CSDN博客

        下篇文章主要讲了库克-列文定理,介绍了布尔表达式可满足性问题(SAT)是NP-Complete问题的证明过程。


http://www.ppmy.cn/devtools/121906.html

相关文章

【信号与系统第五章】13、希尔伯特变换

定义 从频域看希尔伯特变换 希尔伯特变换的性质 性质1 性质1证明 性质2 性质2证明 证明关键点:若,则,原因: 典型信号的希尔伯特变换 证明 希尔伯特变换的应用 参考: 希尔伯特变换-傅里叶变换的好伙伴_哔哩哔哩_bili…

Redis的基本使用

简介 传统的数据库是 关系数据库,但是Redis是键值对数据库传统的数据库是基于 磁盘存储的,但是Redis是基于 内存存储的 基于内存,读写性能更高内存是不大的,只能存储热点信息 安装 绿色软件,安装即可使用 安装服务 手…

二分查找一>x 的平方根

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int mySqrt(int x) {if(x < 1) return 0;long left 1,right x;while(left < right){long mid left (right-left1) / 2;if(mid*mid < x) left mid;else right mid-1;}return (int)left;}

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性&#xff0c;不言而喻&#xff0c;在数学建模中使用及其频繁&#xff0c;但是你真的了解ARIMA、AR、MA么&#xff1f;ACF图你会看么&#xff1f;&#xff1f; 时间序列数据如何构造&#xff1f;&#xff1f;&#xff1f;&#xff0c;我打过不少…

MySQL数据库——索引

目录 什么是索引&#xff08;Index&#xff09;&#xff1f; 怎样加索引&#xff1f; 索引的特点 索引类型 主键索引(Primary Key) 辅助索引&#xff08;二级索引&#xff09; 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…

Electron获取nodejs和chrome版本信息

Electron获取nodejs和chrome版本信息 环境&#xff1a; electron: 30.1.1 nodejs: 20.14.0代码 $ tree . --- index.html --- index.js --- package.jsonindex.html <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>H…

【C++算法】10.滑动窗口_长度最小的子数组

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 209. 长度最小的子数组 题目描述&#xff1a; 解法 解法一&#xff1a;暴力求解&#xff08;会超时&#xff09; 暴力枚举出所有子数组的和。 查找子数组n2&#xff0…

【Java】IntelliJ IDEA开发环境安装

一、下载 官方地址&#xff1a;https://www.jetbrains.com/idea/ 点击Download直接下载 二、安装 双击安装包&#xff0c;点击Next 选择安装路径&#xff0c;点击Next 勾选安装内容 安装完成。 三、创建项目 打开IDEA&#xff0c;填写项目名称&#xff0c;选择项目安装路径…