算法导论第三版答案(自己写)
文章平均质量分 74
JennyReborn
stay hungry , stay foolish .
展开
-
第二章 2.1插入排序
2.1-1 以图2-2为模型,说明INSERTION-SORT在数组A={31,41,59,26,41,58}上的执行过程。 31 31 41 31 41 59 26 31 41 59 26 31 41 58 59 2.1-2重写过程INSERTION-SORT,使之按非升序(而不是非降序)排序。 INSERTION-Sort for j=2 to A.length原创 2016-12-24 20:02:33 · 784 阅读 · 0 评论 -
第七章 快速排序
7.1 快速排序的描述7.1.-1参照图7-1的方法,说明PARTITION在数组A=上的操作过程。原创 2017-02-23 16:39:59 · 1792 阅读 · 0 评论 -
第六章 堆排序习题
6.1堆 堆节点的高度:为该节点到叶节点最长简单路径上#边的个数#。(因此,根节点所在位置高度为0)6.1-1 在高度为h的堆中,元素个数最多和最少分别是多少?最多:2h+1−1最少:2h最多:2^{h+1}-1\\最少:2^h6.1-2 证明:含n个元素的堆的高度为⌊lgn⌋\lfloor \lg n \rfloor。证明:1)利用上面式子反推 2)数学归纳法证明即可6.1-3原创 2017-02-19 11:01:12 · 16804 阅读 · 0 评论 -
第四章 4.1最大子数组问题(分治)
4.1-1 当A的所有元素均为负数时,FIND-MAXIMUM-SUBARRAY返回什么?最小负数值,及其下标4.1-2 对最大子数组问题,编写暴力求解方法的伪代码,其运行时间应该为θ(n2)\theta (n^2)可运行代码如下:#include "stdafx.h"#include<stdlib.h>class Solve{public: Solve(); int beg原创 2017-01-20 11:15:13 · 1900 阅读 · 0 评论 -
第一章 所有
1.1-1给出显示生活中需要排序的一个例子或显示生活中需要计算凸壳的一个例子 凸壳可以看作是点集合的边界,其精确定义如下: 设集合S是n维空间的k个点组成的集合,即S={x1,x2,…xk},xi是n维向量。定义S的凸壳Conv(S)为: Conv(S)={x=λ1*x1+λ2*x2+…+λk*xk | λ1+λ2+ …+λk=1}1)大个在前小个在后排序O(∩_∩)O,从小到大听原创 2016-12-24 19:22:22 · 731 阅读 · 0 评论 -
第三章 函数的增长 3.1 渐进记号
3.1-1 假设f(n)与g(n)都是渐进非负函数。使用θ记号的基本定义来证明max(f(n),g(n))=θ(f(n)+g(n))。解:c1(f(n)+g(n))<max(f(n),g(n))<c2(f(n)+g(n))c_1(f(n)+g(n))<max(f(n),g(n))<c_2(f(n)+g(n)) c1=1/2,c2=2c_1=1/2,c_2=2时,恒成立。3.1-2 证明:对任意实常原创 2017-01-19 23:44:55 · 1318 阅读 · 0 评论 -
第四章 4.3 用代入法求解递归式
4.3-1 证明:T(n)=T(n-1)+n的解为O(n2n^2)。 c(n−1)2+n≤n2cn2−2cn+c+n≤n2cn2−(2c−1)n+1≤n2c(n-1)^2+n\le n^2\\cn^2-2cn+c+n\le n^2\\cn^2-(2c-1)n+1\le n^2 当c大于等于1时成立 4.3-2 证明:T(n)=T(⌈n/2⌉)+1的解为O(lgn)T(n)=T(\lce原创 2017-02-17 15:20:38 · 3312 阅读 · 1 评论 -
第二章 思考题
2-1(在归并排序中对最小数组采用插入排序) 虽然归并排序的最坏情况运行时间为θ(nlgn),而插入排序的最坏情况运行时间为θ(n2n^2),但是插入排序中的常量因子可能使得它在n较小时,在许多机器上实际运行得更快。因此,在归并排序中当子问题变得足够小时,采用插入排序来使递归的叶变粗是有意义的。考虑对归并排序的一种修改,其中使用插入排序来排序长度为k的n/k个子表,然后使用标准的合并机制来合并这些子原创 2017-01-18 22:47:02 · 1570 阅读 · 0 评论 -
第二章 2.3 设计算法
2.3-1 使用图2-4作为模型,说明归并排序在数组A=<3,41,52,26,38,57,9,49>上得操作。{3,41}{26,52}{38,57}{9,49} {3,26,41,52}{9,38,49,57} {3,9,26,38,41,49,52,57}2.3-2重写过程MERGE,使之不使用哨兵,而是一旦数组L或R的所有元素均被复制回A就立刻停止,然后把另一个数组的剩余部分复制回A原创 2017-01-10 15:50:16 · 795 阅读 · 0 评论 -
第四章 4.2矩阵乘法的Strassen算法(分治)
注意:虽然联系4.2-3、4.2-4和4.2-5是关于Strassen算法的变形的,但你应该先阅读4.5节,然后再尝试求解这几个问题。4.2-1 使用Strassen算法计算如下矩阵乘法:[1735][6482]\begin{bmatrix}1&3\\ 7&5\end{bmatrix} \begin{bmatrix}6&8\\4&2 \end{bmatrix}给出计算过程。S1=B1原创 2017-01-21 18:11:35 · 9533 阅读 · 2 评论 -
第二章2.2分析算法
2.2-1用θ记号表示函数n3/1000−100n2−100n+3n^3/1000-100n^2-100n+3。 θ(n3n^3) 2.2-2考虑排序存储在数组A中的n个数:首先找到A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A中的次最小元素并将其与A[2]中的元素进行交换。对A中前n-1个元素按该方式继续。该算法称为选择算法,写出其伪代码。该算法维持的循环不变式是什么?为什么它只原创 2016-12-27 20:27:19 · 1296 阅读 · 0 评论 -
第十一章 散列表
11.1 直接寻址表11.1-1 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少? Θ(1)11.1-2 位向量是一个仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少得多。请说明如何用一个为向量来表示一个包含不同元素(无卫星数据)的动态集合。字典操作的运行时间应为O(1)。 如图所示,寻址表T中,原创 2017-03-07 19:11:00 · 875 阅读 · 0 评论