2015年1月28日 星期三

Chapter 6    Orthogonal Projection
6.1   Introduction
  • 範數
    • 考慮 V 為一個向量空間(Vector space),則我們說  Norm 為一個函數滿足下列性質:
      1. 嚴格正定性: ||v||≥0, ||v||=0⇔v=0
      2. 正齊次性: 對所有的 α∈R,v∈V, ||αv||=|α|⋅||v||
      3. 次可加性:對任意 v1,v2∈V , ||v1+v2||≤||v1||+||v2|| (三角不等式)
      •  Norm為長度的推廣
      • 下圖顯示不同P-範數的「單位圓」
  • 正交相關 
    • 正交 (orthogonal) : 垂直這一直觀概念的推廣。作為一個形容詞,只有在一個確定的內積空間中才有意義。若內積空間中兩向量的內積為0,則稱它們是正交的。如果能夠定義向量間的夾角,則正交可以直觀的理解為垂直。 
    • 單範正交 (orthonormal)  : 若每對向量均為正交且每個向量均為單位向量則稱S為單範正交。
    • 正交集合為線性獨立 : 若S = {v1,v2,v3...vn}為內積空間V上一些非零向量所構成的正交集合,則S為線性獨立


6.2   Orthogonal Matrix
  • Orthogonal Matrix
    • 若 A^−1 = A^T 則稱 A 是正交矩陣,此時 A^TA = I。要驗證是不是正交矩陣,檢查 A^−1 = A^T 比較慢,算 A^TA = I 比較快
    • 作為一個線性映射,正交矩陣保持距離不變,所以它是一個保距映射,具體例子為旋轉與鏡射。
  • Gram-Schmidt process
    • Gram-Schmidt正交化提供了一種方法,能夠通過這一子空間上的一個基得出子空間的一個orthogonal basis,並可進一步求出對應的orthonormal basis。在數值計算中,Gram-Schmidt正交化是數值不穩定的,計算中累積的捨入誤差會使最終結果的正交性變得很差。因此在實際應用中通常使用豪斯霍爾德變換或Givens旋轉進行正交化。
    • 例題

  • QR分解法
    • QR分解法是三種將矩陣分解的方式之一。這種方式,把矩陣分解成一個半正交矩陣與一個上三角矩陣的積。QR分解的實際計算有很多方法,例如Givens旋轉、Householder變換,以及Gram-Schmidt正交化等等。
    • 例題

6.3   Least Squares Solution
  • least squares problem
    • Ax = b為線性方程式系統 
    1. 如果此系統為一致性,我們可以使用高斯消去法與反代法解x 
    2. 當系統為不一致性時,如何找出最可能解,其中一個方法就是在Rn中找出使得Ax-b的範數||Ax - b||為最小的向量x 。這個定義即是最小平方問題的核心。

  • least squares solution
    • 對於任一線性系統Ax = b,這其所相對的Normal Equation為 A^TAx = A^Tb為一致性系統,且一般方程式的所有解是Ax=b 的最小平方解。
    • 假如W是A的行空間,且x是Ax=b 的任一最小平方解,則b正交投影到W是projwb = Ax,若A為一具有線性獨立行向量之mxn的矩陣,則對於每一個mx1的矩陣b,線性系統 Ax=b 有一唯一最小平方解。


  • Normal Equation 求 least squares solution的幾何意義
    • Ax=b想要有解,b必須落在Ax的column space中。
    • b 若不落在Ax的column space中,至少b的投影 projection必然落在此空間當中。
    • 試圖尋找x使得Ax-b的長度最小。上述誤差的最小值正好發生在誤差向量與A的column space垂直時,也就是說希望誤差向量落在A'的 null space。




2015年1月26日 星期一

Chapter 3   Vector Spaces
3.1   Vector Spaces
  • Vector Spaces Axioms Definition 
    1. 加法交換性:x + y = y + x —> ex : 減法不滿足交換性
    2. 加法結合性:(x + y) + z = x + (y + z)
    3. 加法單位元素:x + 0 = x —> ex : (x1,y1) + (x2,y2) = (x,0); x+y = min(x,y) 皆不存在零向量
    4. 加法反元素:x + (-x) = 0 
    5. 乘法分配性[1]:a(x + y) =ax + ay
    6. 乘法分配性[2]:(a + b) x = ax + bx —> ex : 對係數操作者可能不滿足乘法分配性2
    7. 乘法結合性:(a b)x = a(bx) 
    8. 乘法單位元素:1x = x
    • 9. 10. 加法純量積封閉性
  • 常見的vector spaces
    • 歐式空間
    • 矩陣空間
    • 多項式空間
    • 函數空間:Cn : 微分n次的都是Cn的子空間

3.2   Subspaces
  • 子空間的充要條件:所有a, b ∈ F , u, v ∈ W   則ax + by ∈W
    也就是說子空間只需驗證加法與純量積封閉性
  • 子空間的必要條件:可用0 ∈ W,  -v ∈ W 快速判斷
  • W1與W2之關係
    • W1, W2為V的子空間,則W1 ∩ W2 亦為V的子空間 (聯集不一定是!)
    • W1 ∪ W2為V的子空間,則W1⊆ W2 或 W⊆ W
    • 和空間:W1 + W2與兩者聯集不同,W1 + W2 = (w1 + w2 | w1 ⊆ W1, w2 ⊆ W2)W1 + W2 = Span(S1 ∪ S2),即Span(S1) + Span(S2) = Span(S1 ∪ S2)
  • 基本子空間
    • 行空間:CS(A) = { Ax | x ∈ Fnx1 },注意該子空間張在對應域
    • 核空間:ker(A) = { x ∈ Fnx1 | Ax = 0 },注意該子空間張在定義域
    • y = (AB)x = A(Bx) ⊆ CS(A) 所以CS(AB)⊆CS(A)  
      又兩者皆為R的subspace, 所以CS(AB)為CS(A)的subspace

