参考答案
一、名词解释:
1.算法:算法是指解决问题的一种方法或一个过程。算法是若干指令的有穷序列,满足性质:( 1)输
入:有零个或多个外部量作为算法的输入;(2)输出:算法产生至少一个量作为输出;(3)确定性:
组成算法的每条指令清晰、无歧义;(4)有限性:算法中每条指令的执行次数有限,执行每条指令
的时间也有限。
2.程序:程序是算法用某种程序设计语言的具体实现。
3.递归函数:用函数自身给出定义的函数称为递归函数。
4.子问题的重叠性质:递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计
算多次,这种性质称为子问题的重叠性质。
5.队列式分支限界法:队列式(FIFO)分支限界法是将活结点表组织成一个队列,并按照队列的先进先出
(FIFO)原则选取下一个结点为扩展结点。
6.多机调度问题:多机调度问题要求给出一种作业调度方案,使所给的 n 个作业在尽可能短的时间内由
m 台机器加工处理完成。同时约定每个作业均可在任何一台机器上加工处理,但未完工前不允许中断
处理。作业不能拆分成更小的子作业。
7.最小生成树:G=(V,E)是无向连通带权图,G 的子图称为 G 的生成树,生成树上各边权的总和称为该
生成树的耗费,在 G 的所有生成树中,耗费最小的生成树称为 G 的最小生成树。
二、简答题:
1.备忘录方法和动态规划算法相比有何异同?简述之。
备忘录方法是动态规划算法的变形。与动态规划算法一样,备忘录方法用表格保存已解决的子问题的
答案,在下次需要解此问题时,只要简单地查看该子问题的解答,而不必重新计算。
备忘录方法与动态规划算法不同的是,备忘录方法的递归方式是自顶向下的,而动态规划算法则是自
底向上递归的。因此,备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法
为每个解过的子问题建立了备忘录以备需要时查看,避免了相同的子问题的重复求解,而直接递归方
法没有此功能。
2.简述回溯法解题的主要步骤。
回溯法解题的主要步骤包括:
1)针对所给问题,定义问题的解空间;
2)确定易于搜索的解空间结构;
3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
3.简述动态规划算法求解的基本要素。
动态规划算法求解的基本要素包括:
1)最优子结构是问题能用动态规划算法求解的前提;
2)动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问
题时,只是简单地用常数时间查看一下结果,即重叠子问题。
4.简述回溯法的基本思想。
回溯法的基本做法是搜索,在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算
法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结
点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。
将递归算法转化为非递归算法的方法主要有:
1)采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只
不过人工做了本来由编译器做的事情,优化效果不明显。
2)用递推来实现递归函数。
3)通过 Cooper 变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。
后两种方法在时空复杂度上均有较大改善,但其适用范围有限。
6.简要分析分支限界法与回溯法的异同。