add a summary on dsa chp1.
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
数据结构与算法第一章知识总结
|
||||
=========================
|
||||
|
||||
## 知识脉络
|
||||
|
||||
本章主要讨论算法的基本概念与基本知识。一开始指出了算法的概念,并且通过算法的三个历史发展来进一步阐述什么是算法。在客观世界中,解决同一个问题往往具有许多不同的方法,即存在不同的算法,因此需要就这些不同的算法的性能进行评价,为了消除外界因素的影响,需要引入理想模型,即图灵机和随机存取机`RAM`,并且在此基础上提出了`渐进分析`的概念。`渐进分析`具有三种(四种)不同的记号,它们具有不同的含义,通过这些记号就可以实现对算法的评估了。
|
||||
接下来的内容主要是对上面知识的应用,即在两种特定情形——迭代与递归——下,如何对算法的效率进行评价。对于迭代算法而言,核心的方法就是级数求和,借助图形来进行分析却更有直观性;对于递归算法而言,核心的方法是递归跟踪和递推公式,并且结合两个具体的实例`sum`和`max2`来分别阐述迭代和递归算法的效率分析。
|
||||
正如客观世界的发展一样,算法的设计过程往往也是曲折的,具有一个从`work`到`right`再到`fast`的发展过程,也就是动态规划的概念。动态规划是指,分析一开始设计出来的效率较低的算法,找到它低效的原因,随后自底向上对它进行改进。接下来通过两个具体的例子,即`fib`和`lcs`,详细说明了对它们进行动态规划的步骤。
|
||||
|
||||
## 为什么需要数据结构和算法
|
||||
|
||||
讨论这个问题之前,先想想究竟什么是计算机,又什么是算法。
|
||||
|
||||
@@ -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`算法的递归版和迭代版,并通过实测比较运行时间。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user