以下は、約時間と2 n / 2スペースを使用するアルゴリズムを示しています。2n2n/2
最初に、アイテムのすべてのサブセットの合計をソートする問題を見てみましょう。n
この副問題を考えてみましょう。長さソート済みリストが2つあり、リスト内の数値のペアごとの合計のソート済みリストを作成するとします。おおよそO (m 2)時間(出力サイズ)でこれを行いたいが、サブリニアスペース。O (m )空間を実現できます。優先キューを保持し、昇順で優先キューから合計を引き出します。mO(m2)O(m)
リストはとする1 ... MおよびB 1 ... B M、昇順にソートされました。m個の合計a i + b 1、i = 1 … mを取得し、それらを優先キューに入れます。a1…amb1…bmmai+b1i=1…m
ここで、残りの最小の合計優先キューから引き出したときに、j < mの場合、合計a i + b j + 1を優先キューに入れます。スペースは、常に最大でm個の合計を含む優先度キューによって占められます。また、各優先度キュー操作にO (log m )を使用するため、時間はO (m 2 log m )です。これは、O (m 2ai+bjj<mai+bj+1mO(m2logm)O(logm)時間と O (m )スペース。O(m2logm)O(m)
ここで、数値のすべてのサブセットの合計をソートするには、リストa iがアイテムの前半のサブセットの合計のセットであり、リストb iがサブセットの合計のセットであるこのサブルーチンを使用しますアイテムの後半の。これらのリストは同じアルゴリズムで再帰的に見つけることができます。naibi
ここで、元の問題を検討します。LET ある座標のセットで0、及びS 1は、ある座標の集合である1。次に
Π I ∈ S 0 P (V iは = 0 )Π I ∈ S 1 P (V iは = 1 )S00S11
∏i∈S0p(vi=0)∏i∈S1p(vi=1)==∏1≤i≤np(vi=0)∏i∈S1p(vi=1)p(vi=0)∏1≤i≤np(vi=0)exp(∑i∈S1logp(vi=1)p(vi=0)).
これらの番号をソートする番号がソートと同じである、我々は、の部分集合の和ソーティングに問題が減少しているので、n個のアイテムを。∑i∈S1logp(vi=1)−logp(vi=0)n