Exercises 22.5 - 算法导论.英文第3版 最近看书的同时, 感觉一些练习缺少参考, 所以按部分总结了自己的解答, 也能够强化学习过程. 如有不足或疑问, 欢迎指正. Exercises 22.5-1 How can the number of strongly connected co ...
分类:
编程语言 时间:
2017-08-23 21:37:59
阅读次数:
180
22.4-1 给出算法 TOPOLOGICAL-SORT 运行于图 22-8 上时所生成的结点次序。这里的所有假设和练习 22.3-2 一样。 ANSWER: 22.4-2 请给出一个线性时间的算法,算法的输入为一个有向无环图 G = (V, E) 以及两个结点 s 和 t,算法的输出是从结点 s ...
分类:
编程语言 时间:
2017-08-23 17:36:43
阅读次数:
1034
22.3-1 画一个 3*3 的网格,行和列的抬头分别标记为白色、灰色和黑色,对于每个表单元 (i, j),请指出对有向图进行深度优先搜索的过程中,是否可能存在一条边,链接一个颜色为 i 的结点和一个颜色为 j 的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索再制作一张这 ...
分类:
编程语言 时间:
2017-08-23 16:22:38
阅读次数:
379
快排的优势: 1、期望为O(n lgn) 2、常数因子比较小 3、就地排序 4、在虚存环境很好工作 与合并排序一样是分治思想,但是不是从中间截断,而是通过partition过程实现的 每次选择最后一个元素为q,然后小的放前面,大的放后面,用ij两个坐标实现 代码:待补充 ...
分类:
编程语言 时间:
2017-08-23 00:41:50
阅读次数:
133
基本过程: 1、保持最大堆的性质:假设两个子堆都满足,只需要根节点依次换下去,复杂度O(lg n) 2、初始化堆:后半段都是叶子,在前半段从后往前,依次执行上述最大堆性质的操作,名义复杂度是O(n lg n),但是有更精确的计算, 在高度为h的节点为O(h), 因此为 n\sigma (h / 2^ ...
分类:
编程语言 时间:
2017-08-22 23:07:02
阅读次数:
220
一、问题的描述 回文序列(Palindromic sequence, Palindrome)是指正向遍历和反向遍历完全相同的序列,例如字符串“AAAAA”显然是一个回文序列,又如字符串“ABC@CBA”也是一个回文序列。现在,我们要在一个(字符)序列中找出最长回文子序列的长度。例如字符序列"BBAB ...
分类:
编程语言 时间:
2017-08-22 16:53:18
阅读次数:
279
通常用于最优化问题,我们做出一组选择来达到最优解。每步都追求局部最优。对很多问题都能求得最优解,而且速度比动态规划方法快得多。 16.1 活动选择问题 按结束时间排序,然后选择兼容活动。 定理16.1 考虑任意非空子问题Sk,令am是Sk中结束时间最早的活动,则am在Sk的某个最大兼容活动子集中。 ...
分类:
编程语言 时间:
2017-08-21 17:03:01
阅读次数:
351
一、动态规划的概念 动态规划(Dynamic Programming)是通过组合子问题的解而解决整个问题的。分治是指将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原始问题的解,与此不同,动态规划适用于子问题不是独立的情况,也就是各个子问题包含公共的子问题。在这种情况下,采 ...
分类:
编程语言 时间:
2017-08-21 12:43:53
阅读次数:
229
来自习题22.1-6 给出O(V)时间算法判断有向图G是否存在一个通用汇点(universal sink)。通用汇点指的是入度为|V|-1,出度为0的节点。 思路: 考虑图的邻接矩阵A,假设i为通用汇点,则对于0<=j<n,有A[i][j]=0,且对于所有0<=k<n and k != i,有A[k ...
分类:
编程语言 时间:
2017-08-20 18:26:14
阅读次数:
235
通常用来解决最优化问题。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会非常有效。其关键技术就是对每个这样的子问题都保存其解,当其重复出现时即可避免重复求解。 分治:划分为互不相交的子问题,递归求解子问题,再将他们的解组合起来。 ...
分类:
编程语言 时间:
2017-08-17 20:19:34
阅读次数:
199