Professional Documents
Culture Documents
q2 MQr +QMbB/2`,
7QH/, +QK#BM2 2H2K2Mib rBi? ;Bp2M QT2`iBQM
t ⊗ (v ⊗ x) = (t ⊗ v) ⊗ x
(t ⊗ v) ⊗ (x ⊗ r) = (t ⊗ (v ⊗ x)) ⊗ r = ((t ⊗ v) ⊗ x) ⊗ r
h`22b 7Q` 2tT`2bbBQMb
t ⊗ (v ⊗ x), ƒ
x ƒ
y z
(t ⊗ v) ⊗ (x ⊗ r), ƒ
ƒ ƒ
x y z w
6QH/BM; U`2/m+BM;V i`22b
t ⊗ (v ⊗ x) = (t ⊗ v) ⊗ x
bbQ+BiBpBiv bii2/ b i`22 `2/m+iBQM
t ⊗ (v ⊗ x) = (t ⊗ v) ⊗ x
ƒ ƒ
x ƒ ƒ z
4
y z x y
reduce(t1, f)==reduce(t2, f)
*QMb2[m2M+2 bii2/ b i`22 `2/m+iBQM
reduce(t1, f)==reduce(t2, f)
1tKTH2 mb2,
ƒ ƒ
x ƒ
ƒ ƒ ⇒ ƒ
y
x y p q p q
"2+mb2 Q7 bbQ+BiBpBiv- r2 +M +?QQb2 Mv i`22 i?i T`2b2`p2b i?2 Q`/2`
Q7 2H2K2Mib Q7 i?2 Q`B;BMH +QHH2+iBQM
h`22 `2/m+iBQM `2TH+2b Node +QMbi`m+iQ` rBi? f- bQ r2 +M Dmbi mb2 f
/B`2+iHv BMbi2/ Q7 #mBH/BM; i`22 MQ/2bX
q?2M i?2 b2;K2Mi Bb bKHH- Bi Bb 7bi2` iQ T`Q+2bb Bi b2[m2MiBHHv
S`HH2H ``v `2/m+2
def reduceSeg[A](inp: Array[A], left: Int, right: Int, f: (A,A) => A): A = {
if (right - left < threshold) {
var res= inp(left); var i= left+1
while (i < right) { res= f(res, inp(i)); i= i+1 }
res
} else {
val mid = left + (right - left)/2
val (a1,a2) = parallel(reduceSeg(inp, left, mid, f),
reduceSeg(inp, mid, right, f))
f(a1,a2)
}
}
def reduce[A](inp: Array[A], f: (A,A) => A): A =
reduceSeg(inp, 0, inp.length, f)