算法导论答案

合集下载

算法导论15-16-答案.pdf

算法导论15-16-答案.pdf

j
j
w(i, j) = ∑ pl + ∑ ql
l =i
l =i −1
(5-5)
OPTIMAL-BST(p, q, n)
1 for i ← 1 to n + 1
2
do e[i, i-1] ←qi-1
3
w[i, i-1] ←qi-1
4 for l ← 1 to n
5
do for i ← 1 to n – l + 1
15-4 (5-19) Planning a company party. Professor Stewart is consulting for the president of a corporation that is planning a company party. The company has a hierarchical structure; that is, the supervisor relation forms tree rooted at the president. The personal office has ranked each employee with a conviviality rating, which is a real number. In order to make the party fun for all attendees, the president does not want both an employee and his or her immediate supervisor to attend.
To print out all the stations, call PRINT-STATIONS (l, l*, n)

《算法导论(第二版)》(中文版)课后答案

《算法导论(第二版)》(中文版)课后答案

26.1-2
26.2-1
26.2-4
14
《算法导论(第二版) 》参考答案 26.3-1 s–1–6–t s–2–8–t s–3–7–t 26.3-3
26.4-2 根据 26.22 对每个顶点执行 relabel 操作的次数最多为 2|V|-1 所以对每条边检测次数最多为 2*(2|V|-1)次 O(V) 在剩余网络中最多 2|E|条边 O(E) 所以为 O(VE)
f1[ j ] f 2 [ j 1] t2, j 1 a1, j f 2 [ j ] f1[ j 1] t1, j 1 a2, j
所以有:
f1[ j ] f 2 [ j ] f 2 [ j 1] t2, j 1 a1, j f1[ j 1] t1, j 1 a2, j
6
《算法导论(第二版) 》参考答案
最终答案:((A1A2)((A3A4)(A5A6))) 15.2-2
15.3-2 没有重叠的子问题存在 15.3-4 这题比较简单,由 P328 的(15.6)(15.7)展开两三步就可以看出来. 15.4-3 先初始化 c 数组元素为无穷大
7
《算法导论(第二版) 法, 最好是像书上画一颗递归树然后进行运算。
1
《算法导论(第二版) 》参考答案
注意题目中的要求使用递归树的方法,最好是像书上画一颗递归树然后进行运 算。 4.2.2 证略 4.2.3 由 2 i n 得 i=lgn
T (n) 2 i cn cn
i 0
由课本 P328(15.6) (15.7)式代入,可得:
min( f1[ j 1] a1, j , f 2 [ j 1] t2, j 1 a1, j ) min( f 2 [ j 1] a2, j , f1[ j 1] t1, j 1 a2, j ) min( f1[ j 1], f 2 [ j 1] t2, j 1 ) a1, j min( f 2 [ j 1], f1[ j 1] t1, j 1 ) a2, j f 2 [ j 1] t2, j 1 a1, j f1[ j 1] t1, j 1 a2, j

《算法导论》读书笔记 附录A习题解答

《算法导论》读书笔记 附录A习题解答

A.1-1求的简化公式。

利用等差级数求和公式和级数线性性质:
A.1-2利用调和级数性质证明。

利用调和级数性质:
A.1-3对,证明。

对无穷递减几何级数式两边求导,再乘以:
对该式再进行同上操作得到:
A.1-4 求。

A.1-5 求的值。

当时求得
当时:
计算得到:
A.1-6 利用求和公式的线性特征证明。

令,则下式显然成立:
再把函数代换回即可。

A.1-7 求的值。

A.1-8 求的值。

A.2-1 证明有常量上界。

A.2-2 求和的渐近上界。

故渐近上界是
A.2-3 通过分割求和证明第个调和数是。

故取得下界
A.2-4 通过积分求的近似值。

A.2-5 题略。

为了保证被积函数在积分域上都连续。

思考题
A-1 求和的界
求下列和式的渐近确界。

假设,都是常量。

a)
,得到确界为
b)
根据此式得到上界:
故得到下界:
故据此得到确界
c)
故得到上界:
故得到下界:
因此得到确界。

中科大算法导论第一,二次和第四次作业答案

