1. 程式人生 > >二分(二分答案、二分搜尋)與單調性

二分(二分答案、二分搜尋)與單調性

經典二分搜尋是二分空間範圍。

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

其實可以統一,普通的二分搜尋也是二分答案值域——下標空間,也是猜值。

二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 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)確定下次猜的範圍