例で問題を紹介します。独立した質問の特定のセットで構成される試験を設計しているとしましょう(受験者は正しいか間違っているかを判断できます)。各質問に与えるスコアを決定します。ルールでは、合計スコアが特定のしきい値を超える候補者は合格し、他の候補者は失敗します。
実際、あなたはこれについて非常に徹底しており、すべての可能な結果を想定し、このパフォーマンスの候補者が合格するか失敗するかをそれぞれについて決定しました。したがって、ブール関数があり、候補者が正確な答えに応じて合格するか失敗するかを示します。もちろん、この関数は単調である必要があります。一連の質問を正しく取得すると合格になり、スーパーセットを適切に取得すると合格する必要があります。 F :{ 0 、1 } のn → { 0 、1 }
質問に与えるスコア(正の実数)としきい値を決定して、関数がルールによって正確にキャプチャされるようにすることができます。「正しい質問のスコアの合計がしきい値を超える場合、候補は合格します」 ?(もちろん、スコアを定数で乗算するまで、一般性を損なうことなくしきい値を1にすることができます。)
正式:単調なブール関数ありますかすべての、場合、ます。W 1、... 、W N ∈ R + V ∈ { 0 、1 } nは F (V )= 1 ΣをIをwはiがV I ≥ 1
すべての関数をこのように表現できるわけではないことを確認するのはそれほど難しくありません。例えば機能することはできません:として受け入れられ、私たちは持っている必要があります、のいずれかのようW_1、W_2がなければなりません\ geq 1/2、および同様にw_3、w_4。ここで、たとえばw_1とw_3の場合、w_1 + w_3 \ geq 1であるが(1、0、1、0 )は拒否されるため、矛盾があります。他の場合も同様です。(1 、1 、0 、0 )W 1 + W 2 ≥ 1 、W 1、W 2 ≥ 1 / 2 、W 3、W 4 、W 1 、W 3 、W 1 + W 3 ≥ 1 (1 、0 、
これは非常に自然な問題のように思えるので、私の主な質問は、これがどの名前で研究されているかを知ることです。もちろん、「特性化」を求めることはあいまいです。私の質問は、この方法で表現できる関数のクラスに名前があるかどうか、入力関数がそれに属しているかどうかのテストの複雑さについて知られていること(式または回路として与えられる)などを知ることです。
もちろん、このテーマには多くのバリエーションが考えられます。たとえば、実際の試験では質問は独立していませんが、依存関係を示す質問にはDAGがあり、受験者はすべての前提条件が満たされている場合にのみ質問に答えることができます。単調関数の条件は、依存関係を満たす\ {0、1 \} ^ nの評価に制限することができます。問題は、入力関数が変数の入力DAGでキャプチャできるかどうかを判断することです。スコアが固定kのタプル(点ごとに加算され、点ごとにしきい値ベクトルと比較される)で、k = 1よりも多くの関数をキャプチャできるバリアントも考えられます。。あるいは、ブールではなく、ドメイン内の位置を示すさまざまなしきい値を持つ完全に順序付けられたドメインに移動する、より表現力豊かな関数をキャプチャすることもできます。最後に、負のスコアを許可した場合にどうなるかはわかりません(関数に関する単調な制限を解除できます)。
(注:これについて私が疑問に思ったのは、Google Code Jam選択ラウンドです。候補者が特定のスコアのしきい値に達すると候補者が選択され、問題のスコアはおそらく、選択するのに十分と思われる問題のセットを反映するように慎重に設計されています。Code Jamには質問に対する依存構造があり、「小さな入力」の質問を最初に解決しないと解決できない「大きな入力」の質問がいくつかあります。