算法
什么是算法?解决一个问题需要执行的有限的、确定的、可行的指令。
什么是问题?
可计算问题?用计算机可以解决的问题。
不可计算问题,制造永动机、设计程序查杀所有计算机病毒等。
多项式时间可解问题
排序,2SAT,2顶点着色问题
六个基本的NP完全问题
SAT, 3SAT, 3DM, Vertex Covering, Hamilton cycle, Partition
算法设计策略
贪婪,分而治之,动态规划
多项式时间算法:在输入规模为x的情况下,算法能够在O(x^k) 时间(k为常数)内解决该问题。
伪多项式时间算法:算法的时间复杂度是输入数据大小的多项式时间表达,但却是输入数据长度(输入规模)的指数时间表达。
例如,背包问题的动态规划算法,素数判定算法。
如果一个NPC问题存在伪多项式时间算法,那么称其为Weakly NP-Complete。否则,称为Strongly NP-Complete.