算法導論筆記(四)

第六章:變治法

三種類型:

(1)變換爲同樣問題的一個更簡單或者更方便的實例——實例簡化

(2)變換爲同樣實例的不同表現——改變表現

(3)變換爲另一個問題的實例,這種問題的算法是已知的——問題簡化

6.1預排序:

就是利用合併排序/快速排序,時間複雜度爲nlogN的先對要進行計算的數組進行排序

然後將有序數組用來運算

6.2高斯消去法:

初等行變換將原矩陣轉變成上三角矩陣然後自底向上進行求解

第一種:從第一行到倒數第二行循環,對其餘行進行每個元素循環,減去標杆行修改元素和本行修改元素的比例(效率低)

第二種:從第一個元素到倒數第二個元素,遍歷,將對應列的最小的放在最前面,交換行,然後對其餘行和該行按修改元素比例進行做差

6.2.1LU分解:

U爲上三角矩陣(高斯消去法得出)

L爲對角線爲1,其餘爲比例係數的下三角矩陣

Ax=b即爲LUx=b

設Ux = b 則爲 Ly  = b

解y->然後解Ux = y

6.2.2計算矩陣的逆:

退化矩陣:矩陣無法計算逆,逆不存在

非退化矩陣:高斯消去法得到的矩陣對角線上面無0元素即爲非退化矩陣

需要計算n2個元素

AB = E

Axj = ej 矩陣A乘以矩陣B的xj列 = 矩陣E的ej列(j∈(1,n))

6.2.3計算矩陣的行列式(計算矩陣的值)

元素下角標之和 奇負偶正

然後乘以代數餘子式

6.3平衡查找樹:

6.3.1AVL樹:

對左右子樹求高度差,高度差的絕對值均小於2的二叉查找樹(左子樹小於根節點,右子樹大於根節點)即爲AVL樹

通過旋轉使得新插入節點導致不平衡的AVL樹重新變得平衡,通過修改距離插入節點最近的節點來使得AVL樹平衡,

時間複雜度logn

6.3.2 2-3樹:

2-3樹即樹可以包含兩種類型的節點:兩個節點和三個節點

兩個節點:一個鍵,兩個子女

三個節點:兩個鍵,三個子女,左小於min,中∈(min,max),右大於max

2-3樹總是高度平衡的,樹種所有的葉子必須在同一層

2-3樹中插入新節點的做法:二節點的找到合適的位置(小於原來的鍵或者大於原來的鍵)插入,三節點的插入後分裂,最小的鍵分到左側葉子,中間的升入父母節點,最大的放在右側葉子

6.4堆和堆排序

堆用二叉樹表示,且滿足兩個特性:

1.完全二叉樹,只有最後一層的右測可以缺

2.父母優勢,父母節點大於所有子女節點

實際用數組表示,第一個空出來

前n/2向下取整是父母節點,後n/2向上取整是子女節點,按照從左到右次序排列

父母節點爲i 子女節點爲2i 2i+1 子女節點爲i 父母節點 i/2向下取整

構造堆兩種方法:

1.自底向上構造堆

先按照給的生成完全二叉樹,然後作交換保證父母優勢,不能則跟子女節點最大的作交換,從最後的父母節點開始,到根,交換後檢查交換過來的小節點是否滿足父母優勢

時間效率O(n)

2.自頂向下構造堆

插入節點方法,然後將新插入的節點和父母節點作比較,直到滿足父母優勢爲止

刪除節點的方法:

將要被刪除的節點和最後一個節點做交換,規模減一,然後自底向上堆化

6.5霍納法則和二進制冪

6.5.1霍納法則

將含x的多次多項式的式子不斷提x進行拆解,直到不存在x的多次式

係數從左到右排序

6.5.2二進制冪

1.從左到右的二進制冪

將次方拆成2進製表示 1從左邊起每位都平方然後0次方不變1次方+1

2.從右到左的二進制冪

將次方拆成二進制表示 每個二進制位對應a的2的二進制位次方,1則存在,0則不存在

6.6問題簡化

6.6.1最小公倍數的問題

1.找出每個的因子相同個數的乘一遍其餘不同的各自乘一遍

2.lcm = mxn/gcd(m,n)去除最大公約數

6.6.2計算圖中的路徑數量

第i個頂點到第j個頂點,長度爲k的路徑的數量 = pow(A,k)對應(i,j)位置的數目

A爲鄰接矩陣

6.6.3優化問題的化簡

最大化問題和最小化問題的互相轉化

max = -min min

6.6.4線性規劃問題

揹包問題的線性規劃解法,給定目標和約束

6.6.5簡化爲圖的問題

同標題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章