中科大算法导论第一,二次和第四次作业答案
第一次作业
2.2-3 再次考虑线性查找问题 (见练习2.1-3)。在平均情况 下,需要检查输入序列中的多 少个元素?假定待查找的元素 是数组中任何一个元素的可能 性是相等的。在最坏情况下有 怎样呢?用Θ形式表示的话,线 性查找的平均情况和最坏情况 运行时间怎样?对你的答案加 以说明。 • 线性查找问题 • 输入:一列数A=<a1,a2,…,an>和一 个值v。 • 输出:下标i,使得v=A[i],或者当 v不在A中出现时为NIL。 • 平均情况下需要查找 (1+2+…+n)/n=(n+1)/2 • 最坏情况下即最后一个元素为待 查找元素,需要查找n个。 • 故平均情况和最坏情况的运行时 间都为Θ(n)。
• 2.3-2改写MERGE过程,使之不使 用哨兵元素,而是在一旦数组L或R 中的所有元素都被复制回数组A后, 就立即停止,再将另一个数组中 余下的元素复制回数组A中。 • MERGE(A,p,q,r) 1. n1←q-p+1 2. n2 ←r-q 3. create arrays L[1..n1] and R[1..n2] 4. for i ←1 to n1 5. do L*i+ ←A*p+i-1] 6. for j ←1 to n2 7. do R*j+ ←A*q+j+ 8. i ←1 9. j ←1
10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
k ←p while((i<=n1) and (j<=n2)) do if L[i]<=R[j] do A[k]=L[i] i++ else do A[k]=R[j] j++ k++ while(i<=n1) do A[k++]=L[i++] while(j<=n2) do A[k++]=R[j++]

《算法导论》习题答案

《算法导论》习题答案
i 1
n/2
n! nn , n! o(nn )
3.2.4 是否多项式有界 lg n !与 lg lg n !
设lgn=m,则 m! 2 m ( )m e2m ( )m em(ln m1) mln m1 nln ln n
∴lgn!不是多项式有界的。
T (n) O(lg n)
4.1.2 证明 T (n) 2T (n) n 的解为 O(n lg n)
设 T (n) c n lg n
T (n) 2c n lg n n c lg n n n c(n 1) lg(n / 2) n cn lg n c lg n cn n cn(lg n 1) n c(lg n 2n)
虽然用二分查找法可以将查找正确位置的时间复杂度降下来,但 是移位操作的复杂度并没有减少, 所以最坏情况下该算法的时间复杂 度依然是 (n2 )
2.3-7 给出一个算法, 使得其能在 (n lg n) 的时间内找出在一个 n 元
素的整数数组内,是否存在两个元素之和为 x
首先利用快速排序将数组排序,时间 (n lg n) ,然后再进行查找:
sin(n / 2) 2 1,所以 af (n / b) cf (n) 不满足。 2(sin n 2)
4.1.6 计算 T (n) 2T (
令 m lg n, T (2 ) 2T (2
m m/ 2
n ) 1 的解
) 1
令 T(n)=S(m),则 S (m) 2S (m / 2) 1 其解为 S (m) (m),T (n) S (m) (lg n)
4.2 The recursion-tree method 4.2.1 4.2.2 4.2.3 4.2.5 略

算法导论第九章习题答案(第三版)IntroductiontoAlgorithm

算法导论第九章习题答案(第三版)IntroductiontoAlgorithm

算法导论第九章习题答案(第三版)IntroductiontoAlgorithm Exercise
9.1-1
对所有的元素,两个⼀组进⾏⽐较,共需n-1次⽐较,可以构成⼀棵⼆叉树,最⼩的元素在树的根结点上,接下来,画出⼆叉树,可以很容易的看出共需lgn-1次⽐较,所以共需n+lgn-2次⽐较才可以找出第⼆⼩的元素。

9.1-2
略。

9.2-1
在randomized-select中,对于长度为0的数组,此时p=r,直接返回A[p],所以不会进⾏递归调⽤。

9.2-2
略。

9.2-3
RANDOMIZED-SELECT(A,p,r,i){
while(true){
if(p==r)
return A[p];
q=RANDOMIZED-PARTITION(A,p,r);
k=q-p+1;
if(i==k)
return A[q];
else if(i<k)
q--;
else{
q++;
i-=k;
}
}
}
9.2-4
每次都以最⼤的元素进⾏划分即可。

