順序木のバイナリ表現、あるいは括弧表現

2.1 Worst-Case Entropyにnノードの順序木は2nビットで表現できると書いてあります。

これは深さ優先探索をして、ノードに入る時に 1 を、出る時に 0 を出力することで実現できます。各ノードに対して入る時と出る時にビットが出力されるので2ビット、これがnノードあるので2nビットです。

また 1( に、 0) に置き換えれば、これは木の括弧表現ということもできます。


例えば以下の通り。

f:id:echizen_tm:20200810000742p:plain

Fig.1 11110000 or (((())))

f:id:echizen_tm:20200810001118p:plain

Fig.2 11100100 or ((())())

f:id:echizen_tm:20200810001404p:plain

Fig.3 11010100 or (()()())


これらのバイナリ表現はよく見ると、いずれも先頭に1が2つ、末尾に0が2つあります。

これらは常にそうなります(のはず)。

なぜか。

まず、先頭の1と末尾の0はルートノードを表しています。木の探索はルートからはじまってルートで終わるからです。

そして、ルートノード以外のノードについて1と0の対応をきちんと取るには、2番目が1、後ろから2番目が0でないといけません。

2番目が0だとルートノードの1と対応が取れてしまうし、後ろから2番目が1だとルートノードの0と対応が取れてしまうからです。

したがって、これらの4ビットは自明なので消してしまっても問題ありません。


結果、2n-4ビットあれば木のバイナリ表現ができることになります。

余談ですが、今回の内容はNavarro本に It is an easy exercise ... We leave as an exercise to the reader ... と書いてあってめちゃくちゃ面白かった。

この表現海外でも流行ってるのか。