- グレーのバイナリコード。 彼らの存在。 最小の変更の順序での特定のセットのサブセットの列挙。
- 最小限の変更の順序でのk要素のサブセットの列挙の存在と実装。
それでは始めましょう。
グレーバイナリコード
次数nの グレーバイナリコードは 、すべてのシーケンスです

次数2のグレイコードの例:
- 00
- 01
- 11
- 10
そのようなシーケンスが唯一ではないことに気付くのは簡単です(少なくとも逆にすることができます)。 したがって、他の次数のグレイバイナリコードの存在を確認し、同時に、さらに処理するためにそのようなシーケンスの1種類を選択してみましょう。
存在
グレイコードの存在は、帰納法によって簡単に証明されます。
ベース-

移行。 させて










この方法で取得されたグレーコードは、 反射または対称反射と呼ばれます。 将来的には、グレーの反射バイナリコードを検討します。
演習として、証明で与えられた式を使用して、対称に反射された次数3のグレーコードを書き出します。

それでは、グレイコードの適用に移り、組み合わせ論のいくつかの問題を解決しましょう。
最小の変更の順序での特定のセットのサブセットの列挙
次の問題を考慮してください。「 n個の要素のセットを指定します。 すべてのサブセットを、1つの要素を削除または追加することで (つまり、変更が最小限の順序で)前のサブセットから取得されるように表示する必要があります。
セットの要素には1からnまでの番号が付けられていると仮定します。 次に、セットの要素の任意のセットをnビットのバイナリコードに関連付けることができます。セットのi番目の要素がセットに含まれている場合、コードのi番目のビットは1、それ以外の場合はゼロです。 したがって、すべてのサブセットの列挙は次数nのバイナリコードの列挙に削減され、最小変化の順序でのサブセットの列挙はバイナリグレイコードの列挙になります。
グレイコードの再帰列挙アルゴリズムのアイデアは、それらの存在の証明、すなわち、その中で与えられる再帰関係から確かに続きます。




このアルゴリズムの複雑さを評価します。 明らかに、関数呼び出しツリー


演習として、読者は以下の短い再帰検索アルゴリズムを分析するように求められます。
例

また、反復検索アルゴリズムの存在と、この記事では考慮されておらず、ウィキペディアなどの他のソースから学習できるグレイコードのその他の有用なプロパティについても述べたいと思います。
それでは、最後の最も興味深いタスクに移りましょう。
最小の変更の順序でのk要素のサブセットの列挙。
問題のステートメントから始めましょう。「 n個の要素のセットが与えられます。 正確にk個の要素から構成されるすべてのサブセットを導出する必要があります。これにより、後続の各サブセットは、正確に1つの要素を置き換えることによって(つまり、最小の変更の順序で)前のサブセットから取得されます。
ここで、前の問題からのアルゴリズムのアイデアがすぐに思い浮かびますが、正確にk単位のグレーコードのみを印刷します。 これは、このアルゴリズムの正確性の問題を提起します:誰もが隣接するコードが順番に並んでいることを保証しません

いくつかの表記法を紹介します。
文字xを連結( m回)し、文字yを連結( k回)した文字列です。 例:
。
k単位のすべてのnビットコードのシーケンスです。コードは、シーケンス内に配置されている順序になります。
。
k単位のすべてのnビットコードのシーケンスです。コードは、シーケンス内に配置されている順序になります。
。
補題
最初のバイナリコード





証明
上の帰納法で証明する

ベース-

移行。 式を真とします
















定理
連続したバイナリコード
証明
また、帰納法で証明します

ベース-

移行。 定理を保持しましょう






















これで、定理の顕著な結果を述べることができます。
- 前に提案した単純なアルゴリズムは正しいです。つまり、シーケンス内にある場合
正確にk個のユニットが存在するバイナリコードのみを残し、それらは最小の変更の順序で配置されます(各要素は、前の要素から1つの要素を置き換えることで取得されます)
- シーケンス
次の繰り返し関係によって定義されます:
。 これは、誘導によって検証できます。
- シーケンス
次の繰り返し関係によって定義されます:
。 また、誘導によって検証されます。
これらの結果を使用して、 k要素のサブセットを最小限の変更の順序で再帰的に列挙するプログラムを作成できます。

提示されたアルゴリズムの複雑さを推定します。 再帰を深くすると、 uの値は常に減少することに注意してください。 つまり、バイナリコードを実現するために、 n個以下の凹部を作成します。 合計でそのようなコード-



コールツリーがわかりやすい


漸近現象の正確な推定は、E。Reingold、J。Nivergelt、およびN. Deoの本「Combinatorial Algorithms。」に記載されている些細な事実からはほど遠いものです。 理論と実践」、またはそれを自分で証明してみてください。
これで私は記事を終了したいと思います。 ありがとう、また会いましょう。