这篇博客主要是解释一下我们平时在算法上用到的复杂度和NP还有P的联系,以及为什么第一反应是P的限制整数分解问题竟然只能“神奇的”确定是NP问题,而不一定是P,以及由此展开的对其它问题的一些分析。
基本概念
知乎上对P和NP有非常详尽的解释,从图灵机展开的很多概念,我就不在此复制粘帖了。只需要有一个大的概念:问题主要分为NP和NP-hard;对于NP问题,有一部分问题是P的,有一部分是不确定P还是NP-Complete,最后一部分是和NP-hard的交际,叫做NP-Complete问题,而NP-Complete有一个特性,是彼此相互polynomial reducable.
首先是polynomial algorithm(多项式算法)定义:
An algorithm is said to solve a problem in polynomial time if its running time is polynomially bounded by the encoding size of the input.
The running time is measured as the number of arithmetic operations carried out by the algorithm. It is a function f defined on the set of instances.
The encoding size of the input is a function g defined on s.
总结一下,就是在theory中,多项式算法的定义是算法运算数目(也就是我们平时在ACM算法中最常用到的时间复杂度)由输入数据的大小bound住,那么这就是一个polynomial algorithm。
P问题定义:
A decision problem is in the complexity class P if there exists a polynomial algorithm to solve it.
NP问题定义
NP is the class of decision problems for which the ‘yes’-answer has a certificate that can be checked in polynomial time.
P和NP问题一起来讲。首先二者都是决策问题:比如是否存在一个解
限制整数分解(bounded integer factorization)是P?
限制整数分解就是给定一个整数
如果按照以往算法竞赛的思路,最naive的算法也就遍历一遍
重新回到我们对于NP问题的定义。证明一个问题是NP有两种思路,1. certificate可以在polynomial内解决, 2. 能够想出一个polynomial的算法。我们两种都试试。
- polynomial certificate:假定给我们一个certificate,在这里就是一个数字
k ,我们要判断它是否小于n 以及能否被m 整除。所以运行的复杂度是O(1) (也就是定义中的running time),而certificate本身大小是O(lonn) 。因此running time被input size bound住,整数分解是NP问题。 - 存在polynomial algorithm?: 现在我们试图解一下这个问题。就用最naive的算法,遍历
[2,n] 。那么算法复杂度是n ,但是输入的大小呢?是O(logm+logn) (注意不是nlogm )。再特殊化,只考虑n≤m 情况,也就是说这种算法的running time不能被input size给bound住。因此此路不通。其他的算法,比如遍历条件变成[2,min(m−−√,n)] 并没有改变这个结论。(筛法的证明可以留给大家)
至少目前已知的整数分解算法,都还没有polynomial time solvable的算法,只不过有复杂度是
再深入想一想,为什么我们知道的那么多问题都是P的,尤其是算法竞赛,比如最短路问题(非负边)。因为输入的大小不一样。在整数分解中,我们只有一个输入;在限制的整数分解中,有两个输入。大小都是
其他NP问题
现在大部分NP问题都能划归到P或者NP-Complete问题。只有少数例外,比如
- Integer Factorization
- Graph Isomorphism
- Nash Equilibrium
这里我再证明一下异构图是NP问题。
异构图判定
问题描述:给定两个图
因为直接想solution,都是
这个问题的certificate是一组下标
1. 首先检查certificate是否是
2. 然后将第一张图按照certificate的mapping进行映射,确定映射后的
所以时间复杂度是
另外关于bound,