0

ソース アルファベットが a、b、c で​​あり、a が終端記号であると仮定すると、単位間隔は対応して [0, P(a), P(a)+P(b), 1] として分割されます。

a (終了記号) で終わる一連の b と c で構成される文字列は、エンコードに有効です。真ん中に a がある文字列は、エンコードに対して無効と見なされます。

したがって、間隔 [P(a), 1) にあるエンコーディングを使用して文字列を作成するのは簡単です。しかし、算術コーディングは任意の文字列を区間 [0, P(a)) のエンコーディングに割り当てますか? 空の文字列は、[0, P(a)) にあるビット文字列にエンコードされると見なされますか? 空の文字列は、文字列「a」または単なる終了記号と見なすことができるためです。

空の文字列をエンコードするためにスペースを割くのは無意味に思えるので、単位間隔の最初の分割を [0, (P(b)-P(a))/(1-P(a)), 1] にしないのはなぜですか? [P(a), P(a)+P(b), 1] をマッピングして単位間隔を埋めます。次に、その後の精密分割では、通常どおり [0, P(a), P(a)+P(b), 1] が使用されます。

4

1 に答える 1

2

はい、空の文字列はその間隔 (つまり 0) にあります。これは、エンコードされた表現の長さから文字列の長さがゼロであると推測できるという点で冗長であるため、除外することができます。より一般的には、文字列の前の部分に基づいて、任意の記号が不可能であると推測できる場合は、その記号を除外して (他の記号により多くの間隔を与える)、スペースを少し節約できます。しかし、これを行う唯一のケースが最初のシンボルである場合、余分な特別なケースの複雑さを正当化するには、スペースの節約が無視できる可能性があります。

于 2012-03-21T02:00:25.867 に答える