浅谈二分答案的原理和相关应用

Posted COLIN·GAO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈二分答案的原理和相关应用相关的知识,希望对你有一定的参考价值。

一、二分答案的原理和过程

1.适用范围:

当一个问题的解满足单调性(结果与询问数值成正相关或负相关)且待枚举数量,出现“最大值最小”或“最小值最大”等要求时,我们可以对答案进行二分;

2.原理:

1.在二分答案前,找出答案所在区间,即[L,R];

2.用valid函数验证当前值的可行性;

3.迭代求解的过程中,每次计算一个mid=(L+R)/2,若valid(mid)==true时,根据单调性,选择更接近于不可能的一半区间,反之取另一半区间;

3.代码实现(以求最大值最小为例)

while ( l < r ) {
    mid = ( l + r ) / 2;
    if ( valid ( mid ) ) l = mid + 1;
    else r=mid;
}

while ( l < r ) {
    mid = ( l + r + 1 ) / 2;
    if ( valid ( mid ) ) l = mid;
    else r=mid-1;
}

4.边界问题

1.在第一种实现方式中,如果l和r为相邻的一奇一偶,则每次mid计算后都等于l,如果每次只是让l=mid或r=mid的话,会出现死循环,所以应让l=mid+1;

2.在第二种实现方式中,如果l和r为相邻的一奇一偶,则每次mid计算后都等于r,如果每次只是让l=mid或r=mid的话,会出现死循环,所以应让r=mid-1;

5.优点

1.在时间复杂度上,枚举验证从O(N)优化到O(log N);

2.在思考难度上,寻找解总是比验证解更难(NP和P的关系),所以二分答案的思考过程非常简单;

二、相关问题

1.[NOIP2015提高&洛谷P2678]跳石头

题解随笔:http://www.cnblogs.com/COLIN-LIGHTNING/p/8543415.html

2.[NOIP提高&洛谷P1024]一元三次方程求解

题解随笔:http://www.cnblogs.com/COLIN-LIGHTNING/p/8543377.html

3.[NOIP2012提高&洛谷P1083]借教室

题解随笔:http://www.cnblogs.com/COLIN-LIGHTNING/p/8467795.html

4.[CodePlus 2017 11月赛&洛谷P4058]木材

题解随笔:http://www.cnblogs.com/COLIN-LIGHTNING/p/8543473.html

以上是关于浅谈二分答案的原理和相关应用的主要内容,如果未能解决你的问题,请参考以下文章

[iOS]浅谈NSRunloop工作原理和相关应用

整体二分浅谈

浅谈二分

浅谈二分

浅谈算法-二分查找

浅谈二分的细节问题