华南师范大学陈卫东算法设计与分析研究生考试复习资料

  最近要考试搜索了一下,发现网上并没有该复习资料。本来打算直接CSDN上传文件算了,结果设置免费想要下载还是要做任务,给我整无语了,这一点都不开源,因此把这份资料放在GitHub上供大家自由获取。
  里面的PDF是我自己整理的,自认为够用,但可能备考时间匆忙有些题目并不能总结太好,毕竟考完试就不想努力了,你懂得。这次考试并没有完全出原题,但是理解这些题目如何推导能够有效应对,因此建议不要完全背答案,也背不了。


GitHub地址: Algorithm_Course
百度网盘: 链接地址 提取码:qqss


为了方便大家搜索引擎搜索以及预览,将题目简略版放在下面:

一、算法分析基础知识

  1. 设函数 f ( n ) = n 10 f(n)= n^{10} f(n)=n10 g ( n ) = 2 n g(n)= 2^n g(n)=2n,则 f(n)和 g(n)有如下关系( )。
    A. f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) B. f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) C. f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)) D. 以上都不对

  2. 某递归算法的时间复杂度 T(n)满足递归方程: T ( n ) = 2 T ( n / 2 ) + b n ( n ≥ 2 ) T(n)=2T(n/2)+bn(n\ge2) T(n)=2T(n/2)+bnn2 T ( 1 ) = a T(1)=a T(1)=a,其中 n = 2 k , a , b , k n=2^k, a, b, k n=2k,a,b,k 均为正整数。T(n)可用 Θ \Theta Θ表示为( )。
    A. Θ ( n 2 ) \Theta(n^2) Θ(n2) B. Θ ( n l o g n ) \Theta(nlogn) Θ(nlogn) C. Θ ( n l o g 2 n ) \Theta(nlog^2n) Θ(nlog2n) D. Θ ( n 2 l o g n ) \Theta(n^2logn) Θ(n2logn)

  3. 快速排序的最坏情况时间复杂度是多少?什么情况下会出现最坏情况运行时间?使用快
    速排序时可采用哪些方法尽量避免出现最坏情况运行时间?

  4. 分析下列冒泡排序的时间复杂度。
    算法 RECBUBBLESORT
    输入: n 个元素的数组 A[1…n]。
    输出: 按照非降序排列的数组 A[1…n]。
    1. s o r t e d ← f a l s e 2. s o r t ( n ) 过 程 s o r t ( i ) / / 对 A [ 1 … i ] 排 序 1. i f i ≥ 2 a n d n o t s o r t e d t h e n 3. f o r j ← 1 t o i − 1 4. i f A [ j ] > A [ j + 1 ] t h e n 5. 交 换 A [ j ] 与 A [ j + 1 ] 6. s o r t e d ← f a l s e 7. e n d i f 8. e n d f o r 9. s o r t ( i − 1 ) / / 递 归 对 A [ 1 … i − 1 ] 排 序 10. e n d i f 1.sorted\gets false\\ 2.sort(n)\\ 过程 sort(i) //对 A[1…i]排序\\ 1.if \quad i \ge 2 \quad and not sorted then\\ 3.for \quad j\gets1\quad to\quad i-1\\ 4.if \quad A[j]>A[j+1]\quad then\\ 5.交换 A[j]与 A[j+1]\\ 6.sorted \gets false\\ 7.end if\\ 8.end for\\ 9.sort(i-1) //递归对 A[1…i-1]排序\\ 10.end if 1.sortedfalse2.sort(n)sort(i)//A[1i]1.ifi2andnotsortedthen3.forj1toi14.ifA[j]>A[j+1]then5.A[j]A[j+1]6.sortedfalse7.endif8.endfor9.sort(i1)//A[1i1]10.endif

  5. 假设图 G=<V,E>用邻接矩阵表示,n=|V|,m=|E|。分析图的深度优先遍历算法 DFS 的时间
    复杂度。
    (1)算法 DFS 中有哪些基本操作?各基本操作耗费时间是多少?
    (2)请根据基本操作的耗费时间,分析得出算法 DFS 的时间复杂度。

