一. 简答题的基本内容(30分)
记号O、W、 的意义;
分治法的基本步骤;
1、将原问题分解成k个规模较小的子问题,这些子问题相互独立且与原问题的形式相同。
2、递归地求解这些子问题,当问题足够小时直接求解。
3、把子问题的解进行合并。
动态规划算法的两个基本要素;
1、具有最优子结构
2、子问题重叠
设计动态规划算法的步骤;
1、定义子问题
2、写出递归表达式
3、决定子问题的求解次序
4、根据计算最优值时得到的信息,构造最优解。
分治法与动态规划两种算法策略的异同点;
分治法与动态规划的相同点:
分治法与动态规划,二者要求原问题具有最有子结构,都是将问题分而治之分解成若干个规模较小的子问题;
不同点:
动态规划是将原问题分解为多个子问题,通过计算出子问题的结果构造一个最优解。动态规划通过迭代法自底向上求解,动态规划将分解后的子问题理解为相互间有联系,有重叠的部分;
分治法是将原问题分解为多个子问题,利用递归对各个子问题独立求解,最后利用各子问题的解进行合并形成原问题的解。分治法将分解后的子问题看成是相互独立的。
贪心法的两个基本要素;
1、贪心选择性质,所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心算法所做的贪心选择可以依赖于以往所做出的选择,但决不依赖将来所做的选择,也不依赖于子问题的解。正是由于这种差别,动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式做出相继的贪心选择,每做一次贪心选择就将所求问题简化为规模更小的子问题。
2、最优子结构性质
贪心法的算法正确性证明的基本策略;
1、贪心算法领先:每一步都比其他算法好,从而能得到一个最优解。
2、交换论证(Exchange Argument):该方法的主要的思想也就是先假设存在一个最优的算法和我们的贪心算法最接近,然后通过交换两个算法里的一个步骤(或元素),得到一个新的最优的算法,同时这个算法比前一个最优算法更接近于我们的贪心算法,从而得到矛盾,原命题成立。
3、结构论证(structural):发现一个所有解都具有的界限,然后证明算法总是能达到这个界限。
贪心法与动态规划两种算法策略的异同点;
相同点:
动态规划和贪心算法都是一种递推算法 均用局部最优解来推导全局最优解
不同点:
动态规划是将原问题分解为多个子问题,通过计算出子问题的结果构造一个最优解。动态规划通常通过迭代法自底向上求解,动态规划将分解后的子问题理解为相互间有联系,有重叠的部分。
贪心算法依赖于当前已经做出的所有选择,采用自顶向下(每一步根据策略得到当前一个最优解,保证每一步都是选择当前最优的)的解决方法。贪心算法所做的贪心选择可以依赖于以往所做出的选择,但决不依赖将来所做的选择,也不依赖于子问题的解。
在对图的深度优先搜索过程中,可将顶点的状态区为分哪三种类型、将有向图中的边区分为哪四种类型;
顶点状态:白色(未被发现的顶点)、灰色(已经发现,但还未搜索完成)、黑色(已经完成搜索的顶点)
有向图边的类型:树边、回边、前向边、横跨边
如果有向带权图中存在边的权值为负的情形,如何判断图中是否存在负环;
Bellman-Ford算法在|V|-1次迭代之后求得从源点到其他顶点的最多|V|-1条边的最短路径,在|V|-1次迭代之后再执行一次迭代过程,如果某个顶点的dist值减少了,说明图中存在环。
最大流、最小割的概念;
最大流最小割定理的内容及其证明方法;
给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow).
1. 网络流的割:是网络中顶点的一个划分,把所有顶点划分成两个顶点集合S和T,其中源点s属于S,汇点t属于T,记作CUT(S,T)。
2. 割的割边:如果一条弧的两个顶点一个属于顶点集S一个属于顶点集T,该弧为割CUT(S,T)的一条割边。
3. 从S指向T的割边是正向割边;
从T指向S的割边是逆向割边。
4. 割的容量:所有正向割边的容量和,不同割的容量不同。
6. 定理一:如果f是网络中的一个流(不必须是最大流),CUT(S,T)是任意一个割,那么f的值等于该割中的正向割边的流量和与逆向割边的流量和之差。
6.1. 推论1:如果f是网络中的一个流,CUT(S,T)是一个割,那么f的值不超过割CUT(S,T)的容量。
6.2. 推论2:网络中的最大流不超过任何割的容量。
7. 定理二:在任何网络中,如果f是一个流,CUT(S,T)是一个割,且f的值等于该割的容量,那么f是一个最大流,CUT(S,T)是一个最小割(容量最小的割)。
8. 定理三:最大流最小割定理:在任何网络中,最大流的值等于最小割的容量。
“多项式归约(reduction)”的概念与用途;
P 问题、NP问题、NP完全问题、NP困难问题(NP-hard problem)的概念;
NP完全问题的实际证明方法;
常见的NP完全问题
回溯法、分支限界等搜索算法的基本思想
二. 应用题(40分)
多段图上的最短路径动态规划推导
图的深度优先搜索算法的扩展及应用
强连通分量的划分算法
Bellman-Ford算法的基本思想与过程
最大流最小割问题的求解算法Ford-Fulkerson(增广路径算法)过程及应用,如二部图匹配、边不交路径问题、项目选择问题等
递归方程的求解方法
三.算法设计题(30分)
分治法:如统计逆序对、中位数查找、主元素查找问题等
贪心法:区间调度问题、区间划分问题等
动态规划:最长递增子序列问题、编辑距离问题、矩阵连乘问题、背包问题等
图算法:最短路径问题、传递闭包和Floyd算法等