算法复杂性问题

算法复杂性问题

  • 算法复杂性概念
  • 多项式(时间)算法、多项式问题(P 问题)、P 类问题
  • NP 问题、NP 类问题
  • NP-Complete 问题(NPC 问题)
  • NP-Hard 问题(NPH 问题)
  • NPI 问题
  • 五类问题的关系


算法复杂性概念

在算法分析中,通常用初等运算(算术运算、比较和转移指令等)的步数表示一个算法在假设的计算机上执行时所需的时间,其中规定每做一次初等运算所需要的时间是一个单位时间。
一个算法所需要的运算步数与输入规模算法步骤有关。如果用 n 表示输入数据的规模,则算法对输入的数据有不同的运算,通常把其中最坏的情况(即最复杂的运算量)定义为该算法关于输入规模 n 的复杂性

多项式(时间)算法、多项式问题(P 问题)、P 类问题

对于一个问题 A,设其输入规模为 n;假设解决问题 A 的方法是一个算法 B,算法 B 的计算复杂性为 f(n);如果存在一个关于 n 的多项式函数 p(n),使得对于所有充分大的 n,都有 f(n)<=p(n),则称算法 B 是一个多项式界的算法,也称为多项式时间算法,或简称为好算法多项式算法。其中,问题 A 被称为多项式问题,也简称为 P 问题(Polynomial Problem),所有存在多项式时间算法的问题称为 P 类问题,P 类问题可以简单理解为“容易”的问题。
若在多项式函数 p(n) 中,多项式的最高次数为正整数 k,则可以将此多项式函数 p(n) 简记为 O(nk),或称算法 B 的时间复杂性为 O(nk)。

NP 问题、NP 类问题

与 P 类问题相对应的是 NP 类问题。一个问题如果不能在多项式时间内解决或者不确定能否在多项式时间内解决,但可以在多项式时间内验证一个解的正确性,则这个问题被称为 NP 问题(Non-Deterministic Polynomial Problems),所有的 NP 问题称为 NP 类问题
由此可以看出,P 类问题是 NP 类问题的一个子集

NP-Complete 问题(NPC 问题)

NP 类问题中仍有许多问题至今都没有找到多项式时间算法,而且几乎不可能存在多项式时间算法来解决这一问题,这些问题被称为NP-CompleteNP-完全NP-完备问题,简称为 NPC 问题
NP-complete 问题有如下特点:
1. 没有一个 NP-Complete 问题可以用任何已知的多项式时间算法解决;
2. 如果有一个 NP-Complete 问题存在多项式时间算法,则所有的 NP-Complete 问题都存在多项式时间算法。

NP-Hard 问题(NPH 问题)

NP-Hard 问题是指这样一类问题:所有的 NP 类问题都能在多项式时间内转化成这类问题中的某一个。简单地说,就是如果这类问题存在多项式时间算法,则所有的 NP 类问题也都存在多项式时间算法。NP-Hard 问题简称为 NPH 问题
NP-Hard 问题不一定是 NP 类问题,而 NP-Complete 问题既是 NP-Hard 问题又是 NP 类问题。
由于 NP-Hard 问题的转化性质,如果 NP-Complete 问题解决了,那么所有的 NP 类问题也就都解决了。

NPI 问题

还有一类问题被称作 NPI 问题,这类问题首先是 NP 类问题,但是它既不属于 P 类问题,也不属于 NP-Complete 问题。

五类问题的关系

P 类问题、NP 类问题、NP-Complete 问题、NP-Hard 问题和 NPI 问题五者之间的关系大致如下 Venn 图所示。
算法复杂性问题_第1张图片

你可能感兴趣的:(算法复杂性问题)