二、算法设计基本方法

  1. 假定 n = 2 k n=2^k n=2k(k 为正整数)。设计一个分治算法在数组 A[1…n]中找最大元素和第二大元素,
    要求比较次数为 3n/2-2。
    (1)用文字简要描述递归形式分治算法的基本思路(不用写出完整代码)。
    (2)请给出算法中比较次数 T(n)满足的递归方程,并证明 T(n)=3n/2-2。

  2. 考虑在 n 个互不相同元素的数组 A[1…n]中找出所有前 t 个最小元素的问题(这 t 个元素
    不要求由小到大有序)。这里 t 不是一个常量,而是作为输入数据的一部分。我们可以很容
    易用排序算法解决此问题并返回 A[1…t],然而耗费时间为 O(nlogn)。请设计一个时间复杂
    度较低的算法求解该问题。
    (注意,你可以调用选择第 k 小元素算法 SELECT(A, low, high, k)求解,该算法用于在数组
    元素 A[low…high]中返回第 k 小元素,其时间复杂度为 Θ ( n ) \Theta (n) Θ(n)。但不能直接使用 t 次调用算法
    SELECT 来解决问题,因为这将耗费时间 Θ ( t n ) = O ( n 2 ) \Theta(tn)= O(n^2) Θ(tn)=O(n2) (这里 t 不是常量),不符合题意。)

  3. (1)简述 Dijkstra 算法的基本思路。
    (2) 在图 1 中应用 Dijkstra 算法能求出从 s 到其它所有结点的最短路径吗?为什么?
    (3)考虑用 Dijkstra 算法求出图 2 中从 s 到其它所有结点的最短路径。请给出主要计算过
    程及计算结果。

  4. 给定带权无向图 G,如果 G 是连通图,则 G 的最小成本生成森林就是 G 的最小生成树;
    如果 G 不连通,则 G 的各个连通分支的最小生成树组成图 G 的最小成本生成森林。
    (1)最小生成树算法有 Prim 算法和 Kruskal 算法。这两个算法中哪一个算法更适合求
    解上述最小成本生成森林? 简述原因。
    (2)带权无向图 G 的图形如下,试求解其最小成本生成森林(画出最小成本生成森林
    即可)。

  5. 【最大间隔聚类问题】给定非负带权无向图 G=<V,E>及正整数 k ( 1 ≤ k ≤ ∣ V ∣ ) k(1\le k\le|V|) k(1kV),试将 G 划分为
    k 个非空子图 G 1 , G 2 , … , G k G_1,G_2,…,G_k G1,G2,,Gk 使得任意两子图的最小间距最大。这里两子图的间距是指跨于这两
    子图之间的最小权的边的权值。

  6. 无向图 G=<V,E>是二部图是指该图的点集 V 能划分成非空的两部分 V 1 V_1 V1 V 2 V_2 V2使得图 G 中
    任何边的两个端点分别属于 V 1 V_1 V1 V 2 V_2 V2。考虑用图的深度优先遍历方法设计一个算法判别无向
    图 G=<V,E>是否是二部图。要求:
    (1)用文字简要描述算法的基本思路(不用写代码)。
    (2)给出算法正确性的证明。
    (3)如果要求利用宽度优先遍历图的方法设计算法判别图 G=<V,E>是否是二部图呢?

  7. 使用动态规划法求解下列 0-1 背包问题实例:物品个数 n=4,重量 W={2,3,4,5},利润
    P={3,4,5,7},背包承重量 C=9。
    (1)给出递推计算的公式。
    (2)用表格或图展示出主要计算过程,并指出问题的解。

  8. 【马周游问题】在 8X8 棋盘上马按照跳日字的规则能从一格跳到另一格。任给马在棋盘
    上的起始位置,请问是否存在一种马能跳到棋盘中每个格子恰好一次且最后回到起始位置的
    周游棋步?如果存在,请找出一种这样的周游棋步。
    (1) 用图论知识说明:若马从棋盘正中心位置出发能有周游棋步,则马从棋盘的任何位置出发都有周游棋步。
    (2)考虑用回溯法求解马周游问题。请给出解向量形式和搜索树类型,描述剪枝操作。
    (3)可采取哪些措施来提高回溯算法的求解效率?

  9. 工厂因为开展新业务打算明年年初新购置某台设备,并要做好后续 5 年该设备的更新计划,
    决定每年是重新购置该设备还是继续维护现有设备.已经预测今后 5 年该设备的购置费和维
    护费分别如下表 1 和表 2 所示(购置价格和维护费用的单位: 万元).请设置一个该设备的 5 年
    更新方案,使得在此期间该设备的购置费和维护费的总和最小。

三、NP 完全性理论基本概念

  1. 如何理解求解问题的具体算法的复杂度、问题的复杂度?

  2. 说明语言类 P、NP、NP-complete、NP-hard 的含义。假定 P≠NP,画图表示其包含关系。

  3. 什么是问题间的归约?(多项式时间)归约在建立问题的复杂度方面有何作用?

  4. 证明一个问题是 NP 难度有哪些常用方法?

  5. 如何对付 NP 难度问题?

  6. 指出下面关于 P≠NP 错误证明的错处,并说明你认为它是错误的理由。
    证明:考虑 SAT 的一个算法:“在输入 ϕ \phi ϕ上,尝试变量的所有可能的赋值,若有满足 ϕ \phi ϕ
    的就接受”。该算法显然需要指数时间。所以 SAT 有指数时间复杂度,因此 SAT 不属于 P。
    因为 SAT 属于 NP,所以,P 不等于 NP。

  7. n 皇后问题可以归约为在一个 n 2 n^2 n2 点无向图中找一个 n 点独立集的问题(如何归约?)。
    既然图的独立集问题是 NP 难度的,能否由该归约得出 n 皇后问题是 NP 难度的?请简
    要说明原因。

