K個のバイナリ番号(それぞれ同じ長さ)があるとします。これらのK個の2進数を一意に識別するために必要なビット数を最小限にする(連続である必要はありません)必要があります。例えば100,110は1ビット(第2の位置)で区別することができる。 111,110,101は2ビットを区別する必要がある。2進数のセットを区別するための最小ビット数を見つけるアルゴリズム
答えて
Minimum Set CoverがセットU、及びUのサブセットの集合S に関して定義されます。 Uの各要素は、Sのセットのうち少なくとも1つでカバーする必要があります。
Set Coverを解決できる場合は、この問題も解決できます。あなたがセットを構築するとしその各エントリU、U 私は、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困難な問題です。欲張りのアプローチでは、必要最小限のビット数の近似を得ることができますが、厳密には最小ではありません。
間違った方向に縮小しました。あなたはこの問題を解決するためにセットカバーを使用するのではなく、最小限のセットカバーを解決するためにこの問題を使用する必要があります。 –
これらのバイナリを一連の線形方程式として見ることができます。私たちはこれらのバイナリ持っているのであれば、たとえば ため、:1111、1100、1001、我々は次のようにそれらを表現することができます
x1 + x2 + x3 + x4 = y1
x1 + x2 + 0 + 0 = y2
x1 + 0 + 0 + x4 = y3
ここから、我々は余分排除するために、これらの方程式を減らすためにGaussian eliminationを使用することができることを実感変数(上記の例ではx1)です。削減の結果はK個の異なる変数に設定され、元の質問の結果を得るために1つの余分な変数が削除されます。
これは、異なるすべてのビットを与えます。たとえば、あなたの例では、これは1つの変数を削除するだけで、区別するために必要な最小値は2です。 –
@PapudeetBerandhi私は私の答えで言及しましたが、ガウス消去の結果からもう一度削除して最終的な答えを得ることができます。 –
@PapudeetBerandhi、Pham、私は疑問を誤解していると思います.2ビットで '[1111,1100,1001]'(そしてどちらのもの)を区別するのか理解できますか?また、その例に「1000」を加えた場合、ガウスの消去と区別するビットの点で、どのように違うでしょうか? –
- 1. Dijkstraアルゴリズム複数の辺が最小値を見つける
- 2. Pythonセット内で最小の連続した整数を見つける
- 3. 遺伝的アルゴリズムを使って関数の最小値を見つける
- 4. 一意的な除数を見つけるための最適なアルゴリズム
- 5. 最大公約数を見つけるための線形時間アルゴリズム
- 6. ソートされた浮動小数点数の最小の差を見つける
- 7. Matlabでユニークな2進数列を見つけるための高速なメソッド
- 8. 最短経路を見つけるためのダイクストラのアルゴリズム?
- 9. perl。 64ビットの2進数を10進数に変換する
- 10. 異なるセット内の最小スパニングツリーを見つける
- 11. 関数を最小化する最適ベクトルを見つける
- 12. VERILOG:5ビットの2の補数を見つけるには
- 13. 最適なゾーンカバレッジを見つけるためのアルゴリズム
- 14. 2つの値の最小値を見つける関数の実装
- 15. 各スパンをカバーするエッジの最小セットを見つけるための最大スパニングツリー
- 16. 10進数を「かなり」の小数に変換するための最適化アルゴリズム
- 17. セルの範囲から最大の2進数を見つける
- 18. 2つの数字の間の素数を見つける高速アルゴリズム
- 19. 5つの整数の最小値を見つける?
- 20. セットカバー問題の最小サイズセットカバーを見つけるアルゴリズム
- 21. 配列内の最小要素を見つける再帰アルゴリズム
- 22. Aprioriアルゴリズムの最小サポートを見つける方法
- 23. Matlabが関数の最小値/最大値を見つける
- 24. 負の2進数を区別する方法は?
- 25. 整数の集合の最小公倍数を見つけるためのユーティリティを持つJavaライブラリ
- 26. scipyでの最小化、N次元スカラー関数のすべての極小を見つけるアルゴリズム
- 27. 連続した最大数を見つけるためのアセンブリコード
- 28. ビット操作を使用して最小値を見つける
- 29. 配列内の数字の対の最小の差異を見つける最速のアルゴリズムは何ですか?
- 30. 重み付けされたグラフから2番目に小さい最小スパニングツリーを見つけるアルゴリズム
入力に制約がありますか? 32ビット、64ビット、または任意の長さの数字ですか? Kにはどのような値がありますか? –
この問題は、入力を分類できる決定木を構築することと多少関連しています。多分ID3アルゴリズムを見てみましょう:https://en.wikipedia.org/wiki/ID3_algorithm –
あなたの投稿を破壊しないでください。 – dorukayhan