1.什么是算法?算法有哪些特征?
答:算法是求解问题的一系列计算步骤。算法具有有限性、确定性、可行性、输入性和输出性5个重要特征。
2.算法设计应满足的几个目标
答:算法设计应满足正确性、可使用性、可读性、健壮性和高效率与低存储量需求。
3.算法设计的基本步骤
答:算法设计的基本步骤是:
(1)分析求解问题
(2)选择数据结构和算法设计策略
(3)描述算法
(4)证明算法正确性
(5)算法分析
各步骤之间存在循环和反复过程。
4.什么是算法复杂性?它主要有哪两个方面构成?
答:算法复杂性是算法运行时所需要的计算机资源的量,它包括两个方面:时间复杂性(需要时间资源的量)和空间复杂性(需要空间资源的量) 。
5.分析算法复杂性的意义是什么?
算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。
6.f(n)=O(g(n))
答:f(n)=O(g(n))当且仅当存在正常量c和n0,使当n≥n0时,f(n)≤cg(n),即g(n)为f(n)的上界。
7.f(n)=W(g(n))
答:f(n)=W(g(n))当且仅当存在正常量c和n0,使当n≥n0时,f(n)≥cg(n),即g(n)为f(n)的下界。
8.f(n)=Q(g(n))
答:f(n)=Q(g(n))当且仅当存在正常量c1、c2和n0,使当n≥n0时,有c1g(n)≤f(n)≤c2g(n),即g(n)与f(n)的同阶。
9.算法的平均情况、最好情况、最坏情况,哪种情况的可操作性最好,最具有实际价值?
答:设一个算法的输入规模为n,Dn是所有输入的集合,任一输入I∈Dn,P(I)是I出现的概率,有 =1,T(I)是算法在输入I下所执行的基本语句次数,则该算法的平均执行时间为:A(n)=
算法的最好情况为:G(n)= ,是指算法在所有输入I下所执行基本语句的最少次数。
算法的最坏情况为:W(n)= ,是指算法在所有输入I下所执行基本语句的最大次数。
可操作性最好、最具有实际价值的是最坏情况下的时间复杂性。最坏情况时间复杂性是规模为n的所有输入中,基本运算执行次数最多的时间复杂性。
10.按照渐进阶从低到高的顺序排列以下表达式:
4n2 , logn, 3n , 20n, n2 / 3
又n!应该排在哪一位?
答:顺序: logn<n2/3<20n<4n2<3n ;n!应排在后一位。
11.证明: 10n2 + 4n + 2 = O(n2)
证明:设n0 = 5,则当n≥n0,f(n) = 10n2 + 4n + 2≤11n2,所以f(n) = O(n2)。
12.采用直接推导方法求解以下递归方程:
T(1)=1 当n=1
T(n)=T(n-1)+n 当n>1
解:
T(n)=T(n-1)+n
=[T(n-2)+n-1)]+n
=T(n-2)+n+(n-1)
=T(n-3)+n+(n-1)+(n-2)
…
=T(1)+n+(n-1)+…+2
=n+(n-1)+ +…+2+1
=n(n+1)/2
=O(n2)。
13.(1)假设某算法在输入规模为n时的计算时间为T(n)=3*2n。该算法在计算机A上完成输入规模为n时运行时间为t秒。计算机B的运行速度为计算机A的64倍,那么该算法在计算机B上t秒内能够完成的问题规模是多大?
(2)假设某算法在输入规模为n时的计算时间为T(n)=2n,该算法在计算机A上完成输入规模为n时运行时间为t秒。计算机B的运行速度为计算机A的64倍,那么该算法在计算机B上t秒内能够完成的问题规模是多大?
(3)假设某算法在输入规模为n时的计算时间为T(n)=8,该算法在计算机A上完成输入规模为n时运行时间为t秒。计算机B的运行速度为计算机A的64倍,那么该算法在计算机B上t秒内能够完成的问题规模是多大?
答:
(1)假设在计算机A上t秒内完成的基本运算的次数=3*2n
则在计算机B上t秒内完成的基本运算的次数=64*3*2n=26*3*2n=3*2(n+6)
所以该算法在计算机B上t秒内能够完成的问题规模为n+6。
(2)假设在计算机A上t秒内完成的基本运算的次数=n2
则在计算机B上t秒内完成的基本运算的次数=64* n2=82*n2=(8n)2
所以该算法在计算机B上t秒内能够完成的问题规模为8n
(3)由于T(n)是常数,因此算法可解任意规模的问题。
14.XYZ公司宣研制的微处理器运行速度为ABC公司同类产品的100倍。对于计算复杂性分别为n,n2,n3的各算法,若用ABC公司的计算机能在t时间内解输入规模为n的问题,那么用XYZ公司的计算机在t时间内分别能解输入规模为多大的问题?
答:
ABC公司的计算机能在t时间内解输入规模为n的问题,则XYZ公司的计算机在t时间内100n问题。
ABC公司的计算机能在t时间内解输入规模为n2的问题,则XYZ公司的计算机在t时间内100n2问题,所以,若ABC公司的计算机能在t时间内解输入规模为n的问题,则XYZ公司的计算机在t时间内10n问题。
ABC公司的计算机能在t时间内解输入规模为n3的问题,则XYZ公司的计算机在t时间内100n3问题,所以,若ABC公司的计算机能在t时间内解输入规模为n的问题,则XYZ公司的计算机在t时间内1001/3n=4.64n问题。
15.解决某问题有三种算法,复杂性分别为1000N,10N2,2N ,在一台机器上可处理问题的规模分别为S1,S2,S3。若机器速度提高到原来的10倍,问在同样时间内可处理问题的大小如何?答:
复杂性 原来处理问题规模 速度提高以后
1000N S1 10S1
10N2 S2 3.16S2
2N S3 S3+log10≈S3+3.32
16.问题P的算法复杂度为T(n)=n3(毫秒),现改善为T(n)=n2(毫秒)。问原来运行一小时的问题实例,现在要运行多少时间?
答:设实例的规模大小为n,
则 n3=3600*1000
n=153.3
∴ 现在需要时间t=153.32毫秒≈ 23.5秒
17.递归
答:在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。
18.第一数学归纳法原理
答:第一数学归纳法原理:若{P(1),P(2),P(3),P(4),…}是命题序列且满足以下两个性质,则所有命题均为真:
(1)P(1)为真。
(2)任何命题均可以从它的前一个命题推导得出。
19.第二数学归纳法原理
答:第二数学归纳法原理:若{P(1),P(2),P(3),P(4),…}是满足以下两个性质的命题序列,则对于其他自然数,该命题序列均为真:
(1)P(1)为真。
(2)任何命题均可以从它的前面所有命题推导得出。
20.穷举法的基本思想
答:穷举法的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试为止。
21.使用穷举法的几种情况
答:(1)搜索所有的解空间,(2)搜所有的路径,(3)直接计算,(4)模拟和仿真。
22.简述分治法的基本思想。
分治法的基本思想是:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
23.分治法所能解决的问题所具备的特征
答:分治法所能解决的问题一般具有以下几个特征:
(1)该问题的规模缩小到一定的程度就可以很容易地解决。
(2)该问题可以分解为若干个较小的相同问题。
(3)利用该问题分解出的子问题的解可以合并为该问题的解。
(4)该问题所分解的各个子问题是相互独立的,即子问题之间不包括公共子问题。
24.二路归并排序算法的基本思想是什么?
合并排序算法是用分治法的策略实现对n个元素进行排序的算法。基本思想是:将待排序元素分成大小大致相同的两个子集,按照这种方法一直进行下去,直到每个子集中只有一个元素,然后自低向上逐步合并排序,最终合并成有序集合。
25.二分搜索算法、快速排序算法、线性时间选择算法最坏情况下的时间复杂性各为多少?
答:二分搜索算法:最坏情况O(log2n)。
快速排序算法:最坏情况O(n2)。
线性时间选择算法:最坏情况O(n)。
26.贪心法的基本思想
答:贪心法的基本思想是在对问题求解时总是做出在当前来看是最好的选择,也就是说贪心法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优。
27.贪心法求解的问题应具有的性质
答:能够用贪心法求解的问题一般具有贪心选择性质和最优子结构性质。
28.贪心选择性质
答:贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优解的选择来达到。
29.最优子结构性质
答:一个问题的最优解包含其子问题的最优解,则称此问题具有最优子结构性质。
22.贪心法求解问题的基本过程。
答:贪心法求解问题的基本过程如下:
(1)建立数学模型来描述问题
(2)把求解的问题分成若干个子问题
(3)对每一子问题求解,得到子问题的局部最优解
(4)把子问题的局部最优解合成原来问题的一个解。
23.试比较贪心法与动态规划法。
答:贪心法:在当前状态下做出局部最优选择,然后求解此选择之后的子问题。贪心选择依赖于以往做出的选择,但不受将来所作的选择,即不依赖于子问题的解。
动态规划法:每步所作的选择依赖于相关子问题的解,只有在解出相关子问题以后,才能做出选择。
24.动态规划求解的问题应具有的性质
答:能采用动态规划求解的问题的一般要具有3个性质:(1)最优化原理,(2)无后效性,(3)有重叠子问题
25.无后效性
答:无后效性:即某阶段状态一旦确定,就不受以后决策的影响。
26.重叠子问题
答:即子问题之间不是独立的,一个子问题在下一阶段决策中可能被多次使用到。
27.动态规划设计的步骤
答:动态规划的设计都一般要经历以下几个步骤:(1)划分阶段,(2)确定状态和状态变量,(3)确定决策并写出状态转移方程,(4)寻找边界条件。
28.请简要阐述动态规划算法的本质。
答:动态规划的实质是分治思想和解决冗余,将问题分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题。
29.设计动态规划算法的主要步骤是什么?
答::
(1)找出最优解的性质,并刻划其结构特征。
(2)递归地定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值时得到的信息,构造最优解。
30.分治法与动态规划法的相同点和不同点是什么?
分治法与动态规划法的相同点是:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。两者的不同点是:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。而用分治法求解的问题,经分解得到的子问题往往是互相独立的。
31.什么是回溯法?
答:在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
32.请简要描述回溯法的实现过程。用回溯法求解0/1背包问题、TSP问题、N皇后问题时,其各自的解空间树各是什么形式?
答:实现过程:确定解空间的组织结构,然后从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为新的活结点,并成为扩展结点。否则如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)到最近的活结点处,并使该结点成为当前的扩展结点。回溯法按上述方式递归地在解空间中搜索,直到找到所要求的解或解空间中无活结点为止。
0/1背包:n+1层的子集树,TSP问题:(n-1)!个叶节点的排列树,N皇后问题:完全n叉树。
33.用回溯法解题的步骤
答:用回溯法解题的一般步骤如下:(1)针对所给问题,确定问题的解空间树,问题的解空间树应至少包含问题的一个(最优)解。(2)确定结点的扩展搜索规则。(3)以深度优先方式搜索解空间树,并在搜索过程中可以采用剪枝函数来避免无效搜索。
34.请简述分支限界法的算法思想。
答:分支限界法的算法思想是在问题的解空间树上以广度优先或最小耗费(最大效益)优先方式搜索问题的满足约束条件的一个解或最优解。
35.请简述分支限界法的搜索策略
答:搜索策略:在搜索解空间树时,每一个活结点只有一次机会成为扩展结点。扩展结点一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中按一定的策略取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
36.用分支限界法设计算法的步骤
(1)针对所给问题,定义问题的解空间(对解进行编码)
(2)确定易于搜索的解空间结构(按树或图组织解);
(3)以广度优先或以最小耗费(最大收益)优先的方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
37.队列式分枝限界法的步骤
答:队列式分枝限界法将活结点表组织成一个队列,并按照队列先进先出(FIFO)原则选取下一个结点为扩展结点。步骤如下:
①将根结点加入活结点队列。
②从活结点队中取出队头结点,作为当前扩展结点。
③对当前扩展结点,先从左到右地产生它的所有孩子结点,用约束条件检查,把所有满足约束条件的孩子结点加入活结点队列。
④重复步骤②和③,直到找到一个解或活结点队列为空为止。
38优先队列式分枝限界法的步骤
答:优先队列式分枝限界法的主要特点是将活结点组成一个优先队列,并选取优先级最高的活结点成为当前扩展结点。步骤如下:
①计算起始结点(根结点)的优先级并加入优先队列(与特定问题相关的信息的函数值决定优先级)。
②从优先队列中取出优先级最高的结点作为当前扩展结点,使搜索朝着解空间树上可能有最优解的分枝推进,以便尽快地找出一个最优解。
③对当前扩展结点,先从左到右地产生它的所有孩子结点,然后用约束条件检查,对所有满足约束条件的孩子结点计算优先级并加入优先队列。
④重复步骤②和③,直到找到一个解或优先队列为空为止。
39.请简述分支限界法的两种主要实现方法。
答:1)队列式FIFO分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
40.请指出回溯法与分支限界法的相同点与不同点。
答:相同点:1)两者在进行问题求解前,都需要完成解空间的定义和组织;2)都是通过在解空间树上搜索来寻找问题的解;
不同点:(1)求解目标不同;(2)搜索方式不同;(3)对扩展结点的扩展方式不同;(4)存储空间的要求不同。