算法设计与分析基础(第3版)读书笔记(及几处翻译上的错误~~)

算法设计与分析基础(第3版)

  1. p16 in-place翻译为‘在位’?‘就地’更合适点
  2. p38 amortized应翻译为‘均摊’,‘摊销’这个词简直莫名其妙(可能因为翻译是做算法交易导致的?)
  3. p64 迭代优于递归(迭代始终是增量式的,而递归就没办法增量了,除非能够dump整个运行时栈)
  4. p73 通过算法可视化得到一个更好的非递归算法(人的图像认知直觉思维?)
  5. p79 验证一个拓扑是环、星、还是团?(这个地方有点意思,因为我想到了动态的Verify)
  6. p87 凸包问题:从数据结构上讲,Set<LineSegment> --> SortedList<Point>
  7. p92 解决分配问题的匈牙利方法(Konig & Egervary)?妈的,书里没详谈
  8. p97(无向图?)DFS对应树边和回边,而BFS对应树边和叉边。
  9. p112 生成排列:Johnson-Throttler算法(本书最大的优点是算法都带了人的名字,哈)
  10. p115 习题4 HeapPermute
    1. 这个伪码算法有点难于理解,我记得标准的写法似乎不是这么写的吧?
  11. p119 ‘every second’被翻译为“每次第二个”,似乎翻译为“偶数编号的”更合适点
  12. p122 Lomuto划分:这好像就是Steven S.Skiena的《算法设计手册(第2版)》中的快速排序使用的版本,事实上还是有点技巧的
  13. p124 一种更加复杂的算法,用于在快速排序中选出pivot,在最坏情况下也能保持线性时间效率???
  14. p127 Nim游戏:此处印刷有错误,应为“正好加到100”
  15. p132 主定理:此定理的形式不正确,应该去看Sara Basse的《计算机算法》(这本书2001年的,怎么始终没更新了?)
  16. p137 快速排序(HoarePartition):由于两边的扫描遇到==的情况都会停止,此时相当于A[i]==A[j]
    1. p138 当i>=j时撤销最后一次swap?靠
  17. p140 ‘world‘s leading expert’翻译成了‘权威’,靠
  18. p147 Strassen算法最难的是记住这7个子矩阵相乘的公式吧
  19. p149 最近对:先递归得到d(实际上这里很有意思);然后根据d分治处理边界情况
    1. 处理边界:数据的局部性约束减少了问题的排查规模
  20. p151 凸包/快包:这里直线左侧/右侧的说法很莫名其妙
  21. p155 reduction我喜欢翻译为‘归约’,而不是‘化简’
  22. p159 问题10:注意这里结果的点集是两两不可比较的(x1>x2但y1<y2)
  23. p162 部分选主元:避免了大数相减造成的误差(此误差又被作为了除数,导致误差被放大)
  24. p166 注意,行列式的完全展开中,每一项的正负号依赖于行列下标的差值之和
  25. p171 AVL树在Mark Allen Weiss的《数据结构与算法分析》一书中讲得很好
  26. p174 2-3树:这里我怎么没办法理解,2-3树始终高度平衡的吗?似乎存在2种内节点。。。
  27. p190 线性规划/单纯性:只有概念上的描述
    1. p195 整数线性规划(ILP)是NPC的吧?
  28. p201 Horspool是BM的简化版(本书为什么不谈KMP?不过BM确实比KMP要更复杂一点)
  29. p204 本书讲解Boyer-Moore比较详细,值得仔细看看(KMP考虑了模式内部的重复,但它是前缀匹配;但BM考虑了字母表的规模)
  30. p220 动态规划:DP最经典的例子是“编辑距离”
  31. p226 为了设计一个动态规划算法,需要推导出一个递推关系
  32. p230 最优BST:有点复杂。。。
  33. p243 贪心:每一步选择必须满足3个条件:可行、局部最优、不可取消(?)
  34. p248 Prim算法的正确性证明,不错
  35. p259 Fibonacci堆实现优先队列:‘只具有理论价值’?
  36. p263 动态Huffman树?有意思
  37. p266 迭代改进?快速迭代 + 增量改进
  38. p270 单纯形:极点不是最优解时,处理下一个邻近的(这里似乎可以使用某些随机梯度下降之类的状态空间检索技术)
    1. p275 单纯形的增量过程可能是不稳定的
    2. p276 椭球法/Karmarkar算法(内点法?)
  39. p279 最大流:记住2个名词,增广路径 和 预流推进,哈
    1. p285 预流推进不属于迭代改进,因为它并没有在满足约束的前提下生成一系列渐进最优的解
  40. p286 更先进的最大流:Dinitz、Karzanov、Malhotra-Kamar-Maheshwari、Goldberg-Tarjan
    1. me:不如直接去阅读网络优化方面的数学专著好了 -_-
  41. p291 提升效率:把多次迭代在一个阶段完成(Batch?)
  42. p291 加权的二分图最大匹配:这个应该是非常复杂的算法了,靠
  43. p293 稳定婚姻:让我想到‘选举几何’了
  44. p308 难解(untractable)与不可判定
    1. 可以是‘部分可计算’和‘部分可判定’吗?
    2. 停机问题的证明:这个形式证明不是直觉主义构造法的,假如离散的‘所有程序’空间实际上是‘不可枚举’的呢?
  45. p319 ill-conditioned问题:对应于非刚性(Non=Stiff)的常微分方程?
    1. p320 一元二次方程的例子,有意思
  46. p332 分支限界:看上去有点难于理解
  47. p344 TSP近似算法:著名的Christofides?比‘绕树2周’更复杂
    1. 对欧几里得实例,本地查找启发:2选、3选、Lin-Kernighan
  48. p364 我记得并行算法里有一类‘超线性加速’的例子?
