二分算法中值mid构造方法:如何避免无限死循环

mid = (left + right) / 2

最常用的写法。

 

mid = left + (right - left ) / 2

是第一种的增强写法,可以防止溢出,其他地方与第一种无异。

 

mid = (left+right)/2 + 1

此写法使得在 /2 有余数时进行了五入的操作。

用于在寻找右边界,即mid被归于右侧(left=mid)时,防止死循环。

而为什么此时会产生死循环呢?

假设现在在寻找右边界,同时:left=x,right=x+1

则此时:mid=x

如果在mid时二分条件成立,则再进行二分寻找右边界的时候,此mid值会作为二分的下界保留,即下次查找的范围为包括mid的mid及其右半部分,[ mid , right ]

而同时现在的下界mid等于之前的上界left,

则可以得知如此循环下去,会是一个死循环。

 

 

 

参考:

https://segmentfault.com/a/1190000016825704

posted @ 2022-11-07 19:48  月窀  阅读(253)  评论(0编辑  收藏  举报