diff --git a/thu_dsa/chp1/chp1.md b/thu_dsa/chp1/chp1.md index 64cb4a0..9c0475f 100644 --- a/thu_dsa/chp1/chp1.md +++ b/thu_dsa/chp1/chp1.md @@ -1,6 +1,12 @@ 数据结构与算法第一章知识总结 ========================= +## 知识脉络 + +本章主要讨论算法的基本概念与基本知识。一开始指出了算法的概念,并且通过算法的三个历史发展来进一步阐述什么是算法。在客观世界中,解决同一个问题往往具有许多不同的方法,即存在不同的算法,因此需要就这些不同的算法的性能进行评价,为了消除外界因素的影响,需要引入理想模型,即图灵机和随机存取机`RAM`,并且在此基础上提出了`渐进分析`的概念。`渐进分析`具有三种(四种)不同的记号,它们具有不同的含义,通过这些记号就可以实现对算法的评估了。 +接下来的内容主要是对上面知识的应用,即在两种特定情形——迭代与递归——下,如何对算法的效率进行评价。对于迭代算法而言,核心的方法就是级数求和,借助图形来进行分析却更有直观性;对于递归算法而言,核心的方法是递归跟踪和递推公式,并且结合两个具体的实例`sum`和`max2`来分别阐述迭代和递归算法的效率分析。 +正如客观世界的发展一样,算法的设计过程往往也是曲折的,具有一个从`work`到`right`再到`fast`的发展过程,也就是动态规划的概念。动态规划是指,分析一开始设计出来的效率较低的算法,找到它低效的原因,随后自底向上对它进行改进。接下来通过两个具体的例子,即`fib`和`lcs`,详细说明了对它们进行动态规划的步骤。 + ## 为什么需要数据结构和算法 讨论这个问题之前,先想想究竟什么是计算机,又什么是算法。 diff --git a/thu_dsa/chp1/exercises.md b/thu_dsa/chp1/exercises.md index 162d095..4e4dda8 100644 --- a/thu_dsa/chp1/exercises.md +++ b/thu_dsa/chp1/exercises.md @@ -160,9 +160,9 @@ string lcsIt(string one, string two, int len1, int len2){ > 考查序列`A = "immaculate`和`B = "computer`。1)它们的`LCS`是什么;2)这里的解是否唯一?是否有歧义性?3)按照本节所给的算法,找出的是哪一个解? -1)`"mute"`和`"cute"` -2)所以显然不唯一,有歧义性。 -3)按照上面给的算法,优先从上方进行更新,即优先选择序列`A`更靠前的字符,即找出的是`"mute"`。 ++ 1)`"mute"`和`"cute"` ++ 2)所以显然不唯一,有歧义性。 ++ 3)按照上面给的算法,优先从上方进行更新,即优先选择序列`A`更靠前的字符,即找出的是`"mute"`。 > 实现`LCS`算法的递归版和迭代版,并通过实测比较运行时间。