3.3   Span and Linear Combination
  • linear combination:v  = a1v1 + a2v2 + … + anvn
  • span(S):把某一組基底所有可能linear combination合成的向量收集起來 (把S的subspace補起來)
    • span(S)為V的subspace 
    • span(S)為包含S的minimum subspace
    • 如果S已經為V的subspace, 則span(S) = S
    • span(∅) = {零空間} , 因為任何subspace包含nullspace(kernel)
    • S1⊆S2 則 span(S1)⊆span(S2)
      • Span(S)題目:用定義做!
      • ex : 
      • 1a + 3b + -2c = 4
      • -2a + -7b + 1c = 9
      • 3a + 10b + 9c = 19
      • *列運算後行向量之線性組合關係式不變,kernel不變
  • linear independent  
    • 概念:一個有無冗員的概念
    • 定義:v  = a1v1 + a2v2 + … + anvn 時,a1 = a2 = … = an=0
    • 矩陣版定義:當Ax = 0 (homogeneous) 時, x這個向量一定全為零,只有在A是singular時,上述會成立
  • Wronskian matrix
    • 只要Wronskian matrix不等於0都是獨立
    • 但Wronskian matrix為0不一定是相依,因此沒獲得任何情報

3.4   Basis and Dimension
  • basis 和 dimension
    • 定義:span(b) = V,b linear independent,則稱b為V的一組basis,且稱b的元素個數為V的dimension = dim(V)
    • 性質
      • basis的每個vector對生成都有幫助
      • 任一組basis的向量個數必定唯一,但不只有唯一一組
      • 所有向量空間都有基底
      • 所有在V中的向量,都可以唯一寫成V的basis的線性組合
                                        生成
vector個數高至低: ————————  basis (min spanning set / max LI set)
                                     線性獨立
  • 三個獨立生成相關的定理
    • 生成剪裁定理:多的 (造成dependent的vector) 幹掉
    • 獨立擴增定理:可找到u不屬於span(S),讓span(S)加上u仍independent,可一直加直到又independent又生成V
    • Steinitz代換定理:W為V的subspace dim(W) = 5, dim(V) = 7,W每一組basis皆可加某2個vector形成V的1個basis,(但V減回去不行)
  • 可逆的充要條件
    • ker(A) = {0}
    • A為行獨立,即A的行向量為線性獨立 (F的basis)
    • A行生成Fnx1,即A的行向量生成Fnx1
    • CS(A) = Fnx1
    • dim(ker(A)) = 0
    • dim(CS(A)) = n
  • [複習] 可逆矩陣
    • 矩陣必是方陣才有資格談
    • 方陣的行列式|A| = 0,稱矩陣A為singular;
    • 可逆矩陣就是nonsingular
    • 如果A為singular,則AX=0有無窮解,AX=b有無窮解或者無解
    • 如果A為nonsingular,則AX=0有且只有唯一零解,AX=b有唯一解
  • 直和:假設 W1 , W2 , W3 , … , W為 V 的子空間,則滿足以下兩個條件稱為直和
    • W1 , W2 , W3 , … , Wn 為獨立子空間 (例如 W1∩(W2+W3)= {0} ... 共三個等式)
      (上式等價於 dim(W1 + W2 + W3 + … + Wn) = dim(W1) + dim(W2) + … + dim(W3))
    • V = W1 + W2 + W3 + … + Wn (和生成) 

2015年1月26日 星期一

Chapter 2   Determinants
2.1   Determinants of a Matrix
  • Determinants Definition 

  • 特殊型matrix的Determinants計算

    • 轉置矩陣:轉置det(A)不變,det(AT) = det(A)
    • 三角矩陣:det(A)為對角線相乘
    • Vandermonde matrix
    • 基本矩陣的det(E)操作

  • Determinants 性質 
    • A is singular iff det(A) = 0  (用rref, elementary matrix的概念證)
    • 有零列(行)或相同比例的列(行)則det(A) = 0
    • det(A-1) = 1 / det(A) 
    • det(AB) = det(A)det(B)  (任何兩個方陣)
    • det[ A  C ] = det(A)det(B)    
           [ O  B ]

2.2   Cramer's Rule
  • Classical Adjoint and Inverse matrix
  • det(adj(A))=(det(A))^n-1 (If A is any n x n non-singular matrix)
    • proof : 
      • A(adj(A)) = det(A) I
      • det (A(adj(A))) = det (det(A) I)
        // 兩邊取det(),注意右側,det(K*I) = K^n
      • det(A)det(adj(A)) = (det(A))^n
      • det(adj(A)) = [det(A)]^(n - 1)
  • Cramer's rule



2015年1月26日 星期一

Chapter 1   Matrices and Systems of Equations  
1.1   Systems of Linear Equations
  • Consistent:一致的,Ax = b 有解
  • Overdetermined:等式量 > 未知數量
  • Coefficient matrix:係數矩陣 ,[A]
  • Argument matrix:增廣矩陣,[A|b]
  • Homogeneous linear system:齊次線性系統,Ax = 0
  • Trivial solution:顯然解,Ax = 0 中的0這個解 (因為顯然有0這個解)
  • Equivalent:兩系統有相同的Solution set 稱為 (在Matrix版本中稱row equivalent)
  • Rank(A)
    • 運算至 rref 時非零列的個數
    • 幾何意義為這個線性系統的獨立方程式個數
    • A : m x n ,  rank(A) <= min { m , n } 
      • rank( A ) != rank( [ A|b ] ) ,則 Ax = b 無解
      • rank( A ) = rank( [ A|b ] ) = n ,則 Ax = b 具唯一解
      • rank( A ) = rank( [ A|b ] ) < n ,則 Ax = b 具無限多解,其中n - rank(A)為自由變數個數 

