对于二分法的抽象概括 算法 二分

在算法编写过程中,二分是经常用到的一个算法,它往往是用于对于枚举算法时间复杂度的优化(甚至有些时候用枚举算法是行不通的)。

应用二分法的抽象数学条件大致如下:

1、答案数值

2、答案在一个可以确定的有限范围内。

3、答案是这个有限范围的一个划分。具体来说:答案本身和数轴上它左(右)边的数满足某种性质A,而数轴上在答案右(左)边的数满足另外一种性质B,其中A,B是相对立的两种性质(即对于一个数x,它在性质A,B中满足且只满足一个)。

4、存在一种可行算法,可以判断x满足性质A or B。

具体说明一下二分法的实现过程(拿整形答案举例):

1、假设:经过分析,ans和数轴上在它左边的数满足性质A,数轴上在ans右边的数满足性质B。确定ans∈[L,R)

2、若L=R-1,跳转到步骤4。令m=(L+R)/2,检验m是否满足性质A

3、若m:满足性质A,可以判断ans∈[m,R),令L=m;满足性质B,可以判断ans∈[L,m),令R=m。回到步骤2。(通过画数轴理解)

4、当L=R-1,可以判断ans=L(区间[L,R)内只有唯一一个数L)

如果答案是小数,那么根据答案要求设定精度上限即可。

猜你喜欢

转载自www.cnblogs.com/Golden-Elf/p/11768513.html
今日推荐