算法程序设计第一课

卜东波老师的课程深入浅出,强调理解问题本质,采用分治、智能枚举等策略解决算法难题。以最大公约数问题为例,介绍了Euclid算法的递归实现及时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卜东波老师的课永远都是那么受欢迎,听了师兄师姐的安利我也选了这么课,提前一个半小时去占座,却只能自己搬个小板凳坐在过道。第一节课老师跟我讲了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)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值