分治算法
来源:互联网 发布:java openjdk 1.8 编辑:程序博客网 时间:2024/06/05 03:04
分治算法--------
分(divide):递归解决较小的问题
治(conquer):从子问题的解构建原问题的解
一般认为正文中至少含有两个递归调用才叫分治,只包含一个递归的不叫分治。一般认为子问题是不相交的。
方程的解为:
整数相乘
求两个N位数X和Y的乘积,手算需要进行次乘法,即把两个个位数相乘看作基本操作的话,算法复杂度为。X=12345678,Y=87654321,求XY。XL=1234,XR=5678,YL=8765,YR=4321。X=XL104+XR,Y=YL104+YR
所以:
需要进行4次4位数的乘法,乘以108只是一些补0操作,再加上几次加法构成了。
由(1)式得,此时算法没有得到改进。
注意到,所以在计算出后,只需要再进行一次乘法就能计算出。
当两个数都是1位时可以通过查表进行乘法。
实际上上述方法在实际中很少用,对于小的N开销大,对于大的N还存在更好的一些算法,它们也广泛利用了分治算法。
矩阵乘法
一个N×N的矩阵乘法变成了8个N/2×N/2的矩阵乘法和4个N/2×N/2的矩阵加法,加法的复杂度为。
由(1)式得
看来矩阵分块后再进行乘积并没带来复杂度的降低。
Strassen使用了类似于整数乘法的分治策略。
计算7个N/2×N/2阶矩阵的乘法
- 然后
由(1)式得
当然要考虑N不是2的整次幂的情况。在N不是很大时Strassen算法不如矩阵直接相乘,它也不能推广到稀疏矩阵,而且不易并行化。当用浮点项运算时,在数值上不如经典算法稳定。算法稳定性是指:舍入误差在算法计算过程中是可控的。
0 0
- 分治算法
- 分治算法
- 分治算法?
- 【算法】分治
- 【算法】分治
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 点击tableview上的btn 获得它所属于的cell并获得数据源的行数
- linux 下使用SFTP
- 【UVA】11137-Ingenuous Cubrency
- iOS:开放平台引用(一)--应用外打开app / respond to a custom URL scheme
- 为什么单例对象的并发调用需要同步?
- 分治算法
- 带有返回值的 Callable 使用
- 堪称最好的A*算法
- EAS优化-日收银汇总单优化
- HNU 13073 Ternarian Weights 解题报告
- MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
- 工作经验——一次简单的Maven加速构建实战
- 关于android应用退出的问题
- ST解决RMQ问题