Field note

Parallel_Algorithm

Parallel Algorithms

对于一个并行算法,

  • 它的work W定义为我需要多少单位时间的操作来完成这个算法
    • W = T1
  • 它的depth D定义为最长的序列
    • D=TD = T_{\infty}

Brent’s theorem

  • A lower bound
    • WPTP\frac{W}{P} \leq T_{P}
  • An upper bound
    • TPWP+DT_{P} \leq \frac{W}{P} + D
    • 上界的证明:
      • 假设每一层有WiW_{i}个,一共有D层,那么我在这一层所需要的时间是WiPWiP+1\lfloor \frac{W_{i}}{P} \rfloor \leq \frac{W_{i}}{P} + 1
      • 把每一层加起来
      • 1D(WiP+1)=WP+D\sum_{1}^{D}(\frac{W_{i}}{P} + 1) = \frac{W}{P} + D

Prefix Sums 计算前缀和

Input: A(1),A(2),…,A(n)

Output: i=1kA(k)\sum_{i=1}^{k}A(k)

我们在前边有某个点的B(h,i)B(h,i)是它两个儿子的和,且B(h,i)=B(h1,2i1)+B(h1,2i)B(h,i) = B(h-1,2i-1) + B(h-1,2i)

定义C(h,i)=k=1αA(k)C(h,i) = \sum_{k = 1}^{\alpha}A(k),(0,α)(0,\alpha)是node(h,i)的最右边的一个后代.通俗来说,C(h,i)就是从叶子结点的第一个一直加到它最右边一个后代

!!! note

根据定义,如果```i == 1```,则```C(h,i) = B(h,i)```

若 ``` i%2 == 0```,则```C(h,i) = C(h+1,i/2)```,即如果i是偶数,那么它和它的父节点的值一样

若``` i%2 ==1 && i != 1```,则```C(h,i) = C(h+1, (i-1)/2) + B(h,i)```,就是它的叔叔加上它自己的值

Merge两个数组

merge两个递增的数组A,B到另外一个递增数组C

为简便起见,我们假设:

  1. A和B的元素都是可以比较的
  2. n=mn = m
  3. lognnlogn\log{n} 和 \frac{n}{\log{n}}都是整数

对每一个element做rank

  • RANK(j,A) = i,if A(i) < B(j) < A(i + 1),for 1i<n1 \leq i < n
  • RANK(j,A) = 0,if B(j) < A(1)
  • RANK(j,A) = n,if B(j) > A(n)
for Pi,1 <= i <= n pardo
	C(i + RANK(i,B)) := A(i)
for Pi,1 <= i <= n pardo
	C(i + RANK(i,A)) := B(i)

如果我知道了rank,那么我所用的时间是O(1)O(1),做的work是O(n+m)O(n + m)

![rank](./figures/parallel algorithm/rank.png)

Parallel Ranking

Stage 1:Partitioning

p=nlognp = \frac{n}{\log{n}}

把A和B分成P组,每组logn\log{n}个元素

  • A_select(i)=A(1+(i1)logn),for1ipA\_select(i) = A(1 + (i-1)\log{n}),for 1 \leq i \leq p
  • B_select(i)=B(1+(i1)logn),for1ipB\_select(i) = B(1 + (i-1)\log{n}),for 1 \leq i \leq p
    • D=O(logn)D = O(\log{n})
    • W=O(plogn)=O(n)W = O(p\log{n}) = O(n)

每组有一个最小的,我们可以先找到每组中最小的那个元素的RANK,然后剩下的元素就被限定在了这个小区域内,节省work

Actual Ranking

最多2p个O(logn)O(\log{n})的子问题

  • D=O(logn)D = O(\log{n})
  • W=O(plogn)=O(n)W = O(p\log{n}) = O(n)

Overall: D=O(logn),W=O(plogn)=O(n)D = O(\log{n}),W = O(p\log{n}) = O(n)

Maximun Finding

在求和问题中,直接把“ + ”号换成max就可以

时间:logn\log{n}

work:O(n)O(n)

A Doubly-logarithmic Paradigm

假设h=loglognh = \log{\log{n}}是整数


n\sqrt{n}为一组

  • A1=A(1),,A(n)M1D(n),W(n)A_{1} = A(1) , \dots , A(\sqrt{n}) \Rightarrow M_{1} \sim D(\sqrt{n}),W(\sqrt{n})
  • A2=A(n+1),,A(2n)M2D(n),W(n)A_{2} = A(\sqrt{n} + 1) , \dots , A(2\sqrt{n}) \Rightarrow M_{2} \sim D(\sqrt{n}),W(\sqrt{n})
  • \dots
  • An=A(nn+1),,A(n)MnD(n),W(n)A_{\sqrt{n}} = A(n - \sqrt{n} + 1) , \dots , A(n) \Rightarrow M_{\sqrt{n}} \sim D(\sqrt{n}),W(\sqrt{n})

M1,M2,,MnAmaxD=O(1),W=(n)2=O(n)M_{1},M_{2},\dots,M_{\sqrt{n}} \Rightarrow A_{max} \sim D^{'} = O(1),W^{'} = (\sqrt{n})^{2} = O(n)这里后边的近似是用的暴力算法,直接两两比较

D(n)D(n)+O(1),W(n)nW(n)+O(n)D(n)=O(loglogn),W(n)=O(nloglogn)D(n) \leq D(\sqrt{n}) + O(1),W(n) \leq \sqrt{n}W(\sqrt{n}) + O(n) \Rightarrow D(n) = O(\log{\log{n}}),W(n) = O(n\log{\log{n}})


每 h 为一组

  • A1=A(1),,A(h)M1O(h)A_{1} = A(1) , \dots , A(h) \Rightarrow M_{1} \sim O(h)
  • A2=A(h+1),,A(2h)M2O(h)A_{2} = A(h + 1) , \dots , A(2h) \Rightarrow M_{2} \sim O(h)
  • \dots
  • Anh=A(nh+1),,A(n)MnhO(h)A_{\frac{n}{h}} = A(n - h + 1) , \dots , A(n) \Rightarrow M_{\frac{n}{h}} \sim O(h)

M1,M2,,MnAmaxM_{1},M_{2},\dots,M_{\sqrt{n}} \Rightarrow A_{max}

D(n)=O(h+loglognh)=O(loglogn)D(n) = O(h + \log{\log{\frac{n}{h}}}) = O(\log{\log{n}})

W(n)=O(hnh+nhloglognh)=O(n)W(n) = O(h * \frac{n}{h} + \frac{n}{h}\log{\log{\frac{n}{h}}}) = O(n)


Random Sampling

D=O(1),W=O(n)D = O(1),W = O(n)

![random_sampling](./figures/parallel algorithm/random_sampling.png)

!!! note

这个算法有很高的概率在$O(1)$的深度和$O(n)$的工作量内找到数组$A$的最大值;存在常数$c$,使得算法只有$\frac{1}{n^c}$的概率无法在这一时间复杂度内找到最大值