9.3-1
数学计算,根据书中例题仿照分析即可。

9.3-3
随机化
9.3-5
类似主元划分,只要把⿊箱⼦输出的值作为主元划分去选择即可。

9.3-6
多重⼆分即可。

9.3-7
算出中位数,之后算出每⼀个数与中位数的差即可。

9.3-8
分别取两个数组的中位数进⾏⽐较,如果两个中位数相等,那么即为所求,否则,取中位数较⼩的⼀个的右边,取较⼤的⼀个的右边,直到就剩4个元素为⽌,这时候只要求这4个元素的中位数即可。

算法导论参考答案

算法导论参考答案

算法导论参考答案算法导论参考答案算法导论是计算机科学领域中一本经典的教材,被广泛应用于计算机科学和工程的教学和研究中。

它涵盖了算法设计和分析的基本概念,以及各种常见算法的实现和应用。

本文将为读者提供一些算法导论中常见问题的参考答案,以帮助读者更好地理解和掌握这门课程。

1. 什么是算法?算法是一系列解决问题的步骤和规则。

它描述了如何将输入转换为输出,并在有限的时间内完成。

算法应具备正确性、可读性、健壮性和高效性等特点。

2. 如何分析算法的效率?算法的效率可以通过时间复杂度和空间复杂度来衡量。

时间复杂度表示算法执行所需的时间量级,常用的时间复杂度有O(1)、O(n)、O(logn)、O(nlogn)和O(n^2)等。

空间复杂度表示算法执行所需的额外空间量级,通常以字节为单位。

3. 什么是渐进符号?渐进符号用于表示算法的时间复杂度或空间复杂度的增长趋势。

常见的渐进符号有大O符号、Ω符号和Θ符号。

大O符号表示算法的上界,Ω符号表示算法的下界,Θ符号表示算法的平均情况。

4. 什么是分治法?分治法是一种算法设计策略,将问题分解为若干个子问题,并对子问题进行独立求解,最后将子问题的解合并得到原问题的解。

典型的分治算法有归并排序和快速排序。

5. 什么是动态规划?动态规划是一种通过将问题分解为相互重叠的子问题来求解的方法。

它通常用于求解具有重叠子问题和最优子结构性质的问题。

典型的动态规划算法有背包问题和最短路径问题。

6. 什么是贪心算法?贪心算法是一种通过每一步选择局部最优解来求解整体最优解的方法。

贪心算法通常不能保证得到全局最优解,但在某些问题上能够得到近似最优解。

典型的贪心算法有霍夫曼编码和最小生成树算法。

7. 什么是图算法?图算法是一类用于解决图结构相关问题的算法。

图由节点和边组成,节点表示对象,边表示对象之间的关系。

图算法包括图的遍历、最短路径、最小生成树和网络流等问题的求解。

8. 什么是NP完全问题?NP完全问题是一类在多项式时间内无法求解的问题。

算法导论32章答案

算法导论32章答案

算法导论32章答案32 String Matching32.1-2Suppose that all characters in the pattern P are different. Show how to accelerate NAIVE-STRING-MATCHER to run in timeO.n/ on an n-character text T.Naive-Search(T,P)for s = 1 to n – m + 1j = 0while T[s+j] == P[j] doj = j + 1if j = m return ss = j + s;该算法实际只是会扫描整个字符串的每个字符⼀次,所以其时间复杂度为O(n).31.1-3Suppose that pattern P and text T are randomly chosen strings of length m and n, respectively, from the d-ary alphabet ∑d ={0,1,2,..,d-1},where d ≧ 2.Show that the expected number of character-to-character comparisons made by the implicit loop inline 4 of the naive algorithm isover all executions of this loop. (Assume that the naive algorithm stops comparing characters for a given shift once it finds amismatch or matches the entire pattern.) Thus, for randomly chosen strings, the naive algorithm is quite efficient.当第4⾏隐含的循环执⾏i次时,其概率P为:P = 1/K i-1 * (1-1/k), if i < mP = 1/K m-1 * (1-1/k) + 1/K m , if i = m可以计算每次for循环迭代时,第4⾏的循环的平均迭代次数为:[1*(1-1/k)+2*(1/K)*(1-1/k)+3*(1/k2)(1-1/k)+…+(m-1)*(1-k m-2)(1-1/k) +m*(1/k m-1)(1-1/k) + m*(1/k m)]= 1 - 1/k + 2/k - 2/k2 + 3/k2 - 3/k3 +...+ m/k m-1 - m/k m + m/k m= 1 + 1/k + 1/k2 +...+ 1/k m-1= (1 - 1/K m) / (1 - 1/k)≤ 2所以,可知,第4⾏循环的总迭代次数为:(n-m+1) * [(1-1/K m) / (1-1/k)] ≤ 2 (n-m+1)31.1-4Suppose we allow the pattern P to contain occurrences of a gap character } that can match an arbitrary string of characters(even one of zero length). For example, the pattern ab}ba}c occurs in the text cabccbacbacab asand asNote that the gap character may occur an arbitrary number of times in the pattern but not at all in the text. Give a polynomial-time algorithm to determine whether such a pattern P occurs in a given text T, and analyze the running time of your algorithm.该算法只是要求判断是否模式P出现在该字符串中,那么问题被简化了许多。

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