1.2   Row Echelon Form
  • Row echelon form (Gaussian elimination)
    • pivot(首非零項)皆為1
    • 所有非零列在所有全零列的上面
    • 首項係數所在的column,在首項係數下的元素皆為0
  • Reduce row echelon form (Gauss - Jordan reduction)
    • 是row echelon form
    • 首項係數是該行唯一非零列
  • 每個矩陣A皆列等價於唯一的rref
  • pivot column對應的變數為首項變數,nonpivot column對應的變數為自由變數


1.3   Matrix Algebra
  • 相較於傳統數系,矩陣運算性質並不好,以下列出幾個不成立的性質
    • AB = BA 未必成立,即矩陣乘法不具交換性
    • An = O,未必保證A = O  (ex : 嚴格上三角矩陣)
    • A2 = A,未必保證A = I or O  (3. 4. ex : 投影矩陣)
    • A != O , B != O,未必保證 AB != O
    • AB = AC 且 A != O,未必保證 B = C,即矩陣乘法不具消去性
    • 未知矩陣X滿足方程式Xn = A (A為已知),未必保證具有n個解,不滿足代數基本定理
    • (A + B)2 = A2 + 2AB + B2未必成立,即二項式定理未必成立
  • Algebraic Rule for Transpose
    • (AT)T = A
    • (aA + bB)T = aAT + bB(線性組合轉置次序可交換)
    • (AB)T = BTAT
  • 對稱相關的矩陣
    • symmetric matrix:A^T = A
    • skew-symmetric matrix:A^T = - A
    • Hermitian matrix:A^H = A
    • skew-Hermitian matrix:AH = - A
  • Algebraic Rule for inverse
    • Def : BA = AB = I, 則B為A^-1 (invertible, nonsingular)
    • (A-1)-1 = A
    • (AB)-1 = B-1A-1
    • (AT)-1 = (A-1)T
  • 跡數trace:對角線相加
    • tr(AB) = tr(BA)

1.4   Elementary Matrix
  1. TYPE 1 : 兩列交換
  2. TYPE 2 : 一列乘非零倍
  3. TYPE 3 : 一列乘某倍加到另一列
  • row equivalent :B 可在有限的row operation內獲得
  • E的操作在A的左側,對row作用,在右側,對col作用
  • E 是 nonsingular 且 E^-1 也是同類型的單位矩陣    

1.5   LU - decomposition
  • LU分解:只用E3操作
    • 非每個矩陣都可LU分解,若A不需經列交換可列運算至列梯形形式,則A可做LU分解
  • LDU分解:把對角項拆給D,L和U的對角項都變為1
  • PTLU分解:使LU分解可以使用列交換P
    • P為Permutation matrix 排列矩陣,每行每列恰一項為1其餘為0
    • P-1 = PT


2015年1月24日 星期六

Chapter 4   Graph Algorithm
4.1   Minimum Spanning Trees
  • Spanning Tree
    • 定義
      • S = (V, F)為G的一個Spanning Tree且S滿足
        1. 自F’中任取一邊加入S中必形成Cycle
        2. 在S中任何頂點對之間必存在一唯一Simple path
    • 性質
      • 若G 不連通則G無Spanning Tree 
      • G中的Spanning Tree不只一個 
      • 同一G中的任二個不同之Spanning Tree不一定有交集的邊存在 
  • Minimal Spanning Tree 
    • 定義
      • 在G 的所有Spanning Tree中,具有最小的邊成本總和者。 
    • 可求MST的演算法如下
      1. Kruskal’s Algorithm:下一段詳述。
      2. Prim’s Algorithm:從一個點出發( U, V-U ),像Dijkstra,由擴張樹的某一頂點與其它頂點的所有邊中挑選出具最小值者,不允許有迴路,O(n^2),使用資料結構Heap優化,O(ElgV)。
      3. Sollin’s Algorithm:以merge的概念實作,剩一棵樹結束
      • 皆是greedy algorithm。

  • Kruskal’s Algorithm
    • 概念
      • Kruskal演算法是一種用來尋找最小生成樹的演算法,是greedy演算法的應用。Kruskal演算法是以增加邊的觀念做為出發點。首先將所有的邊,依照權重的大小排序。再來依序加入權重最小的邊,如果造成cycle時,則必須捨棄,直到增加了n - 1條邊為止(假設有 n 個節點)。Kruskal演算法在圖中存在相同權值的邊時也有效。
    • 步驟
      1. 選擇:由spanning tree的所有邊中,挑選出具最小值者(不允許有迴路)
      2. 重複直到下列任一條件成立為止
      • (n-1)個邊已挑出   //n是頂點的個數
      • 無邊可挑,若 |F| < n-1,則無spanning tree 
    • 複雜度分析
      • 建邊權重的heap : O(E)
      • 取得並刪除最小權重的邊(u,v) : O(logE)
      • 需偵測取得的邊是否構成cycle,使用set operation操作,同一集合為同set
        • union(u,v) : O(1)
        • Find(u) : 花O( a(m,n) ), 逼近O(1)
      • 每回合最多花O(logE)
      • 因此Kruskal’s Algorithm complexity = O(E) + O(ElogE) = O(ElogE)
    • 證明
      • 手法為cut-and-paste
        1. 假設最小權重的邊E不在minimum spanning tree T中
        2. 在T中加入E會形成cycle
        3. 因此拿掉一個比E權重大的邊,形成權重較小的T’,矛盾而得證  

