時間複雜度 二分查詢

2022-08-21 04:03:14 字數 2100 閱讀 3564

不常見的時間複雜度(看看就好)

如何一眼判斷時間複雜度?

def hanoi(n, a, b, c):

if n > 0:

hanoi(n-1, a, c, b)

print('%s->%s' % (a, c))

hanoi(n-1, b, a, c)

hanoi(5, 'a', 'b', 'c')

#h(n) = 2h(n-1)+1

#h(1)=1

遞迴面試題 斐波那契
# 斐波那契 數列

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

from sys import setrecursionlimit

from cal_time import cal_time

setrecursionlimit(1000)

# o(2^n)

# f(n) = f(n-1) + f(n-2)

# 乙個問題的解決可以依賴於其子問題的解決的時候

def fib(n):

if n == 0 or n == 1:

return 1

else:

return fib(n-1) + fib(n-2)

# o(n)

def fib2(n):

li = [1,1]

for i in range(2, n+1):

return li[-1]

def fib3(n):

li = [-1 for i in range(n+1)]

def fib(n):

if n == 0 or n == 1:

return 1

elif li[n] >= 0:

return li[n]

else:

v = fib(n-1) + fib(n-2)

li[n] = v

return li[n]

return fib(n)

# 1 2

# o(n)

def fib4(n):

a = 1

b = 1

c = 1

for i in range(2, n+1):

c = a + b

a = b

b = c

return c

@cal_time

def fibnacci(n):

return fib4(n)

print(fibnacci(400))

from cal_time import cal_time

# 時間複雜度 : log n

def binary_search(li, val):

low = 0

high = len(li)-1

while low <= high: # 只要候選區有值

mid = (low + high) // 2

if val == li[mid]:

return mid

elif val < li[mid]:

high = mid - 1

else: # val > li[mid]

low = mid + 1

return -1

# 遞迴與迭代

# 一般遞迴會慢

# 尾遞迴 : 編譯器會優化成迭代 但是python沒有針對尾遞迴進行優化

def bin_search_rec(data_set, value, low, high):

if low <= high:

mid = (low + high) // 2

if data_set[mid] == value:

return mid

elif data_set[mid] > value:

return bin_search_rec(data_set, value, low, mid - 1)

else:

return bin_search_rec(data_set, value, mid + 1, high)

else:

return

二分查詢時間複雜度推導

二分查詢是乙個非常常用且簡潔的查詢演算法,相信很多人也知道它的時間複雜度是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 最壞情況...

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

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