算法设计技巧与分析 第6章 分治法.ppt

Solution(1) uv=(w2n/2+x)(y2n/2+z) =wy2n+(wz+xy) 2n/2+xz 求2n:相当于简单的左移n位,需要Θ(n)时间。 复杂性:4次乘法,3次加法,则有: d n=1 T(n)= 4T(n/2)+bn n1 T(n)= Θ(n2) Solution(2) 则有: uv= wy2n+((w+x)(y+z)-wy-xz) 2n/2+xz 考虑恒等式: wz+xy =(w+x)(y+z)-wy-xz 复杂性:3次乘法,6次加减法,则有: d n=1 T(n)= 3T(n/2)+bn n1 T(n)= Θ(nlog3) Matrix Multiplication 传统算法: 设:A和B是两个n?n的矩阵, 求:A和B的乘积C=AB。 求每个Ci,j:需要n次乘法,和n-1次加法,共有n2个Ci,j,则: 复杂性: n3次乘法,n3-n2次加法。 Recursion Algorithm 假定:n=2k,k≥0,若n≥2,则有: 分治算法: 复杂性: 需要8次n/2?n/2矩阵乘法,和4次n/2?n/2矩阵加法。 Deduction Process 设:a和m分别表示数量加法和乘法的耗费,则有: 即:递归方法需要n3次乘法和n3-n2次加法。 STRASSEN Algorithm 基本思想:以增加加减法的次数来减少乘法次数。 设:A和B是两个2?2矩阵,表示为: 则:需要求的乘积C矩阵表示为: Solution 首先计算以下乘积: 然后得到: 因为数量乘积的交换律在这里没用到,因此上述的公式也适用于矩阵,则: 复杂性: 需要7次乘法,和18次加法。 Deduction Process STRASSEN算法需要的时间:Θ(nlog7)。 输入: n 个元素的数组 A[1···n] 和整数 k,1 ≤ k ≤ n 。 输出: A 中的第 k 小元素。 1. select (A,1,n,k) 过程  select (A,low,high,k) 1. p ← high – low + 1 2. if p 44 then 将 A 排序 return ( A[k] ) 令q= 。将A分成 q 组,每组5个元素。如 果5不整除p,则排序剩余的元素。 4. 将 q 组中的每一组单独排序,找出中项。所有中 项的集合为 M 。 5. {mm为中项集合的中项} 将 A [low ··· high]分成三组 7. case | |≥k: return select ( ,1,| |,k) | |+| | ≥k: return mm | |+| | <k: return select( ,1,| |,k-| |-| |) 8. end case 输入: 平面上 n 个点的集合 S 。 输出: S中两点的最小距离 。 1. 以 x 坐标增序对 S 中的点排序 。 2. Y ← 以 y 坐标增序对 S 中的点排序 。 3.    过程 cp( low,high) 1. if high – low +1 ≤ 3 then 用直接方法计算 。 2. else 8. k ← 0 3. 4. 5. 6. 7. 9. for i ← 1 to n {从Y中抽取T} 11. k ← k + 1 12. T[k] ← Y[i] 13. end if 14. end for 10.   if |x(Y[i]) - |≤ then 15. {将 初始化为大于  的值 17. for j ← i + 1 to min{i+7,k} 19. end for 20. end for 22. en

文档评论(0)

1亿VIP精品文档

相关文档