递归与分治(二)__刘汝佳_黑书__经典技术方案.ppt

递归与分治(二)__刘汝佳_黑书__经典技术方案.ppt

《算法艺术与信息学竞赛》 标准课件 递归与分治(二) 刘汝佳 目录 一、Karatsuba快速乘法 二、Strassen矩阵乘法 三、求解线性递推方程 四、快速排序 五、求k大元素 六、最近点对问题 一、 Karatsuba快速乘法 给两个n位数, 计算它们的乘积 分析 类似于Strassen矩阵乘法, 先写成递归形式 容易得到下面的过程, T(n)=4T(n/2)+O(n), 因此还是T(n) = O(n2). Karatsuba快速乘法 Anatoli? Karatsuba(由Knuth改进)在1962年提出: ac + bd – (a-b)(c-d) = bc+ad 因此中间项bc+ad只需要一次递归调用而不是两次 分析 显然, 递归方程为T(n)=3T(n/2)+O(n), T(n) = O(nlg3) = O(n1.585), 比O(n2)快. 注意: 真实程序中, 应该使用二进制而不是10进制, 这样可以充分利用机器乘法的特点 进一步得: 更细的进行分治可以得到更好的算法, 直到Fast Fourier Transform, 用它计算乘法只需要O(nlogn)的时间 二、Strassen矩阵乘法 标准算法 基本分治算法 基本分治算法分析 Strassen算法 Strassen算法 Strassen算法 Divide: 把A和B划分成(n/2)*(n/2)个子矩阵 Co

文档评论(0)

1亿VIP精品文档

相关文档