2016-10-21 7 views
5

K個のバイナリ番号(それぞれ同じ長さ)があるとします。これらのK個の2進数を一意に識別するために必要なビット数を最小限にする(連続である必要はありません)必要があります。例えば100,110は1ビット(第2の位置)で区別することができる。 111,110,101は2ビットを区別する必要がある。2進数のセットを区別するための最小ビット数を見つけるアルゴリズム

+0

入力に制約がありますか? 32ビット、64ビット、または任意の長さの数字ですか? Kにはどのような値がありますか? –

+0

この問題は、入力を分類できる決定木を構築することと多少関連しています。多分ID3アルゴリズムを見てみましょう:https://en.wikipedia.org/wiki/ID3_algorithm –

+2

あなたの投稿を破壊しないでください。 – dorukayhan

答えて

0

Minimum Set CoverがセットU、及びUのサブセットの集合S に関して定義されます。 Uの各要素は、Sのセットのうち少なくとも1つでカバーする必要があります。

Set Coverを解決できる場合は、この問題も解決できます。あなたがセットを構築するとしその各エントリUU 私は、J私< J)、(i、j)はペア(i、j)のにあなたのに対応します(したがって、| U | = k(k-1)/ 2)。今Nセット、Sを構築、...、nは S のn可能なビット位置に対応します。セットS jは、ペアの位置jの区別に対応するすべての要素のサブセットです。数字K、L位置Jが異なる場合には、であり、次いで、U K、L ∈ S Jを設定します。

しかし、これは削減によるNP困難な問題です。欲張りのアプローチでは、必要最小限のビット数の近似を得ることができますが、厳密には最小ではありません。

+0

間違った方向に縮小しました。あなたはこの問題を解決するためにセットカバーを使用するのではなく、最小限のセットカバーを解決するためにこの問題を使用する必要があります。 –

3

これらのバイナリを一連の線形方程式として見ることができます。私たちはこれらのバイナリ持っているのであれば、たとえば ため、:1111、1100、1001、我々は次のようにそれらを表現することができます

x1 + x2 + x3 + x4 = y1 
x1 + x2 + 0 + 0 = y2 
x1 + 0 + 0 + x4 = y3 

ここから、我々は余分排除するために、これらの方程式を減らすためにGaussian eliminationを使用することができることを実感変数(上記の例ではx1)です。削減の結果はK個の異なる変数に設定され、元の質問の結果を得るために1つの余分な変数が削除されます。

+0

これは、異なるすべてのビットを与えます。たとえば、あなたの例では、これは1つの変数を削除するだけで、区別するために必要な最小値は2です。 –

+0

@PapudeetBerandhi私は私の答えで言及しましたが、ガウス消去の結果からもう一度削除して最終的な答えを得ることができます。 –

+0

@PapudeetBerandhi、Pham、私は疑問を誤解していると思います.2ビットで '[1111,1100,1001]'(そしてどちらのもの)を区別するのか理解できますか?また、その例に「1000」を加えた場合、ガウスの消去と区別するビットの点で、どのように違うでしょうか? –

関連する問題