四、NP 完全性理论的基本方法(归约技术)

  1. 图 G =<V,E,W>中给定起点和终点 s , t ∈ V s,t\in V s,tV 和中间节点集 D ⊂ V D\subset V DV,要求找出从 s 到 t 且中间须经过 D 中每节点最少 1 次的最短径路。如何求解?

  2. 证明: P a r t i t i o n ≤ S u b s e t S u m Partition \le SubsetSum PartitionSubsetSum S u b s e t S u m ≤ P a r t i t i o n SubsetSum \le Partition SubsetSumPartition , 即 P a r t i t i o n ≤ S u b s e t S u m Partition \le SubsetSum PartitionSubsetSum

  3. 试根据Partition、SubsetSum的NP完全性,证明负载均衡问题是NP完全的。

  4. 证明: 点覆盖问题 ≤ \le Roman-Subset 问题
    【点覆盖问题】给定无向图 G=<V,E>,求最小规模点子集 S ⊆ V S\subseteq V SV 满足 S 能覆盖 E 中所有边。
    【Roman-Subset 问题】给定一个有向图 G=<V,E>,求最小规模点子集 S ⊆ V S\subseteq V SV 满足 G 中任何回路上都至少有一点在 S 中。

  5. 证明: (有向图)Hamilton圈问题 ≤ \le Hamilton路问题,且Hamilton路问题 ≤ \le Hamilton圈问
    题, 即Hamilton路问题 ≡ \equiv Hamilton圈问题。

五、NP-hard 问题的算法设计

  1. 最大割问题的简单近似算法
    Step 1. 初始化:将图 G=<V,E>点集 V 分为两部 V1=V 和 V2= ϕ \phi ϕ,并置当前割 Cut= ϕ \phi ϕ
    Step 2. 重复下列操作直到 Cut 不能改进为止:将某点从一部移动到另一部来改进 Cut。
    试证该算法是 2-近似算法。

  2. 【负载平衡问题】设有n个独立的作业 J 1 , J 2 , … , J n J_1, J_2,…, J_n J1,J2,,Jn 需要处理,其中作业 J i J_i Ji需要 t i t_i ti个机时
    (i=1,2,…,n)。现只有p台完全相同的机器 M 1 , M 2 , … , M p M_1, M_2,…, M_p M1,M2,,Mp可以同时使用,任何一项作业可在任一台机器上加工。现在需要对这些作业进行安排使得所有机器的负载尽可能的均衡。该问题是NP难度的问题。下面是求解负载平衡问题的一个简单的贪心算法:
    试证明该算法是3/2-近似算法。

  3. 【两机调度问题(两机负载均衡问题)】设有 n 个独立的任务 J 1 , J 2 , … , J n J_1, J_2,…, J_n J1,J2,,Jn ,需要尽快加工
    完成。现只有 2 台完全相同的机器可以同时使用,当然,任何一个任务可在任一台机器上加
    工。问如何调度才能使得整个加工工作及早结束?设任务 J i J_i Ji 需要 t i t_i ti 个机时(i=1,2,…,n)。该
    问题是 NP 难的,请通过设计该问题的一个多项式近似方案来证明它属于 PTAS。

  4. 【广告策略问题】给定图 G=<V, E>,路径集 P 1 , P 2 , … , P t P_1, P_2,…, P_t P1,P2,,Pt,试找出图中一个最少元素的点集
    S,满足在 S 中所有点上放置广告能使得每一条路径 P i ( 1 ≤ i ≤ t ) P_i(1\le i \le t) Pi(1it) 上至少有一个结点放置了广告。试给出该问题的一个近似算法。

  5. (1) 证明:一个图 G=<V, E>是二着色当且仅当该图是二部图。
    (2)如何判断一个图 G=<V, E>是否为二部图?
    (3)现有一算法A能枚举图的所有极大独立集,试由该算法设计求解图3着色问题的算法。

  6. 【影响最大化问题】给定有向图 G=<V, E>,其中每个结点 v ∈ V v\in V vV 有一个阈值 w ( v ) ∈ [ 0 , 1 ] w(v)\in [0,1] w(v)[0,1],以及参数 k ( 1 ≤ k ≤ ∣ V ∣ ) k(1\le k \le |V|) k(1kV),试在图中找出 k 个点的子集 S 使得 S 作为信息源能使信息在图中得到最大范围的传播。试给出求解该问题的一个启发式算法。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值