演算法導論學習筆記(時時更新)

2021-06-26 11:18:03 字數 2392 閱讀 4049

排序是演算法的基礎

演算法包括輸入輸出,資料結構,衡量演算法的是速度,

插入排序:對陣列a[length]進行排序θ(n*n):

for j=2 to length;

key=a[j];//insert a[j] into the a[1..j-1]

i=j-1

while i>=0 and a[i]>key

a[i+1]=a[i]

i--  a[i+1]=key

引出迴圈不變式的概念(並證明)

輸入規模:輸入中的項數,輸入規模量度。

平均情況:可能會用到概率分析,使用隨機化演算法計算期望等等。

增長量級(增長率):計算出執行時間的簡化表示式,通過係數比較。

集合離散數學分析(就是概率?)

分治法:利用遞迴把乙個大問題分解成若干個小問題解決。

遞迴法排序θ(n*lgn):

merger-sort(a,p,r)

if p    q=(p+r)/2

merger-sort(a,p,q)

merger-sort(a,q+1,r)

merger(a,p,q,r)

其中:merger(a,p,q,r)

n1=q-p+1

n2=r-q

let l[1..n1+1]and r[1..n2+1]be new arrays

for i=1 to n1

l[i]=a[p+i-1]

for j=1 to n2

r[j]=a[q+j]l[n1+1]=

l[n1+1]=~  //終止標誌

r[n2+1]=~

i=1j=1

for k=p to r

if l[i]<=r[j]

a[k]=l[i]

i++else a[k]=r[j]

j++遞迴的一中式子:t(n)=

說明f(n)屬於θ(g(n))有時可以表示匿名函式(出現在等式右邊)

出現在等式左邊時,記作f(n)=θ(g(n)),g(n)是f(n)的漸近緊確界

要求每個成員漸近非負,使用θ(1)來表示乙個常量或者關於某個變數的

常量函式。

o記號  漸進上界(最壞情況執行時間) ,定義:對於乙個給定函式g(n),o(g

(n))=

ω記號 漸近下界(最優情況執行時間),定義:對於乙個給定函式g(n),ω(g

(n))=

o記號  非漸近緊確上界,定義:對於乙個給定函式g(n),o(g(n))=

build_max_heap(a)

max_heap(a,i)

第十章:鍊錶的操作:(二叉樹可以用鍊錶的形式表示)

插入元素:(插入x)

x.next=l.head

if l.head!=nil

l.head.prev=x

l.head=x

x.prev=nil

第十一章:hash (用於元素的關鍵字和元素儲存的位置建立乙個hash algorithm方便加密查

找)一種類似於陣列結構的可以直接定址。

希表。這種方法的基本思想是:首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關

系f,使得p=f(k),f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直

接存入位址

為f(k)的單元;以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元素的儲存位置

p=f(k),從而達到按關鍵字直接訪問元素的目的。

第十四章:資料結構的擴張:對基本資料結構進行擴充套件以支援一些 附加功能

1.選擇一種基礎資料結構

2.確定資料結構要維護的附加資訊

3.檢驗能否附加資訊。

4.增加一些功能。

第十五章:*動態規劃:(與分治法類似,但是用於處理子問題重疊的情況)常用於求解最優

化問題,乙個問題有很多解希望找到裡面最大或者最小的解。關鍵字:記憶,空間換時間,不

重複求解,由交疊子問題從較小問題解逐步決策,構造較大問題的解。

1.刻畫乙個最優解的結構特徵。

2.遞迴定義最優解的值。

3.計算最優解的值,通常採用自底向上的方法。

4.利用計算出的資訊構造乙個最優解

第十六章:貪心演算法(dp的簡化,他在每一步都做出看起來最佳的選擇,希望得到全域性最優解

)第十七章:攤還分析:我們求資料結構的乙個操作序列中所執行的所有操作的平均時間,來評

價操作代價。但攤還分析不同於平均情況,它不涉及概率,他可以保證最壞情況下的每個操作

的平均效能。

第十八章:b樹:為磁碟或其他直接訪問的輔助裝置而設計的一種平衡搜尋樹,相比紅黑樹,

他在降低磁碟i/o運算元方面要更好一些

他的節點可以有很多孩子,n個節點的b樹高度為o(lgn),b樹演算法將所需

頁面(資料集合)從磁碟複製到主存,然後將修改過的頁面寫回磁碟。

《演算法導論》學習筆記

4.5.1 二分查詢 乙個經典的問題 如何在乙個嚴格遞增序列a中找出給定的數x 最直接的辦法是 線性掃瞄序列中的所有元素,如果當前元素恰好為x,則表明查詢成功 如果掃瞄完整個序列都沒有發現給定的數x,則表明查詢失敗,說明序列中不存在數x。這種順序查詢的時間複雜度為o n 更好的辦法便是使用二分查詢 ...

學習筆記 時間函式

to char sysdate 3,d 2 即當前日期是周五,過三天是下周一 網上搜的一些常用時間函式 加法select sysdate,add months sysdate,12 from dual 加1年 select sysdate,add months sysdate,1 from dual...

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

乙個acm若菜,趁著acm淡季,開始學習演算法導論了,經過一年的acm學習,逐漸的發現,學東西,深入才是王道,以前學習乙個演算法,總是看懂了就開始做題,到後來才發現很多題目,會演算法,卻不知道是用這個演算法,這就是演算法理解的不到位的後果,從今天開始,定下目標 1.深入系統的學習演算法,2.學會紙上...