DSA学习笔记——绪论

封底估算

DSA学习笔记——绪论_第1张图片
DSA学习笔记——绪论_第2张图片

复杂度

DSA学习笔记——绪论_第3张图片
DSA学习笔记——绪论_第4张图片
DSA学习笔记——绪论_第5张图片
DSA学习笔记——绪论_第6张图片
DSA学习笔记——绪论_第7张图片

DSA学习笔记——绪论_第8张图片
DSA学习笔记——绪论_第9张图片
DSA学习笔记——绪论_第10张图片

算法分析

DSA学习笔记——绪论_第11张图片
DSA学习笔记——绪论_第12张图片
DSA学习笔记——绪论_第13张图片
DSA学习笔记——绪论_第14张图片
DSA学习笔记——绪论_第15张图片
DSA学习笔记——绪论_第16张图片

迭代和递归

迭代乃人工,递归方神通
To interate is human, to recurse, divine.

凡治众如治寡,分数是也
The control of a large force is
the same principle as
the control of a few men:
it is merely a question of
dividing up their numbers.

DSA学习笔记——绪论_第17张图片
DSA学习笔记——绪论_第18张图片
DSA学习笔记——绪论_第19张图片
DSA学习笔记——绪论_第20张图片
DSA学习笔记——绪论_第21张图片
DSA学习笔记——绪论_第22张图片
DSA学习笔记——绪论_第23张图片
DSA学习笔记——绪论_第24张图片
DSA学习笔记——绪论_第25张图片
DSA学习笔记——绪论_第26张图片
DSA学习笔记——绪论_第27张图片
DSA学习笔记——绪论_第28张图片

动态规划

动态规划的概念

Make it work,
make it right,
make it fast.
—Kent Beck

前两步可以用递归来解决,后一步可以用迭代来解决。

描述:通过递归找出了算法的本质,并且给出了一个初步的解之后,再将其等效地转化为迭代的形式。

fib():递归

用递归计算Fibonaccis数列的第n项。

fib(n)=fib(n-1)+fib(n-2):{
     0,1,1,2,3,5,8, ...}
int fib(int n) {
       //为何这么慢
	return(2 > n) ? n : fib(n - 1) + fib(n - 2);
}

实现:

#include 
int fib(int n) {
     //计算Fibonaccis数列的第n项
	return(2 > n) ? 
				n	//若到达递归基,直接取值 
		: fib(n - 1) + fib(n - 2); //否则,递归计算前两项
}
int main()
{
     
	int m=64;
	for (int i = 0; i < m; i++) {
     
		std::cout <<i+1<<"\t"<< fib(i)<< std::endl;
	}
}

fib()递推方程

DSA学习笔记——绪论_第29张图片

fib()封底估算

DSA学习笔记——绪论_第30张图片

fib()递归跟踪

DSA学习笔记——绪论_第31张图片

fib()回归迭代

DSA学习笔记——绪论_第32张图片

最长公共子序列(LCS)

DSA学习笔记——绪论_第33张图片
左上图中的T、N两字符次序紊乱(两条线交叉),无法存在同一序列中,导致出现多种序列构成,所以说可能有多个。
右上图中的D字符的来源有两个,难以判断由哪个d提供,所以说可能有歧义。

递归LCS

DSA学习笔记——绪论_第34张图片
DSA学习笔记——绪论_第35张图片

理解LCS

DSA学习笔记——绪论_第36张图片
DSA学习笔记——绪论_第37张图片
DSA学习笔记——绪论_第38张图片
通路总长:(n+m-a-b)=(n-a)+(m-b) 。
在 n+m-a-b 下的 n-a ,意味着从 n+m-a-b 这么多条路径中选出 n-a 条水平路径的总数。或者从 n+m-a-b 这么多条路径中选出互补的 m-b 条垂直的路径的总数。

动态规划LCS

DSA学习笔记——绪论_第39张图片

以上截图基本来自B站清华邓俊辉老师的课程
截图链接 https://www.bilibili.com/video/BV1db411L71m

你可能感兴趣的:(笔记,算法,数据结构)