總共有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)。
總結一下就是:
二分法的關鍵思想是 假設該陣列的長度是n那麼二分後是n/2,再二分後是n/4……直到二分到1結束(當然這是屬於最壞的情況了,即每次找到的那個中點數都不是我們要找的),那麼二分的次數就是基本語句執行的次數,於是我們可以設次數為x,n*(1/2)^x=1;則x=logn,底數是2。
時間複雜度 二分法
二分法是每次取中間值與目標值進行判斷,若相同則返回中間值的標號,不同則將中間值賦給取值邊界較遠的一邊,再次取中間值進行比較,直至相同。先定義用於比較的陣列 for i 0 i10 10 二分法 int search int list,int num return m 第1次二分 n 2 第2次二分 ...
二分法時間複雜度計算分析
二分法即在查詢的同時先將被查詢的鍵和子陣列的中間鍵進行比較。如果被查詢的鍵小於中間鍵,則在左子陣列 中繼 續查詢,如果大於就在右陣列中繼續查詢,否則中間鍵就是我們要找的鍵。首先我們假設f n 為使用二分法在長度為n的有序列表中查詢特定鍵的查詢次數,則易得不等式 f n f n 2 1 因為無論要查詢...
查詢(時間複雜度 二分法)
package day52 因為最近開始做專案時間就顯得很緊張了,停了乙個禮拜了快,有點兒偷懶了 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,...