1

これはプログラミングの問題というよりも数学の問題かもしれませんが、私はこれについてしばらく考えていて、これが解決可能な問題かどうかを判断するのに苦労しています.

私は次のものを持っています:

  • シンボルのセットをソースとするセットAB
  • ブール関数F : A × B → {0,1}

集合 C = {(x,y) : x ∈ A, y ∈ B, with F(x,y) = 1} を構築したいと考えています。

( F は、任意のペアに対して O(1) で計算できます )

ここまでは、この計算は基本的に、F が定数時間の場合、O(|A| × |B|) で実行される関数 F を介した A × B のフィルターのみで構成されます。

しかし、私は私を助けることができると感じる C の 1 つのプロパティを知っています...

私はそれを知っています |C| << |A| |B| 、実際、私はかなり確信しています |C| |A|についてです . これを悪用する方法があるように感じます (私は最近、確率的アルゴリズムを紹介されましたが、これが役立つと感じていますが、確実にはわかりません)。

これを解決するには、いくつかの形式の補助構造が必要になると思いますが、構造がAのサイズの多項式のみである限り、それ自体はそれほど問題にはならないはずです(べき集合の計算は少し多いかもしれませんが、A はできます少し大きくなります)。

これは、ある種の下限の複雑さがあることが証明されているもののようにも感じますが、それを証明するための学術的知識は実際にはありません。

どのドメインを調べるべきかについてのガイダンスやヒントをいただければ幸いです。

これまで考えたこと:

  • これはSATの問題によく似ているようですが、私はそれらについてほとんど何も知りません

  • この問題は、セット識別の問題 (少なくとも... 2 つのセットの差を計算する) と少し似ているように感じます。ただし、この形式のトピックに関する調査を見つけることができません (「A を反復し、B を反復する」タイプの回答が多数得られるだけです)。

4

1 に答える 1

1

あなたが問題を提起した言い回しでは、あなたが提案したように、唯一の正しい解決策は、AとBの二重反復とフィルターです。これは、他の情報が不足している「セットCを構築する」という問題を述べたためです。これは、通常、セットCを列挙することを意味します。少なくとも提供された情報を使用して、それを実行し、Cの正確な列挙を取得する唯一の方法です。 、は、A×Bの各要素でFを評価することです。

問題を解釈する別の方法では、特性関数がある場合はCの定義があると言うことができますが、それはFだけです。したがって、それはあなたが意味するものではないと思います。

重要なのは、Fの関連するプロパティを解明する必要があるということです。これは、Cを列挙するためのアルゴリズムのフックだからです。つまり、直接フィルタリングのショートカットを可能にするFに関する公理を提案する必要があります。これは、たとえば、より短いアルゴリズムを可能にする補助関数Gの存在を意味する可能性があります。このようなGを想定すると、列挙アルゴリズムはFだけではなく、FとGの両方を評価します。

于 2012-11-05T13:35:25.373 に答える