big o notation:模擬為小於等於 n2+o(n)=o(n2)
big omega notation ω:模擬為 大於等於
θ:模擬為等於
嚴格符號:小o與小ω:模擬為小於和大於
解遞迴方法:
1、替換法:guess the form,verify by induction,solve the consts
2、遞迴樹法
3、master method:之應用於特定情況
t(n)=at(n/b)+f(n)------>compare f(n) with n^(log_b a)---------->3 cases
divide-conquer method:
1.divide 2.conquer 3.combine
ex:歸併排序、二分查詢、乘方問題分治法、斐波那契數列平方遞迴演算法、矩陣乘法分治演算法、vlsi布局h布局
fibonacci numbers:遞迴演算法(指數級時間)bottom-up演算法(linear)樸素平方遞迴(因浮點、僅理論可行)平方遞迴(log_2 n)
其中遞迴演算法與bottom-up演算法的python實現:
import datetime
def fibo(n):
if n==0:
return 0
elif n==1:
return 1
elif n>=2:
return fibo(n-1)+fibo(n-2)
starttime = datetime.datetime.now()
print("遞迴演算法計算:指數級時間增長\n",fibo(35))
endtime = datetime.datetime.now()
print("cost time:",endtime - starttime,end="\n\n")
def bottom_up(n):
if n==0:
return 0
else:
i=1f0=0
f1=1
while i
遞迴演算法計算:指數級時間增長
9227465
cost time: 0:00:04.679061
bottom_up演算法:線性增長
9227465
cost time: 0:00:00.004988
>>>
演算法導論學習2
一般的,對於演算法來說,重點關注的是對演算法的時間和空間度量,也就是時間複雜度和空間複雜度。演算法所需要的時間與輸入的規模同步增長的,而時間複雜度就是衡量演算法執行的基本運算元的乙個函式。對於插入排序來說,當需要排列的陣列分別為順序排列和逆序排列時,演算法的時間複雜度是不一樣的。根據演算法執行的每一...
《演算法導論》學習筆記
4.5.1 二分查詢 乙個經典的問題 如何在乙個嚴格遞增序列a中找出給定的數x 最直接的辦法是 線性掃瞄序列中的所有元素,如果當前元素恰好為x,則表明查詢成功 如果掃瞄完整個序列都沒有發現給定的數x,則表明查詢失敗,說明序列中不存在數x。這種順序查詢的時間複雜度為o n 更好的辦法便是使用二分查詢 ...
演算法導論學習筆記 2 歸併排序
今天學習了演算法導論上的歸併排序演算法,並且完成了在紙上寫出偽 以前就學過歸併但是理解的不夠透徹,以前還一直困惑 為什麼明明歸併排序比快排的時間複雜度更穩定,為什麼庫函式不用歸併而用快排,現在知道原因了,因為歸併排序必須開額外的空間,而且空間開銷還比較大,下面介紹演算法 首先,歸併排序用到了分治的思...