- 9
- 0
- 约2.08千字
- 约 5页
- 2017-03-05 发布于重庆
- 举报
《算法分析与设计》总题
总题
记得哪些算法复杂性的知识?用自己的话简述。
答:
算法复杂性分为时间复杂性和空间复杂性。在一般的应用中,着重考虑时间复杂性,。而时间复杂性一般只考虑最好、最坏和平均三种情况。最有价值的一般是考虑最坏情况的时间复杂性,因为它是一个算法运行时间的上界。所以,我们引进渐进性,用复杂性的阶描述算法的复杂性。
Ο上界符号、Ω下界符号、θ(例如 n(n-1)/2 = Θ(n2) ,C1g(n)≤ f(n) ≤ C2g(n )即可、Θ :上下界同阶)
算法的时间复杂性分析
1、如何根据算法的结构分析算法的时间复杂性?
例如选择基本运算步骤、依据算法的结构统计。
答:定义基本的运算,计算出执行了多少次,得到与n的函数F(n)
2、分析递归算法的方法,归方程方法和递归树。姐递归方程有迭代法(递推)法解递归方程,或套用公式,
3、常见算法的时间复杂性,例如快速排序、归并排序、折半查找、最小生成树,多段图。
答:
算法 时间复杂度 快速排序 O(nlogn) 归并排序 O(nlogn) 拆半查找 O(logn) 最小生成树 Prim算法:O(n^2);Kruskal算法:O(eloge) 多段图 O(n+m),n为节点,m为边数
学习了分治法、动态规划、贪心法、回溯法、分支限界的思考策略、基本原理后,你的收获是什么?是否改变了看问题的角度和思维方式?
分治法的基本步骤?学过哪几种分割子问题的方法,各有什么特点?分析时间复杂性的方法。
答:
分解阈值N0 = 1,且解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问
题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)
表示该分治法解规模为n的问题所需的计算时间,则有:T(n)= k T(n/m)+f(n)。
设计动态规划算法包含哪些关键步骤?动态规划方程的含义?对于给出的实例,如何自底向上求解?
答:
COST(3,6)=min{6+COST(4,9),5+COST(4,10)}=7
COST(3,7)=min{4+COST(4,9),3+COST(4,10)}=5
COST(3,8)=7
COST(2,2)=min{4十COST(3,6),2+COST(3,7),1+COST(3,8)}=7
COST(2,3)=9
COST(2,4)=18
COST(2,5)=15
COST(1,1)=min{9+COST(2,2),7+COST(2,3),3+COST(2,4),2+COST(2,5)}=16
于是由s到t的最小成本路径的成本为16。
贪心法的基本策略和算法的基本流程。问题:贪心法是不是一定有最优解?
答:
1)根据题意,选取一种量度标准。
2)按这种量度标准对这n个输入排序,
3)依次选择输入量加入部分解中。如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。
贪心法不是有最优解
深度优先和广度优先搜索的策略。
答:
(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。(3) 如果不能执行规则1和规则2,就完成了整个搜索过程1)访问下一个未来访问的邻接点,这个顶点必须是当前顶点的邻接点,标记它,并把它插入到队列中。(2) 如果因为已经没有未访问顶点而不能执行规则1时,那么从队列头取一个顶点,并使其成为当前顶点。(3) 如果因为队列为空而不能执行规则2,则搜索结束。
答:
搜索策略:
从根结点出发,以深度优先的方式搜索整个解空间。在当前的扩展结点处,
搜索向纵深方向移至一个新结点。这个新结点就成为活结点,并成为当前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为
死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或
解空间中已没有活结点时为止。
运用条件:
用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。
分支限界策略和回溯法的差别?对于给定的实例如何设计搜索策略?
答:
求解目标不同。回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解或最优解。
搜索方式不同。回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗
原创力文档

文档评论(0)