算法分析与设计
引论
(1)理解算法和程序的差别
(2)理解判断问题和优化问题这两类计算问题
1、理解指数增长的规模
2、理解渐进表达式
掌握渐进符号Ο、Θ、Ω的含义,能判断一个函数属于哪个渐近增长阶;
3、理解贪心算法的思想
掌握工作安排问题(Interval scheduling)的贪心算法;能对简单贪心算法进行证明;
4、理解分治算法的思想
掌握Master method(主方法)来求解递归关系式
5、理解动态规划算法的思想
对动态规划类型的问题能建立起基本的递归关系式,并能用从底至上的方法求解,在求解过程知道建立数据储存的表格、
理解背包问题动态规划算法的运行时间是伪多项式时间。
6、网络流
(1)了解并掌握网络最大流问题和最小割问题及算法,给出一个图能求出其对应的最大流或者最小割。
解题说明:要求体现增广链添加的过程。
7、归约与复杂度的NP问题
理解NP完备性理论
(1)理解什么是多项式归约(polynomial-time reduction)
(2)知道怎样从一个问题多项式归约到另一个问题,需要熟悉的归约包括:从点覆盖问题到独立集问题,从3-SAT问题到独立集问题等基本归约。
(3)要求掌握同一个问题的最优问题如何多项时间归约到该问题的判断问题(自身归约);
(4)熟悉NP和NPC的概念
(5)记住证明一个问题属于NPC的基本步骤
(6)能证明一个问题是NP-hard
8、近似算法
(1)理解什么是近似算法;
(2)熟悉load balancing 问题的近似算法;
(3)理解点覆盖问题的定价算法(Pricing method),证明该方法能得到一个2倍近似解;
(4)理解点覆盖问题的整数规划模型如何建立,理解松弛求解方法;
(5)要求会对一个图问题建立整数规划模型(以点覆盖问题为例)
引论
0.1 两个关键问题
(1)理解算法和程序的差别
算法,定义在一定资源(空间、运行时间等)限制下,解决问题的方法。
使用计算机解决问题的过程/方法;算法是有输入和输出的;一个问题可以有许多算法来解。
程序:计算机程序是某种编程语言中算法的实例或具体表示。
区别:1)程序是由电脑读取;
2)算法是由人类来设计
3)算法表示形式更多样,可以是伪码或者简单易懂的步骤表示。
(2)理解判断问题和优化问题这两类计算问题
简单说,判别问题就是0-1问题,优化问题是优化解的解法。
0.2 核心思想,研究算法就是对算法进行分类,逐一击破,常见的分类方式如下:
1)P:一个解可以在多项式时间内求解。
2)NP:一个解可以在多项式内被检验。
典型问题:
团问题(clique problem): 想象一张点和边组成的图,例如Facebook上用户为点,朋友关系为点之间的连边所组成的图。团(clique)是指节点全连接的子图。 人们也许会问:存在包含20个人的团吗?50个呢?100个呢ÿ