演算法筆記 二分法的使用(使用目的 模板)

2021-08-31 16:31:48 字數 904 閱讀 3597

今天看完《演算法筆記》裡二分法這個章節,稍微總結一下。

二分法的思想主要就是折半查詢,達到o(logn)的查詢速度。

使用目的或者說使用情景主要有如下三個,下面將依次介紹。

查詢有序序列中是否存在滿足條件的元素

查詢有序序列中滿足條件的第乙個元素

對一些函式進行求根(近似)計算

下面的函式是找到a陣列中是否有等於x的元素,如果有返回索引下標,如果沒有則返回-1。

要注意二分的使用條件是序列有序,下面**中的判斷條件可以根據使用需求進行修改。

對於一些下標快達到int上限的搜尋區間時,可以把

mid = (left + right) / 2;
替換為

mid = left + (right - left) / 2;
int binary_search(int a, int left, int right, int x) 

else

}return -1;

}

下面的函式是找到a陣列中等於x的第乙個元素的索引下標。

同樣的,**中的判斷條件可以根據使用需求進行修改。

int binary_search(int a, int left, int right, int x) 

else

}return left;

}

const int eps = 1e-5; // 求根精度為1e-5

double f(double x)

int solve(double l, double r)

else

}return mid;

}

二分法的使用

在看二分查詢之前,需要先強調一下,陣列和函式等價,即f x 等價於num x 都是對映關係,根據乙個x值可以得到唯一乙個函式值。這裡的函式不僅指數學函式,也值自定義的表現為y f x 的函式。二分查詢通常用來處理函式值單調,且容易判斷的問題。例如在有序陣列中查詢值。無論什麼形式的二分,整體思想都是將...

二分法 演算法

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

演算法 二分法

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