4.2   Single pair shortest path 
  • Dijkstra’s Algorithm
    • 概念
      • Dijkstra’s Algorithm 解決非負邊有向圖的單源最短路徑問題,演算法最終得到一個最短路徑樹。採用Greedy解題策略,為目前已知的最快的單源最短路徑演算法。
    • 步驟
      1. 首先以某一節點當作出發點,在與其相連且尚未被選取的節點裡,選擇加入離出發點距離最短的節點
      2. 透過新增的節點來Relax到達其他節點的距離。 
      3. 如此重覆加入新節點,直到所有的節點都被加入為止。
      • Relax Procedure:cost(A—>C) + cost(C—>B) < cost(A—>B),若我們原本是直接由A走到B,改成A經過C 再走到B,這個過程我們稱為鬆弛(Relax)。

    • 複雜度分析 
      • 選擇加入離出發點距離最短的節點:O(V)*T_extract-min
      • Relax到達其他節點的距離:O(E)*T_decrease-key
      • Dijkstra’s Algorithm complexity = O(V)*T_extract-min + O(E)*T_decrease-key
        1. Array : O(V^2)
        2. Binomial Heap:O(VlogV+ElogV)
        3. Fibonacci Heap:O(VlogV+E)
    • 證明
      • Lemma 1: Optimal Substructure:The subpath of any shortest path is itself a shortest path.  Proof. Cut and paste
      • Lemma 2: Triangle inequality:If δ(u,v) is the shortest path length between u and v, δ(u,v) ≤ δ(u,x) + δ(x,v)
      • Theorem 1:Initializing d[s] ← 0 and d[v] ← ∞ for all v ∈V – {s} establishes d[v] ≥ δ(s, v) for all v ∈ V, and this invariant is maintained over any sequence of relaxation steps.
        • Proof. Suppose not. Let v be the first vertex for which d[v] < δ(s, v), and let u be the vertex that caused d[v] to change: d[v] = d[u] + w(u, v). Then, d[v] < δ(s, v) (supposition) δ(s, u) + δ(u, v) (triangle inequality)δ(s,u) + w(u, v) (sh. path ≤ specific path) d[u] + w(u, v) (v is first violation) Contradiction. 
      • Theorem 2:Dijkstra’s algorithm terminates with d[v] = δ(s, v) for all v ∈ V
        • Proof.  Suppose u is the first vertex added to S for which d[u] ≠ δ(s, u). Let y be the first vertex in V S along a shortest path from s to u, and let x be its predecessor: Since u is the first vertex violating the claimed invariant, we have d[x] = δ(s, x). Since subpaths of shortest paths are shortest paths, it follows that d[y] was set to δ(s, x) + w(x, y) = δ(s, y) when (x, y) was relaxed just after x was added to S. Consequently, we have d[y] = δ(s, y) ≤ δ(s, u) ≤ d[u]. But, d[u] ≤ d[y] by our choice of u, and hence d[y] = δ(s, y) = δ(s, u) = d[u]. Contradiction.  
      • 證明說明:我們必須證明「當一個點被標記成以拜訪時,它當下距離起點的距離即為最短路徑的長度」。 
        • 使用反證法證明:若於標記頂點 u 時,起點 s 到該點 u 當下距離 d 不是最短,則必有其他條路徑使得起點到該點 u 的距離比當下的距離 d 更短,再由「最短路徑的子路徑必亦為最短路徑」這個性質可知,若有一條路徑 s→v→u 的長度比 d 更短,則 s→v 的長度必然小於 d,因此
          • 情況A — v 尚未被標記:但此情況應該先標記 v 而非 u,故與假設矛盾。
          • 情況B — v已被標記:但這種情況u至原點的距離必然已經被Relax成比d還短,故亦矛盾。
        • 因此由反證法我們得知,Dijkstra 演算法是正確的。 然而,由於這一點,Dijkstra 演算法並不適用於有負的邊權重的情況。

  • Bellman-Ford Algorithm
    • 概念
      • Bellman-Ford Algorithm解決存在負邊有向圖的單源最短路徑問題,採用Dynamic programming解題策略。在Bellman-Ford和Dijkstra兩個演算法中,計算時每個邊之間的估計距離值都比真實值大,並且被新找到路徑的最小長度替代。
    • 步驟
      • 不斷的利用邊集合中的邊對目前的最佳路徑作Relax的動作,直到確定各路徑的長度為最短。
      • 假設對象的圖不存在負圈,則任意一條最短路徑皆不會經過重複的點,因此最多經過|V|個點,反之必包含負圈。
    • 複雜度分析
      • 每次Relax須掃過所有邊:O(E)
      • 對所有邊進行Relax操作,共|V | − 1次:O(V)
      •  Bellman-Ford Algorithm complexity = O(VE)

  • 相關問題及演算法
    • 開放最短路徑優先演算法是該演算法在網路路由中的一個具體實現。
    • 與 Dijkstra 演算法不同,Bellman-Ford演算法可用於具有負花費邊的圖,只要圖中不存在總花費為負值且從源點 s 可達的環路(如果有這樣的環路,則最短路徑不存在,因為沿環路循環多次即可無限制的降低總花費)。
    • 與最短路徑問題相關最有名的一個問題是旅行商問題,此類問題要求找出恰好通過所有目標點一次且最終回到原點的最短路徑。然而該問題為NP-完全的;換言之,與最短路徑問題不同,旅行商問題不太可能具有多項式時間解法。
    • 如果有已知資訊可用來估計某一點到目標點的距離,則可改用A*搜尋演算法,以減小最短路徑的搜尋範圍。

