重み付きランダムサンプリングアルゴリズム はじめに あらかじめ指定された重みに従って離散的な値を確率的に選択したい、ということがよくある。例えば[1,4,5]という配列が与えられたら、確率10%で0、40%で1、50%で2というインデックスを返すようにランダムサンプリングしたい。一番手軽な累積和の方法では、テーブル構築に$O(N)$、サンプリングに$O(\log(N))$の計算量となり、多くの場合これで用は足りる。さらに、テーブル構築は$O(N)$だが、サンプリングが$O(1)$となるWalker's Alias法という強力アルゴリズムもある。 累積和の方法は組むのが簡単で探索が$O(\log(N))$と十分早いし、Walker's Alias法は探索が$O(1)$と強烈なので、「重み付きランダムサンプリングアルゴリズムは、もうこの2つのどちらかで十分じゃん?」という気持ちになるが、この2