二分查詢時間複雜度推導

2022-07-09 18:51:08 字數 1252 閱讀 8770

二分查詢是乙個非常常用且簡潔的查詢演算法,相信很多人也知道它的時間複雜度是logn,但是我看網上的大多數部落格給出的所謂推導過程都十分不嚴謹,於是我花了些時間自己寫了推導過程。

首先上二分查詢的**:

public

int find(int x, int

data)

/*** 查詢元素下標,沒找到返回-1

* @param

x 待查詢元素

* @param

data 有序的元素陣列

* @createtime:2023年3月4日

* @author

: gaojiabao

*/private

int find(int x, int data, int low, int

high)

else

if (x >data[mid])

else

if (x

if (low ==high)

else

} else

}

下面是推導過程:

假設資料的規模為n(即每次呼叫時的high-low),程式執行的比較次數表示為c(n),假設程式查詢的是乙個不存在的資料,則此時執行的次數是最多的:

執行第一次時,有:

1代表執行了一次x和data[mid]的比較過程,

代表下一次遞迴呼叫find方法時high-low的值,也就是新的資料規模每次較少一半以上。

遞迴上面的公式,有:

我們知道每乙個整數都可以表示為2i+k的形式,如1=20+0,5=22+1,10=23+2,因此

設n=2i+k

令上面公式的n=i,則有:

因為n=2i+k,則有i=⌊lgn⌋,因此:

因為我們一直以來的假設是要查詢到的元素是找不到的,所以現在的情況是c(n)最大的情況,對於一般情況,則有:

因此二分查詢的時間複雜度是logn。 

二分查詢時間複雜度的計算

時間複雜度無非就是while迴圈的次數!總共有n個元素,漸漸跟下去就是n,n 2,n 4,n 2 k,其中k就是迴圈的次數 由於你n 2 k取整後 1 即令n 2 k 1 可得k log2n,是以2為底,n的對數 所以時間複雜度可以表示o o logn 二分查詢的時間複雜度是o log n 最壞情況...

二分查詢時間複雜度的計算

時間複雜度無非就是while迴圈的次數!總共有n個元素,漸漸跟下去就是n,n 2,n 4,n 2 k,其中k就是迴圈的次數 由於你n 2 k取整後 1 即令n 2 k 1 可得k log2n,是以2為底,n的對數 所以時間複雜度可以表示o o logn 二分查詢的時間複雜度是o log n 最壞情況...

查詢(時間複雜度 二分法)

package day52 因為最近開始做專案時間就顯得很緊張了,停了乙個禮拜了快,有點兒偷懶了 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,...