1

私はこの問題を実行しようとしています:

可能なすべてのバイト値ではなく、Unicode文字セット全体の最初のアルファベットがあると仮定します。Unicode文字は符号なしの2バイト値であるため、非圧縮データの各2バイトが1つのシンボルとして扱われ、60,000を超えるシンボルのアルファベットが作成されることを思い出してください。(シンボルを一度に1バイトではなく2バイトのUnicodeとして扱うと、国際化されたテキストの場合の圧縮が向上します。)また、コードあたりのビット数を最大16に制限するものはありません。この非常に大きなアルファベットのLZWアルゴリズムを一般化します。かなり長いコードがある場合でも、心配する必要はありません。

これで、EODコードを含むプロジェクトの前提条件を使用し、4バイトのintにグループ化して、この4シンボルシーケンスの圧縮バージョンを提供します。(これらの3つの記号はUnicode値であり、数値で表されます。)回答は、小文字ではなく大文字の16進数を使用して、スペースで区切られた3つの8桁の16進値として記述してください。

32767 32768 32767 32768

私が抱えている問題は、アルファベットの全範囲がわからないことです。そのため、LZW圧縮を実行するときに、新しいコードのバイト値がわかりません。その問題から抜け出して、私もEODコードがどうなるかわかりません。

また、圧縮されたデータは2つの整数しか必要としないように思われます。

4

1 に答える 1

2

問題文の形式が正しくありません。

今日私たちが知っているように、Unicode では、コード ポイント (文字、文字の構成可能な部分、およびその他の有用ではあるがより卑劣なものを表す数字) は、16 ビットに収まるように 0 から 65535 までのすべての番号を付けることはできません。Unicode には、10 万を超える中国語、日本語、および韓国語の文字があります。明らかに、それらのために17ビット以上が必要です。したがって、ここでは明らかに Unicode が正しい選択肢ではありません。

OTOH、UCS-2エンコーディングが16ビットコードポイントを使用し、技術的に最大65536文字などに使用できるUnicodeの一種の「要約」バージョン、 Universal Character Setが存在します。65535 より大きいコードを持つ文字は、運が悪く、UCS-2 では使用できません。

したがって、それが実際に UCS-2 である場合は、その仕様 (ISO/IEC 10646 だと思います) をダウンロードして、これらの 64K のうちどのコードが使用されているかを正確に把握し、最初の LZW アルファベットを形成する必要があります。

于 2013-02-11T06:40:09.157 に答える