第2章 复杂度
1、时间复杂度-运行成本 T(n)
- 最好情况
- 最坏情况
- 平均情况
2、O() 增长最快的项(主项)
第3章 策略
1、回溯法 栈
2、启发式方法(启发法)
- 贪心法 每次做出最佳选择 e.g.求解最短路径 每一步选择最短路径
3、分治法 e.g.归并排序
4、动态规划 对于重复子问题只计算一次
- 记忆化
5、分支界定法 解决最优化问题
限制上下界
第4章 数据
1、抽象数据类型(ADT)——逻辑结构
- 优先队列
第5章 算法
1、图的搜索
DFS(深度优先搜索) | 栈 |
BFS(广度优先搜索) | 队列 |
2、寻找最短路径
- 戴克斯特拉算法 优先队列 每个结点优先级是连接该结点与起始结点的边的权重
第6章 数据库
数据挖掘:从数据库中提取有用的信息。
1、关系数据库
表:列(字段),属性;行,数据条目。
模式:字段+限制(e.g. 数据的类型)
主键:表的ID字段。
外键:对其它行ID引用的字段。
??模式迁移
2、非关系数据库(noSQL)
- 文档存储
- 键值对存储 主要在缓存中使用。e.g.键-请求的URL,值-网页最终的HTML
- 图数据库
- 大数据(megadata)
SQL | 以数据为中心,最大限度利用数据结构,消除重复 |
NoSQL | 以应用程序为中心,便于访问 |
3、分布式数据库
- 单主机
- 多主机
- 分片 查询路由器
4、序列化格式
- SQL((结构化查询语言) 常见
- XML(可扩展标记语言)
- JSON(JavaScript对象表示法) 大部分人认可
- CSV(逗号分隔值) 简单 数据以文本形式存储,每行一个数据元素,属性通过逗号(或其他不在数据中出现的字符)隔开
第7章 计算机
1、CPU
工作流程:
- 1)从PC指定的存储地址获取指令; //PC program counter程序计数器
- 2)PC自增;
- 3)执行指令;
- 4)返回步骤1;
PC在CPU上电时复位为默认值,它是计算机中第一条待执行指令的地址,这条指令通常是一种不可变的内置程序,加载计算机的基本功能。(在个人计算机中,这种程序称为BIOS(基本输入输出系统))
2、 编译器
- 脚本语言:由解释器而不是CPU执行,不直接编译为机器码,解释器实时转译并执行代码。e.g.JavaScript,Python,Ruby
- 反汇编:对二进制程序解码,用于编码CPU指令的数字→人类可读指令序列
- 逆向工程:查看上述CUP指令,分析用途(可以确定哪部分代码负责验证软件许可证→盗版)
- 开源软件 源代码开放
3、 存储器层次结构
CPU访问寄存器很快,访问RAM却慢很多。
- 处理器与存储器之间的鸿沟。
- 时间局部性,访问某个存储地址,很快会再次访问。
- 空间局部性,访问某个存储地址,会快会访问其相邻地址。
3、缓存 集成在CPU内部
RAM:1000个CPU周期(1us)
一级缓存:10个CPU周期
二级缓存:100个CPU周期
(购买计算机,注意比较CPU一级/二级/三级缓存容量,建议选时钟频率稍低但缓存容量大的CPU)
4、存储器
第一级存储器(RAM):1 000个CPU周期(1us)
第二级存储器(主存储器(磁盘)):1 000 000个CPU周期(1ms)(CPU无法直接访问)
抖动模式:数据从磁盘读入RAM
(??服务期开始处理无法载入RAM的数据,抖动会导致服务器崩溃。 可能原因:内存不足)
??大端序,小端序
第8章 程序设计
编程范式
1、命令式编程
2、声明式编程
语法糖:在语言中添加语法,支持以更简短的方式编写表达式。
3、逻辑编程
参考资料
Computer Science Distilled:Learn the Artof Solving Computational Problems,by Wladston Ferreira Filho