MIT算法导论公开课之第21课 高级课题、并行算法(二)

矩阵乘法

A、B为n x n的矩阵,计算矩阵C=A·B,使用分治法(使用将矩阵分块的策略)。
  • 算法伪码:
Mult(C,A,B,n)//C=A·B
    Temp matrix T[1~n,1~n]
    if n=1
        C[1,1] ← A[1,1]·B[1,1]
    else
        <partition matrices>//O(1)
        spawn Mult(C11,A11,B11,n/2)
        spawn Mult(C12,A11,B12,n/2)
        spawn Mult(C21,A21,B11,n/2)
        spawn Mult(C22,A21,B12,n/2)
        spawn Mult(T11,A12,B21,n/2)
        spawn Mult(T12,A12,B22,n/2)
        spawn Mult(T21,A22,B21,n/2)
        spawn Mult(T22,A22,B22,n/2)
        sync
        Add(C,T,n)
Add(C,T,n)//C=C+T
    <base case of partitioning>
    spawn Add(C11,T11,n/2)
    spawn Add(C12,T12,n/2)
    spawn Add(C21,T21,n/2)
    spawn Add(C22,T22,n/2)
    sync
  • 算法分析:
    矩阵乘法算法分析
  • Ex:
    矩阵乘法示例
  • 算法缺点:
    在较大规模的计算过程中,使用临时矩阵T产生的分配和回收空间上的时耗会比较大,从而降低了算法的性能。
  • 改进算法思路:
    可以选择放弃一些并行度以减少分配和回收空间带来的时耗。
  • 改进算法伪码:
Mult-Add(C,A,B,n)//C=C+A·B
    <base case of partitioning>
    spawn Mult-Add (C11,A11,B11,n/2)
    spawn Mult-Add (C12,A11,B12,n/2)
    spawn Mult-Add (C21,A21,B11,n/2)
    spawn Mult-Add (C22,A21,B12,n/2)
    sync
    spawn Mult-Add (C11,A12,B21,n/2)
    spawn Mult-Add (C12,A12,B22,n/2)
    spawn Mult-Add (C21,A22,B21,n/2)
    spawn Mult-Add (C22,A22,B22,n/2)
    sync
  • 改进算法分析:
    改进算法分析
  • Ex:
    矩阵乘法改进算法示例

归并排序

  • 算法伪码:
Merge-Sort(A,p,r)
    if p<r
        q ← L(p+r)/2
        spawn Merge-Sort(A,p,q)
        spawn Merge-Sort(A,q+1,r)
        sync
        Merge(A,p,q,r)//合并排序后的两部分
  • 算法分析:
    归并排序算法分析
  • 并行合并:

    • 算法图示:
      并行合并算法图示
      选取较长的数组A,取中间的元素,利用其在B中的位置,进行如图所示的划分,递归的处理左右两部分。
    • 算法伪码:
    P-Merge(A[1~l],B[1~m],C[1~n])//将A和B合并为C,n=l+m
        <保证l>m>
        <base case of merging>
        使用二分查找j使得B[j]<=A[l/2]<=B[j+1]
        spawn P-Merge(A[1~l/2],B[1~j],C[1~l/2+j])
        spawn P-Merge(A[l/2+1~l],B[j+1~m],C[l/2+j+1~n])
        sync
    • 算法分析:
      并行合并算法分析
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值