二分 三分模板

2021-07-16 00:03:06 字數 896 閱讀 6768

適用於

單調函式(單調增或單調減)。

基本思想

給定9個數,由小到大排列,從這9個數中找出某乙個確切的數(比如4)

偽**

int binary_sreach(int a, int

left, int

right, int x)

if (a[left]==x) return left;

return -1;

}

給你三個陣列a, b, c,並給出乙個x,是否能從這三個陣列中找出ai, bj, ck三個數,使得滿足ai + bj + ck = x。1<= a, b, c陣列的大小 <=500

遍歷時間複雜度是o(n^3),但先暴力求解出所有 ai + bj,然後二分查詢 x – ck 時間複雜度就是o(n^2logn)。

適用於

單峰凸性函式,如二次函式

偽**

while (right  –  left  >  exp)   

重點:

比較mid1和mid2誰更靠近極值,如果mid1更靠近極值,右區間改為mid2,否則左區間改為mid1

推薦一篇部落格

二分和三分

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

二分和三分

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

二分與三分

其實二分,三分與分治的思想差不多,都是對乙個問題的分段操作 前提為有序 qwq 二分法,在乙個單調有序的集合或函式中查詢乙個解,每次分為左右兩部分,判斷解在哪個部分中並調整上下界,直到找到目標元素,每次二分後都將捨棄一半的查詢空間,因此效率很高。例如,對於在實數區間 l,r 內遞增的連續函式f x ...