二分查詢法(折半查詢法)

2021-09-29 12:52:55 字數 2139 閱讀 2373

二分查詢用法

1、二分查詢要求

2、什麼時候使用二分查詢

當在乙個有序list中,需要查詢乙個值,而這個值不確定在什麼位置時,使用該演算法可以通過極少的查詢次數得到結果;

而使用簡單查詢,如果這個值在list的最後出現就需要查詢列表長度的次數才可以查到。

也就是說,對於包含n個元素的列表,用二分查詢最多需要log⁡2

n\log_n

log2​n

,而簡單查詢最多需要n步。

這裡會用到乙個公式log⁡2

n\log_n

log2​n

,「對數」:

3、什麼是對數?

例:log⁡2

8\log_8

log2​8

相當於問「將多少個2相乘的結果為8」.答案是3個2,因此,log⁡2

8\log_8

log2​8

=3,對數是冪運算的逆運算,通過乙個例子可以快速理解:

冪運算對數

2

32^3

23= 8

log ⁡2

8\log_8

log2​8

= 32

42^4

24= 16

log ⁡2

16\log_16

log2​1

6 = 4

2

52^5

25= 32

log ⁡2

32\log_32

log2​3

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...