小さなスペースで確率の順にベクトルを反復する方法


12

検討n次元ベクトルV iは{ 0 1 }。各iについて、p i = P v i = 1 )がわかっており、v iが独立していると仮定します。これらの確率を使用して、出力サイズで空間準線形を使用して、最も可能性の高いものから最も低い可能性の順に(タイの任意の選択で)バイナリn次元ベクトルを反復する効率的な方法はありますか? vvi{0,1}ipi=P(vi=1)vin

例えば取るp={0.8,0.3,0.6}。最も可能性の高いベクトルである(1,0,1)と少なくとも可能性がある{0,1,0}

非常に小さいn2nベクトルのそれぞれにその確率でラベルを付けて単純に並べ替えることができますが、これはもちろんサブリニアスペースを使用しません。

この質問の近い変種は、以前/cs/24123/how-to-iterate-over-vectors-in-order-of-probabilityで尋ねられました。


そこにフォローアップの質問をしなかった理由はありますか?ここでの主な問題は、サブリニア空間でこれを行うことの1つですか?
スレシュヴェンカト

@SureshVenkatはい、問題は完全にサブリニアスペース(出力サイズ)にあります。質問は非常に難しいと思うので、ここで質問しました。
レンビク14年

これを空間と時間で解決するには、SUBSET-SUM(サブセットの合計が異なる合計をほぼ打ち消すことをすぐに知る)に似た手法が必要と思われます。したがって、迅速な解決策はありそうにありません。poly(n)
ジェフリーアーヴィング14年

@GeoffreyIrvingこの直感をもっと形式的にできると思いますか?
レンビク14年

回答:


9

以下は、約時間と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 1i = 1 mを取得し、それらを優先キューに入れます。a1amb1bmmai+b1i=1m

ここで、残りの最小の合計優先キューから引き出したときに、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

iS0p(vi=0)iS1p(vi=1)=1inp(vi=0)iS1p(vi=1)p(vi=0)=1inp(vi=0)exp(iS1logp(vi=1)p(vi=0)).

これらの番号をソートする番号がソートと同じである、我々は、の部分集合の和ソーティングに問題が減少しているので、n個のアイテムを。iS1logp(vi=1)logp(vi=0)n


ポリゴンの時間/空間ソリューションを信じがたいほど減らす可能性がありますか?
レンビク14年

おそらく時間未満のソリューションは得られないでしょう。それは出力のサイズだからです(そして私のソリューションはn2n時間)。ただし、スペースの下限はありません。n2n
ピーターショー14年

ありがとうございました。もちろん、ポリタイムを意味するのではなく、出力サイズとポリゴン空間で直線的なものを意味します。
レンビク14年

4

スペースそれを行うことができます実行時間を気にしない場合)。O(n)

  1. 与えられた文字列のため、我々は空間に計算することができるO N の数R X よりも可能性がある文字列のX。すなわち、多数のX '番目のP X '> P xは:ちょうどすべての上行くX '{ 0 1 } nとし、多数のカウントX ' STをx{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nxr x は、出力内の文字列 xの連続番号であることに注意してください。p(x)>p(x)r(x)x
  2. すべてのために、我々は見つけることができ、XR X = K空間におけるO N すべての上に行く:Xは{ 0 1 } n個ごとに、Xの計算R X 、停止及び出力Xの場合、R x = kkxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. 今ちょうど全て越えるから02 N - 1ごとに、k個の印刷XR X = Kk02n1kxr(x)=k

(可能な関係の世話もする必要がありますが、これは難しくありません。)


ありがとうございました。しかし、それは非常に遅いアルゴリズムです:)
レンビク2014年

0

編集:この答えは間違っています。詳細についてはコメントをご覧ください。〜ガンダリットル

出力の線形は意味します。もちろん、出力自体は別として、明らかなアルゴリズムはO n スペースのみを使用すると思います。O(2n)O(n)

  1. ペアを含むリストを取得し、|でソートします 0.5 p i | 、最初に最大。(i,pi)|0.5pi|

  2. vvi1pi>0.50vviv

  3. ソートされたリストと空のベクトルでこの再帰関数を呼び出します。

010.5

O(2n)On ソートにはそれ以上は必要なく、再帰の長さはベクトルの長さであるため、 n. I believe this is also the lower bound because there must be a different state in memory for every time step in the running of the algorithm, and the time complexity is O(2n). O(n) states in memory are required to enumerate O(2n) time steps. Therefore this algorithm is worst-case complexity optimal.


The other answer is certainly different as it requires a priority queue and hence uses Θ(2n) space.
Lembik

Thanks. I clearly didn't read it carefully enough! I've edited my answer.
gandaliter

3
Are you sure this solution works? I couldn't figure out the details of the double recursion (pseudocode would help!) but I don't see how this could work. In particular, your solution seems to be local: if it set v1=1 it's now going to output 2n1 answers with v1=1. But the actual answers shouldn't look this way. In fact, as far as I understood your solution, it seems to fail even for the simplest case where all pi=0.5.
mobius dumpling

You're right, this doesn't work. Sorry!
gandaliter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.