卜东波老师的课永远都是那么受欢迎,听了师兄师姐的安利我也选了这么课,提前一个半小时去占座,却只能自己搬个小板凳坐在过道。第一节课老师跟我讲了algorithm的由来,algorithm就是“a step-by-step set of operations to get solution to a problem”。老师还说道对于一个问题的解决并不是鲁莽的,而是先看清问题的本质和纹理,然后一点一点的解决。就像米开朗基罗的艺术一样。
基本的算法解决策略:
devide and conquer:从一个“smallest”的问题开始,看“large”的问题是不是可以分解为“smaller”的子问题进行解决。
“INTELLIGENT” ENUMERATION(枚举):为了优化策略,解决方法可以一步一步的建造,枚举出所有的可能结果然后构建出“partial solution tree”。由于可能建的搜索树太大有时需要进行相应的减枝操作。
IMPROVEMENT:从最初的完整解决方案开始,并尝试逐步改进。
第一题:
最大公约数问题:
input:输入两个整数a、b,其中至少一个不为0,同时a>=b
output:gcd(a, b)
具体解题思路如下,一直做Euclid(b, a mod b)直到当后面的值变成0为止:
function Euclid(a, b)
1: if b=0 then
2: return a;
3: end if
4: return Euclid(b, a mod b);
Euclid(a, b)时间复杂度是O(n3) 。因为在进行递归时,mod操作的时间复杂度是O(n2)。