二分查詢用法
1、二分查詢要求
2、什麼時候使用二分查詢
當在乙個有序list中,需要查詢乙個值,而這個值不確定在什麼位置時,使用該演算法可以通過極少的查詢次數得到結果;
而使用簡單查詢,如果這個值在list的最後出現就需要查詢列表長度的次數才可以查到。
也就是說,對於包含n個元素的列表,用二分查詢最多需要log2
n\log_n
log2n
,而簡單查詢最多需要n步。
這裡會用到乙個公式log2
n\log_n
log2n
,「對數」:
3、什麼是對數?
例:log2
8\log_8
log28
相當於問「將多少個2相乘的結果為8」.答案是3個2,因此,log2
8\log_8
log28
=3,對數是冪運算的逆運算,通過乙個例子可以快速理解:
冪運算對數
2
32^3
23= 8
log 2
8\log_8
log28
= 32
42^4
24= 16
log 2
16\log_16
log21
6 = 4
2
52^5
25= 32
log 2
32\log_32
log23
2 = 5
1 02
10^2
102 = 100
log 10
100\log_100
log10
100 = 2
1 03
10^3
103 = 1000
log 10
1000
\log_1000
log10
1000
= 34、二分查詢法(折半查詢法)
/**
* 二分查詢法
* @author syy
* @datetime 2019-11-11t14:11:55+0800
* @param [array] $array [目標陣列]
* @param [int] $search [查詢值]
* @return [type] [description]
*/function
binarysearch
($array
,$search
)elseif
($array
[$mid
]<
$search
)else
}return
false;}
$array=[
3,24,
45,65,
345,
644,
3456
,6534
,6535
,7641
,7834];
var_dump
(binarysearch
($array
,7834))
;
5、執行時間簡單查詢,需要逐個的查詢,如果list包含100個數字,最多需要100次。如果10000個數字,最多需要10000次。也就是說,最多的查詢次數與列表長度相同,這被稱為線性時間(linear time)。
二分查詢不同,如list包含100個數字,最多需要查7次。如果10000個數字,最多需要14次!二分查詢的執行時間對數時間(或log時間)
元素個數
簡單查詢(最大次數)
二分查詢(最大次數)
100100次
7次10000
10000次
14次時間
線性時間o(n)
對數時間o(log n)
二分查詢法(折半查詢法)
二分查詢法 說明 如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數 這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。解法 在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋 的物件,所以無需浪費時間在左邊...
二分查詢法 折半查詢法
二分查詢法 也稱折半查詢法,是一種效率較高的查詢方法,存在一定的侷限性。侷限性 適用於有序陣列 有序鍊錶等查詢,例如 array,list。基本原理 第一步 設定需要查詢的元素key,再設定low和high兩個臨時指標分別指向左邊第乙個元素和右邊最後乙個元素。第二步 因為資料是有序的,先根據low和...
折半查詢法(二分查詢法)
一.舉例 二.演算法時間複雜度 假設一共有n個元素 第一次折半元素個數變為n 2 第二次折半元素個數變為n 4 第三次折半元素個數變為n 8 第k次折半元素個數變為n 2 k 假設k次找到,即為n 2 k 1 k log2 n 三.函式實現 define crt secure no warnings...