詳解 LOUDS (2) ビット列を作ってみる
今回は、前回紹介した LOUDS のデータをどのように作るかについて説明します。
まず、対象とする木構造を再掲します。
この木構造に対応するデータが、次のようなビット列になるということを前回お話しました。
このビット列の作り方は、次のようになります。ビット列は左から右に向けて作っていきます。
- 左端に、"1 0" という 2つのビットを置く。
- それぞれのノードごとに、そのノードが持つ子ノードの数だけ "1" を右に置き、それに続けてひとつの "0" を右に置く。
実際に作る過程を見てみましょう。
まず、最初に 1 0という 2つのビットを置きます。
これは、対象とする木構造によらず、先頭に置くものです。
それに続き、1番ノードの持つ子ノードの数だけ、"1" を置きます。
さて、1番ノードは子ノードをいくつ持っているでしょうか。
図を再掲します。
答えは、2番・3番・4番の「3個」です。ですので、"1" を 3つと最後に "0" をひとつ、つまり 1 1 1 0 を置くことになります。最初に置いた 1 0 と合わせて、全部で 6ビットになります。
次は、2番です。2番の子ノードは 5番ひとつだけですので、ひとつの "1" とひとつの "0" 、つまり 1 0 を置きます。それまでの 6ビットと合わせて、全部で 8ビットになります。
2番の次は、番号順に 3番です。3番は、子ノードを持っていません。「子ノードの数だけ "1" を置く」というルールなので、子ノードのないノードに対しては、"1" を置きません。しかし「最後に 0 を置く」というのはそのままです。ですので、3番に対するビットは、"0" ひとつということになります。これで 9ビットです。
この手順を最後のノードまで繰り返すと、最初に挙げたビット列になります。
木構造と見比べて、4番ノード以降も対応していることを確認してください。
この手順に従ってビット列を作ると、それが対象とする木構造についての十分なデータとなります。
今回のまとめです。
- LOUDS のビット列は次の手順で作成できる。
- 左端に、"1 0" という 2つのビットを置く。
- それぞれのノードごとに、そのノードが持つ子ノードの数だけ "1" を右に置き、それに続けてひとつの "0" を右に置く。
次回は、このデータの中で、それぞれのビットが持つ意味について解説します。
練習問題です。
次の木構造に対する LOUDS のデータを紙に書いてみてください。