適用於
單調函式(單調增或單調減)。基本思想
給定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 ...