空間複雜度
非遞迴
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 最壞情況...