二分(二分答案、二分搜索)与单调性

经典二分搜索是二分空间范围。

二分答案又叫二分猜值,是二分解的值空间。

其实可以统一,普通的二分搜索也是二分答案值域——下标空间,也是猜值。


二分必须满足单调性,最直观的,二分搜索只能在有序数组上进行。单调性体现在,下标和元素值是单调的,也就是 if (j > i) 有 A[j] > A[i]


一般二分答案解决的问题是最优解问题,单调性体现在:如果x0是可行解,则所有x < x0 是都是可行解;如果x0 不是可行解,则所有x (x > x0)都不是可行解。经典例题是“寻找第一个失败的build”,这是个最优解问题(第一个),当build i是failed的,则所有i之后的build都是fail的,build i是成功的,则所有i之前的build都是成功的。


二分答案就是在找那个边界,之前都不满足解的要求,之后都满足。即000111序列找第一个1,当然前提是解的分布满足这种单调性质。


y = f(x) 是个单调函数, 二分查找就是解方程 f(x) = C,假设解为a, 先猜一个x,代入函数f(x)求值,然后比较目标函数 f(x)和C,利用单调性质,f(x) > C 则  x > a,,可得a的范围在x的左边

1)猜值x

2)代入函数求值 f(x)

3) 和target 比较

4)确定下次猜的范围



你可能感兴趣的:(二分法,算法)