このページの内容

付録A — 事前定義コードの復号表

この付録には、事前定義されたリテラル長、マッチ長、オフセットの各コードに対するFSE復号表を収録します。 これらの表は、前述の「正規化分布から復号表へ」の章で示したアルゴリズムを使って構築しています。 ここにある表は、実装が復号表を正しく構築しているかを照合するための例として利用できます。

リテラル長コード:

StateSymbolNumber_Of_BitsBase
0040
10416
21532
3350
4450
5650
6750
7950
81050
91250
101460
111650
121850
131950
142150
152250
162450
1725532
182650
192760
202960
213160
220432
23140
24250
254532
26550
277532
28850
2910532
301150
311360
3216532
331750
3419532
352050
3622532
372350
382540
3925416
4026532
412860
423060
430448
441416
452532
463532
475532
486532
498532
509532
5111532
5212532
531560
5417532
5518532
5620532
5721532
5823532
5924532
603560
613460
623360
633260

マッチ長コード:

StateSymbolNumber_Of_BitsBase
0060
1140
22532
3350
4550
5650
6850
71060
81360
91660
101960
112260
122560
132860
143160
153360
163560
173760
183960
194160
204360
214560
221416
23240
243532
25450
266532
27750
28960
291260
301560
311860
322160
332460
342760
353060
363260
373460
383660
393860
404060
414260
424460
431432
441448
452416
464532
475532
487532
498532
501160
511460
521760
532060
542360
552660
562960
575260
585160
595060
604960
614860
624760
634660

オフセットコード:

StateSymbolNumber_Of_BitsBase
0050
1640
2950
31550
42150
5350
6740
71250
81850
92350
10550
11840
121450
132050
14250
157416
161150
171750
182250
19450
208416
211350
221950
23150
246416
251050
261650
272850
282750
292650
302550
312450

付録B — 実装者向けの資料

オープンソースの参照実装は次の場所にあります: https://github.com/facebook/zstd

このプロジェクトには、decodeCorpusというフレーム生成器が含まれます。 サードパーティーの実装でも、テスト対象のデコーダーが仕様に適合しているかの確認に利用できます。

decodeCorpusは、ランダムな有効フレームを生成します。 仕様に適合するデコーダーは、そのすべてを復号できることが望まれます。 少なくとも、復号できない理由(たとえばメモリ制限)を説明する、意味のあるエラーコードを返すことが望まれます。

版ごとの変更

  • 0.4.3 : Huffmanの接頭符号割り当て例を明確化
  • 0.4.2 : Donald Pianの提案を参考に、FSEの表構築手順を再構成
  • 0.4.1 : Eric Lasotaによる、いくつかのエラー状況の明確化
  • 0.4.0 : Igor Pavlovが見つけた、nbSeq==0の場合の不正確な挙動を修正
  • 0.3.9 : Huffmanで圧縮したリテラルのサイズを明確化
  • 0.3.8 : HuffmanブロックとHuffman木の説明を明確化
  • 0.3.7 : RFC8878に合わせてRepeat_Offsetsを明確化
  • 0.3.6 : Dictionary_IDを明確化
  • 0.3.5 : Block_Maximum_Sizeを明確化
  • 0.3.4 : FSE復号表を明確化
  • 0.3.3 : Block_Sizeフィールドを明確化
  • 0.3.2 : 圧縮ブロックに対する追加のブロックサイズ制限を撤廃
  • 0.3.1 : オフセット履歴の更新規則を小幅に明確化
  • 0.3.0 : RFC8478に合わせて小幅に編集
  • 0.2.9 : Ulrich Kunitzによる、Huffmanの重みの直接表現の明確化
  • 0.2.8 : IETF RFCの討議に関する明確化
  • 0.2.7 : Vijay GurbaniとNick TerrellによるIETF RFCレビューに基づく明確化
  • 0.2.6 : Ulrich Kunitzによる、Huffmanの例の誤りの修正
  • 0.2.5 : 軽微な誤記の修正と明確化
  • 0.2.4 : Sean Purcellによる節構成の変更
  • 0.2.3 : Sean Purcellによる、いくつかの詳細の明確化
  • 0.2.2 : Johannes Rudolphによる、事前定義コードの追加
  • 0.2.1 : Przemyslaw Skibinskiによる、フィールド名の明確化
  • 0.2.0 : zstd v0.8以降に向けた多数の形式調整
  • 0.1.2 : Huffman木の深さを11ビットに制限
  • 0.1.1 : dictIDの予約範囲を設定
  • 0.1.0 : 初版