第一章 概述
104 算法和计算复杂性
1.三个问题
what——分类问题
why——证明问题
how——过程问题(即算法、数据结构)
2.计算复杂性
(1)概念:基于有穷观点的能行方法的可计算概念1)概念:基于有穷观点的能行方法的可计算概念
(2)关心:能否在有限的资源(时间/空间)解决问题
不关心:具体要花费多少计算的步骤或者存储空间
注:有些问题即使有相应的解法,却没有什么可行性
105 突破计算极限
方式:例如分布式计算
106 抽象与现实
- 抽象:即从“逻辑“和”物理“两个不同的层面上去看待问题
- 逻辑定义接口,物理完成实现。逻辑上的接口由物理层来实现
- 编程是算法的一种物理实现。
算法➕数据结构 = 程序 - 语言为我们提供了“过程”和“数据”,一般来说“过程”是指控制语句,“数据”指的是基本的数据类型。
107 为什么研究数据结构与算法
- ADT抽象数据类型
(1)用户只要关心这些数据类型能否提供可用的接口,而不必去担心这些数据类型是怎么完成和实现的。实现和操作相当于是物理层的实现,用户使用的是逻辑层的接口。
(2)ADT是一种逻辑的描述,不涉及怎么实现,并且对数据的一些处理方法的实现隐藏起来,这就是一种“封装”,可以降低算法的复杂度。
(3)同一个ADT可以有许多不同的物理实现,意味着是逻辑上的稳定性,物理上的多样性,逻辑稳定,物理多变。
总结:ADT可以有多种实现,接口独立于实现,层层抽象可以降低算法的复杂度。
第二章 算法分析
201 算法分析
可以根据计算资源的消耗来判断一个算法的性能,计算资源分为空间(存储空间、内存)和时间(执行时间)。
202 大O表示法
大O表示法:O(f(n)),其中f(n)是数量级函数中随着n(问题规模)的增大而增长最快的主导部分(不带系数)。
205/206 python数据类型的性能
80/20原则:让80%的功能使用率只有20%,让20%的功能使用率有80%。总的来说,是让最常用的方法性能最好。
python数据类型时间复杂度:https://wiki.python.org/moin/TimeComplexity