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))。