4.3   All Pairs Shortest Paths 
  • Flord-Warshall Algorithm
    • 概念
      • Flord-Warshall Algorithm是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包
    • 步驟
      • 利用邊進行Relax搭配Dynamic Programming的方式來對點和點之間的最短距離進行維護及更新。
    • 複雜度分析
      • 利用三層迴圈來實行動態規劃,以外層的迴圈 k 來枚舉中繼點,內層的 i, j 迴圈來進行鬆弛更新的動作
      • 因此Flord-Warshall Complexity = O(V^3) 

  • Johnson’s algorithm
    • 概念
      • Johnson’s algorithm是解決任意兩點間的最短路徑的一種演算法,使用Reweight手法,當|E|足夠小時比Floyd-Warshall快。
    • 步驟
      • Find a vertex labeling h such that ŵ(u, v) ≥ 0 for all (u, v) ∈ E by using Bellman-Ford to solve the difference constraints h(v) – h(u) ≤ w(u, v), or determine that a negative-weight cycle exists. 
        • Theorem. Given a label h(v) for each v ∈ V, reweight each edge (u, v) ∈ E by ŵ(u, v) = w(u, v) + h(u) – h(v).
      • Run Dijkstra’s algorithm from each vertex using ŵ.
      • Reweight each shortest-path length ŵ(p) to produce the shortest-path lengths w(p) of the original graph.
    • 複雜度分析
      • 首先用Bellman-Ford來reweight : O(VE)
      • 執行V次Dijkstra : O( V*(E+VlgV) )
      • 因此Johnson’s algorithm Complexity = O(VE + V^2 lg V)



2015年1月23日 星期五

Chapter 2  動態規劃 Dynamic Programming
2.1   動態規劃簡介
動態規劃(Dynamic Programming)是指將一個較大的問題定義為較小的子問題組合,先處理較小的問題並將結果儲存起來(通常使用表格),再進一步以較小問題的解逐步建構出較大問題的解。

動態規劃需合於 principle of optimality (Bellman 1957)
An optimal sequence of decisions has the property that whatever the initial state and decision are, the remaining decisions must constitute an optimal decision with regard to the state resulting from the first decision.


  • 與其他演算法設計哲學比較
    • Divide-and-Conquer:Divide-and-Conquer 和 Dynamic Programming都是將問題切割再採用遞迴方式處理子問題,但是Divide-and-Conquer子問題的解通常不會重覆,重複時,通常會對相同子問題進行重覆計算,而不會像Dynamic Programming的子問題有大量的重複(overlap),可以以table儲存不用再次計算,用空間換取時間。
    • Greedy Approach:Greedy Approach具有Selection Procedure,自某起始點開始在每一個階段逐一檢查每一個輸入是否適合加入答案中。如果所要處理的最佳化問題無法找到一個選擇程序來逐一檢查,而需要以一次考慮所有的可能情況的方式來處理,那就是屬於Dynamic Programming。因此若遇最佳化問題,先思考可否用Greedy Approach解,若不行再考慮Dynamic Programming。


2.2   經典動態規劃問題
Shortest path problem in weighted directed graph (negative edge allowed but no negative cycles)
  • 定義:對多階段圖,求最短路徑
  • 解法 (forward approach)
    • $f(k)$表示狀態 $k$ 到終點狀態的最短距離。
    • 初始條件:$f(k) = 0$
    • 遞迴式:$f(k-1) = min\{f(k)+W(k-1,k)\},$其中$W(k-1,k)$表示狀態$k-1$到狀態$k$的距離
  • 複雜度分析
    • 時間複雜度 : $O( |V|+|E| )$
    • 空間複雜度 : Table儲存$Cost_i(j)需O(|V|)$,但輸入Graph需$O( |V| + |E| )$
  • 計算概念補充 : 對多階段圖求最短路徑有 forward approach 和 backward approach 兩種,以 forward approach 來說,遞迴式的展開方向 forward ,也就是$V_0 \rightarrow V_d$,但是解題時因為是用 bottom-up 的方式累積解答,所以數字要從$V_d$開始寫,一直累積到$V_0$結束。




Chained Matrix Multiplication Problem
  • 定義:給定Matrix Chain : $A_1(d_0,d_1), A_2(d_1,d_2), ..., A_n(d_{n-1},d_n)$,求此Chain所需之乘法次數為最少之括號方式 
    • $A_1(3,5)$表示第一個矩陣是3乘4的矩陣,注意$A$和$d$足碼之間的關係!
    • n 個 matrix 相乘有 $C_n = \frac{1}{n+1}{2n \choose n} = \frac{(2n)!}{(n+1)!n!}$ 種可能的配對組合,這個數很有名,又稱卡塔蘭數(Catalan number)。


  • 解法

  • 複雜度分析
    • 空間複雜度 : 當$n$個矩陣會有約$\frac{n^2}{2}$個不同的子序列。
    • 時間複雜度 : 可證明此一簡單的技術可使得運算時間由$O(2^n)$降至$O(n^3)$,使得其對實際應用有足夠的效率。
  • 例題:$A_1(3×3)$,$ A_2(3×7), A_3(7×2), A_4(2×9), A_5(9×4)$, 求此五矩陣的最小乘法次數。
    *要會把切割點表格(右下P表格)轉成實際的乘法順序,也就是乘法順序樹,再次提醒,注意$A$和$d$足碼之間的關係。


  • 程式碼:
    • // Matrix Ai has dimension p[i-1] x p[i] for i = 1..n
      MatrixChainOrder(int p[])
      {
          // length[p] = n + 1
          n = p.length - 1;
          // m[i,j] = Minimum number of scalar multiplications (i.e., cost)
          // needed to compute the matrix A[i]A[i+1]...A[j] = A[i..j]
          // cost is zero when multiplying one matrix
          for (i = 1; i <= n; i++) 
             m[i,i] = 0;
       
          for (L=2; L<=n; L++) { // L is chain length
              for (i=1; i<=n-L+1; i++) {
                  j = i+L-1;
                  m[i,j] = MAXINT;
                  for (k=i; k<=j-1; k++) {
                      // q = cost/scalar multiplications
                      q = m[i,k] + m[k+1,j] + p[i-1]*p[k]*p[j];
                      if (q < m[i,j]) {
                          m[i,j] = q;
                          s[i,j]=k;  // s[i,j] = Second auxiliary table that stores k
                                     // k      = Index that achieved optimal cost
       
                      }
                  }
              }
          }
      }
      



