基礎演算法 二分法

2021-10-04 13:25:44 字數 1670 閱讀 7860

對於區間[a,b]上連續不斷且f(a)·f(b)<0的函式y=f(x),通過不斷地把函式f(x)的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。

示例1

尋找是否有4這個值有輸出yes 否則 no

輸入

512

345

輸出

yes

**

#include

#include

#include

using

namespace std;

intmain()

;//進行排序

sort

(a, a + n -1)

;int l, r, mid;

//左邊。右邊,中間

l =0;

r = n -1;

int flag =1;

while

(r>=l);}

if(flag) cout <<

"no"

<< endl;

};

思路

就是或者中間大小的值,如果大,則縮小區間,那值一定在左邊,那另r = mid -1; 相反則 l = mid + 1; 時間複雜度為log n;

示例2

問題描述

輸入n ( n≤100,000)個整數,找出其中的兩個數,它們之和等於整數m(假定肯定有解)。題中所有整數都能用int 表示。下面的計算我們假色m = 10

輸入

691

2387

輸出

1 9

2 83 7

**

#include

#include

#include

using

namespace std;

intmain()

//排序之後進行二分求解法

sort

(a,a+n)

;int l, r, mid;

l =0;

r = n -1;

for(

int i =

0; i < n; i++);

}};}

思路

取排序後的第乙個值,然後在根據2分查詢法,查詢剩下的值,判斷是否和取的數加起來等於需要等於的數,如果有則列印,以此類推,時間複雜度為(nlogn)

總結

二分查詢法適用於單調函式的查詢。相比於傳統的迴圈,效率要好很多。希望下次在遇見類似的題目時,對於基礎演算法的使用更加靈活,使得解題更加快速。

二分法 演算法

查詢演算法中的 二分法 是這樣定義的 給定n個從小到大排好序的整數序列list,以及某待查詢整數x,我們的目標是找到x在list中的下標。即若有list i x,則返回i 否則返回 1表示沒有找到。二分法是先找到序列的中點list m 與x進行比較,若相等則返回中點下標 否則,若list m x,則...

演算法 二分法

二分法可以歸為兩大類 二分查詢演算法 二分排序演算法 二分合併演算法 演算法中經常用到二分查詢演算法,比如最常規的應用就是在乙個有序陣列中找特定的數,但是如何寫出乙個完整準確的二分法呢,邊界條件如何判斷,到底是等於還是不等?可能會困惱大家,比如說查詢第乙個等於5的數,那又在如何查詢呢?查詢最後乙個等...

二分法 演算法

二分法查詢,這個演算法要求資料要是有序的。比如有這樣的問題 找出乙個陣列中,兩個數的和小於等於15,然後輸出他們,否則就單獨輸出較大的數。binarysearch.cpp include using namespace std void binarysearch int array,int leng...