本文始发于个人公众号:TechFlow

1
二分法可以说是鼎鼎大名,哪怕是没有学过编程的同学,也许说不上来二分法这个名字,但是对于其中的精髓应该都是有所了解的。不了解的同学也没关系,我一句话就能交代清楚:我们每次将一个集合一分为二,每次舍弃其中一半。
早在两千多年前,庄子就搞清楚了二分法的精髓,他说:一尺之棰,日取其半,万世不竭。从这个角度来说,二分法可能是这个世界上最古老的算法之一了。
二分法不仅古老,而且在计算机系统当中非常常见,许多系统当中都用到了二分法的思想。除此之外,在面试的时候,二分法的算法题也是常客。因为二分法本身不复杂,几乎人人都会,但是对二分法的使用能力却各有不同。出二分法的题,可以真实考察面试者的算法能力和编程功底。
不说比较困难的算法题想不出思路,就说最简单没有任何难度的纯二分,在面试的时候,出错的写出bug的也大有人在。
很多人会觉得奇怪,二分法这么简单的算法,真的有人写不出来吗?
还真的有,原因也很简单,恰恰就是二分法太简单了。
无论是在算法导论还是在一些其他的算法教材当中,关于二分法的描述都不多,详细的会有一些图例展示一下二分法的思想,简单的就用几句话描述一下原理,最后再展示一下代码,就完事了。读者在学的时候也是一样,看了一眼原理,哦,非常简单,再看一眼代码,只有三四行,差不多一眼就能记住,那就丢在一边吧。到了真正上手的时候,问题一下就暴露了出来。

二分法最常见的问题有两个,一个是二分的区间边界不清楚,另一个是二分查找的结果不明确。我想,这两个问题是前几次实现二分法的时候,一定会遇到的。遗憾的是,目前的教材当中对于这两

本文探讨了二分法在编程实现中常见的边界问题和结果判定,指出区间边界选择对二分法的影响,并详细解释了左闭右开区间的优势。通过分析三种a[mid]与目标值v的关系,解决了二分查找过程中区间更新的细节,强调了理解算法细节的重要性。
最低0.47元/天 解锁文章
3975

被折叠的 条评论
为什么被折叠?



