
算法导论(第3版)
文章平均质量分 74
funggor
这个作者很懒,什么都没留下…
展开
-
算法导论11章散列表 思考题总结
11-1 (散列最长探查的界) 采用开放寻址法,用一个大小为 m 的散列表来存储 n ( n a. 假设采用均匀散列,证明:对于 i = 1,2,... ,n,第 i 次插入需要严格多于 k 次探查的概率至多为 2^(-k) 。ANSWER:b. 证明:对于 i = 1,2,... ,n,第 i 次插入需要多于 2lgn 次探查的概率为 O( 1/ n^2 )。ANSWER原创 2015-09-24 23:34:03 · 3578 阅读 · 0 评论 -
算法导论11.3散列函数 练习总结
11.3-1 假设我们希望查找一个长度为n的链表,其中每一个元素都包含一个关键字 k 并具有散列值 h( k )。每一个关键字都是长字符串。那么在表中查找具有给定关键字的元素时,如何利用各元素的散列值呢?ANSWER:对给定关键字 k,通过 h( k )计算出散列值查找该元素。11.3-2 假设将一个长度为 r 的字符串散列到 m 个槽中,并将其视为一个以128为基数的数,要求原创 2015-09-23 20:46:35 · 3642 阅读 · 0 评论 -
算法导论11.4开放寻址法 练习总结
11.4-1 考虑将关键字 10、22、31、4、15、28、17、88、59用开放寻址法插入到一个长度为 m = 11 的散列表中,辅助散列函数为 h'( k ) = k mod m。试说明分别用线性探查,二次探查(c1 = 1,c2 = 3) 和双重散列h2( k ) = 1 + ( k mod (m-1))将这些关键字插入散列表的过程。ANSWER:序号线性探查原创 2015-09-24 17:03:10 · 3306 阅读 · 0 评论 -
算法导论14.2如何扩张数据结构 练习总结
14.2-1 通过为结点增加指针的方式,试说明如何在扩张的顺序统计树上,支持每一动态集合查询操作 MINIMUM、MAXIMUM、SUCCESSOR 和 PREDECESSOR 在最坏时间 O(1) 内完成。顺序统计树上的其他操作的渐进性能不受影响。ANSWER:① MINIMUM:用一个指针指向树中最小的元素。每次插入时与 MINIMUM 比较检测是否需要更改。若删除 MINIMUM,则原创 2015-10-27 13:14:07 · 2617 阅读 · 0 评论 -
算法导论14.3区间树 练习总结
14.3-1 写出作用于区间树的结点且在 O(1) 时间内更新 max 属性的过程 LEFT-ROTATE 的伪代码。ANSWER:伪代码:LEFT-ROTATE(T, x) y = x.right y.max = x.max x.max = max(x.left.max, y.left.max, x.int.high)14.3-2 改写 INTERVAL原创 2015-10-29 00:58:14 · 3525 阅读 · 0 评论 -
算法导论13.3插入 练习总结
13.3-1 在 RB-INSERT 的第 16 行,将心插入的结点 z 着为红色。注意到,如果将 z 着为黑色,则红黑树的性质 4 就不会被破坏。那么为什么不选择将 z 着为黑色呢?ANSWER:为了保持性质5,令红黑树的黑高不变。13.3-2 将关键字 41、38、31、12、19、8 连续地插入一棵初始化为空的红黑树之后,试画出该结果树。ANSWER:原创 2015-10-15 23:27:03 · 3622 阅读 · 0 评论 -
算法导论22.2广度优先搜索 练习总结
22.2-1 请计算出在有向图 22-2(a) 上运行广度优先搜索算法后的 d 值和 π 值,这里假定结点 3 为算法所用的源结点。ANSWER:22.2-2 请计算出在图 22-3 所示无向图上运行广度优先搜索算法后的 d 值和 π 值。这里假定结点 u 为算法所用的源结点。ANSWER:22.2-3 证明:使用单个位来存放每个结点的颜色即可。这个论点可以通过证明原创 2015-11-14 19:50:40 · 5768 阅读 · 0 评论 -
算法导论22.4拓扑排序 练习总结
22.4-1 给出算法 TOPOLOGICAL-SORT 运行于图 22-8 上时所生成的结点次序。这里的所有假设和练习 22.3-2 一样。ANSWER:22.4-2 请给出一个线性时间的算法,算法的输入为一个有向无环图 G = (V, E) 以及两个结点 s 和 t,算法的输出是从结点 s 到结点 t 之间的简单路径的数量。例如,对于图 22-8 所示的有向无环图,从结点 p原创 2015-12-29 12:57:11 · 9889 阅读 · 1 评论 -
算法导论22.3深度优先搜索 练习总结
22.3-1 画一个 3*3 的网格,行和列的抬头分别标记为白色、灰色和黑色,对于每个表单元 (i, j),请指出对有向图进行深度优先搜索的过程中,是否可能存在一条边,链接一个颜色为 i 的结点和一个颜色为 j 的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索再制作一张这样的网格。ANSWER:22.3-2 给出深度优先搜索算法在图 22-6 上的运行过原创 2015-12-01 21:02:57 · 8897 阅读 · 1 评论 -
算法导论22.5强连通分量 练习总结
22.5-1 如果在图G中加入一条新的边,G中的强连通分量的数量会发生怎样的变化?ANSWER:减1或者不变。22.5-2 给出算法STRONGLY-CONNECTED-COMPONENTS 在图22-6上的运行过程。具体要求是,给出算法第1行所计算出的完成时间和第3行所生成的森林。假定DFS的第5~7行的循环是以字母表顺序来对结点进行处理,并且连接链表中的结点也是以字母表顺序排列原创 2016-01-07 10:27:02 · 6520 阅读 · 3 评论 -
算法导论22章基本的图算法 思考题总结
22-1 (以广度优先搜索来对图的边进行分类)深度优先搜索将图中的边分类为树边、后向边、前向边和横向边。广度优先搜索也可以用来进行这种分类。具体来说,广度优先搜索将从源结点可以到达的边划分为同样的4种类型。a.证明在对无向图进行的广度优先搜索中,下面的性质成立:1.不存在后向边,也不存在前向边。2.对于每条树边(u, v),我们有v.d = u.d + 1。3.对于每条横向边(u,原创 2016-01-27 22:22:41 · 3120 阅读 · 0 评论 -
算法导论15.1钢条切割 练习总结
15.1-1 由公式(15.3)和初始条件T(0) = 1,证明公式(15.4)成立。ANSWER:15.1-2 举反例证明下面的“贪心”策略不能保证总是得到最优切割方案。定义长度为i的钢条的密度为Pi / i,即每英寸的价值。贪心策略将长度为n的钢条切割下长度为i (1 ≤ i ≤ n)的一段,其密度最高。接下来继续使用相同的策略切割长度为n-i的剩余部分。ANSWER:当长原创 2016-01-28 21:32:17 · 3735 阅读 · 0 评论 -
算法导论11.1直接寻址表 练习总结
11.1-1 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少?ANSWER:遍历整个寻址表T,时间O(m)。11.1-2 位向量(bit vector)是一种仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少得多。请说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的原创 2015-09-22 19:21:16 · 1732 阅读 · 1 评论 -
算法导论11.2散列表 练习总结
11.2-1 假设用一个散列函数 h 将 n 个不同的关键字散列刀一个长度为 m 的数组 T 中。假设采用的是简单均匀散列,那么期望的冲突数是多少?更准确地,集合 { { k,l } :k ≠ l,且h( k ) ≠ h( l ) } 基的期望值是多少?ANSWER:11.2-2 对于一个用链接法解决冲突的散列表,说明将关键字 5,28,19,15,20,33,12,17,原创 2015-09-23 13:08:33 · 3609 阅读 · 1 评论 -
算法导论12.1什么是二叉搜索树 练习总结
12.1-1 对于关键字集合 { 1,4,5,10,16,17,21 },分别画出高度为2、3、4、5 和 6 的二叉搜索树。ANSWER:12.1-2 二叉搜索树性质与最小堆性质(见 6.1 节)之间有什么不同?能使用最小堆性质在 O( n ) 时间内按序输出一颗有 n 个结点的关键字吗?可以的话,请说明如何做,否则解释理由。ANSWER:① 最小堆只是根结点比儿子的关键原创 2015-09-25 18:33:34 · 1987 阅读 · 0 评论 -
算法导论12.2查询二叉搜索树 练习总结
12.2-1 假设一棵二叉搜索树中的结点在 1 到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列?a. 2, 252, 401, 398,330,344,397,363。b. 924,220,911,244,898,258,362,363。c. 925,202,911,240,912,245,363。d. 2,399,387,219,266,3原创 2015-09-28 18:56:52 · 3776 阅读 · 0 评论 -
算法导论13.4删除 练习总结
13.4-1 在执行 RB-DELETE-FIXUP 之后,证明:树根一定是黑色的。ANSWER:case 1:要进入循环,则 x.color = BLACK,且 x ≠ T.nil,所以不可能从case 1退出循环,所以必定会进入case 2,3,4。case 2:w = x.p.right,则 w 不可能是T.root;如果从case 2退出循环,则 x = T.root,则23行原创 2015-10-18 19:24:29 · 3387 阅读 · 0 评论 -
算法导论13章红黑树 思考题总结
13-1 (持久动态集合) 有时在算法的执行过程中我们会发现在更新一个动态集合时,需要维护其过去的版本。我们称这样的集合为持久的(persistent)。实现持久集合的一种方法是每当改集合被修改时,就将其完整地复制下来,但是这种方法会降低一个程序的执行速度,而且占用过多的空间。有时候,我们可以做得更好些。 考虑一个有 INSERT、DELETE和SEARCH操作的持久集合 S,我们原创 2015-10-20 11:40:25 · 1550 阅读 · 0 评论 -
算法导论12.3插入和删除 练习总结
12.3-1 给出 TREE-INSERT 过程的一个递归版本。ANSWER:伪代码:TREE-INSERT(root, z) if root.key < z.key if root.right == NIL root.right = z z.p = root else TREE-原创 2015-10-06 10:29:47 · 2259 阅读 · 3 评论 -
算法导论12.4随机构建二叉搜索树 练习总结
12.4-1 证明等式(12.3)。ANSWER:证明: 此处将用不寻常的证明方法:引入一个新问题,利用两个不同解法的等效性证明等式(12.3)12.4-3 说明含有 n 个关键字的随机原创 2015-10-08 15:09:58 · 2495 阅读 · 0 评论 -
算法导论22.1图的表示 练习总结
22.1-1 给定有向图的邻接链表,需要多长时间才能计算出每个结点的出度(发出的边的条数)?多长时间才能计算出每个结点的入度(进入的边的条数)?ANSWER:① 出度:O(V+E),因为计算 n 个结点的链表长度为 O(n),所以需要计算 O(V) 个链表长度时间为 O(V+E)。② 入度:O(V+E),同理。22.1-2 给定一棵有 7 个结点的完全二叉树的邻接链表,请给出等价的原创 2015-11-03 18:36:04 · 3882 阅读 · 1 评论 -
算法导论13.2旋转 练习总结
13.2-1 写出RIGHT-ROTATE 的伪代码。ANSWER:伪代码:RIGHT_ROTATA: y = x.left x.left = y.right if y.right ≠ T.nil: y.right.p = x y.p = x.p if y.p == T.nil: T.root = y else原创 2015-10-15 10:14:00 · 2219 阅读 · 0 评论 -
算法导论12章二叉搜索树 思考题总结
12-1 (带有相同关键字的二叉搜索树) 相同关键字给二叉搜索树的实现带来了问题。a. 当用TREE-INSERT 将 n 个其中带有相同关键字的数据插入到一棵初始为空的二叉搜索树中,其渐进性能是多少?ANSWER:当遇到不小于父结点的关键字时,是插入到右子树,所以当插入n个全部相同或者有序的关键字时,会变成链表,最坏情况的时间复杂度为O(n^2),树的高度是O(n)。原创 2015-10-09 00:34:41 · 2695 阅读 · 0 评论 -
算法导论13.1红黑树的性质 练习总结
13.1-1 按照图13-1(a) 的方式,画出关键字集合{1,2,... ,15 }上高度为 3 的完全二叉搜索树。以三种不同方式想图中加入 NIL 叶结点并对各结点着色,使所得的红黑树的黑高分别为 2,3 和 4。ANSWER:如上图的二叉树(省略哨兵 T.nil )黑高为 2 :令深度为 0,2 的结点为黑,深度为 1,3 的结点为红。 3 :令原创 2015-10-10 16:57:08 · 3526 阅读 · 5 评论 -
算法导论14.1动态顺序统计 练习总结
14-1.1 对于图 14-1 中的红黑树 T,说明执行 OS-SELECT(T.root,10) 的过程。ANSWER:① 结点 26,x.left.size + 1 = 13 > 10,→ 左子树;② 结点 17,x.left.size + 1 = 8 → 右子树,i = 10 - 8 = 2;③ 结点 21,x.left.size + 1 = 3 > 2,→ 左子树;原创 2015-10-25 16:13:58 · 2595 阅读 · 0 评论 -
算法导论15.2矩阵链乘法 练习总结
15.2-1 对矩阵规模序列,求矩阵链最优括号化方案。ANSWER:def MATRIX_CHAIN_ORDER(p): n = len(p) s = [[0 for j in range(n)] for i in range(n)] m = [[0 for j in range(n)] for i in range(n)] for l in range(2, n): #l is原创 2016-02-01 16:38:24 · 7441 阅读 · 0 评论