时间: 2024-12-25 01:13:51

算法设计与分析基础(第3版)读书笔记(及几处翻译上的错误~~)的相关文章

算法设计与分析 - 李春葆 - 第二版 - pdf-&gt;word v3

1 1.1 第1章─概论 2 3 1.1.1 练习题 4 1. 下列关于算法的说法中正确的有( ). 5 Ⅰ.求解某一类问题的算法是唯一的 6 Ⅱ.算法必须在有限步操作之后停止 7 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 8 Ⅳ.算法执行后一定产生确定的结果 9 A. 1个 B.2个 C.3个 D.4个 10 2. T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是( ). 11 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 12 C.T(n)

【算法设计与分析基础】大整数乘法

#include<iostream> #include<string> #include<time.h> #include<stdlib.h> #include<sstream> using namespace std; class BigDecimal{ private: int max(int a,int b){//获取两数中的最大值 return a^((a^b) & -(a<b)); } public: string n;

【算法设计与分析基础】关灯游戏

① R.java  用于存储一些全局变量 package lightoff; public class R { /* public static int lightCondition[][] = { {1,0,0,1,1}, {1,0,0,1,1}, {1,0,0,1,1}, {1,0,0,1,1}, }; */ public static int lightCondition[][] = { {1,1,1,1}, {1,1,1,1}, {1,1,1,1}, {1,1,1,1}, }; //灯面

【算法设计与分析基础】19、字符串匹配算法

package cn.xf.algorithm.ch07inputEnhancement; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; /** * * 功能:字符串匹配算法,(还有一种叫KMP算法的,也是很经典的算法,就是比较复杂) * * 第一步:对于给定的长度为m的模式和在模式文本中用到的字母表,按照上面的描述构造移动表 * 第二步:将模式与文本的开

【算法设计与分析基础】16、高斯消元法

package cn.xf.algorithm.ch06ChangeRule; import java.util.ArrayList; import java.util.List; import org.junit.Test; import cn.xf.util.GenericPair; /** * * 功能:高斯消元法,也就是多元数据矩阵,依次吧每列的其他行数据消去为0,然后求出一个元的解,然后就可以根据这个数据来递推出其他元的解 * @author xiaofeng * @date 2017

【算法设计与分析基础】20、动态规划-硬币搜集问题

题目: 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个.在木板左上方的一个机器人需要搜集尽可能多的硬币并把他们带到右下方的单元格,每一步,机器人可以从当前的位置向右移动一格 或者向下移动一格,当机器人遇到一个有硬币的单元格的时,就会将这枚硬币搜集起来 解题: 硬币收集的时候,我们 从结果状态开始看,当搜集当前硬币的时候,只有两种方式,从上往下搜集,或者从左向右搜集 也就是当前f[i,j] = max{f[i, j - 1], f[i - 1, j]},初始化第一行和第一列,从第二行和列开

【算法设计与分析基础】17、堆

以数组来存放堆数据 package cn.xf.algorithm.ch06ChangeRule; import java.util.ArrayList; import java.util.List; import org.junit.Test; /** * * 功能:堆的构造 * 1.堆可以定义为一颗二叉树,树的节点包含键,并且满足一下条件 * 1) 树的形状要求:这棵二叉树是基本完备的(完全二叉树),树的每一层都是满的,除了最后一层最右边的元素可能缺位 * 2) 父母优势,堆特性,每一个节点

【算法设计与分析基础】18、霍纳法则

产生随机数 package cn.xf.algorithm.ch02; import java.util.ArrayList; import java.util.List; /** * 生产随机数 * @author xiaof * */ public class Random { /** * 生产一个随机数的数列 * @param n 生成n个数列 * @param m 数据在0和m-1之间 * @param seed 随机初始种子 * @param a 参数 * @param b 参数 *

【算法设计与分析基础】23、堆排序-2

package cn.xf.algorithm.ch09Greedy.util; import java.util.ArrayList; import java.util.List; /** * 堆构造以及排序 * * .功能:堆的构造 * 1.堆可以定义为一颗二叉树,树的节点包含键,并且满足一下条件 * 1) 树的形状要求:这棵二叉树是基本完备的(完全二叉树),树的每一层都是满的,除了最后一层最右边的元素可能缺位 * 2) 父母优势,堆特性,每一个节点的键都要大于或者等于他子女的键(对于任何叶