演算法導論學習筆記(2)

2021-09-10 19:19:18 字數 1199 閱讀 3138

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 歸併排序

今天學習了演算法導論上的歸併排序演算法,並且完成了在紙上寫出偽 以前就學過歸併但是理解的不夠透徹,以前還一直困惑 為什麼明明歸併排序比快排的時間複雜度更穩定,為什麼庫函式不用歸併而用快排,現在知道原因了,因為歸併排序必須開額外的空間,而且空間開銷還比較大,下面介紹演算法 首先,歸併排序用到了分治的思...