目录
一、简答题 * 30’
记号O、Ω、θ的意义
分治法的基本步骤
动态规划算法的两个基本要素
设计动态规划算法的步骤
分治法和动态规划算法的异同点
贪心法的两个基本要素
贪心法的算法正确性证明的基本策略
贪心算法与动态规划的异同点
在对图的深度优先搜索过程中,可将顶点的状态区分为哪三种,将有向图中的边分为那四种类型?
如果有向带权图中存在边的权值为负的情形,如何判断图中是否存在负环
最大流、最小割的概念
最大流最小割定理及其证明
带需求和下界的流通问题
多项式规约(reduction)的概念和用途
P问题、NP问题、NPC问题、NPH问题的概念
NP完全问题的实际证明方法
常见的NP完全问题
Hill_climbing和best_first等搜索算法的基本思想
二、应用题 * 40’
多段图上的最短路径动态规划推到
图的深度优先搜索算法的扩展和应用
强连通分量的划分算法
图的传递闭包算法Warshall的基本思想和过程
Bellman_Ford算法的基本思想和过程
最大流最小割问题的求解算法Ford_Fulkerson(增广路径算法)
最大流最小算法的应用,如二部图匹配、边不交路径问题、项目选择问题
递归方程的求解
三、算法设计题 * 30’
分治法:统计逆序对、中位数查找、主元素查找
贪心法:Dijkstra算法、区间调度问题、区间划分问题
动态规划问题:最长递增子序列、编辑距离问题、矩阵连乘问题、背包问题、树的最小独立集等
图算法:深度优先搜索、最短路径问题等
O:时间复杂度函数的上界
Ω:时间复杂度函数的下界
θ:时间复杂度函数的精确且紧致的界
一个完整Bellman_Ford算法找出单源最短路径,再将所有边update一遍,看dist[]有没有变小。若dist[]变小,则存在负环。
|
|
process update( edge(u,v) )
if dist[v] > dist[u]+l(u,v)
dist[v] = dist[u]+l(u,v)
给定两个问题A、B,我们称问题A可多项式规约成问题B,当其满足以下条件:
存在一个函数f,f可在多项式时间内将问题A的输入转化成问题B的输入
A(x)=Yes 等价于 B(f(x))=Yes
记作A \< B,解决问题B至少同解决问题A一样困难
P问题:能在多项式时间内解决的决策问题。 如图搜索、最短路径、最小生成树
NP问题:多项式时间内能验证的问题。如汉密尔顿问题、Hamilton回路
NPC问题(NP完全问题):目前不能用多项式时间解决的问题,但是还不能证明这个问题不能在多项式时间内解决。
NPH问题(NP困难问题):满足NP的第二条,但不一定满足第一条
爬山算法是启发式搜索的一种,意图避免遍历全部元素。像爬山一样,想要到最高峰,就先登眼前的最高小山峰。采用了类似贪心的局部择优策略。
- Best\_First搜索算法
最佳优先算法在深度优先的基础上增加了估价函数。Best_First Search = DFS + BFS
Best_First Search算法描述:
1. N表示已排序的结点表(有小到大
2. 若N空,则结束。(初始时,N中只有根结点)
3. 取N的首元素n,并在N中删除n。若n为目标元素,则停止;否则,转到步骤4
4. 将n的后继结点加入N中,记作N',对N'排序,转到步骤1
- BFS(广度优先搜索)
算法描述:
1. 根节点入**队列**Q
2. 队首元素是否为目标元素,若是,停止;否则,转到步骤3
3. 队首元素出队列,将其后继结点入队列
4. 若Q空,结束;否则,转到步骤2
BFS伪代码:
BFS(G,s)
for all u in V
dist[u] = INF
dist(s) = 0
Q = [s] // queue containing just s
while Q is not empty
u = DeQueue(Q)
for all edges(u,v) in E
if dist(v) = INF
EnQueue(Q,v)
dist(v) = dist(u) + 1
- DFS(深度优先搜索)
算法描述
1. 根节点入**栈**S
2. 栈顶元素是否为目标元素,若是,停止;否则,转到步骤3
3. 栈顶元素出队列,将其后继结点入栈
4. 若S空,结束;否则,转到步骤2
DFS伪代码:
DFS(s)
for each u in V
color[u] = white
clock = 1
for each u in V
if color[u] = white
then explore(G,u)
explore(G,u)
color[u] = gray
pre[u] = clock
clock = clock + 1
for each (u,v) in E
if color[v] = white
then explore(G,v)
color[u] = black
post[u] = clock
clock = clock + 1
中位数查找
|
|
主元素查找
Dijkstra算法
区间调度(递归)
|
|
区间调度(迭代)
|
|
最长递增子序列
|
|
矩阵连乘
|
|
编辑距离
|
|
背包问题
|
|