1、合併排序
2、快速排序
3、折半查詢
4、二叉樹遍歷
5、大整數乘法和strassen乘法
6、最近對問題和凸包問題的分治解法
——簡介——
大整數乘法:
把a的前半部分記為a1,後半部分極為a0;b的前半部分記為b1,後半部分記為b0;即a=a1×10^(n/2)+a0;b=b0×10^(n/2)+b0;
則有c=a×b=(a1×b1)×10^n+(a1×b0+a0×b1)×10^(n/2)+(a0×b0)=c2×10^n+c1×10^(n/2)+c0;其中,c2=a1×b1,c0=a0×b0,c1=(a1+a0)×(b1+b0)-(c2+c0);如果n/2也是偶數,就可以應用相同的方法來計算c2、c0、c1。因此,若n是2的乘方,那就可以用遞迴來實現。實驗證明,從大於600位的整數開始,該演算法的效能超過筆算演算法的效能。
strassen矩陣乘法:
[c00,c01;c10,c11]=[a00,a01;a10,a11]×[b00,b01;b10,b11]=[m1+m4-m5+m7,m3+m5;m2+m4,m1+m3-m2+m6];
其中,m1=(a00+a11)(b00+b11),m2=(a10+a11)b00,m3=a00(b01+b11),m4=a11(b10-b00),m5=(a00+a01)b11,m6=(a10-a00)(b00+b01),m7=(a01-a11)(b10+b11);演算法效率屬於集合θ(n^(log7/log2))。
演算法筆記 分治法 棋盤覆蓋
在乙個2 k 2 k個方格組成的棋盤中,有乙個方格與其它的不同,若使用以下四種l型骨牌覆蓋除這個特殊方格的其它方格,如何覆蓋。四個l型骨牌如下圖 棋盤中的特殊方格如圖 實現的基本原理是將2 k 2 k的棋盤分成四塊2 k 1 2 k 1 的子棋盤,特殊方格一定在其中的乙個子棋盤中,如果特殊方格在某乙...
演算法導論 筆記 分治法 最近點對問題
目錄 題目 在乙個 n 2 個點的集合 q 中尋找距離最近的點對 首先很容易想到暴力破解的方法,但是需要 o n2 的時間複雜度,所以考慮使用分治法,但將複雜度降為 o nlogn 還需要一些優化。關於執行時間的遞迴式為 t n 2t n2 o n 思路 把點集分為兩半,最近點對可能全部屬於左半點集...
演算法筆記 分治法 迴圈賽事日程表
問題描述 設有n 2 k個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能參賽一次 3 迴圈賽在n 1天內結束。請按此要求將比賽日程表設計成有n行和n 1列的乙個表。在表中的第i行,第j列處填入第i個選手在第j天所遇到的選...