MIT-CS6.00笔记Lec13-15
Lec 13. & Lec14.
**Fibnacci:**在递归的方法来计算Fib的时候有非常多的重复的计算->重复子问题->可以优化
Overlapping subproblems:
- memoization(记忆化):record value 1st time,then look it up subsequently:记录计算的值,在之后的过程中先去查找有没有计算过,如果计算过,就直接使用
- table lookup(查表)
**Optimal substructure(最优子结构):**Global optimal solution can be contructed from optimal solutions to sub-problems:全局最优解可以被分解成每一个子问题的最优解
背包问题:(knapsack)
decision tree(决策树): ==> 先序遍历 ==> 复杂度O(2**n)(爆炸增长)
- 深度左优先树
- 回溯
- 优化方式==>记忆化:存数组
虽然时间和空间复杂度都是O(nS),但是随着n和S的增大,算法的复杂度还是会接近爆炸(伪多项式)
背包问题的变种:增加约束条件
总结:
- tarding time for space:基本理念就是空间换时间
- don’t be intimidated by exponential problems
- dynamic problems broadly useful:递归问题往往可以使用动态规划来降低复杂度(比最坏的好)
- problem reduction:要有把复杂问题拆分和简单化的思想(important)
Lec15.
**Module:**collection of related functions
object-oriented programming <==> data abstraction <==> abstract data types
object = collection of data and functions:将数据和操作数据的函数组织在一起(封装,Encapsulation)
Message passing metaphor:隐秘消息传递,在OOP的对象传递中包含了消息传递
**Class:**collection of objects with characteristics in common
- template for creating instances of an object
- instance has some internal attribues