二分三分法學習小結

2021-09-19 15:39:46 字數 1236 閱讀 8686

二分查詢演算法:

二分查詢演算法就是從單調有序的集合中從兩端不斷查詢元素,然後不斷縮小範圍直至查到該元素或縮至最小無解的過程。

時間複雜度:o (logn),優於直接順序查詢o(n)

例:

//x:待查詢的元素, n:陣列集合大小, num陣列單調遞增

int low=0,high=n,mid,res = -1; //low:集合下界 high:集合上節

while(low<=high)

else if(num[mid]三分法:

當需要求某凸性或凹形函式的極值,通過函式本身表示式並不容易求解時,就可以用三分法不斷逼近求解。

例:

類似二分的定義left和right

mid = (left + right) / 2

midmid = (mid + right) / 2;

如果mid靠近極值點,則right = midmid;

否則(即midmid靠近極值點),則left = mid;

double mid, midmid;

while ( low + eps < high )

double cal(double x)

在實際問題中,有時利用二分、三分法可以較為精確地求解出一些臨界值。dp:

dp的種類有很多:經典dp,區間dp,樹形dp,數字dp,概率(期望)dp,狀壓dp,資料結構優化的dp等。動態規劃真的是很多,是難點。這大概也是比賽時很多同學卡住的原因吧,老師說dp沒什麼好辦法,多做題唄。現在的題目很多就感覺很不簡單了,以後還有這麼多,感覺壓力好大。還是要多看資料,多做題啊。

狀壓dp是基於狀態壓縮的動態規劃,又叫做集合動態規劃。

這是一類以集合為狀態的特殊的動態規劃問題。有些時候,需要被記錄到得狀態有很多,但是對每個狀態都開一維來記錄顯然是行不通的,我們就考慮把這些狀態壓縮一下,通常情況下,若只有兩種狀態,我們會把狀態用二進位制表示,每個格仔的狀態只有1或0,然後把它轉成十進位制來記錄。

二分三分法

x 待查詢的值,caculate 所要查詢的函式,這裡單調遞增。double low 區間下界 high 區間上界 mid while high low 1.0e 6 有區間下界left,區間上界right,mid為中點,midmid為靠近right的四等分點。即 mid left right 2 ...

二分三分法 (二)

最近剛學了二分法,還沒有學三分,所以在上課之前,把三分總體的預習了一下,感覺三分應該和二分大體的思路還是一致的,二分的思路是在乙個單調的數列基礎上,每次都求中間值,然後不斷縮小,最後求出解,這樣可以把時間壓縮到最小化。然而三分主要運用的方面是針對於數列是凹函式或者凸函式,先將乙個區間分成3份,每份佔...

三分法小結

二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸性函式時,二分法就無法適用,這時三分法就可以 大顯身手 如圖,類似二分的定義left和right,mid left right 2,midmid mid right 2 如果mid靠近極值點,則right midmid 否則...