程式設計師成長之旅 二分查詢時間與空間複雜度

2021-09-24 21:18:47 字數 650 閱讀 6397

空間複雜度

非遞迴

int

binary_search

(int

* list,

int len,

int target)

else

if(list[middle]

> target)

else

if(list[middle]

< target)

}printf

("未找到該值!");

return-1

;}

遞迴
while

(left <= right)

第一次有 n 個元素,第二次n/2個元素,以此類推第k次則為n/2^k個元素。

而時間複雜度一般都是取最壞結果的,並且是以k來作為衡量時間複雜度,

最壞結果,最後一次再剩乙個元素,即n/2^k=1,得k=log2n,所以時間複雜

度為 o(logn)。

遞迴

遞迴的深度*每次遞迴所需的輔助空間的個數

所以空間複雜度是:o(n) ( 遞迴一次要開闢乙個空間)

非遞迴由於輔助空間是常數級別的

所以:空間複雜度是o(1);

程式設計師成長之旅 二分查詢

最終 溢位問題在迴圈體中,一般計算中間值middle時所用的是 middle left right 2 但是這種情況容易溢位,因為一旦left right超過所在型別的範圍的話,就會出現錯誤,為了不出現這種問題,我們引入了 middle left right left 2 邊界問題 迴圈體外的初始化...

二分查詢時間複雜度推導

二分查詢是乙個非常常用且簡潔的查詢演算法,相信很多人也知道它的時間複雜度是logn,但是我看網上的大多數部落格給出的所謂推導過程都十分不嚴謹,於是我花了些時間自己寫了推導過程。首先上二分查詢的 public int find int x,int data 查詢元素下標,沒找到返回 1 param x...

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

時間複雜度無非就是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 最壞情況...