- 0
- 0
- 约5.2千字
- 约 16页
- 2021-10-13 发布于安徽
- 举报
二、分治法;分治法一般可以用递归描述,包含以下三个部分:
基础:若问题规模足够小,无法或没有必要继续分解时,很容易直接求解,这是递归必须的基础。
分解:将规模较大的复杂问题分解为若干个规模缩小、相互独立、与原问题类型相同的子问题,类型相同的子问题可以递归求解。
合并:将各个子问题的解合并为原问题的解。
分治法的难点或关键点在于如何分解问题和合并各子问题的解。前面汉诺塔问题求解算法体现了分治法算法设计思想,下面再以无符号大数乘法为例讲述分治法。;2.1无符号大数Karatsuba乘法
对于无符号大数乘法,我们可以用分治法按照传统的思路求解两个无符号大数X、Y乘积:
基础: 当Y是个位数时,X乘Y可以简单解决,用下述表示:
UBigNumber MultiplyDigit (X, digit);//digit:0~9
分解: 从低位到高位,将Y中每一位数字分解出来后,再与X相乘;
合并: 将上述分解后相乘结果依次放大 ...后相加求和就是需要的结果,等价于从低位到高位,将Y中每一位数字分解出来后,再与X放大 ...倍后的结果相乘,再把乘积累加。;形成如下算法描述,抽象数据类型UBigNumber表示无符号大数:
//算法2.2 返回无符号大数X、Y的乘积
UBigNumber
原创力文档

文档评论(0)