8.3-3 8.3-4
8.3-5(*) 8.4-1 见图 8-4 8.4-2
8.4-3 3/2,1/2 8.4-4(*) 8.4-5(*)
9.1-1
9.1-2 9.2-1 9.3-1
第九章
9.3-2 9.3-3
9.3-4 9.3-5
9.3-6 9.3-7
9.3-8
9.3-9
15.1-1
6.4-4
6.4-5
6.5-1 据图 6-5 6.5-2
6.5-3 6.5-4 6.5-5
6.5-6 6.5-7
6.5-8
7.1-1 见图 7-1 7.1-2
7.1-3 7.1-4 7.2-1 7.2-2
7.2-3 7.2-4 7.2-5
第七章
7.2-6 7.3-1
7.3-2
7.4-1 7.4-2
len=j;//更新 len
} cout<<len<<endl; } return 0; } 15.5-1
15.5-2 15.5-3
15.5-4
16.1-1
第 16 章
16.1-2 16.1-3
16.1-4 16.2-1 16.2-2
16.2-3
16.2-4
16.2-5 16.2-6
16.2-7
16.3-1 16.3-2
16.3-3 16.3-4
16.3-5
16.3-6 那就推广到树的结点有三个孩子结点,证明过程同引理 16.3 的证明。 16.3-7 16.3-8
第 24 章
24.1-1 同源顶点 s 的运行过程,见图 24-4 24.1-2
24.1-3
24.1-4 24.1-5* 24.1-6 修改 Bellman-Ford 算法,先找到负环上的一个节点,再依次找到负环上的一个节点,再依 次找到负环上的其他节点。 24.2-1 见图 24-5 24.2-2 最后一次不影响结果
int left=0,right=len,mid=(left+right)/2; while(left<=right) {
if(n>a[mid]) left=mid+1; else if(n<a[mid]) right=mid-1; else return mid; mid=(left+right)/2; } return left; } int main() { int n,a[100],c[100],i,j,len;//新开一变量 len,用来储存每次循环结束后 c 中已经求出值的元 素的最大下标 while(cin>>n) { for(i=0;i<n;i++)
24.2-3
24.2-4
24.3-1 见图 24-6 24.3-2
24.3-3
24.3-4 24.3-5 24.3-6
24.3-7
24.3-8 这种情况下不会破坏已经更新的点的距离。 24.4**** 24.5****
25.1-1 见图 25-1 25.1-2 为了保证递归定义式 25.2 的正确性 25.1-3
7.4-3 纯数学问题,对式子求导即可得。 7.4-4 见 RANDOMIZED-QUICKSORT.ppt 7.4-5 见快速排序改进算法(7.4-5).pdf 7.4-6
第八章
8.1-1 8.1-2 8.1-3
8.1-4
8.2-1 见图 8-2 8.2-2 和 8.2-3
8.2-4
8.3-1 见图 8-3 8.3-2
cin>>a[i]; b[0]=1; c[0]=-1; c[1]=a[0]; len=1;//此时只有 c[1]求出来,最长递增子序列的长度为 1. for(i=1;i<n;i++) {
j=find(c,len,a[i]); c[j]=a[i]; if(j>len)//要更新 len,另外补充一点:由二分查找可知 j 只可能比 len 大 1
L[i]=A[p+i-1];
} for(int j=0;j<n2;j++) { R[j]=A[q+j]; } int i=0; int j=0; int k=p-1; while((i<=n1-1)&&(j<=n2-1)) { if(L[i]<=R[j]) { A[k]=L[i];
i++; } else { A[k]=R[j]; j++; } k++; } while(i<=n1-1) { A[k]=L[i]; i++; k++; } while(j<=n2-1) { A[k]=R[j]; j++; k++; } delete[]L; delete []R; } 2.3-3
5.3-5
令 m = n3 ,生成的全排列个数有 mn , 其中不重复的有 P(m, n) = m *(m −1) *"*(m − n +1) , 所以,所有元素唯一概率为 P(m, n) / mn 要证 P(m, n) / mn ≥ 1−1/ n 由于 P(m, n) / mn ≥ [(m − n) / m]n 故需证:[(m − n) / m]n ≥ 1−1/ n 易证
第2章 第3章 第4章 第5章 第6章 第7章 第8章 第9章 第 15 章 第 16 章 第 24 章 第 25 章
《算法导论》参考答案
第2章
2.1-1
2.1-2
2.1-3 2.1-4
2.2-1 2.2-2
2.2-3
2.2-4
2.3-1
2.3-2 void Merge(int *A,int p,int q,int r) { //构建左半部分和右半部分的辅助数组 int n1=q-p+1; int n2=r-q; int *L=new int[n1]; int *R=new int[n2]; for (int i=0;i<n1;i++) {
15.2-5 用递归
15.3-1
15.3-2 15.3-3
15.3-4
15.3-5 15.4-1
15.4-2 15.4-3
15.4-4
15.4-5
15.4-6 #include <iostream> using namespace std; int find(int *a,int len,int n)//修改后的二分查找,若返回值为 x,则 a[x]>=n {
第 25 章
25.1-4 25.1-5
25.1-6 25.1-7 25.1-8
25.1-9 25.1-10 25.2-1 见图 25-4 25.2-2 25.2-3 25.2-4
25.2-5 25.2-6
25.2-7 25.2-8
25.2-9 25.3-1 25.3-2 25.3-3
25.3-4 25.3-5
4.1-5
4.1-6 4.2-1
4.2-2 4.2-3
4.2-4
4.2-5
4.3-1
4.3-2
4.3-3 4.3-4 不能运用主方法 4.3-5
5.1-1 因为本身就是一个排序过程 5.2-1
第5章
5.2-2
5.2-3 5.2-4 5.2-5
5.3-1
ቤተ መጻሕፍቲ ባይዱ
5.3-2 5.3-3
5.3-4
5.3-6
6.1-1 6.1-2 6.1-3 6.1-4 6.1-5 6.1-6
第6章
6.1-7
6.2-1 见图 6-2 6.2-2
6.2-3
6.2-4
6.2-5 对以 i 为根结点的子树上每个点用循环语句实现 6.2-6
6.3-1
见图 6-3 6.3-2
6.3-3
6.4-1 见图 6-4 6.4-2 HEAPSORT 仍然正确,因为每次循环的过程中还是会运行 MAX-HEAP 的过程。 6.4-3
第 15 章
15.1-2
15.1-3
2n
n
∑ ∑ ∑ fi[ j] =
ri( j) = 2( 2n− j ) = 2(2n −1) = 2n+1 −1
i=1 j=1
j =1
15.1-4
15.1-5
15.2-1
最终答案:((A1A2)((A3A4)(A5A6))) 15.2-2 15.2-3 15.2-4
25.3-6
2.3-4 2.3-5
2.3-6 2.3-7
第3章
3.1-1 3.1-2
3.1-3 3.1-4
3.1-5 3.1-6 3.1-7 3.1-8
3.2-1
3.2-2
3.2-3
3.2-4
3.2-5 后者大 3.2-6 数学归纳法易证 3.2-7 用数学归纳法证明
第4章
4.1-1
4.1-2
4.1-3 T(n)=cnlgn+n 4.1-4
相关文档
最新文档