二分法時間複雜度計算分析

2021-07-26 23:55:09 字數 725 閱讀 1551

二分法即在查詢的同時先將被查詢的鍵和子陣列的中間鍵進行比較。如果被查詢的鍵小於中間鍵,則在左子陣列 中繼

續查詢,如果大於就在右陣列中繼續查詢,否則中間鍵就是我們要找的鍵。

首先我們假設f(n)為使用二分法在長度為n的有序列表中查詢特定鍵的查詢次數,則易得不等式:

f(n)<=f(n/2)+1

因為無論要查詢的元素在中間鍵左側還是右側,子陣列的大小都不會超過n/2,我們需要額外一次比較來檢查中間 元

素和被查詢運算的值對比狀況以確定下一次查詢區間。當n為2的冪減一次時,有不等式

f(2^n-1)<=f(2^(n-1)-1)+1

繼續遞推可得

f(2^n-1)<=f(2^(n-1)-1)+1<=f(2^(n-2)-1)+2<=f(2^(n-3)-1)+3 ..... <=f(2^0)+n==f(1)+n == n+1 可得

f(n)=f(2^n)<=n+1 ---> f(n)<=log2n+1 可得

o()=()(logn)

同時也可以做如下理解,每次進行二分查詢的元素基數都為上一次查詢基數的二分之一,最後一次查詢的元素基

數肯定會大於一,則假設用二分法在n個元素中查詢某個元素,則第一次,第二次,第三次,第n次的查詢元素基數分

別為n,n/2,n/4......n/(2^n),由此可得簡單表示式如下:

n/(2^n)>=1  ---->  n>=2^n  ----> log2n>=n  ----> o()=()(logn)

二分法時間複雜度計算

總共有n個元素,每次查詢的區間大小就是n,n 2,n 4,n 2 k 接下來操作元素的剩餘個數 其中k就是迴圈的次數。k在遞迴的時候也可以說是遞迴的深度 由於n 2 k取整後 1,即令n 2 k 1,可得k log2n,是以2為底,n的對數 所以時間複雜度可以表示o o logn 總結一下就是 二分...

時間複雜度 二分法

二分法是每次取中間值與目標值進行判斷,若相同則返回中間值的標號,不同則將中間值賦給取值邊界較遠的一邊,再次取中間值進行比較,直至相同。先定義用於比較的陣列 for i 0 i10 10 二分法 int search int list,int num return m 第1次二分 n 2 第2次二分 ...

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

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