算法复习题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 个,则满足 Ek=Ik+2k,考察原树的外部路径长度为 Ek+1= Ek-(h-1) +2h,内部路径长度为 Ik+1=Ik+(h-1),所以 Ek+1= Ik+2k+h+1= Ik+1+2k+2= Ik+1+2(k+1), 综合①②③知命题成立。
F1 1 11.求解递推关系式: F2 1 F F F (n 2) n 1 n2 n
解:以 Fn 为系数,构成生成函数 F ( x )
F ( x ) F1 x F2 x 2 xF ( x ) F1 x 2 F2 x 3 x 2 F ( x ) F1 x 3 F2 x 4 (1 x x 2 ) F ( x) F1 x ( F2 F1 ) x 2 ( F3 F2 F1 ) x 3 x F ( x) x 1 x x2 x (x 1 5 1 5 )( x ) 2 2 B x A 1 5 2 x B 1 5 2
i 1 i 1
n
n
综上可知,命题成立。 8.在下列情况下求解递归关系式
g ( n) T(n)= 2T (n / 2) f (n) n足够小 否则
当①n=2k ②n=2k
g(n)= O(1)和 f(n)= O(n); 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)
16.以比较为基础(基本操作)的分类算法最坏情况的时间下界是什么? 答:
(n log n)
17 对线性存储的有序表中元素的以比较为基础的检索算法最坏时间的下界是什 么?简要说明理由。 答:
log(n 1)
对线性存储的有序表中元素的以比较为基础的检索算法的执行过程都可以 用二元判定树来描述。该树的每个内结点表示一次元素比较,因此对检索的最 坏情况而言,该树最少含有 n 个不同的内结点。检索算法最坏时间不大于该树 中由根到一个叶子的最长路径长(树高)。对有 n 个结点的二元树其最小树高 为 log(n 1) ,所以对线性存储的有序表中元素的以比较为基础的检索算法最 坏时间的下界是 log(n 1) 。
A F ( x) 1
1 1 ( 1 ) 2 5 5
1 1 ( 1 ) 2 5
(( ) x ( 2 2 ) x 2 1 5 2
其中

1 5 2
Fn Fn
1 5
( n n )
n
1 1 5 n ( ) 2 5
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 DANDC
≤(C1+C2)|gk(n)|, 其中 gk(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)}),下面只需证明 f1(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、C4 C1|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|的正常数,由定义得 f1(n)+f2(n) = Ω(max{g1(n), g2(n)})
else
j←0;
endif
end BINSRCH
14.作一个“三分”检索算法。它首先检查 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 do p1← ( 2low high ) / 3 ; p2← (low 2high ) / 3 case :x=A(p1): :x=A(p2): :x<A(p1): :x>A(p2): :else: end case j←p1; j←p2; return return
high←p1-1 low←p2+1 low←p1+1; high←p2-1
repeat j←0 end ThriSearch
g ( n) T(n)= T (n / 3) f (n)
n足够小 否则
g(n)= O(1)
f(n)= O(1)
成功: O(1), 最好, 失败: O(log3(n)), 最好, O(log3(n)), O(log3(n)) 平均, 最坏 O(log3(n)), O(log3(n)) 平均, 最坏
H ( x)
x (1 2 x)(1 x)
分解 H ( x ) 成幂级数 令 H ( x)
A B 1 x 1 2x
则 A=-1
B=1
H ( x)
1 1 (1 x x 2 ) (1 2 x (2 x) 2 (2 x) 3 ) 1 x 1 2x
1.什么是算法?算法必须满足的五个特性是什么? 算法:一组有穷的规则,规定了解决某一特定类型问题的一系列运算。 (有限指令的集合,遵循它可以完成一个特定的任务). 必须满足的五个特性是(遵循以下五条准则): 1.有穷(限)性 2.确定性 3.可(能)行性 4.输入(n≥0) 5.输出(n≥1)
2.对算法进行分析分哪两个阶段?各自完成什么任务(分别得到什么结果)? 对一个算法要作出全面的分析可分成两个阶段进行,即:事前分析和事后 测试。 事前分析求出该算法的一个时间界限函数; 事后测试搜集此算法的执行时间和实际占用空间的统计资料。
=…… =2kT(1)+2k-1f(2)+2k-2f(22)+…+20f(2k) =2kg(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)= 2ka+ 2k-1*2b+2k-2*22b+…+20*2kb =2ka+kb2k =an+bnlog2n= O(nlog2n) ②当 g(n)= O(1)和 f(n)= O(1)时, 不妨设 g(n)=c,f(n)=d,c,d 为正常数。则 T(n)=T(2 )=c2 + 2 d+2 d+…+2 d=c2 +d(2 -1) =(c+d)n-d= O(n) 9.求解递推关系式:
(2 1) x (2 2 1) x 2 (2 n 1) x n (2 k 1) x k
k 1
所以 h( n) 2 n 1
T1 1 10.求解递推关系式: Tn 2Tn1 2
解:
Tn 2Tn 1 2 2(Tn 2 2) 2 2 2 Tn 2 2 2 2 2 n 1 T1 (2 n 1 2) 3 * 2 n 1 2
i 1 n
证明:当 n=1 时, i 1 ,n(n+1)/2=1,命题成立;
i 1
nFra Baidu bibliotek
假设 n=k-1 时, i n( n 1) / 2 成立;(k≥2)
i 1
n
当 n=k 时, i n( n 1) / 2 = i k ( k 1) / 2 k =k(k+1)/2
命题得证。
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 时, i n( n 1) / 2 .
13.根据教材中所给出的二分检索策略,写一个二分检索的递归过程。 Procedure BINSRCH(A, low, high, x, j) integer mid
if low≤high then mid← (low high ) / 2 if x=A(mid) then j←mid; endif if x>A(mid) then BINSRCH(A, mid+1, high, x, j); endif if x<A(mid) then BINSRCH(A, low, mid-1, x, j); endif
h (1) 1 h ( n ) 2 h ( n 1) 1
k k k-1 k-2 0 k k
解:构造生成函数
H ( x) h(1) x h(2) x 2 h(k ) x k
k 1
求解 H ( x )
H ( x) h(1) x h(2) x 2 2 xH ( x) 2h(1) x 2 2h(2) x 3 (1 2 x ) H ( x ) x x 2 x 3 x 1 x ( x 1)
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|gk(n)|+C2|gk(n)|
相关文档
最新文档