当前位置:文档之家› 算法复习题汇总

算法复习题汇总

1.什么是算法?算法必须满足的五个特性是什么?算法:一组有穷的规则,规定了解决某一特定类型问题的一系列运算。

(有限指令的集合,遵循它可以完成一个特定的任务).必须满足的五个特性是(遵循以下五条准则):1.有穷(限)性2.确定性3.可(能)行性4.输入(n≥0)5.输出(n≥1)2.对算法进行分析分哪两个阶段?各自完成什么任务(分别得到什么结果)?对一个算法要作出全面的分析可分成两个阶段进行,即:事前分析和事后测试。

事前分析求出该算法的一个时间界限函数;事后测试搜集此算法的执行时间和实际占用空间的统计资料。

3.证明:若f1(n)=O(g1(n))并且f2(n)= O(g2(n)),那么f1(n) +f2(n)=O(max{g1(n), g2(n)}证明:根据f1(n)=O(g1(n))可知,存在正常数C1,当n≥n0时,使得|f1(n)|≤C1|g1(n)|;同理,根据f2(n)= O(g2(n))可知,存在正常数C2,当n≥n0时,使得|f2(n)|≤C2|g2(n)|当n≥n0时,|f1(n)+f2(n)|≤|f1(n)|+|f2(n)|≤C1|g1(n)|+C2|g2(n)|≤C1|g k(n)|+C2|g k(n)|≤(C1+C2)|g k(n)|,其中g k(n)=max{g1(n),g2(n)},k={1,2}当n≥n0时,取C=(C1+C2),据定义命题得证。

4.如果f1(n)= Θ(g1(n))并且f2(n)= Θ(g2(n)),下列说法是否正确?试说明之。

(a) f1(n) +f2(n)= Θ(g1(n)+ g2(n))(b) f1(n) +f2(n)= Θ(min{g1(n), g2(n)})(c) f1(n) +f2(n)= Θ(max{g1(n), g2(n)})答:(a)和(c)均正确,(b)错误。

(a)正确可以根据定义直接证得。

(b)错误可举反例。

例:f1(n)= 2n,f2(n)=2 n2下面证明(c)正确性.根据上题已经证明f1(n)+f2(n)= O(max{g1(n),g2(n)}),下面只需证明f 1(n)+f2(n)= Ω(max{g1(n), g2(n)}),即存在正常数C,使得|f1(n)+f2(n)|≥C(max{g1(n), g2(n)})根据f1(n)= Θ(g1(n))并且f2(n)= Θ(g2(n)) 得到,当n≥n0时,存在正常数C1、C2、C3、C4C 1|g1(n)|≤|f1(n)|≤C3|g1(n)|C2|g2(n)|≤|f2(n)|≤C4|g2(n)|不妨设max{g1(n), g2(n)}= g1(n)由于|f1(n)+f2(n)|≥||f1(n)|-|f2(n)||≥|C1|g1(n)|-C3|g2(n)||=C|max{g1(n), g2(n)}|取C≥|C1-C3|的正常数,由定义得f 1(n)+f2(n) = Ω(max{g1(n), g2(n)})命题得证。

5.证明 |「log2n」|= O(n) 证明:对于任意的正整数n,|「log2n」|≤|log2(n+1)|≤|n+1|≤2|n|取n0=1,C=2,根据定义知命题成立。

6.证明 3n「log2n」= O(n2)证明:对于任意的正整数n,|3n「log2n」|≤|3n「log2n」|≤3|n2| 取n0=1,C=3,根据定义知命题成立。

7.用数学归纳法证明:当n≥1时,∑=+ =ninni12/)1(.证明:当n=1时,∑==nii11,n(n+1)/2=1,命题成立;假设n=k-1时,∑=+ =ninni12/)1(成立;(k≥2)当n=k时,∑=+ =ninni12/)1(=kkkini+-=∑=12/)1(=k(k+1)/2综上可知,命题成立。

8.在下列情况下求解递归关系式T(n)=()2(/2)()g nT n f n⎧⎨+⎩否则足够小n当①n=2k g(n)= O(1)和f(n)= O(n);②n=2k g(n)= O(1)和f(n)= O(1)。

解: T(n)=T(2k)=2 T(2k-1)+f(2k)=2(2 T(2k-2)+f(2k-1)) +f(2k)=22T(2k-2)+21 f(2k-1)+ f(2k)=……=2k T(1)+2k-1f(2)+2k-2f(22)+…+20f(2k ) =2k g(n)+ 2k-1f(2)+2k-2f(22)+…+20f(2k ) ①当g(n)= O (1)和f(n)= O (n)时,不妨设g(n)=a ,f(n)=bn ,a ,b 为正常数。

则T(n)=T(2k )= 2k a+ 2k-1*2b+2k-2*22b+…+20*2k b =2k a+kb2k=an+bnlog 2n= O (nlog 2n) ②当g(n)= O (1)和f(n)= O (1)时,不妨设g(n)=c ,f(n)=d ,c ,d 为正常数。

则 T(n)=T(2k )=c2k + 2k-1d+2k-2d+…+20d=c2k +d(2k -1)=(c+d)n-d= O (n)9.求解递推关系式:解:构造生成函数∑∞==++=12)()2()1()(k k x k h x h x h x H求解)(x H+--=-++=322)2(2)1(2)(2)2()1()(x h x h x xH x h x h x Hxxx x x x H x -=+++=-1)()21(32 )1(<x )1)(21()(x x xx H --=分解)(x H 成幂级数 令xBx A x H 211)(-+-=则A=-1 B=1))2()2(21()1(21111)(322 ++++++++-=-+--=∴x x x x x xx x H1)1(2)(1)1(+-==n h n h h∑∞=-=+-++-+-=122)12()12()12()12(k kk n n x x x x所以12)(-=∴n n h10.求解递推关系式:⎩⎨⎧+==-22111n nT T T解:22*3)22(22222)2(222111122221-=+++=++=++=+=------n n n n n n n T T T T T11.求解递推关系式:⎪⎩⎪⎨⎧>+===--)2(112121n F F F F F n n n解:以n F 为系数,构成生成函数)(x F++=-++=++=423123221221)()()(x F x F x F x x F x F x xF x F x F x F251251)251)(251(1)()()()(1(231232121)2+++-+=++-+-=--==+--+-+=--x B x A x x x x x xx F x x F F F x F F x F x F x x )511(21+-=A )511(21--=B +-+-=222)()((51)(x x x F βαβα其中251+=α 251-=βnn n n n n F F )251(51)(51+≈-=∞→βα12.分治法的三个步骤是什么?给出使用SPARKS 语言描述的分治策略抽象化控制。

答:分治法的三个步骤是: ① 分解 ②解决 ③合并 用SPARKS 语言描述的分治策略抽象化控制为:Procedure DANDC(p,q)Global n,A(1:n);integer m,p,q; If SMALL(p,q)Then return(G(p,q)) Else m ←DIVIDE(p,q)Return(COMBINE(DANDC(p,m), DANDC(m+1,q)))Endif End DANDC13.根据教材中所给出的二分检索策略,写一个二分检索的递归过程。

Procedure BINSRCH(A, low, high, x, j) integer mid if low ≤high then mid ←⎣⎦2/)(high low +if x=A(mid) then j ←mid; endifif x>A(mid) then BINSRCH(A, mid+1, high, x, j); endif if x<A(mid) then BINSRCH(A, low, mid-1, x, j); endifelse j ←0; endif end BINSRCH14.作一个“三分”检索算法。

它首先检查n/3处的元素是否等于某个x 的值,然后检查2n/3处的元素;这样,或者找到x ,或者把集合缩小到原来的1/3。

分析此算法在各种情况下的计算复杂度。

Procedure ThriSearch(A, x, n, j) integer low, high, p1, p2 low ←1; high ←n while low ≤high dop1←⎣⎦3/)2(high low + ; p2←⎣⎦3/)2(high low + case:x=A(p1): j ←p1; return :x=A(p2): j ←p2; return :x<A(p1): high ←p1-1 :x>A(p2): low ←p2+1:else: low ←p1+1; high ←p2-1end caserepeat j ←0 end ThriSearchT(n)= ⎩⎨⎧+)()3/()(n f n T n g 否则足够小ng(n)= O (1) f(n)= O (1)成功:O(1), O(log3(n)), O(log3(n))最好,平均,最坏失败:O(log3(n)), O(log3(n)), O(log3(n))最好,平均,最坏15.对于含有n个内部结点的二元树,证明E=I+2n,其中,E,I分别为外部和内部路径长度。

证明:数学归纳法①当n=1时,易知E=2,I=0,所以E=I+2n成立;②假设n≤k(k>0)时,E=I+2n成立;③则当n=k+1时,不妨假定找到某个内结点x为叶结点(根据二元扩展树的定义,一定存在这样的结点x,且设该结点的层数为h),将结点x及其左右子结点(外结点)从原树中摘除,生成新二元扩展树。

此时新二元扩展树内部结点为k个,则满足E k=I k+2k,考察原树的外部路径长度为E k+1= E k-(h-1)+2h,内部路径长度为Ik+1=Ik+(h-1),所以Ek+1= Ik+2k+h+1= Ik+1+2k+2=Ik+1+2(k+1),综合①②③知命题成立。

16.以比较为基础(基本操作)的分类算法最坏情况的时间下界是什么?答:)(nn logθ17对线性存储的有序表中元素的以比较为基础的检索算法最坏时间的下界是什么?简要说明理由。

相关主题