posetsのバイナリ検索の一般化?


28

Sにポーズ "S"と単調な述語 "P"があるとします。Pを満たすSの1つまたはすべての最大要素を見つけたいと思います。

編集:私はP評価の数を最小限にすることに興味があります。

この問題にはどのようなアルゴリズムが存在し、Sにはどのようなプロパティと追加の操作が必要ですか?

次のような重要な特殊なケースはどうですか?

  • Sは線形順序です。「中間検索」操作がある限り、通常のバイナリ検索が機能します。
  • Sは格子です
  • Sはサブセットラティスです
  • Sはマルチセットラティスです
  • ...

後者の2つのケースは、たとえば実験設計などで特に重要に思えます。ブールまたは実パラメータのセットがあり、特定のパターンを再現する最小の組み合わせ(たとえば、テストの失敗)を見つけたい場合です。


1
「マルチセット」格子とは何ですか?
スレシュヴェンカト

1
要素がマッピングX-> Nであるラティスであり、meetは要素単位の最小値であり、joinは要素単位の最大値です。コドメインとしてNの代わりに任意の格子に一般化できます。
jkff

回答:


15

私はこれをあまり熟考していないので、間違っている場合は修正してください。

セイは、 posetの幅です。w

  1. ばらばらのチェーンの和集合であるポーズについては、各チェーンにバイナリ検索のクエリ複雑度の標準下限を適用するだけで、少なくともw log nPの評価が必要です。wwログnP

  2. 無料で比較を行うため、ポーズのチェーンへのチェーン分解を無料で計算できます。各チェーンでバイナリ検索を実行して、Pを満たす最初の要素を特定します。次に、識別された要素を調べて、支配的な要素を削除します。Pの評価数はO w log n です。チェーンごとに最大1つの最大要素が存在する可能性があるため、これによりすべての最大要素が識別されます。wPPOwログn


追加:実際には、サブセット2 [ n ]のラティスに対してはるかに優れた()を行う単純な再帰アルゴリズムがあります(編集:domotorは彼の答えで一般的な戦略を説明しました)。ここで、Pは下向きに単調であると仮定しています(つまり、サブセット{ X P X = 1 }は下位セットを形成します)。したがって、下のセットのメンバーを見つけるアルゴリズムは次のとおりです。On2[n]P{バツPバツ=1}

a)テスト。0の場合、停止します。P

b)テストP{n}

bi)0の場合、再帰しますnを含むセットは下位セットにないため、OK )。2[n1]n

b.ii)1の場合は、副格子の下側のセットのメンバーが存在する。この副格子は2 [ n 1 ]と同型であるため、再び再帰することができます。より正確には、2 [ n 1 ] に対してアルゴリズムを実行できますが、アルゴリズムがP Y を評価するように要求するとき、P X を評価します。{X:nX}2[n1]2[n1]P(Y)P(X)X=Y{n}

そのため、各ステップで、元のサイズの半分のサイズの副格子を再帰します。全体的に、を最大2 n回評価する必要があります(実際、アルゴリズムを実装して、述語n + 1を評価できますP2nn+1義雄が指摘するように、あなただけをチェックする必要があるため、時間を 1回)。


うわー、こんな簡単なアイデア!ありがとう-これが最適と思われるかどうかを考えます:)
jkff

チェーンの長さの合計はnなので、実際にはw log nよりも小さくなります。最大値はw log(n / w)前後です。
jkff

OK、線形次数の場合、これはバイナリ検索を提供し、サブセット格子の場合、これはC(n、n / 2)log(2 ^ n / C(n、n / 2))〜exp(n)* nを提供します。それほど速くはありませんが、実際にはそれほど多くの答えがあるかもしれないので、あまり最適ではないようにも見えません。ただし、1つの最大サブセットを見つけるには、1つのチェーンだけでバイナリ検索が必要です。これは素晴らしいことであり、私はそれを考えないのは馬鹿だと思っています。再度、感謝します!
jkff

2
ばらばらのチェーンは、少なくともw + log nの下限(決定論的アルゴリズムの場合)を与えると思います。最後に問い合わせたチェーンで単一のソリューションを「隠す」敵を考えてください。ランダム化されたΩ w )の下限は、ヤオのミニマックス原理に従う必要があります。複雑さw + log nの単一の要素を見つけることは興味深いかもしれません。ww+lognΩ(w)w+logn
サショニコロフ

1
@YanKingYinラティスは(2つ以上の)互いに素なチェーンの結合にはなりません。これは、2つの要素それぞれに上限が必要だからです。posetは、異なるパーツからの要素が比較できないようにパーティション化でき、同じパーツ内の要素が完全な順序を許可する場合、ばらばらのチェーンの結合です。
サショニコロフ14


8

Daskalakisらによる最近の論文の1つは、サイズと幅wのポーズに対して、時間O w n に最小の要素が見つかることを示しています。興味深いのは、彼らの要約では、彼らは言うことですnwO(wn)

また、ヒープおよびバイナリ検索ツリーが全注文に対して果たす部分注文に対して同じ役割を果たす、効率的な静的および動的なデータ構造を見つけることも興味深いでしょう。


ええ、log(n)に比べてあまり刺激的ではありません:)とにかくありがとう!
jkff

しかし、それがポイントです。データ構造がなければ、スキャンするだけなので、完全に順序付けられたsのセットでもlog nを取得できません。実際には、BSTに相当するものを見つけて見つけるのは本当にいい質問です。
スレシュヴェンカト

さて、私は比較述語ではなく、述語Pの評価の数という点で複雑さについて話しています。
jkff

1
ある意味、はい、しかしそれは完全な答えとはほど遠いです-例えば、それは1dまたは2dの場合に二分を与えません:)あなたは根で何をすることを提案しますか?
jkff

1
まだ分​​からない。大声で考えます。しかし、それは素晴らしい質問です。
スレシュヴェンカト

4

Sが入力の一部である場合、最大要素を見つける問題はすでに「NP困難」になります(その要素がnビットの長い文字列であるようなラティスを考える場合)。たとえば、x < yと言えます。x<y CNF(x)が真でなく、CNF(y)がいくつかの固定CNFに対して真である場合。

また、Pを満たす最大要素が多数存在する可能性があるため、それらすべてを出力するのにも時間がかかる可能性があるため、1つの最大要素を見つけることしか望んでいないと思います。

一般に、バイナリ検索は、上記の要素を残した後、または上記の要素が削除され、そのようなすべてのセットで要素の固定比率が削除されるように要素を再帰的に選択できる場合に機能します。

例えば。Sが固定次元グリッドの場合、高速アルゴリズムがあります。他の座標を最小に保ちながら常に1つの座標を半分にするため、たとえば最初のステップ(n / 2,0、...、0)で尋ねます。

nd


私は最初の段落を理解していないのではないかと心配しています。リダクションでは、すべてのnビット文字列がポーズSにあり、入力の一部として与えられていますか?その場合、すべての文字列を多項式時間で調べることができます。
岡本芳雄

1
@YoshioOkamoto:その段落の仮定は、Sの比較がブール回路として与えられていると思います。(しかし、それはポーズの検索とは関係がないので、私には興味がありません。)
伊藤剛

@剛:ありがとう。それは理にかなっています。
岡本芳雄

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