私は割り当てのためにこれを一度行わなければなりませんでした、そしてこれは私たちが使用したアプローチです。
ヘッダーのエンコードは、(頻度ではなく)ツリーの構造をエンコードするために0と1を使用して行われました。「0」はツリーに沿って移動することを示し、「1」はリーフノードにいることを示します。これにより、ツリーを一意にエンコードする一種のプレオーダートラバーサルが発生しました。
たとえば、(((ab)c)(de))のようなツリーは、「0001 a
1 b
1 c
01 d
1 e
」としてエンコードされます。ここで、a、b、c、d、eはASCII形式です。
グラフィカルな形式のツリーは次のとおりです。
/ \
/\ /\
/\ c d e
a b
EOFの場合、ファイルの最後の3ビットを使用して、最後の2バイトのうち読み取る必要のあるバイト数を指定しました。最後のバイトを読み取ったら(つまり、最後から2番目のバイトで作業していました)、最後の3ビットをチェックしました。読み取るビット数から6を引いた数をエンコードしました。つまり、「読み取り(6ビット)して他のすべてを破棄する110101xxxxxxx000
」という意味です。「 (7ビット)を読み取り、残りを破棄する」などを意味します。110101
1101011xxxxxx001
1101011
このようにすることで、EOFを示す特別な値を設定する必要がなくなり、ファイルを一度に1バイトずつ読み取ることができました(実際には、作業場所の1バイト前に読み取る必要がありました)。
(EOFについては、あなたの記事を読んでいないので、私たちのアイデアがあなたのアプローチで機能するかどうかはわかりません。)