Skip to content
MisakaTang's Blog
Go back

MIT-CS6.00笔记Lec10-12

Edit page

Lec10.

Search

Divide & conquer(分治)

MergeSort(归并排序)

复杂度:n(每一次要操作的数的个数)logn(归并的次数)
适用的场合:要归并的元素不是很复杂而且归并的操作简单

Hashing:

Python语法.Exception:

Exception vs Assert

使用异常的原因:为了保证在异常出现的时候可以正确的捕获和处理它,而不是使得异常向别的地方抛出并且扩散,使得错误无法正确的定位(难以Debug).

Lec11.

Testing && Debugging:

Validation:(验证过程)

Debugging:

Defensive programing:(防卫性程序)

Testing:

在做集成测试之前要对每个单元先做单元测试保证其正确.

Test suite(测试集):

Myth:

  1. bugs crawl into programs
  2. bugs breed into programs(bug不会繁殖)

Goal: Not to eliminate one bug, is to move towards a bug-free program:不只是要去消除一个bug,而是要让程序中没有bug出现(消除一个bug做的不好,会带入更多的bug).

最好的debug工具:

如何形成系统化的测试?

设计一个好的测试:

Lec12.

调试的一些技巧(习惯):

optimization problem:(最优化问题)

经典的最优化问题:

  1. 最短路
  2. 旅行商问题(TSP)
  3. bin packing(装箱问题)
  4. sequence alignment(序列调整)
  5. Knapsack(背包问题)
  6. problem reduction(问题约束):把新的问题规约到老的问题上,解决它

continuous knapsack(连续背包):->Greedy algorithm:每一步都选择最优的策略,但是局部最优叠加并不一定导致全局的最优

0/1 knapsack(01背包):
最大化的函数:sum(i=1,n)=Pi*Xi
约束条件:sum(i=1,n)=Wi*Xi <= C
对于暴力来说复杂度是指数级增长,不适用于这个问题

dynamic programming:(动态规划)

从求Fibnacci序列来看什么是重叠子问题:fib(0),fib(1),fib(2)…都被重复计算==>重叠子问题


Edit page
Share this post on:

Previous Post
MIT-CS6.00笔记Lec13-15
Next Post
MIT-CS6.00笔记Lec7-9