二分答案和三分入門

2022-04-30 21:18:24 字數 2147 閱讀 5003

首先......我是乙個很菜很菜的萌新,所以這篇文章寫得很詳細,有很多我自己的口水話方便我理解,請各位謹慎食用qwq

以前在網上找過很多介紹二分的部落格,但都感覺對萌新不太友好,反正我當時連跳石頭都沒看懂,所以決定自己寫一篇!其中有我的想法,也借鑑了書裡的很多內容,感謝lyd。

二分答案,顧名思義,就是對我們所需要的答案進行二分,對我們要求的值進行二分。

二分的基礎用法是在單調序列或者單調函式當中查詢,當答案具有單調性,我們就可以採用二分來計算,當然還有三分,在後面我會詳細講到

在單調遞增序列a中查詢》=x的數當中最小的乙個

while(l

return a[l];

在單調遞增序列a中查詢<=x的數當中最大的乙個

while(l

return a[l];

根據以上兩種**形式 可以總結出二分的兩種常用形式

1.r=mid,l=mid+1,取中間值的時候,mid=(l+r)>>1;

2.l=mid,r=mid-1,取中間值的時候,mid=(l+r+1)>>1;

注意

1.如果不對mid的取法進行區分,可能會造成出錯的情況,在平時的練習當中,希望大家能注意選擇,我不再贅述,《高階指南》裡面講得很詳細啦。

2.在二分當中,我們採用的是右移運算而不是除法,是因為右移運算是向下取整的,但除法向0取整。

終止條件:l==r 也就是答案所在的位置啦

實數域會方便很多,具體兩種方法。

1.給出精度eps 以l+epswhile(l+eps2.暴力迴圈100次 完全不用擔心不夠 2^100已經超過了int型別~

for(int i=0;i<100;i++)

關於二分的知識點大概就是上面這些,但是大家在寫**的時候一定要注意各種邊界條件,比如說l和r之間可不可以取等號,又或者mid是+1,-1還是不加不減。

我個人感覺二分當中的坑點很多,反正我經常因為各種亂七八糟的邊界條件debug老半天,肯定是編譯器的鍋!可能我還是比較菜對題目/模板的理解不夠深......

下面給出兩道練習題

洛谷p1873砍樹 題解(附帶原oj鏈結)

洛谷p2678跳石頭(noip2015) 題解(附帶原oj鏈結)

三分,顧名思義就是分成三份,它主要用於求單峰函式的極值。

單峰函式,就是乙個有極大值或者極小值的函式。

如果有極大值,那麼極大值的左邊是單調遞增,右邊單調遞減;

如果有極小值,那麼極小值的左邊是單調遞減,右邊是單調遞增。

其實我腦袋裡面已經自動腦補了乙個二次函式了......

(但兩者不能劃等號哦!二次函式是單峰函式,但單峰函式中僅僅是包含了二次函式)

關於單峰函式求極值的分析

以乙個有極大值的單峰函式為例(如圖所示)

若此函式有縱座標y1y2,那麼它橫座標的情況也是兩種。

1.x1和x2都在極大值的右邊,並且x1(感謝我の學長兼男神cjrhahahahaha指正此處 應為x1

2.x1在極大值的左邊,x2在極大值的右邊

通過分析,我們可以發現,x2總在極大值的右邊。

根據以上兩種操作,我們可以不停進行三分,直到找到極大值,對於有極小值的單峰函式也是同乙個道理。

放兩張圖在這裡,大家自行理解吧......

針對有極大值,且有y1

針對有極小值,且有y1>y2的單峰函式。

qwq三分的知識其實比起二分更簡單易懂,因為它能解決的題目範圍更狹窄,但需要較強的數學思維,在題目中

能夠找出單峰函式的思想。 二分只是乙個簡單的模板,如果運用到具體的問題當中,要先理清楚這道題有沒有二分思想,

同時呢,我認為二分當中的核心應該是check()函式。

下面給出一道題

洛谷p1873 傳送帶(scoi2010) 題解(附原oj鏈結)

二分的題解就到這裡了,很感慨。第一次接觸二分我還是乙個普及組萌新時根本就看不懂跳石頭,甚至完全無法理解......

事實證明,成長的道路上荊棘滿布,但只要我們勇敢前行,就沒有無法克服的艱難險阻!

二分和二分答案和三分(經典例題)

int find low int x for int i 1 i n i k 1 for int i 1 i n i sort y 1,y k 然後依次遍歷x,在y中二分查詢是否有 x存在 for int i 1 i 對於難以直接確定解的問題,採取二分列舉 檢驗的思想將求解類問題轉換為驗證類問題 k...

二分和三分

三分二分,乙個簡單而神奇的演算法,可以簡化時間複雜度,但是用二分有乙個條件,就是我們進行二分的序列必須有單調性。原理 aa中找乙個數x xx 保證x xx一定存在 我們可以用樸素演算法,直接從頭到尾找一遍,時間複雜度o n o n o n 如果當序列a aa的長度十分大時,這種方法就不好用了。二分橫...

二分和三分

二分 二分,即為折半查詢,它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。也就是說,二分的條件為必須滿足數列或某一邏輯的順序性,單調 只有這樣才能進行二分。查詢方法 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如...