算法:二分法

文章介绍了二分法的概念,通过猜数游戏展示了二分法如何提高查找效率。接着,文章提供了二分法的经典实现,并分析了不同情况下的返回值。之后,通过洛谷上的两道编程题,解释了二分法在查找和优化答案时的应用,包括处理单调序列和解决砍树问题。文章强调了二分法在处理有序序列和特定范围查找时的优势。

什么是二分?


我们首先来玩一个猜数游戏:我随便想一个1~100中的数字,

你的目标是以最少的次数猜到这个数字。

每次猜测后,我都会告诉你大了、小了或对了来验证结果。

有两种猜数方式:

第一种:假设你从1开始依次往上猜

这种方式的风险极高,假如我想的数是1,那么只用猜一次;假如我想的数是99,则需要猜测99次才能猜对。

第二种:假设你从50开始折半猜

1~100 猜50,小了。

50~100 猜75,大了。

50~75 猜62,大了。

50~62 猜56,对了!

这样每一次都取得当前可能区间的中间值,从而将余下的数排除一半。这种方法就叫做:二分法。


每一步的猜测都可以帮我们排除掉一半的错误结果,大大提高了查找答案的效率。

但是使用这个方法的首要前提是:需要查找的序列是有序排列的。

二分的实现


二分法最经典的写法应是如此:

在简单有序数组中查找指定元素

int binary_search(int low,int high,int key){
    while(low <= high){
        int mid = (low + high) /
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值