一、什么是二分查找?
1、我们首先引入这样一个问题:如果规定某一科目成绩分数范围:[0,100],现在小明知道自己的成绩,他让你猜他的成绩,如果猜的高了或者低了都会告诉你,用最少的次数猜出他的成绩,你会如何设定方案?(排除运气成分和你对小明平时成绩的了解程度)
①最笨的方法当然就是从0开始猜,一直猜到100分,考虑这样来猜的最少次数:1,100
将分数区间一分为2,我们第一次猜的分数将会是50,当回答是低了的时候,我们将其分数区域从【0,100】确定到【51,100】;当回答高了的时候,我们将分数区域确定到【0,49】。这样一下子就减少了多余的50次猜想(从0数到49)就此继续下去,直到回复是正确为止,这样考虑显然是最优的。
二分查找答案
如果已知候选答案的范围[min,max],有时候我们不必通过计算得到答案,只需在此范围内应用“二分”的过程,逐渐靠近答案(最后,得到答案)!
一、何时可以使用“二分答案”
不是任何题目都适合使用“二分答案”的,我Sam观察到一般有以下的一些特征:
①候选答案必须是离散的 ,且已知答案的范围是:[最小值min, 最大值max] (连续区间上不能进行二分操作)
② 候选答案在区间[min,max]上某种属性一类一类的排列 (这样就能在此属性上进行二分操作 ),各个类别不交错混杂
③容易判断某个点 是否为答案(即二分过程中,mid指向的点是否为答案)