The Longest Common Subsequence (LCS) Problem
  • 定義:給定兩個Sequence $X = <x_1, x_2,..., x_m>$和$Y = <y_1, y_2,...,y_n>$,求$X$和$Y$所構成的最長共同子序列$LCS(X,Y) = Z = < z_1, z_2,..., z_k>$ 為何 ?
    • [注意] Substrings和Subsequences的差別
      • String:a segment of consecutive characters.
      • Sequence:need not be consecutive.
  • 例如有一條字串(String) S = "a t g a t g c a a t",則
    Substrings of S : "g a t g c" , "t g c a a t"
    Subsequences of S : "a g g t" , "a a a a"
  • 解法

    1. 若 $i$ 或 $j$ 為 $0$,表示 $X$ 或 $Y$ 這兩條序列的其中一條為空序列。 
    2. 若 $x_i = y_j$ ,則$c[i,j]$所表示的序列長度,是由$<x_1,x_2,...,x_{i-1}>$和$<y_1,y_2,..., y_{j-1}>$兩序列所構成之最長共同子序列的長度,即$c[i-1, j-1]$)再加上1。 
    3. 若 $x_i \neq y_j$,則$c[i, j]$的序列長度是由下列兩個不同的最長共同子序列長度當中之最大值所構成:
      1. $<x_1, x_2, ..., x_{i-1}>$ 和 $<y_1, y_2, ..., y_j>$ 兩序列所構成之最長共同子序列的長度$c[i-1, j]$ 
      2. $<x_1, x_2, ..., x_i>$ 和 $<y_1, y_2, ..., y_{j-1}>$ 兩序列所構成之最長共同子序列的長度$c[i, j-1]$ 
  • 例題:shows the tables produced by LCS-LENGTH on the sequences X = 〈A, B, C, B, D, A, B〉 and Y = 〈B, D, C, A, B, A〉. The running time of the procedure is $O(mn)$, since each table entry takes $O(1)$ time to compute. 




  • LCS的應用
    • Longest increasing subsequence
      1. Y ← Sort(X); //Y具有遞增性 
      2. Z ← LCS(X, Y); //找出X與Y間的最長共同子序列且具有遞增性
    • Longest common substring:計算連續的「左上箭頭」有多長
      • c[i, j] = 1 + c[i-1,j-1] ,if x=y
                =   0                   ,otherwise



0/1 Knapsack problem
  • 定義:有 $n$ 種物品,物品 $j$ 的重量為$w_j$價格為$p_j$。我們假定所有物品的重量和價格都是非負的。背包所能承受的最大重量為$W$。如果限定每種物品只能選或不選(0或1),在總重量不超過$W$的前提下,我們希望總價格最高,則此問題稱為0/1背包問題。
  • 解法:我們將在總重量不超過$Y$的前提下,總價格所能達到的最高值定義為$A(Y)$。$A(W)$即為問題的答案。$A(j, Y)$的遞推關係為:
    1. $A(0, Y) = 0$
    2. $A(j, 0) = 0$
    3. $w_j > Y,  A(j, Y) = A(j - 1, Y)$
    4. $w_j ≦ Y,  A(j, Y) = max \{ A(j - 1, Y), p_j + A(j - 1, Y - w_j) \}$
    • 通過計算$A(n, W)$即得到最終結果。
    • 3.的意思是,第$j$項物品根本拿不起來。
      4.的意思是,要維持原本拿的東西,或是放下其中一樣東西拿起新的第$j$項物品。
  • 複雜度分析 : 時間和空間皆為$O(nW)$。若重量剛好為順序資料,則時間複雜度為 $O(n^2)$,空間複雜度為 $O(n)$。
  • 重要概念 : 儘管背包問題的時間複雜度為$O(nW)$,但它仍然是一個NP完全問題。這是因為一般化的重量$W$相對於整個問題的輸入大小並不成線性關係,而是$logW$(也就是$W$表示成binary所需要的bit數)。因此整個演算法針對input size的複雜度為$O(n \times 2^{logW}) = O(n \times 2^n)$。
  • 例題:Item = {weight, value},C = [{4,5},{2,5},{6,2},{5,4},{3,3},{5,4},{2,3},{5,7}] 


  • 另外一種背包問題,Fractional Knapsack Problem,物品可切割的情況,則可用Greedy algorithm求解,因為一直選取區域最佳解可以構成全域最佳解。



[註] 其他的經典動態規劃問題



2015年1月22日 星期四

