二分與三分

2022-04-12 01:27:13 字數 2538 閱讀 7830

其實二分,三分與分治的思想差不多,都是對乙個問題的分段操作(前提為有序)

——qwq

二分法,在乙個單調有序的集合或函式中查詢乙個解,每次分為左右兩部分,判斷解在哪個部分中並調整上下界,直到找到目標元素,每次二分後都將捨棄一半的查詢空間,因此效率很高。

例如,對於在實數區間[l,r]內遞增的連續函式f(x),求[l,r]內f(x)的零點j。j稱為(x)在[l,r]內的零點,當且僅當滿足:

任意l≤x任意j0

f(j)=0

二分法的思想是不斷將待求解區間平均分成兩份,根據求解區間中點的情況來確定目標元素所在的區間,這樣就把解的範圍縮小了一半

設當前求解區間為 [ l , r ] , 它的中點為mid =( l+r )/2則有

若f(m)<0,則j∈[m,r];

若f(m)>0,則j∈[l,m];

若f(m)=0,則j=m

那麼,二分演算法的複雜度為o(二分次數×單次判定複雜度)

1.整數定義域上的二分

int erfen(int l,int

r)

else r=mid-1

; }

return

ans;

}

2.實數定義域上的二分

int erfen(double l,double

r)

return

l;}

常見的型別

1.二分答案

最小值最大(或是最大值最小)問題,這類雙最值問題常常選用二分法求解,也就是確定答案後,配合貪心、dp等其他演算法檢驗這個答案是否合理,將最優化問題轉換為判定性問題。例如,將長度為n的序列a分成最多m個連續段,求所有分法中每段和的最大值的最小是多少

2.二分查詢

用具有單調性的布林表示式求解分界點,比如在有序數列中求數字x的排名

3.代替三分

有時,對於一些單峰函式,我們可以用二分導函式的方法求解函式極值,這時通常將函式的定義域定義為整數域求解比較方便,此時dx可以直接取整數1

三分法適用於求解凸性函式的極值問題,二次函式就是乙個典型的單峰函式。

三分法與二分法一樣,它會不斷縮小答案所在的求解區間。二分法縮小區間利用的原理是函式的單調性,而三分法利用的則是函式的單峰性

設當前求解的區間為 [l,r] ,令 m=1+(l+r)/3 , m=r-(l+r)/3 , 接著我們計算這兩個點的函式值f(m1),f(m2)之後我們將兩點中函式值更優的那個點稱為好點,函式值較差的那個點稱為壞點。我們可以不停縮小求解區間,直至得出近似解

與二分一樣,我們可以指定三分的次數,或是根據 r-1的值來終止

double l=0,r=1e9;

while(r-l>=1e-3

)

這裡再放幾個題看看

#include#include

using

namespace

std;

const

int n=1e5+3

;int

n,m,x[n];

inline

bool check(int

d)

return cow>=m;

//cow>=m是成立

}int

main()

cout

}

#include#include

#include

#include

using

namespace

std;

double a[100001],b[100001],sum[100001

];int

main()

double eps=1e-5

;

double l=-1e-6,r=1e6;

while(r-l>eps)

if(ans>=0) l=mid;

else r=mid;

}cout

}

#include#include

#include

#include

#include

#include

using

namespace

std;

intt,test,n;

double a[10005],b[10005],c[10005

];double x,maxx=0

,l,r,lmid,rmid;

double cal(double

x) int

main()

printf(

"%.4lf\n

",cal(l));

}return0;

}

二分與三分

分值的思想 opj用longlong include include include include include using namespace std long long n long long a1 100005 int m long long a2 10005 int main scanf...

二分與三分

設定越界下標確定是否存在 1 x 2while l x 8while l setprecision 3 15while l 1e 5 1621 for i,0,100 22 從學oi到現在,二分思想是逐漸發揮其威力的。其思想跟數學歸納法很像 並不直接解決問題,而是將問題轉化為幾個相同的規模較小的問題...

二分與三分查詢

一 二分查詢 二分查詢很常見了,放乙個模板就溜。時間複雜度 o logn log以2為底。最後得到的是可行域的閉區間 l,r while r l 二 三分查詢三分查詢用於查詢乙個凸 凹 函式的極值點。時間複雜度 o 2 logn log以3為底。對於乙個區間 l,r 先取中點mid l r 2,再取...