免責事項:レーベンシュタインのコーディングはレーベンシュタイン編集距離メトリックとはまったく無関係です。
<レーベンシュタインコードをここで計算する必要がある理由についての詳細な説明を挿入します。>
コード
レーベンシュタイン符号化は、バイナリコードを非負の整数に割り当てるシステムであり、この課題に関係のない確率で奇妙な特性を保持します。このコードをL(n)と表記します。ウィキペディアはこれを5段階のプロセスとして説明しています。
- 歩数変数Cを1に初期化します。
1
コードの先頭に導くことなく、数値のバイナリ表現を記述します。- ましょMはステップ2に書き込まれたビットの数です。
- Mが0でない場合は、Cをインクリメントし、ステップ2からMを新しい数として繰り返します。
- C
1
ビットとa0
をコードの先頭に書き込みます。
ただし、コードを再帰的に記述することもできます。
- 数値が0の場合、そのコードは
0
です。 1
コードの先頭に導くことなく、数値のバイナリ表現を記述します。- ましょMはステップ2に書き込まれたビットの数です。
- L(M)をコードの先頭に書き込みます。
1
コードの先頭に少し書き込みます。
例を好む人のために、ここにL(87654321)の再帰的プロセスがあり、連結を示しています:
チャレンジ
数値nを指定して、ビットストリングL(n)を適切な形式で出力するプログラムまたは関数を記述します(これには、上記のビットを持つ数値を返すことも含まれます)。標準の抜け穴は、いつものように禁止されています。
例
入力: 5
出力: 1110001
入力: 30
出力: 111100001110
入力: 87654321
出力: 111110000101001001110010111111110110001
入力: 0
出力: 0
±
関数の代わりに単項演算子を定義することで、数バイトを節約できると確信していますf
。