Chapter 5   Exploiting Memory Hierarchy
5.1   Direct Mapped Cache
  • 基本Cache存取相關名詞
    • Block :  unit of copying , may be multiple words
    • Hit : access satisfied by upper level
    • Miss : block copied from lower level
    • Hit ratio : hits/accesses 
    • Miss ratio : misses/accesses = 1 – hit ratio
  • 使用cache有效增加效率的原因
    1. Temporal locality:instructions in a loop, induction variables
    2. Spatial locality:sequential instruction access, array data
  • Direct mapped:只有hash和定址而得到的一個項,沒有搜尋
    • Address的內容
      • [tag]-[index]-[byte offset]
      • tag     :  記錄現在在cache block中的是memory的哪一個block
      • index : 用來對每一個block定址(global)
      • offset : 用來對每一個byte/word定址(local)
    • Cache Memory的內容
      • [Index]-[Valid bit]-[Tag]-[Data]
      • Valid bit : 1 = present, 0 = not present
  • Direct mapped example
    • 若cache要存放的資料量為16Kbyte, address為32 bits, 每一個block大小為4 words, 則Cache大小為多少?
      • 首先求Entry數目,$Entry數目 = 1k = 2^{10}$,因此 $index = 10$
      • 再求block內的word數目,$4 = 2^2$,因此 $word\ offset = 2$
      • 再求word內的byte數目,很明顯是,$4 = 2^2$,因此 $byte\ offset = 2$
      • 最後求tag,為 $address - ( index + offset )$
        $tag = 32 – 10(index) - 2(word\ offset)  - 2(byte\ offset)$
      • 最終得Cache大小為
        $2^{10} \times (1(valid) + 18(tag) + 4 \times 32(block size)) = 147000 bits$
    • 當題目有提到word的字眼 就用block offset,沒有的話,就只用byte offset即可
      • entry數 => Index bit
      • Block的word數 => block offset
      • N-bit Address => byte offset



5.2   Cache Miss
  • Block size issue
    1. 當block Size越來越大,會降低 miss rate,因為spatial locality。
    2. block越大miss penalty越嚴重,因為要搬更多東西。
    3. 在固定的cache size下,太大的block Size :
      • 會使block數目變少而miss rate上升
      • 會讓沒有物盡其用的情況變嚴重,白白複製一堆東西到cache

  • Data Write issue
    • write-through : 同時更改cache和memory的的資料,效能差但可用write buffer使CPU繼續執行來改善,當發生write miss時,有兩種處理方式。
      • write around : 不存取cache直接去寫main memory
      • allocate on miss : 存取cache一起改
    • write-back : 先寫到cache並註記為dirty,當dirty block整個被替換時才寫回memory
  • Cache Performance:Average memory access time (AMAT)  ,  AMAT = Hit time + Miss rate × Miss penalty

5.3   Cache Miss improvement
  • Associative Cache:增加空間使用的彈性,引入search的概念 (原本只有map和hash) ,使miss rate降低,硬體可平行做search。
    • direct mapped : hash 的概念 (block 位址直接mod n)
    • 2-way set associative : 半hash、半search
    • fully associative : 全search
      • 因為關係到search的查找模式,所以有 replacement policy
        • Least-recently used (LRU)
        • Random



  • multi-level caches
    1. 第一層 cache:希望將 hit time 減到最小
    2. 第二層 cache:希望將miss rate減到最小避免查找主記憶體,Hit time 影響較小
  • 實務上的結果
    • L-1 cache 大小< single cache 大小 
    • L-1 block 大小 < L-2 block 大小
    • example:考慮一個兩層架構的cache
      • Access time = 5 ns,Main memory access time = 100ns ,Clock cycle = 1/4GHz = 0.25ns (算次數) Global miss rate to main memory = 0.5 %  Miss rate/instruction = 2% (算出現機率)
      • CPI = 1 + 0.02 × 20 + 0.005 × 400 = 3.4
  • memory hierarchy interaction with software
    • Radix Sort 複雜度較小,花的instruction少
    • Radix Sort 要用bocket額外暫存,miss rate 較高
    • 所以,總和起來還是quick sort快


2015年1月22日 星期四

