算法思想笔记——分治法

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

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值