ましょハトの数であり、およびnは孔の数です。i番目の鳩がj番目の穴に入れられた場合、命題変数B i 、0 ... B i 、l o g (n )がj − 1のバイナリ表現をエンコードするとします。(例、鳩1は穴10内に配置された場合、J - 1 = 9、バイナリ1001だからであるB 1 、3 =真、B 1 、2mnBi,0Bi,log(n)j−1ijj−1=9B1,3B1,2=偽、 =偽及びB 1 、0 =真)。B1,1B1,0
変数によってエンコードされた穴がB i + 1の穴よりも小さいことを要求することにより、穴内のハトの特定の順序を強制します。エンコーディングは期待どおりに比較されます。BiBi+1
< B i + 1 、l o g (n )
OR B i 、l o g (n ) = B i + 1 、l o g (n ) AND B i 、l o g (n )− 1 < B i + 1Bi,log(n)Bi+1,log(n)
B私、l o g(n )Bi + 1 、l o g(n )B私、l o g(n )− 1
OR B i 、l o g (n ) = B i + 1 、l o g (n ) AND B i 、l o g (n )− 1 = B i + 1 、l o g (n )− 1 AND B iBi + 1 、l o g(n )− 1
B私、l o g(n )Bi+1,log(n)Bi,log(n)−1Bi+1,log(n)−1 < B i + 1 、l o g (n )− 2
OR
... Bi,log(n)−2Bi+1,log(n)−2
...右側の次のビットが次のハトのビットよりも小さい限り、最上位ビットを同等にできるというパターンに従います。が存在するであろうコンパレータ当たり接続詞およびO (M )期待与え、コンパレータO (M * L O G (N ))の追加条項。O(log(n))O(m)O(m∗log(n))
変数の値がで暗示されている必要がありXのI 、Jの値。各B i 、∗ビットは、設定されるX i 、j変数の特定のセットのいずれか1つによって暗示されます。例:n = 16とすると、次のようになります。BXi,jBi,∗Xi,jn=16
ExactlyOne(X1,9,X1,10,X1,11,X1,12,X1,13,X1,14,X1,15,X1,16,B1,3¯¯¯¯¯¯¯¯¯)
その力鳩1穴9-16のいずれかに配置される場合、真。それ以外の場合はB 1 、図3に示すように句を満たすために偽に設定されています。これらの句は、残りのB iビットを設定します。B1,3B1,3Bi
E 、X 、A 、Ct l y O n e (ExactlyOne(X1,5,X1,6,X1,7,X1,8,X1,13,X1,14,X1,15,X1,16,B1,2¯¯¯¯¯¯¯¯¯)
E x a c t l y OExactlyOne(X1,3,X1,4,X1,7,X1,8,X1,11,X1,12,X1,15,X1,16,B1,1¯¯¯¯¯¯¯¯¯)
ExactlyOne(X1,2,X1,4,X1,6,X1,8,X1,10,X1,12,X1,14,X1,16,B1,0¯¯¯¯¯¯¯¯¯)
が存在することになる各鳩のために、これらの句。ハトがm個あるため、m ∗ l o g (n )句が追加されます。log(n)mm∗log(n)