累積和

From Wikipedia, the free encyclopedia

累積和(るいせきわ、: prefix sum, cumulative sum, scan)とは、計算機科学において、数列 に対して、その先頭部分の総和を求めることによって得られる数列 の事。

例えば、自然数の累積和は三角数になる。

自然数 123456...
自然数の累積和 136101521...

累積和は、単に足し算だけで無く、二項演算子 に一般化することが可能であり、そのため幅広い応用が可能である。これにより、関数型プログラミング言語では、scanと呼ばれる基本的な処理となっている。なお、途中の計算過程を記録する必要が無く、最終結果だけが必要な場合はfoldと呼ばれる。[1][2]

いくつかのアルゴリズムにおいて有用な基本処理であり、カウントソートなどのアルゴリズムで利用されている。二項演算子 に対して引き算 が存在する場合、事前に累積和を求めておくと、m番目からn番目までの総和が「n番目の累積和 (m-1)番目の累積和」により、高速に求めることができる。2次元の場合はこれをsummed-area tableと呼ぶ。[3][4]

累積和は、逐次計算においては、単に前の結果と計算するだけで簡単に求まるが、並列計算の分野でも広く研究されており、foldやscanの二項演算子が という結合法則を満たすと並列化することが可能であり、並列アルゴリズムの有用な基本処理になっている。[5][6][7]

inclusiveとexclusive

並列計算

出典

Related Articles

Wikiwand AI