第一章,第二章
算法导论读书笔记
1、算法是什么
2、要知道几种数据结构的优势和局限
比如排序算法
NP问题是什么
循环不变性,算法正确性的证明
布尔运算符 会短路的
传值,传参的不同
复杂度分析
输入规模
最坏情况和 平均情况
数据结构听课笔记
1、
makefile来编译c++程序
make是如何高效编译程序的:通过检测文件是否变化
具体如下:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
那么如何检测文件是否变化的呢?
存疑。
2、
c++程序的调试器、debugger
ddd,gdb等等
讨论课上会讲
3、
证明程序正确
right output
will halt
如何证明算法的准确性
test case? 但test case不是无穷的
4、
为什么要学习算法
比如中文,英文
都有语法,动词等
尽管表面上看起来不同,但是其中的语义逻辑是相同的,而算法就是程序中的逻辑
尽管c++和python程序不一样,但是他们的伪代码描述、程序实现的逻辑是一样的,所以 要学习算法,学习算法的时候多用伪代码描述
5、
程序的本质: Input-->output
对于 sort(排序算法), input为一组数,output为 sorted permutation
6、
数据结构要学什么
store and organize data for efficient access
7、
computability
什么是可计算问题,哪些问题计算机可以处理
turing machine:
enigma破译德军密码
证明了 哪些问题 是可计算的
比如 halting problem
8、
pseudocode 伪代码 示范
分析插入排序的 复杂度 并证明 该算法的正确性
即对loop invariant的证明
a[0,j-1] is sorted
借鉴了数归方法(第一数学归纳法):
1、Initialization
2、Maintenance
3、Termination
具体证明http://www.cnblogs.com/bamboo-talking/archive/2011/02/05/1950197.html
9、
时间复杂度与什么有关
1、n 问题的规模
2、step,程序的步数
插入排序的 最坏复杂度为 n^2,整体为 a*n^2+b*n+c
为什么不考虑那些常数 和 低阶项, 而只考虑growth rate
因为当n 小 时,该算法运行时间很小,有效率
当n很大时候,运行时间只取决n^2,该项为 高阶项
关注最坏时间复杂度,因为
1有最坏预期,not exceed limited time 比如飞控系统
2dont know the average input
关于平均时间,因为
对于 搜索引擎,常用的 是快排,尽管他的最坏复杂度比 归并排序高,但是我们应该考虑的是 平均时间
算法导论读书笔记
1、算法是什么
2、要知道几种数据结构的优势和局限
比如排序算法
NP问题是什么
循环不变性,算法正确性的证明
布尔运算符 会短路的
传值,传参的不同
复杂度分析
输入规模
最坏情况和 平均情况
数据结构听课笔记
1、
makefile来编译c++程序
make是如何高效编译程序的:通过检测文件是否变化
具体如下:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
那么如何检测文件是否变化的呢?
存疑。
2、
c++程序的调试器、debugger
ddd,gdb等等
讨论课上会讲
3、
证明程序正确
right output
will halt
如何证明算法的准确性
test case? 但test case不是无穷的
4、
为什么要学习算法
比如中文,英文
都有语法,动词等
尽管表面上看起来不同,但是其中的语义逻辑是相同的,而算法就是程序中的逻辑
尽管c++和python程序不一样,但是他们的伪代码描述、程序实现的逻辑是一样的,所以 要学习算法,学习算法的时候多用伪代码描述
5、
程序的本质: Input-->output
对于 sort(排序算法), input为一组数,output为 sorted permutation
6、
数据结构要学什么
store and organize data for efficient access
7、
computability
什么是可计算问题,哪些问题计算机可以处理
turing machine:
enigma破译德军密码
证明了 哪些问题 是可计算的
比如 halting problem
8、
pseudocode 伪代码 示范
分析插入排序的 复杂度 并证明 该算法的正确性
即对loop invariant的证明
a[0,j-1] is sorted
借鉴了数归方法(第一数学归纳法):
1、Initialization
2、Maintenance
3、Termination
具体证明http://www.cnblogs.com/bamboo-talking/archive/2011/02/05/1950197.html
9、
时间复杂度与什么有关
1、n 问题的规模
2、step,程序的步数
插入排序的 最坏复杂度为 n^2,整体为 a*n^2+b*n+c
为什么不考虑那些常数 和 低阶项, 而只考虑growth rate
因为当n 小 时,该算法运行时间很小,有效率
当n很大时候,运行时间只取决n^2,该项为 高阶项
关注最坏时间复杂度,因为
1有最坏预期,not exceed limited time 比如飞控系统
2dont know the average input
关于平均时间,因为
对于 搜索引擎,常用的 是快排,尽管他的最坏复杂度比 归并排序高,但是我们应该考虑的是 平均时间
另外对于不同cpu,不同指令的执行速度时不同的,这里认为对于同一台cpu那些指令都是常数级执行时间的