Chapter 4   Processor
4.1   Data path and control signal
  • MIPS 指令集合實作概觀圖
  • 指令格式(複習)
  • Decoder — the first-level control unit
    • RegDst:1 是寫入[15 : 11]的reg、0是寫入[20 : 16]的reg,只有在把值寫入register裡時才有用
    • ALUSrc:1 是用sign-extend 立即值、0是用register的值(ALU source
    • MemtoReg:1 是取input讀入的位址的值、0是直接用ALU result 的值,只有在把值寫回register裡時才有用
    • Regwrite:1 是將計算結果寫回register
    • MemRead:1 唯有Read memory使用 (lw)
    • MemWrite:1 唯有Write memory使用 (sw)
    • Branch:1 唯有branch使用 (beq)
  • ALU control — the second-level control unit
    • 先以兩個bit分類三種類型:load/store , branch , R-type,如果是R-type再以ALU function細分
  • 實作jump指令
    • upper 4 bit PC+4 [31:28] .26 bit jump address [27:2].2’b 00 [0:1]
  • single-cycle, multicycle, and pipelined implementations of a computer
    • Single Cycle:希望所有指令皆在一個Cycle執行完畢,所以最快指令需等待最慢指令。
    • Multi Cycle:為了解決Single Cycle效率不好的情況,讓最快的指令不必去等待最慢的指令。但還是一樣有浪費掉的時間,因為每個步驟所花的時間也是必需一樣的。
    • Pipeline:主要的目的是希望在同一個時間內能執行多道指令,增加效能。

4.2   Pipeline
  • Pipeline stage
    1. IF: 從記憶體擷取指令(fetch)
    2. ID: 解碼指令並同時讀取暫存器的值(decode)
    3. EX: 執行運作或計算位址(execute)
    4. MEM: 存取資料記憶體中的運算元(memory)
    5. WB: 將結果寫回暫存器中(write back)
  • Pipelined Datapath:由左而右的指令流動有兩個例外

    1. 寫回階段:結果儲存回暫存器檔案
    2. 下一個PC的選擇:遞增的PC與由MEM階段來分支的位址選擇
    • 在每個stage之間需要暫存器把上一個cycle的值保存住,且注意WB for load要把write register的位址傳下去

  • Pipelined Control:我們在指令解碼時(ID)產生訊號,因此訊號只有在EX、MEM、WB使用
    • EX:RegDst、ALUOp、ALUSrc          
    • MEM:Branch、MemRead、MemWrite
    • WB:MemtoReg、RegWrite 

4.3   Hazards
  • Hazards的分類
    • Structure hazards:不同指令同時對某硬體做存取
    • Data hazard:當管道因為某一步驟必須等待其他步驟而停滯,起因於兩道指令俱有相依性,例如add,lw...
      • 可使用forwarding解決
      • load-use data hazard,即使使用forwarding還是要stall一個cycle
      • code scheduling 可避免hazard。
    • Control hazards:條件分支所造成的等待延遲
      • Stall on Branch:假設有足夠額外的記憶體,可以在ID stage測試暫存器、計算位址、更新PC值,此方法無論跳不跳都要stall一個cycle
      • Branch Prediction:先做錯了再換
        1. Not Taken
        2. Static Branch Prediction:根據跳躍類型預測,例如loop猜會往回跳,if猜往前跳
        3. Dynamic Branch Prediction:會考量每一個分支指令的特性,程式運作過程中會改變對一道分支的預測,假設之後的Branch會照著「趨勢」走。



  • R type Data Hazard
    • 放入ALU的暫存器一定是這兩個:ID/EX.RegisterRs , ID/EX.RegisterRt
    • 當以下情況發生時,預見了Reg會被改寫(EX):EX hazard是10、MEM hazard是01
      • 1a. EX/MEM.RegisterRd(寫進的) = ID/EX.RegisterRs(要讀的) 
      • 1b. EX/MEM.RegisterRd = ID/EX.RegisterRt 
      • 2a. MEM/WB.RegisterRd = ID/EX.RegisterRs 
      • 2b. MEM/WB.RegisterRd = ID/EX.RegisterRt
    • 只有Regwrite (改值) 的時候forwarding:
      • EX/MEM.RegWrite, MEM/WB.RegWrite(會寫入而改變值)
    • 被寫得不可以是$zero暫存器
      • EX/MEM.RegisterRd ≠ 0, 
      • MEM/WB.RegisterRd ≠ 0
    • 要把forwarding unit 放在他會用到的stage(EX)以避免傳遞所產生的代價
  • Double Data Hazard 
    • 這邊是hazard混亂的情形,line 1跟line 2、3都有data dependence。程式碼是依序執行,很明顯的line3當中$1的資料來源是來自於line2的結果,並不是由line1提供,所以line1的$1是不能Forwarding給line3,若Forwarding給line3,line3的結果是一定錯。
  • Load-Use Data Hazard
    • load用forwarding無法完全解決,因此需要加上stall解決
    • Stall the pipeline
      • ID/EX裡的暫存器(EX , MEM , WB) 做nop (no operation)
      • PC和IF/ID暫存器不做更新 (這樣就會再做一次,達到stall的效果)
    • hazard detection unit在stage 2 的原因:越早檢查越好,且在其他stage需要更多硬體

  • 各種指令data harazd的解決方法整理
    • 在R type之後遇有相依的R type, lw, sw
      • 用 forwarding 解決,不會產生stall.
    • 在 lw之後遇有相依的R type, lw, sw
      • 由於這些指令在ex stage 即需要, 因此來不及 forward, 需要 stall 一個 cycle.
    • 在R type之後遇有相依的beq,這些指令有兩種處理方式
      1. 我們假設 equality test速度很快,因此只要在該 cycle之後拿到資料就可以 forward 過去,所以在 R type之後的beq不需要 stall.
      2. 我們假設 equality test 需要的時間較長,不能在該 cycle 結束前拿到 forward 過來的資料並算完,所以需要 stall 一個 cycle.
    • 在 lw之後遇有相依的beq,由於這兩個指令在 id stage 最後時需要 data,有兩種處理方式
      1. 我們假設 equality test 速度很快,因此只要stall 一個 cycle 之後拿到 forward 的資料就可以算完,所以在 lw 之後的 beq  bne 需要 stall 一個 cycle.
      2. 我們假設 equality test 需要的時間較長,不能在 stall 一個 cycle 之後拿到 forward 過來的資料並算完,所以需要 stall 兩個 cycle
  • Branch Hazard
    • 減少分支延遲:將分支位址加法器從EX移到ID,增加一條IF.Flush讓IF/ID可設為0 (nop)
    • 分支預測
      1. 假設分支不成立(Branch taken)
      2. 一位元預測方法(1-bit prediction scheme):上一步怎樣,下一步就猜怎樣(猜錯一次就反向)
      3. 二位元預測方法(2-bit prediction scheme):猜錯兩次才反向,強烈偏向發生或不發生的分支,只會猜錯一次

    • 分支延遲間隙
      • 在分支指令之後的指令,即使在與前一個分支指令流向分歧,依然會被處理器所執行,在加強後的編譯器的處理下,分支所帶來的延遲將顯得不明顯。
        • from before 與分枝無關,情況最佳
        • from target or fall-through 可能做了白工,但程式仍會正確的執行

  • 指令階層平行性 Instruction-Level Parallelism (ILP)
    • 多重派發(multiple issue):多道指令在一個時脈週期中發出的方法
    • VLIW(very long instruction word):同時發出許多指令互為獨立的指令集架構形態
    • 超純量(superscalar):每個時脈週期能選擇多於一道指令給處理器的先進管道化技術
    • 動態排程(dynamic pipeline scheduling):重新安排指令順序以避免停滯的硬體支援
    • 亂序執行(out-of-order execution):pipeline中當一個指令受阻時無需造成後面指令等待的情況
    • 猜測(speculation):編譯器或處理器猜測結果以消除相依性關係的方法
    • 重序緩衝器(reorder buffer):在超純量中,記錄結果直到各結果可安全的被寫回記憶體或暫存器中的緩衝器.
    • 暫存器重命名 :再迴圈展開中(loop rolling),消除名稱相依性的方法




技術提供:Blogger.