Divide-and-Conquer
Introduction:
一種將大問題拆分成小問題遞迴求解的演算法
主要分成 3 個步驟:
Divide, 把一個問題切成數個子問題(subproblem與原問題是同類型問題,只是較小)
Conquer, 用遞迴方式分別對 subproblem 求解,直到遞迴到子問題夠小,可直接解決
Combine, 把子問題的解法帶進原問題得出所求
Example
Max-subarray problem
給一含有正負數的 list,找到一 subarray(連續)有最大的數字和
暴力法:
有 個可能性,分別為
每個 subarray 要相加需要 ,共需要
因為有重複的計算: ,所以可縮減至
遞迴法:
max(leftSubarrMax(), rightSubarrMax(), crossmidMax()
Strassen's Matrix Multiplication
推廣到 kxk 矩陣,最佳 upperbound
Last updated