レンジコーダーでは、有限精度の算術演算を使用すると、最初に何らかのフラッシュや微調整を適用せずに次のシンボルをエンコードすることができない場合があります。ワーキングレジスタ。あいまいまたは不当な出力がないレンジコーディング
結果として、どのように調整されるかに応じて、いくつかの小さなギャップが正しいビットストリームのセットに残る可能性があります。
例えば、Wikipedia pageは、出力範囲をより多くのビットをシフトアウトできるようにすることを提案し、元の範囲の一部を未定義として残します。
デコーダでは、同じポイントに来て、入力ビットストリーム自体がエンコーダの調整に適合していなくても、エンコーダによって破棄されたはずのギャップに入ることがあります。このようなビットストリームの正しいデコードはありません。
ハフマン(これは不完全なシンボルがある可能性のあるストリームの終わりを除く)の入力設定がなくても通常定義されているようなものです。そのため、任意のビットストリームを元のビットストリームに再エンコードできるメッセージにデコードすることは可能です。
私の質問は次のとおりです。精度制限を扱うが、復号不能またはあいまいなビットストリームの可能性を生じさせないような調整を行うことは可能ですか?そのような任意のビットストリームを与えられたそれは常に元のビットストリームに再エンコードすることができるシンボルのいくつかのセットにそれをデコードすることは可能ですか?
直感的には不可能であるはずですが、私はこの問題に対して頭を打つべきではありません。しかし、私はハフマンを見て、それが私がシミュレートできるはずの特性を持っている理由を調べます。
あなたが記述するプロパティの名前は「単射」です。だから、あなたは "全単射"と "レンジコーディング"について文献を検索することができます。誰かがすでにこれを解決しているかもしれません。 –
@マークアドラー、それは確かに動作します。主な関心事はEOFです(ファイルの途中でEOFを使用すると、任意の数の冗長ビットストリームが作成されるため)。一般的なノン・ファッジ・ソリューションは、繰延キャリー出力スキームを使用して任意の精度であるように見えます。 – sh1