ACM课程心得

二分查找算法
定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。
时间复杂度:O(logn),优于直接顺序查找O(n)

二分法在ACM中更多查找一个最优解,而非仅仅查找一个数

常见扩展:
对于某些问题,如果答案具有特定范围,并且验证答案是否成立的函数具有单调性。则可以在范围内对答案进行二分验证,从而快速确定答案。

重要模型
1.这个算法除了有序序列查找值外,在求最优解的问题上也很有用。
2.若有一个“求满足某个条件C(x)的最小x” 的问题,如果所有的x’ >=x也满足C(x’)的话,就可以用二分查找来解决。首先我们将区间的左端点初始化为不满足C(x)的值,右端点初始化为满足C(x)的值。然后每次取中点mid=(low+high)/2,判断C(mid)是否满足并缩小范围,直到
(low,high],足够小了为止。最后high就是要求的最小值。
3.最大化问题也可以用同样的方法求解,请自行思考。
4.这样便把最优化问题转化为可行性问题。这种算法也叫作“二分答案”。
5.满足这样性质的问题典型的有“最大值最小化”、“最小值最大化”

注意
1.在输出小数的问题中,一般会指定允许误差范围,在二分时设置合理的精度。
2.循环终止条件可设为像(ub-lb)>EPS这样,如果EPS太小,就可能会因为浮点小数精度的原因导致死循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值