下面是在看《Data Structures and Algorithm Analysis in C++》一书时所记录的笔记,大部分为原书内容
NP的一个性质,所有NP中的任一问题都能够多项式地归约(也即是在多项式复杂度内映射)成NP完全问题。也就是说,只要有一个NP问题,其它所有的NP问题都可以归约到它,那么它就是NP完全问题,它可以作为NP中任何问题的子例程,且花费多项式的开销量。它也被称为NP问题中最难的问题。
间接证明:只要证明一个NP完全问题可以归约到某一个NP问题Pn,那么Pn也是NP完全的,这个证明是显而易见的。
第一个NP完全问题的证明——可满足性
所谓可满足性问题,就是把一个布尔表达式作为输入,并提问该表达式是否对各变量的某次赋值取结果为True。显然,可满足性问题是NP的,因为取定特定的变量,很容易计算一个布尔表达式的值并检查是否为True。1971年,Cook通过直接证明NP中所有问题都可以变成可满足性问题而证明了它是NP完全的,汗颜啊!至于他是怎么证明的,还是留给学数学的人去研究吧。