- 算法设计与分析
- 家
- 算法基础知识
- DAA - 简介
- DAA - 算法分析
- DAA-分析方法
- 渐近符号和先验分析
- 时间复杂度
- 马斯特定理
- DAA - 空间复杂性
- 分而治之
- DAA-分而治之
- DAA - 最大最小问题
- DAA-归并排序
- DAA-二分查找
- 施特拉森矩阵乘法
- 唐叶算法
- 河内塔
- 贪心算法
- DAA-贪婪法
- 旅行商问题
- Prim 的最小生成树
- 克鲁斯卡尔的最小生成树
- Dijkstra 的最短路径算法
- 地图着色算法
- DAA-分数背包
- DAA - 带截止日期的作业排序
- DAA - 最佳合并模式
- 动态规划
- DAA-动态规划
- 矩阵链乘法
- 弗洛伊德·沃歇尔算法
- DAA - 0-1 背包
- 最长公共子序列
- 旅行商问题| 动态规划
- 随机算法
- 随机算法
- 随机快速排序
- 卡格的最低削减
- 费舍尔-耶茨洗牌
- 近似算法
- 近似算法
- 顶点覆盖问题
- 设置封面问题
- 旅行推销员近似算法
- 排序技巧
- DAA-快速排序
- DAA-冒泡排序
- DAA——插入排序
- DAA-选择排序
- DAA——希尔排序
- DAA-堆排序
- DAA——桶排序
- DAA——计数排序
- DAA - 基数排序
- 搜索技巧
- 搜索技术介绍
- DAA - 线性搜索
- DAA-二分查找
- DAA - 插值搜索
- DAA - 跳转搜索
- DAA - 指数搜索
- DAA - 斐波那契搜索
- DAA - 子列表搜索
- DAA-哈希表
- 图论
- DAA-最短路径
- DAA - 多级图
- 最优成本二叉搜索树
- 堆算法
- DAA-二叉堆
- DAA-插入法
- DAA-Heapify 方法
- DAA-提取方法
- 复杂性理论
- 确定性计算与非确定性计算
- DAA-最大派系
- DAA - 顶点覆盖
- DAA - P 级和 NP 级
- DAA-库克定理
- NP 硬课程和 NP 完全课程
- DAA - 爬山算法
- DAA 有用资源
- DAA - 快速指南
- DAA - 有用的资源
- DAA - 讨论
设计与分析 P 级和 NP 级
在计算机科学中,解决许多问题的目标是最大化或最小化某些值,而在其他问题中,我们试图找出是否存在解决方案。因此,问题可以分类如下 -
最优化问题
优化问题是那些目标是最大化或最小化某些值的问题。例如,
找出为给定图表着色所需的最少颜色数。
查找图中两个顶点之间的最短路径。
决策问题
有许多问题的答案是“是”或“否”。这些类型的问题称为决策问题。例如,
给定的图形是否只能用 4 种颜色着色。
在图中找到哈密顿环不是一个决策问题,而检查一个图是否是哈密顿循环是一个决策问题。
什么是语言?
每个决策问题只能有两个答案,是或否。因此,如果决策问题为特定输入提供“是”的答案,则该决策问题可能属于一种语言。语言是答案为“是”的输入的总和。前面几章讨论的大多数算法都是多项式时间算法。
对于输入大小n,如果算法的最坏情况时间复杂度为O(n k ),其中k是常数,则该算法是多项式时间算法。
矩阵链乘法、单源最短路径、全对最短路径、最小生成树等算法在多项式时间内运行。然而,存在许多问题,例如旅行推销员、最佳图着色、哈密顿循环、查找图中最长路径以及满足布尔公式,而尚无已知的多项式时间算法。这些问题属于一类有趣的问题,称为NP 完全问题,其状态未知。
在这种情况下,我们可以将问题分类如下 -
P级
P类由那些可以在多项式时间内解决的问题组成,即这些问题可以在最坏情况下在时间O(n k )内解决,其中k是常数。
这些问题称为易处理问题,而其他问题则称为棘手问题或超多项式问题。
形式上,如果存在多项式p(n)使得该算法可以在O(p(n))时间内解决大小为n的任何实例,则该算法是多项式时间算法。
对于大n来说,需要Ω(n 50 )时间来解决的问题本质上是棘手的。大多数已知的多项式时间算法在k值相当低的情况下运行时间为O(n k )。
考虑多项式时间算法类别的优点在于,所有合理的确定性单处理器计算模型都可以用最多一个多项式慢速模型相互模拟
NP级
NP 类由可在多项式时间内验证的问题组成。NP 是一类决策问题,借助一些额外信息,很容易检查所声称答案的正确性。因此,我们并不是在寻求一种找到解决方案的方法,而只是为了验证所谓的解决方案是否确实正确。
此类中的每个问题都可以使用穷举搜索在指数时间内解决。
P 与 NP
每个可以通过确定性多项式时间算法解决的决策问题也可以通过多项式时间非确定性算法解决。
P 中的所有问题都可以用多项式时间算法解决,而NP - P中的所有问题都很难解决。
尚不清楚是否P = NP。然而,许多已知的NP问题都具有这样的性质:如果它们属于P,那么就可以证明P=NP。
如果P ≠ NP,则 NP 中存在既不在 P 中也不在 NP 完全中的问题。
如果很容易找到问题的解决方案,则该问题属于P类。如果很容易检查可能非常繁琐的解决方案,则该问题属于NP 。