JP2023127253A - 符号表生成装置、メモリシステム、および符号表生成方法 - Google Patents
符号表生成装置、メモリシステム、および符号表生成方法 Download PDFInfo
- Publication number
- JP2023127253A JP2023127253A JP2022030927A JP2022030927A JP2023127253A JP 2023127253 A JP2023127253 A JP 2023127253A JP 2022030927 A JP2022030927 A JP 2022030927A JP 2022030927 A JP2022030927 A JP 2022030927A JP 2023127253 A JP2023127253 A JP 2023127253A
- Authority
- JP
- Japan
- Prior art keywords
- symbols
- symbol
- code
- frequency
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 68
- 238000012545 processing Methods 0.000 abstract description 40
- 238000007906 compression Methods 0.000 description 55
- 230000006835 compression Effects 0.000 description 54
- 230000008569 process Effects 0.000 description 30
- 238000004364 calculation method Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 13
- 230000000052 comparative effect Effects 0.000 description 11
- 238000012856 packing Methods 0.000 description 10
- 239000000872 buffer Substances 0.000 description 8
- 238000007726 management method Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 230000010365 information processing Effects 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000013523 data management Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/405—Tree adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3068—Precoding preceding compression, e.g. Burrows-Wheeler transformation
- H03M7/3077—Sorting
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3068—Precoding preceding compression, e.g. Burrows-Wheeler transformation
- H03M7/3079—Context modeling
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4062—Coding table adaptation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】 符号表を生成するための処理量を削減できる符号表生成装置を実現する。【解決手段】 実施形態によれば、符号表生成装置は、頻度テーブル生成部、シンボルマージ部、およびハフマン木生成部を具備する。頻度テーブル生成部は、入力されたシンボルのシンボル毎の出現頻度に基づいて、複数のシンボルと、前記複数のシンボルにそれぞれ関連付けられた複数の出現頻度とを含む頻度テーブルを生成する。シンボルマージ部は、前記複数のシンボルから、出現頻度の降順に上位のK個のシンボルと、残りのシンボルとを取得し、前記残りのシンボルを1つ以上のシンボル集合に分割し、前記1つ以上のシンボル集合にそれぞれ対応する1つ以上の部分木それぞれのルートノードに関連付けられる出現頻度を決定する。ハフマン木生成部は、前記K個のシンボルと、前記1つ以上の部分木それぞれのルートノードとを用いて、ハフマン木を生成する。【選択図】図7
Description
本発明の実施形態は、符号表生成装置、メモリシステム、および符号表生成方法に関する。
動的ハフマン符号化は、符号化対象のシンボルの出現頻度に基づいて動的に符号表を生成する可変長符号化方式である。符号表は、シンボルと、当該シンボルに割り当てられた符号語との対応を示す。動的ハフマン符号化では、出現頻度が大きいシンボルには短い符号語が割り当てられ、出現頻度が小さいシンボルには長い符号語が割り当てられる。
より詳しくは、動的ハフマン符号化では、例えば、出現した1種類以上のシンボルそれぞれをリーフノードとするハフマン木が構築される。そして、構築されたハフマン木を用いて、各シンボルの符号長が決定される。
ハフマン木を構築して、各シンボルの符号長を決定する処理には、出現したシンボルの種類に比例した処理量を要する。したがって、出現したシンボルの種類が多い場合、符号表生成の処理に多くの時間がかかるか、あるいは特定の時間内に符号表生成を完了させるために装置の回路規模(例えば、ゲート数)が増加する。
L. Peter Deutsch、"DEFLATE Compressed Data Format Specification version 1.3"、[online]、RFC1951、1996年5月、[2022年1月20日検索]、インターネット<URL:https://datatracker.ietf.org/doc/html/rfc1951>
本発明の一実施形態では、符号表を生成するための処理量を削減できる符号表生成装置、メモリシステム、および符号表生成方法を提供する。
実施形態によれば、符号表生成装置は、頻度テーブル生成部、頻度ソート部、シンボルマージ部、ハフマン木生成部、符号長決定部、および符号決定部を具備する。頻度テーブル生成部は、入力されたシンボルのシンボル毎の出現頻度に基づいて、複数のシンボルと、前記複数のシンボルにそれぞれ関連付けられた複数の出現頻度とを含む頻度テーブルを生成する。頻度ソート部は、前記頻度テーブルにおいて、前記複数のシンボルと前記複数の出現頻度とを、出現頻度の降順に並べ替える。シンボルマージ部は、並べ替えられた前記複数のシンボルから、上位のK個のシンボルと、残りのシンボルとを取得し、前記残りのシンボルを1つ以上のシンボル集合に分割し、前記1つ以上のシンボル集合にそれぞれ対応する1つ以上の部分木それぞれのルートノードに関連付けられる出現頻度を決定する。ハフマン木生成部は、前記K個のシンボルと、前記1つ以上の部分木それぞれのルートノードとを用いて、ハフマン木を生成する。符号長決定部は、前記ハフマン木と前記1つ以上の部分木とに基づいて、前記複数のシンボルにそれぞれ対応する複数の符号長を決定する。符号決定部は、前記複数の符号長に基づいて、前記複数のシンボルにそれぞれ割り当てる複数の符号を決定する。前記Kは、1以上であって、前記複数のシンボルの数以下である整数である。
以下、実施の形態について図面を参照して説明する。
(第1実施形態)
図1は、第1実施形態に係る符号表生成装置を含む情報処理システムの構成の例を示す。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
図1は、第1実施形態に係る符号表生成装置を含む情報処理システムの構成の例を示す。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
メモリシステム3は、NAND型フラッシュメモリ5のような不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。メモリシステム3は、例えば、NAND型フラッシュメモリ5を備えるソリッドステートドライブ(SSD)として実現される。以下では、メモリシステム3がSSDとして実現される場合について例示するが、メモリシステム3はハードディスクドライブ(HDD)として実現されてもよい。
ホスト2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3はホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA(AT Attachment)、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等に準拠する。
メモリシステム3は、コントローラ4およびNAND型フラッシュメモリ5を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。
メモリシステム3は、揮発性メモリであるランダムアクセスメモリ(RAM)、例えばダイナミックランダムアクセスメモリ(DRAM)6を備えていてもよい。あるいは、スタティックランダムアクセスメモリ(SRAM)のようなRAMがコントローラ4に内蔵されていてもよい。なお、DRAM6が、コントローラ4に内蔵されていてもよい。
DRAM6は揮発性のメモリである。DRAM6等のRAMには、例えば、ファームウェア(FW)の格納領域、論理物理アドレス変換テーブルのキャッシュ領域が設けられる。
NAND型フラッシュメモリ5は複数のブロックを含む。各ブロックは複数のページを含む。1つのブロックは最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。各ページは、同一ワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
各ブロックに対して許容できるプログラム/イレーズサイクル数には上限(最大P/Eサイクル数)がある。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
コントローラ4は、例えば、ホストインタフェース(ホストI/F)11、CPU12、NANDインタフェース(NAND I/F)13、DRAMインタフェース(DRAM I/F)14、および圧縮装置15を含む。これらホストI/F11、CPU12、NAND I/F13、DRAM I/F14、および圧縮装置15は、バス10を介して相互接続され得る。
コントローラ4は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応するNAND I/F13を介して、NAND型フラッシュメモリ5に電気的に接続されている。NAND I/F13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして機能する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のデータ読み出し動作/データ書き込み動作とブロック単位のデータ消去動作との差異を隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
論理アドレスは、メモリシステム3の記憶領域をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブルを用いて実行される。コントローラ4は、論理物理アドレス変換テーブルを使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。論理物理アドレス変換テーブルは、メモリシステム3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、この論理アドレスをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、以前のデータを無効化する。
ホストI/F11は、メモリシステム3と、メモリシステム3の外部装置であるホスト2との通信を行うハードウェアインタフェースである。ホストI/F11は、ホスト2から様々なコマンド、例えば、入出力(I/O)コマンド、各種制御コマンドを受信する回路を含む。I/Oコマンドには、ライトコマンド、リードコマンド、が含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)、フォーマットコマンドが含まれ得る。ホストI/F11は、コマンドに応じた応答やデータをホスト2に送信する回路を含む。
DRAM I/F14は、DRAM6へのアクセスを制御するように構成されたDRAM制御回路として機能する。
CPU12は、ホストI/F11、NAND I/F13、DRAM I/F14、および圧縮装置15を制御するように構成されたプロセッサである。CPU12は、DRAM6にロードされたFWを実行することによって様々な処理を行う。つまり、FWはCPU12の動作を制御するための制御プログラムである。CPU12は、前述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行されてもよい。
圧縮装置15は、NAND型フラッシュメモリ5に書き込むべきデータを符号化することにより、そのデータを圧縮するハフマン符号化部である。CPU12は、例えば、ホスト2からライトコマンドを受け付けたことに応じて受信したライトデータを平文データとして圧縮装置15へ入力する。圧縮装置15は、CPU12から入力された平文データを、符号化する。圧縮装置15は、データを圧縮するために、例えば、動的ハフマン符号化を実現するための構成を有する。
動的ハフマン符号化は、符号化対象のシンボルの出現頻度を用いて動的に符号表(符号化テーブル)を生成する可変長符号化方式である。符号表は、N種類のシンボルと、N種類のシンボルにそれぞれ関連付けられたN個の可変長符号(符号語)とを示す情報を含む。動的ハフマン符号化では、出現頻度が大きいシンボルには短い符号語が割り当てられ、出現頻度が小さいシンボルには長い符号語が割り当てられる。圧縮装置15は、このような割り当てに従い、入力されたシンボルを符号語に変換する。つまり、変換により得られる符号語は、可変長符号である。なお、シンボルは、例えば、固定長のデータである。
符号化対象のシンボルはN種類のシンボルのいずれかである。以下では、Nが256である場合について主に例示する。
256種類のシンボルそれぞれは、例えば、1バイトのデータである。この場合、256種類のシンボルは、0から255までの値とそれぞれ対応している。256種類のシンボルそれぞれに対応する0から255までのいずれかの値を、シンボル番号とも称する。なお、このようなシンボルの種類の数とシンボルが対応する値とは一例であって、符号化対象のシンボルを含むデータの特性に応じて変更されてもよい。
圧縮装置15は符号表生成装置32を備える。符号表生成装置32は、シンボルを可変長符号に変換するための符号表を生成する装置である。符号表生成装置32は、圧縮装置15内に設けられる装置であってもよいし、圧縮装置15を実現する回路の一部であってもよい。以下では、符号表生成装置32を、符号表生成部32とも称する。
ここで、図2から図6を参照して、比較例に係る符号表生成装置32Aにおける符号表の生成について説明する。
図2は、比較例に係る符号表生成装置32Aの構成を示すブロック図である。符号表生成装置32Aは、例えば、頻度カウント部321A、頻度ソート部322A、ハフマン木生成部324A、符号長決定部325A、およびカノニカルハフマン部326Aを備える。
頻度カウント部321Aは、入力されたシンボルを用いて頻度テーブル40A(以下、第0頻度テーブル40Aと称する)を生成する。第0頻度テーブル40Aは、複数のシンボルと、複数のシンボルそれぞれの出現頻度とを示すテーブルである。頻度カウント部321Aは、第0頻度テーブル40Aを頻度ソート部322Aに送出する。
頻度ソート部322Aは、第0頻度テーブル40A内のエントリを、出現頻度の降順にソートする。ソートによって得られた頻度テーブルを、第1頻度テーブル41Aと称する。頻度ソート部322Aは、第1頻度テーブル41Aをハフマン木生成部324Aに送出する。
ハフマン木生成部324Aは、第1頻度テーブル41Aを用いてハフマン木を生成する。
図3は、ハフマン木生成部324Aによって実行されるハフマン木生成処理の手順の例を示すフローチャートである。
まず、ハフマン木生成部324Aは、第1頻度テーブル41Aにおいて出現頻度が0より大きい全てのシンボルを、ハフマン木上のリーフノードとして追加する(ステップS11)。つまり、ハフマン木生成部324Aは、第1頻度テーブル41A内の出現頻度が0より大きいシンボルの数に相当するリーフノードを含むハフマン木を生成する。ハフマン木生成部324Aによるハフマン木生成の対象となるシンボルの数(すなわち、生成されるハフマン木のリーフノードの数)は、最大でN個である。
次いで、ハフマン木生成部324Aは、ハフマン木において、親ノードを持たない全てのリーフノードおよび中間ノードから、出現頻度が最も小さいノードAと、次に小さいノードBを選択する(ステップS12)。ハフマン木生成部324Aは、選択したノードAとノードBを子として持つ中間ノードをハフマン木に追加する(ステップS13)。そして、ハフマン木生成部324Aは、追加した中間ノードの出現頻度として、ノードAとノードBの出現頻度の和を設定する(ステップS14)。
ハフマン木生成部324Aは、ハフマン木に、親ノードを持たないリーフノードと中間ノードが合わせて2つ以上存在しているか否かを判定する(ステップS15)。ハフマン木に、親ノードを持たないリーフノードと中間ノードが合わせて2つ以上存在している場合(ステップS15のYES)、ハフマン木生成部324Aによる処理はステップS12に進む。つまり、ハフマン木生成部324Aは、親ノードを持たないリーフノードおよび中間ノードを子として持つ中間ノードを追加するための手順をさらに行う。
ハフマン木に、親ノードを持たないリーフノードと中間ノードが合わせて2つ未満である場合(ステップS15のNO)、ハフマン木生成部324Aはハフマン木生成処理を終了する。
以上のハフマン木生成処理によって、ハフマン木生成部324Aはハフマン木を生成できる。生成したハフマン木は、出現頻度が0より大きい複数のシンボルにそれぞれ対応する複数のリーフノードを含む。ハフマン木生成部324Aは、出現頻度が小さいシンボルに対応するリーフノードからボトムアップにハフマン木を構築する。
図2に戻る。ハフマン木生成部324Aは、生成したハフマン木を符号長決定部325Aに送出する。
符号長決定部325Aは、ハフマン木生成部324Aから受け取ったハフマン木を用いて、複数のシンボルそれぞれの符号長を決定する。ルートノードを起点とするリーフノードの深さ(すなわち、ルートノードからリーフノードへ至るまでに辿ったエッジの数)は、対応するシンボルの符号長に相当する。よって、符号長決定部325Aはハフマン木を用いて、シンボルの符号長を決定できる。符号長決定部325Aは、決定した複数のシンボルそれぞれの符号長をカノニカルハフマン部326Aに送出する。
カノニカルハフマン部326Aは、符号長決定部325Aから受け取った複数のシンボルそれぞれの符号長を用いて、符号表を生成する。カノニカルハフマン部326Aは、例えばカノニカルハフマン方式により、符号表を生成する。カノニカルハフマン方式は、シンボルの符号長のみを用いて、シンボルに割り当てる符号ビット列(可変長符号)を決定可能な方式である。カノニカルハフマン方式によって符号表を生成する具体的な例については、図13を参照して後述する。
図4から図6を参照して、第1頻度テーブル41Aを用いて符号長が決定される具体的な例を説明する。
図4は、頻度カウント部321Aによって生成され、頻度ソート部322によってソートされた第1頻度テーブル41Aの構成例を示す。第1頻度テーブル41Aは、複数のシンボルにそれぞれ対応する複数のエントリを含む。複数のエントリの各々は、例えば、シンボルフィールドと出現頻度フィールドとを含む。
シンボルフィールドは、対応するシンボルを示す。
出現頻度フィールドは、対応するシンボルの出現頻度を示す。より具体的には、出現頻度フィールドは、例えば、処理対象の入力データにおいて、対応するシンボルが出現した回数を示す。
出現頻度フィールドは、対応するシンボルの出現頻度を示す。より具体的には、出現頻度フィールドは、例えば、処理対象の入力データにおいて、対応するシンボルが出現した回数を示す。
なお、以下では、シンボルフィールドに示される値を、単に、シンボルとも称する。第1頻度テーブル41Aの他の各フィールドに示される値、および他のテーブルの各フィールドに示される値についても同様である。
図4に示す例では、シンボル“a”の出現頻度は120である。シンボル“b”の出現頻度は60である。シンボル“c”の出現頻度は29である。シンボル“d”の出現頻度は14である。シンボル“e”の出現頻度は4である。シンボル“f”およびシンボル“g”の出現頻度は3である。シンボル“h”の出現頻度は2である。シンボル“i”およびシンボル“j”の出現頻度は0である。
図5は、ハフマン木生成部324Aによって生成されるハフマン木50の例を示す。ここでは、ハフマン木生成部324Aが、図4に示した第1頻度テーブル41Aを用いてハフマン木50を生成する場合について例示する。
まず、ハフマン木生成部324Aは頻度テーブル41から、出現頻度が0より大きい8つのシンボル“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”を選択する。ハフマン木生成部324Aは、選択した8つのシンボルをそれぞれ割り当てる8つのリーフノード511,521,531,541,561,562,563,564を含むハフマン木50を生成する。各リーフノードには、対応するシンボルの出現頻度が設定される。
ハフマン木生成部324Aは、ハフマン木50の親ノードを持たない全リーフノードおよび全中間ノードから、出現頻度が最も小さいシンボル“h”のリーフノード564と、次に小さいシンボル“g”のリーフノード563とを選択する。そして、ハフマン木生成部324Aは、選択したリーフノード564とリーフノード563とを子として持つ中間ノード552を、ハフマン木50に追加する。ハフマン木生成部324Aは、中間ノード552の出現頻度として、リーフノード564の出現頻度とリーフノード563の出現頻度の和(=2+3=5)を設定する。
次に、ハフマン木生成部324Aは、ハフマン木50の親ノードを持たない全リーフノードおよび全中間ノードから、出現頻度が最も小さいシンボル“f”のリーフノード562と、次に小さいシンボル“e”のリーフノード561とを選択する。そして、ハフマン木生成部324Aは、選択したリーフノード562とリーフノード561とを子として持つ中間ノード551を、ハフマン木50に追加する。ハフマン木生成部324Aは、追加した中間ノード551の出現頻度として、リーフノード562の出現頻度とリーフノード561の出現頻度の和(=3+4=7)を設定する。
次いで、ハフマン木生成部324Aは、ハフマン木50の親ノードを持たない全リーフノードおよび全中間ノードから、出現頻度が最も小さい中間ノード552と、次に小さい中間ノード551とを選択する。そして、ハフマン木生成部324Aは、選択した中間ノード552と中間ノード551とを子として持つ中間ノード542を、ハフマン木50に追加する。ハフマン木生成部324Aは、追加した中間ノード542の出現頻度として、中間ノード552の出現頻度と中間ノード551の出現頻度の和(=5+7=12)を設定する。
同様にして、ハフマン木生成部324Aは、ハフマン木50において、親ノードを持たないリーフノードと中間ノードが合わせて1つ以下になるまで(すなわち、親ノードを持たないノードがルートノード501のみになるまで)、中間ノードを追加する動作を繰り返し行う。これにより、図5に示すハフマン木50を構築できる。
符号長決定部325Aは、構築したハフマン木50を用いて、複数のシンボルにそれぞれ関連付けられる複数の符号長を決定する。具体的には、符号長決定部325Aは、構築したハフマン木50を用いて、8つのシンボル“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”の各々の符号長を決定する。1つのシンボルに対応するリーフノードの、ルートノード501を起点とする深さは、そのシンボルの符号長を示す。例えば、シンボル“a”のリーフノード511の、ルートノード501を起点とする深さは1である。よって、シンボル“a”の符号長は、1ビットである。また例えば、シンボル“h”のリーフノード564の、ルートノード501を起点とする深さは6である。よって、シンボル“h”の符号長は、6ビットである。
図6は、図5に示したハフマン木50を用いて符号長決定部325Aによって決定されたシンボル毎の符号長の例を示す。
具体的には、シンボル“a”の符号長は1ビットである。シンボル“b”の符号長は2ビットであることを示している。シンボル“c”の符号長は3ビットである。シンボル“d”の符号長は4ビットである。また、シンボル“e”,“f”,“g”,“h”のそれぞれの符号長は6ビットである。
このように、比較例に係る符号表生成装置32Aにおいて、ハフマン木50を構築して、各シンボルの符号長を決定する処理には、出現したシンボルの種類に比例した処理量を要する。したがって、比較例に係る符号表生成装置32Aでは、出現したシンボルの種類が多い場合、符号表生成の処理に多くの時間がかかるか、あるいは特定の時間内に符号表生成を完了させるために符号表生成装置32Aの回路規模(例えば、ゲート数)が増加する。
そのため、本実施形態に係る符号表生成装置32では、ハフマン木の構築にかかる処理量を削減する。具体的には、符号表生成装置32では、N種類のシンボルを、出現頻度の降順の上位K個のシンボルと、残りの(N-K)個のシンボルとに分けて、(N-K)個のシンボルをハフマン木上の単一のリーフノードまたはM個のリーフノードと見なしてハフマン木の構築処理を行う。なお、Kは、1以上であって、且つN未満である整数である。よって、(N-K)は、1以上であって、且つN未満である整数である。Mは、(N-K)よりも小さい整数である。これにより、符号表生成装置32では、構築されるハフマン木のリーフノード数が減少するので、ハフマン木の構築にかかる処理量を削減できる。
図7は、圧縮装置15の一構成例を示す。圧縮装置15は、例えば、バッファ部31、符号表生成部32(符号表生成装置32)、可変長符号化部33、符号表圧縮部34、およびパッキング部35を備える。
バッファ部31は、圧縮装置15に入力されたシンボルを記憶(バッファリング)する。バッファ部31は、記憶したシンボルを、例えば特定のタイミングまで遅延させて、可変長符号化部33に送出する。
符号表生成部32は、圧縮装置15に入力されたシンボルを用いて、符号表49を生成する。符号表49は、複数のシンボルと、複数のシンボルにそれぞれ関連付けられた複数の可変長符号(すなわち複数の符号ビット列)とを示す情報を含む。
より詳しくは、符号表生成部32は、特定単位の入力データに含まれる複数のシンボルの出現頻度に基づき、符号表49を生成する。特定単位は、特定のデータ量単位であってもよいし、ファイルのような特定のまとまりを単位としてもよい。特定のまとまりを単位とする場合、符号表生成部32は、入力データの終端を示すデータを検出することにより、特定単位の入力データを認識する。
符号表生成部32は、生成した符号表49を可変長符号化部33に送出する。また、符号表生成部32は、符号表49に示される複数のシンボルにそれぞれ割り当てられる複数の可変長符号の長さ(すなわち、複数の符号長)を、符号表圧縮部34に送出する。
符号表圧縮部34は符号表49を圧縮する。具体的には、符号表圧縮部34は、符号表生成部32から受け取った複数の符号長に対する圧縮処理を行う。複数の符号長に対する圧縮処理は、例えば、DEFLATE規格(RFC1951)に示されるように、複数の符号長を特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化する処理である。特定のシンボル順は、例えば、対応する複数のシンボルのアルファベット順に従う順序である。つまり、特定のシンボル順に並べられた複数の符号長は、例えば、アルファベット順に並べられた複数のシンボルとそれぞれ対応するように並べ替えられた複数の符号長である。符号表圧縮部34は、圧縮処理によって得られたデータ(圧縮された符号表49)をパッキング部35に送出する。
可変長符号化部33は、符号表生成部32によって送出された符号表49を用いて、バッファ部31によって送出されたシンボルを、可変長符号(符号ビット列)に変換する。可変長符号化部33は、変換により得られた可変長符号をパッキング部35に送出する。
パッキング部35は、可変長符号化部33から出力された1つ以上の可変長符号を順次連結して、特定のデータサイズ毎の圧縮データ(圧縮ストリーム)として出力する。この特定のデータサイズは、例えば、64ビットである。また、パッキング部35は、符号表圧縮部34から出力された、圧縮された符号表49を、この圧縮データのヘッダとして挿入する。圧縮された符号表49は、伸張器において圧縮データが復号される際に、符号表49(復号テーブル)を復元するために用いられる。
以上の構成により、圧縮装置15は、入力されたシンボルを動的ハフマン符号化して、可変長符号に変換できる。例えば、入力されたシンボルがホスト2によってNAND型フラッシュメモリ5に書き込むことを要求されたデータである場合、CPU12は、1つ以上の可変長符号と圧縮された符号表49とを含む圧縮データを、NAND I/F13を介してNAND型フラッシュメモリ5に書き込む。
また、コントローラ4は、さらに、ECCエンコーダとECCデコーダを備えてもよい。この場合、ECCエンコーダが、パッキング部35から出力される圧縮データに対して誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと圧縮データとを有する符号語を生成する。そして、CPU12が、符号語をNAND I/F13経由でNAND型フラッシュメモリ5へ書き込むように構成される。つまり、CPU12は、圧縮装置15から出力される圧縮データに基づくデータを、NAND I/F13を介してNAND型フラッシュメモリ5に書き込むように構成される。また、CPU12は、例えばホスト2からホストI/F11を介してリードコマンドを受信する場合、当該リードコマンドに基づくデータをNAND I/F13を介してNAND型フラッシュメモリ5から読み出す。ECCデコーダは、読み出されたデータに対する誤り訂正処理を実行する。誤り訂正処理が実行された読み出しデータは圧縮データとしてCPU12により伸張器へ入力され、伸張器は、入力された圧縮データを伸張する。CPU12は、ホスト2からのリードコマンドに対して、伸張されたデータをホスト2へ送信する。つまり、ホスト2からのリードコマンドに対して、CPU12は、NAND型フラッシュメモリ5から読み出したデータに基づくデータを伸張し、伸張したデータをホスト2へ送信するように構成される。
なお、圧縮装置15の一部または全ては、回路のようなハードウェアとして実現されてもよいし、少なくとも1つのプロセッサによって実行されるプログラム(すなわちソフトウェア)として実現されてもよい。
次いで、符号表生成部32の具体的な構成について説明する。符号表生成部32は、例えば、頻度カウント部321、頻度ソート部322、シンボルマージ部323、ハフマン木生成部324、符号長決定部325、およびカノニカルハフマン部326を備える。
頻度カウント部321は、入力されたシンボルの、シンボル毎の出現頻度に基づいて、頻度テーブル40(以下、第0頻度テーブル40と称する)を生成する。頻度カウント部321は、例えば、入力されたシンボルの、シンボルの毎の出現回数をカウントして、第0頻度テーブル40を生成する。頻度カウント部321は、例えば、4096個のシンボルが入力される毎に、第0頻度テーブル40を生成する。第0頻度テーブル40は、複数のシンボルと、複数のシンボルにそれぞれ関連付けられた複数の出現頻度(例えば、出現回数)とを示すテーブルである。頻度カウント部321は、第0頻度テーブル40を頻度ソート部322に送出する。
頻度ソート部322は、第0頻度テーブル40内のエントリを、出現頻度の降順にソートする。ソートによって得られた頻度テーブルを、第1頻度テーブル41と称する。頻度ソート部322は、第1頻度テーブル41をシンボルマージ部323に送出する。
図8は、頻度カウント部321によって生成された第0頻度テーブル40の例を示す。第0頻度テーブル40は、N種類のシンボルにそれぞれ対応するN個のエントリを含む。N個のエントリには、先頭から順に、0からN-1までのインデックスがそれぞれ付与されている。よって、N個のエントリそれぞれは、インデックスによって特定可能である。図8に示す例では、Nは256である。各エントリは、シンボル番号フィールドと出現頻度フィールドとを含む。
あるシンボルに対応するエントリにおいて、シンボル番号フィールドは、そのシンボルに対応するシンボル番号を示す。出現頻度フィールドは、入力データに含まれる1つ以上のシンボルにおいて、対応するシンボルが出現した頻度(例えば、回数)を示す。
図8に示す第0頻度テーブル40において、例えば、インデックスが0であるエントリは、シンボル番号が0であるシンボルの出現頻度が3であることを示す。例えば、インデックスが1であるエントリは、シンボル番号が1であるシンボルの出現頻度が16であることを示す。また、例えば、インデックスが253であるエントリは、シンボル番号が253であるシンボルの出現頻度が30であることを示す。
図9は、頻度ソート部322によって取得された第1頻度テーブル41の例を示す。第1頻度テーブル41は、第0頻度テーブル40内の256個のエントリが、出現頻度の降順に並べ替えられたテーブルである。第1頻度テーブル41内の256個のエントリには、先頭から順に、0から255までのインデックスがそれぞれ付与されている。
図9に示す第1頻度テーブル41において、例えば、インデックスが0であるエントリは、シンボル番号が64であるシンボルの出現頻度が50であることを示す。例えば、インデックスが1であるエントリは、シンボル番号が253であるシンボルの出現頻度が30であることを示す。また、例えば、インデックスが255であるエントリは、シンボル番号が8であるシンボルの出現頻度が0であることを示す。
このように、第1頻度テーブル41では、256個のエントリが出現頻度の降順に並べられている。
図7に戻る。
シンボルマージ部323は、ハフマン木を構築する際に、第1頻度テーブル41に含まれる全てのシンボル(すなわち、N個のシンボル)の内、出現頻度が小さい1つ以上のシンボルを、1つのシンボル(以下、代表シンボルと称する)と見なすための処理を行う。シンボルマージ部323は、例えば、シンボル分配部371、代表シンボル頻度推定部372、マージシンボル数カウント部373、およびマージシンボル加算符号長決定部374を備える。
シンボル分配部371は、第1頻度テーブル41を、第1部分テーブル431と第2部分テーブル432とに分割する。第1部分テーブル431は、第1頻度テーブル41に含まれるN個のエントリの内、出現頻度の降順に上位K個のエントリを含む。K個のエントリは、出現頻度が大きいK個のシンボルのエントリである。出現頻度が大きいK個のシンボルを、上位シンボルとも称する。第2部分テーブル432は、第1頻度テーブル41に含まれるN個のエントリから上位K個のエントリを除いた残りの(N-K)個のエントリを含む。(N-K)個のエントリは、出現頻度が小さい(N-K)個のシンボルのエントリである。(N-K)個のエントリは、上位K個のエントリよりも、出現頻度が0であるシンボルを含む可能性が高い。出現頻度が小さい(N-K)個のシンボルを、下位シンボルとも称する。(N-K)個の下位シンボルは、ハフマン木を構築する際に、1つの代表シンボルと見なされる。つまり、代表シンボルは、(N-K)個の下位シンボルを代表するシンボルである。
シンボル分配部371は、第1部分テーブル431をハフマン木生成部324に送出する。シンボル分配部371は、第2部分テーブル432を、代表シンボル頻度推定部372、マージシンボル数カウント部373、およびマージシンボル加算符号長決定部374に送出する。
図10は、(A)第1頻度テーブル41の例と、この第1頻度テーブル41が分割された(B)第1部分テーブル431および(C)第2部分テーブル432の例とを示す。図10に示す例では、Nは256であり、Kは32である。
図10(A)に示す第1頻度テーブル41は、図9に示した第1頻度テーブル41と同様に、N個のエントリが出現頻度の降順に並べられたテーブルである。第1頻度テーブル41は、第1部分テーブル431と第2部分テーブル432とに分割される。
図10(B)に示すように、第1部分テーブル431は、第1頻度テーブル41に含まれるエントリの内、上位K個(すなわち、先頭からK個)のエントリを含む。第1部分テーブル431内のK個のエントリには、先頭から順に、0からK-1までのインデックスがそれぞれ付与されている。
図10(C)に示すように、第2部分テーブル432は、第1頻度テーブル41に含まれるエントリから上位K個のエントリを除いた残りの(N-K)個のエントリ(図10(C)では、224個のエントリ)を含む。第2部分テーブル432内の(N-K)個のエントリには、先頭から順に、0からN-K-1までのインデックスがそれぞれ付与されている。
図7に戻る。
代表シンボル頻度推定部372は、ハフマン木を構築する際に、第2部分テーブル432に含まれる(N-K)個の下位シンボルを1つの代表シンボルと見なすために、代表シンボルの出現頻度を推定する。代表シンボル頻度推定部372は、例えば、(N-K)個の下位シンボルの出現頻度の総和を見積もることによって、代表シンボルの出現頻度を推定する。
ここで、Nが256であり、且つKが32である場合に、(N-K)個の下位シンボルの出現頻度の総和の見積り値を算出する例を説明する。代表シンボル頻度推定部372は、第2部分テーブル432において、インデックスiで特定されるエントリに示されるシンボルの出現頻度F(i)を用いて、以下の式(1)により、下位シンボルの出現頻度の総和の見積り値Sを算出する。
式(1)による算出では、第2部分テーブル432に含まれる224個のエントリが、先頭から16個のインデックス毎に分割されて、14個の範囲(以下、インデックス範囲と称する)が設定される。14個のインデックス範囲の内、先頭からk番目のインデックス範囲を、k番目のインデックス範囲と称する。kは0から13までのいずれかの値である。
代表シンボル頻度推定部372は、0番目から13番目までのインデックス範囲それぞれについて、出現頻度の見積り値を算出する。具体的には、代表シンボル頻度推定部372は、k番目のインデックス範囲の先頭のエントリに示される出現頻度F(k×16)と、終端のエントリに示される出現頻度F(k×16+15)との平均値に、1つのインデックス範囲に含まれるシンボルの数(ここでは、16)を乗じることによって、k番目のインデックス範囲に対応する出現頻度の見積り値を算出する。そして、代表シンボル頻度推定部372は、0番目から13番目までのインデックス範囲それぞれに対応する出現頻度の見積り値の総和を算出して、下位シンボルの出現頻度の総和の見積り値Sを得る。
式(1)による算出では、各インデックス範囲の先頭のエントリから終端のエントリにかけて、インデックスに対応する出現頻度が線形に変化することを仮定することで、見積り値Sを算出するために要する加算の回数が削減される。なお、この見積り値Sの算出方法は、一例であって、これ以外の方法が用いられてもよい。例えば、第2部分テーブル432に含まれる224個のエントリを分割して設定されるインデックス範囲の数は、見積り値Sの算出に要する計算量と、算出される見積り値Sの精度とを考慮して、適宜変更され得る。
代表シンボル頻度推定部372は、下位シンボルの出現頻度の総和の見積り値Sを、代表シンボルの出現頻度としてハフマン木生成部324に送出する。
ハフマン木生成部324は、第1部分テーブル431と、代表シンボルの出現頻度とを用いて、ハフマン木を生成する。具体的には、第1部分テーブル431に含まれるK個のシンボルと代表シンボルの内、出現頻度が0より大きいシンボルそれぞれをリーフノードとして配置して、ハフマン木生成処理を行う。このハフマン木生成処理は、図3を参照して前述したハフマン木生成処理と同様である。具体的には、このハフマン木生成処理は、図3を参照して前述したハフマン木生成処理において、ステップS11の第1頻度テーブル41Aにおいて出現頻度が0より大きい全てのシンボルを、第1部分テーブル431に含まれるK個のシンボルと代表シンボルの内、出現頻度が0より大きいシンボルに置き換えた処理である。ハフマン木生成部324は、生成されたハフマン木を符号長決定部325に送出する。
図11は、ハフマン木生成部324によって生成されたハフマン木60の例を示す。ハフマン木60は、ルートノード600と、中間ノード610,611,621,631と、第1タイプのリーフノード641,642,643,644と、第2タイプのリーフノード645とを含んでいる。
第1タイプのリーフノード641,642,643,644それぞれは、第1部分テーブル431に含まれるシンボルの内、出現頻度が0より大きいシンボルに対応する。第1タイプのリーフノードの数は、最大でK個である。
第2タイプのリーフノード645は、出現頻度が0より大きい代表シンボルに対応する。第2タイプのリーフノードの数は、最大で1個である。
したがって、ハフマン木生成部324によるハフマン木生成の対象となるシンボルの数(すなわち、生成されるハフマン木のリーフノードの数)は、最大で(K+1)個である。これに対して、前述したように、比較例に係る符号表生成装置32Aのハフマン木生成部324Aによるハフマン木生成の対象となるシンボルの数は、最大でN個である。例えば、Nが256であり、Kが32である場合、本実施形態の符号表生成装置32では、比較例のハフマン木生成部324Aと比較して、ハフマン木生成部324によるハフマン木生成の対象となるシンボルの数は、最大256個から最大33個(=32+1)に大幅に削減される。これにより、本実施形態の符号表生成装置32では、符号表生成の処理に要する時間を削減すること、あるいは特定の時間内に符号表生成を完了させるための回路規模(例えば、ゲート数)を削減することが可能になる。
一方で、第2部分テーブル432に含まれる全てのシンボルを1つの代表シンボルとして扱うことにより、動的ハフマン符号化の符号化効率が低下する懸念がある。これに対しては、第1部分テーブル431に含まれる、出現頻度の大半を占めるK個の上位シンボルについては、ハフマン木上でもK個のシンボル(すなわち、K個のリーフノード)として扱うことにより、動的ハフマン符号化の精度を確保する。つまり、動的ハフマン符号化の精度を確保できる範囲内で、第1部分テーブル431に含まれるシンボルの数Kを少なくする。また、第2部分テーブル432に含まれる(N-K)個の下位シンボルは、出現頻度が小さいことが多い。そのため、下位シンボルに対して、仮に最適でない符号長が設定されたとしても、符号化効率への影響は小さい。
したがって、本実施形態の符号表生成装置32は、符号化効率の低下を実用上問題のない範囲に収めながら、符号表生成の処理に要する時間を削減できるか、あるいは特定の時間内に符号表生成を完了させるための回路規模を削減できる。
マージシンボル数カウント部373は、第2部分テーブル432に含まれている、出現頻度が0より大きいシンボルの数Cをカウントする。Cは、0以上の整数である。第2部分テーブル432に、出現頻度が0より大きいシンボルが含まれていなければ、Cは0である。第2部分テーブル432に含まれている、出現頻度が0より大きいシンボルを、マージシンボルと称する。マージシンボルは、第2部分テーブル432に含まれるシンボルの内、可変長符号を割り当てる必要があるシンボルである。マージシンボル数カウント部373によってカウントされたマージシンボルの数Cは、代表シンボルが代表しているマージシンボルの数である。マージシンボル数カウント部373は、マージシンボル数Cをマージシンボル加算符号長決定部374に送出する。
マージシンボル加算符号長決定部374は、第2部分テーブル432とマージシンボル数Cとに基づく部分木を用いて、各マージシンボルについて、代表シンボルの符号長に加算すべき符号長(以下、加算符号長と称する)を決定する。マージシンボル加算符号長決定部374は、マージシンボル毎の加算符号長を符号長決定部325に送出する。
各マージシンボルの符号長は、代表シンボルの符号長に、加算符号長を加算することで得られる。これは、マージシンボルそれぞれに対応するリーフノードを有する部分木を決定して、その部分木のルートノードについて、ハフマン木60上の位置をハフマン木生成処理で決定することと等価である。
図12は、マージシンボル加算符号長決定部374によって用いられるマージシンボルの部分木65の例を示す。部分木65は、ハフマン木60の1つのリーフノード645をルートノードとする二分木である。ここでは、マージシンボル数Cが5である場合を例示する。
ハフマン木60は、図11を参照して前述したハフマン木60と同様に、ルートノード600と、中間ノード611,621,630,631と、第1タイプのリーフノード640,641,642,643,644と、第2タイプのリーフノード645とを含んでいる。
第1タイプのリーフノード641,642,643,644それぞれは、第1部分テーブル431に含まれるシンボルの内、出現頻度が0より大きいシンボルに対応する。
第2タイプのリーフノード645は、出現頻度が0より大きい代表シンボルに対応する。第2タイプのリーフノード645は、部分木65のルートノードである。第2タイプのリーフノード645に関連付けられた出現頻度は、マージシンボルの出現頻度の総和の見積り値Sである。
部分木65は、ハフマン木60のリーフノード645をルートノードとして、中間ノード650,651,660と、リーフノード661,662,663,670,671とを含む。リーフノード661,662,663,670,671は、5個のマージシンボルにそれぞれ対応する。
したがって、リーフノード645に対応する代表シンボルの符号長に、部分木65におけるルードノード(すなわち、リーフノード645)を起点とする各リーフノード661,662,663,670,671の深さ(エッジ数)を加算符号長として加算することによって、各マージシンボルの符号長が決定される。
C個のマージシンボルにそれぞれ対応するC個のリーフノードを含む部分木65は、マージシンボル数Cを用いて、各マージシンボルの加算符号長を容易に得られる構造であることが、処理量削減の観点上望ましい。
そのため、マージシンボル加算符号長決定部374は、部分木65として、バランスされた二分木を採用する。なお、部分木65として、バランスされた二分木以外の構造が用いられてもよい。バランスされた二分木は、全てのリーフノードについて、リーフノード間の深さの差が高々1である二分木である。マージシンボル加算符号長決定部374は、以下の(A1)および(A2)の手順により、各マージシンボルの加算符号長を決定する。
(A1)2D≧Cを満たす最小の整数Dを求める。
(A2)C個のマージシンボルの内、第2部分テーブル432上のインデックスが小さい順に(すなわち、出現頻度が大きい順に)(2D-C)個のマージシンボルの加算符号長を(D-1)ビットに設定し、残りの(2C-2D)個のマージシンボルの加算符号長をDビットに設定する。
(A2)C個のマージシンボルの内、第2部分テーブル432上のインデックスが小さい順に(すなわち、出現頻度が大きい順に)(2D-C)個のマージシンボルの加算符号長を(D-1)ビットに設定し、残りの(2C-2D)個のマージシンボルの加算符号長をDビットに設定する。
図12に示す例では、C=5である。よって、上記の手順に従ってDを求めた場合、マージシンボル加算符号長決定部374は、23>5であるので、D=3を算出する。そして、マージシンボル加算符号長決定部374は、5個のマージシンボルの内、第2部分テーブル432上のインデックスが小さい順に3(=23-5)個のマージシンボル(リーフノード661,662,663に相当)の加算符号長を2(=3-1)ビットに設定する。また、マージシンボル加算符号長決定部374は、残りの2(=2×5-23)個のマージシンボル(リーフノード670,671に相当)の加算符号長を3ビットに設定する。
図7に戻る。
符号長決定部325は、ハフマン木生成部324によって生成されたハフマン木60と、マージシンボル加算符号長決定部374によって決定されたマージシンボル毎の加算符号長とを用いて、第1部分テーブル431に含まれるK個の上位シンボルの内、出現頻度が0より大きいシンボルそれぞれの符号長と、C個のマージシンボルそれぞれの符号長とを決定する。符号長決定部325は、例えば、符号長計算部381とマージシンボル符号長加算部382とを備える。以下では、説明を分かりやすくするために、K個の上位シンボル全ての出現頻度が0より大きく、Cが1以上である場合を例示する。なお、実際には、K個の上位シンボルに出現頻度が0であるシンボルが含まれていてもよいし、Cが0であってもよい。その場合、符号長決定部325は、K個の上位シンボルの内、出現頻度が0であるシンボルの符号長を算出しない。
符号長計算部381は、ハフマン木生成部324によって生成されたハフマン木60を用いて、K個の上位シンボルそれぞれの符号長と、代表シンボルの符号長とを決定する。具体的には、符号長計算部381は、ハフマン木60において、K個の上位シンボルおよび代表シンボルの各シンボルに対応するリーフノードからエッジを辿ってルートノード600に到達するまでに通るエッジの本数を、そのシンボルの符号長として決定する。図12に示す例では、例えば、リーフノード640に対応する上位シンボルの符号長は、1である。例えば、リーフノード643に対応する上位シンボルの符号長は、4である。また例えば、リーフノード645に対応する代表シンボルの符号長は、3である。
符号長計算部381は、決定した代表シンボルの符号長45(以下、第0符号長45と称する)をマージシンボル符号長加算部382に送出する。符号長計算部381は、決定したK個の上位シンボルにそれぞれ対応するK個の符号長46(以下、第1符号長46と称する)を、符号表圧縮部34とカノニカルハフマン部326とに送出する。K個の上位シンボルについては、ハフマン木60を用いて決定された第1符号長46がそのまま、符号表圧縮部34とカノニカルハフマン部326とによって利用される。
マージシンボル符号長加算部382は、第0符号長45と、C個のマージシンボルにそれぞれ対応するC個の加算符号長とを用いて、C個のマージシンボルそれぞれの符号長(以下、マージシンボル符号長とも称する)を決定する。具体的には、マージシンボル符号長加算部382は、C個のマージシンボルそれぞれについて、第0符号長45に、そのマージシンボルに対応する加算符号長を加算することで、当該マージシンボルの符号長を決定する。マージシンボル符号長加算部382は、C個のマージシンボル符号長を、符号表圧縮部34とカノニカルハフマン部326とに送出する。
カノニカルハフマン部326は、符号長計算部381によって送出されたK個の第1符号長46と、マージシンボル符号長加算部382によって送出されたC個のマージシンボル符号長とを用いて、カノニカルハフマン方式により、符号表49を生成する。カノニカルハフマン方式は、シンボルの符号長のみを用いて、シンボルに割り当てる符号ビット列(可変長符号)を決定可能な方式である。カノニカルハフマン方式では、以下の規則(B1)および(B2)に従って、シンボルに符号ビット列を割り当てる。
(B1)符号長が短いシンボルに割り当てる符号ビット列は、符号長が長いシンボルに割り当てる符号ビット列に対して、辞書順で先行する。
(B2)符号長が等しい任意の2つのシンボルにおいて、シンボル順序で先行するシンボルに割り当てる符号ビット列は、シンボル順序で後続するシンボルに割り当てる符号ビット列に対して、辞書順で先行する。
(B2)符号長が等しい任意の2つのシンボルにおいて、シンボル順序で先行するシンボルに割り当てる符号ビット列は、シンボル順序で後続するシンボルに割り当てる符号ビット列に対して、辞書順で先行する。
例えば、符号ビット列の辞書順を決定するために、ビット値“0”および“1”の辞書順を、“0”,“1”の順序と定義する。この場合、複数の符号ビット列に含まれる対応するビット値の順序(ビット順序)を、上位ビットから順に比較することによって、これら複数の符号ビット列の辞書順を決定できる。
より具体的には、例えば、“1’b0”,“2’b10”,“3’b110”,“3’b111”は、辞書順に並んだ4つの符号ビット列である。なお、“X’b”に後続する0または1のビット値のデータ列は、Xビットのビットデータ列を示している。したがって、これら4つの符号ビット列において、1ビットの符号ビット列“1’b0”は、2ビットの符号ビット列“2’b10”に対して、最上位ビットのビット順序が先行する。2ビットの符号ビット列“2’b10”は、3ビットの符号ビット列“3’b110”に対して、最上位の次のビットのビット順序が先行する。3ビットの符号ビット列“3’b110”は、3ビットの符号ビット列“3’b111”に対して、最下位ビットのビット順序が先行する。
図13は、カノニカルハフマン部326がシンボルに符号ビット列を割り当てるための疑似プログラムの例を示す。疑似プログラムにおいて、変数codeは、シンボルに割り当てられる符号ビット列を算出するために用いられる。
まず、カノニカルハフマン部326は、codeに0(=1’b0)を設定する。なお、このcodeのビット数は、符号ビット列を割り当てるべき複数のシンボルにそれぞれ関連付けられた複数の符号長の内、最小の符号長に従う。
次いで、カノニカルハフマン部326は、1回のwhileループにおいて、符号長が短い順、且つ同一符号長の場合は特定のシンボル順に、1つのシンボルに割り当てる符号ビット列を決定する。
例えば、1回目のwhileループにおいて、カノニカルハフマン部326は、符号長が最も短いシンボルであって、且つ同一符号長の別のシンボルがある場合には特定のシンボル順で先になるシンボルを、符号ビット列を割り当てる対象として選択する。そして、カノニカルハフマン部326は、選択したシンボルの符号ビット列として、code(=1’b0)を割り当てる。なお、前述した通り、最初に割り当てるcodeのビット数は最小符号長に依存する。この例では、最小符号長が1であることを想定している。そして、カノニカルハフマン部326は、codeに1を加えた値を、次のシンボルの符号長から現在のシンボルの符号長を引いたビット数だけ、左にシフトするシフト演算を行い、このシフト演算により得られた値をcodeに設定する。例えば、次のシンボルの符号長から現在のシンボルの符号長を引いたビット数が1である場合、code(=1’b0)に1を加えた値である1’b1を、1ビット左にシフトした値2’b10が、codeに設定される。
また例えば、2回目のwhileループにおいて、カノニカルハフマン部326は、符号長が2番目に短いシンボルか、あるいは符号長が最も短いシンボルであって、且つ同一符号長の別のシンボルがある場合には特定のシンボル順で2番目になるシンボルを、符号ビット列を割り当てる対象として選択する。カノニカルハフマン部326は、選択したシンボルの符号ビット列として、code(=2’b10)を割り当てる。そして、カノニカルハフマン部326は、codeに1を加えた値を、次のシンボルの符号長から現在のシンボルの符号長を引いたビット数だけ、左にシフトするシフト演算を行い、このシフト演算により得られた値をcodeに設定する。例えば、次のシンボルの符号長から現在のシンボルの符号長を引いたビット数が1である場合、code(=2’b10)に1を加えた値である2’b11を、1ビット左にシフトした値3’b110が、codeに設定される。
このようなループ処理を行うことにより、カノニカルハフマン部326は、シンボル間の順序関係と、複数のシンボルにそれぞれ対応する複数の符号長とを用いて、複数のシンボルそれぞれに符号ビット列を割り当てることができる。つまり、カノニカルハフマン部326は、シンボル間の順序関係と、各シンボルの符号長とが決定されることで、各シンボルに割り当てる符号ビット列を一意に決定できる。
符号表圧縮部34は、前述した通り、K個の上位シンボルに対応するK個の第1符号長46と、C個のマージシンボルに対応するC個のマージシンボル符号長とに対する圧縮処理を行う。例えば、符号表圧縮部34は、K個の上位シンボルに対応するK個の第1符号長46と、C個のマージシンボルに対応するC個のマージシンボル符号長とを、特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化する。これにより、圧縮された符号表49を取得する。
前述した通り、パッキング部35は、可変長符号化部33から出力された1つ以上の可変長符号を順次連結して、特定のデータサイズ毎の圧縮データとして出力する。また、パッキング部35は、圧縮された符号表49を圧縮データのヘッダとして挿入する。カノニカルハフマン方式では、シンボル間の順序関係と、各シンボルの符号長とが決定されることで、各シンボルに割り当てる符号ビット列を一意に決定できる。そのため、圧縮された符号表49から、伸張器において復号に用いられる符号表(復号テーブル)を復元可能である。符号表圧縮部34において複数の符号長を符号化することにより、符号ビット列そのものを符号化する場合と比較して、圧縮データの符号量オーバーヘッドを大幅に削減できる。
図14は、圧縮装置15において実行される符号化処理の手順の例を示すフローチャートである。符号化処理は、圧縮装置15に入力されたデータ(入力データ)に含まれる1つ以上のシンボルそれぞれを可変長符号に変換して、圧縮データを取得する処理である。符号化処理は、例えば、特定単位のデータが圧縮装置15に入力されたことに応じて実行される。
まず、バッファ部31は、入力データに含まれる1つ以上のシンボルを記憶する(ステップS101)。また、符号表生成部32は符号表生成処理を行う(ステップS102)。符号表生成処理は、入力データに含まれる1つ以上のシンボルのシンボル毎の出現頻度に基づいて、符号表49を生成する処理である。符号表生成処理の具体的な手順の例については、図15のフローチャートを参照して後述する。なお、ステップS101とステップS102とは並列に行われてもよい。
次いで、可変長符号化部33は、生成された符号表49を用いて、バッファ部31によって記憶された1つ以上のシンボルそれぞれを可変長符号に変換する(ステップS103)。また、符号表圧縮部34は符号表49を圧縮する(ステップS104)。具体的には、符号表圧縮部34は、複数のシンボルにそれぞれ関連付けられる複数の符号長に対して圧縮処理を行う。複数の符号長に対する圧縮処理は、前述した通り、例えば、複数の符号長を特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化する処理である。なお、ステップS103とステップS104とは並列に行われてもよい。
パッキング部35は、圧縮された符号表49と、連結された1つ以上の可変長符号とを含む圧縮データを出力し(ステップS105)、符号化処理を終了する。
以上により、圧縮装置15は、入力データに含まれる1つ以上のシンボルそれぞれを可変長符号に変換して、圧縮データを取得できる。入力データが、例えば、ホスト2によってNAND型フラッシュメモリ5に書き込むことが要求されたデータである場合、CPU12は、入力データが圧縮された圧縮データを、NAND I/F13を介してNAND型フラッシュメモリ5に書き込むことができる。
図15は、符号表生成部32において実行される符号表生成処理の手順の例を示すフローチャートである。符号表生成処理は、図14を参照して前述した符号化処理のステップS102に相当する。符号表生成部32には、圧縮装置15に対する入力データが入力される。
まず、符号表生成部32の頻度カウント部321は、入力データに含まれる1つ以上シンボルを用いて、第0頻度テーブル40を生成する(ステップS201)。頻度ソート部322は、第0頻度テーブルに含まれるN個のエントリを、出現頻度の降順にソートして、第1頻度テーブル41を取得する(ステップS202)。そして、シンボル分配部371は、第1頻度テーブル41から、上位K個のエントリを含む第1部分テーブル431と、残りの(N-K)個のエントリを含む第2部分テーブル432とを取得する(ステップS203)。第1部分テーブル431は、ハフマン木生成部324に送出される。第2部分テーブル432は、代表シンボル頻度推定部372、マージシンボル数カウント部373、およびマージシンボル加算符号長決定部374に送出される。
代表シンボル頻度推定部372は、第2部分テーブル432内の(N-K)個のシンボルを1つのシンボル(代表シンボル)と見なした場合の出現頻度の見積り値を算出する(ステップS204)。ハフマン木生成部324は、代表シンボルの出現頻度の見積り値と、第1部分テーブル431内のK個の上位シンボルの出現頻度とに基づいて、代表シンボルとK個の上位シンボルの内、出現頻度が0より大きいシンボルそれぞれをリーフノードとして有するハフマン木60を生成する(ステップS205)。ここでは、代表シンボルとK個の上位シンボルの全シンボルの出現頻度が0より大きいことを想定する。符号長計算部381は、ハフマン木60を用いて、代表シンボルの符号長(第0符号長)45と、K個の上位シンボルそれぞれの符号長(K個の第1符号長)46とを決定する(ステップS206)。代表シンボルの符号長45は、マージシンボル符号長加算部382に送出される。K個の上位シンボルそれぞれの符号長46は、カノニカルハフマン部326と符号表圧縮部34とに送出される。
また、マージシンボル数カウント部373は、第2部分テーブル432に含まれる(N-K)個のシンボルの内、出現頻度が0より大きいシンボル(マージシンボル)の数Cを取得する(ステップS207)。マージシンボル加算符号長決定部374は、マージシンボルの数Cと第2部分テーブル432とに基づく部分木を用いて、C個のマージシンボルそれぞれの加算符号長(C個の加算符号長)を決定する(ステップS208)。C個の加算符号長は、マージシンボル符号長加算部382に送出される。
なお、ステップS204からステップS206までの手順と、ステップS207からステップS208までの手順とは、並列に行われてもよい。
次いで、マージシンボル符号長加算部382は、代表シンボルの符号長45に、各マージシンボルの加算符号長を加算して、C個のマージシンボルそれぞれの符号長を決定する(ステップS209)。C個のマージシンボルそれぞれの符号長は、カノニカルハフマン部326と符号表圧縮部34とに送出される。
カノニカルハフマン部326は、K個の上位シンボルそれぞれの符号長46と、C個のマージシンボルそれぞれの符号長とを用いて、K個の上位シンボルおよびC個のマージシンボルの各シンボルに割り当てる可変長符号を決定し(ステップS210)、符号表生成処理を終了する。シンボルに割り当てる可変長符号を符号長に基づいて決定する方法については、図13を参照して前述した通りである。
以上により、符号表生成部32は、入力データに含まれる1つ以上のシンボルのシンボル毎の出現頻度に基づいて、符号表49を生成する。符号表生成部32は、最大で(K+1)個のリーフノードを有するハフマン木を生成するので、最大でN個のリーフノードを有するハフマン木が生成される場合と比較して、ハフマン木生成の対象となるリーフノード(シンボル)の数が削減される。したがって、符号表生成部32では、符号表49を生成するための処理量を削減できる。
(第2実施形態)
第1実施形態に係る符号表生成装置32は、第2部分テーブル432に含まれる1つ以上の下位シンボルを1つの代表シンボルと見なして、ハフマン木60を生成する。これに対して、第2実施形態に係る符号表生成装置32は、1つ以上の下位シンボルを2つ以上の代表シンボルと見なして、ハフマン木60を生成する。第2実施形態の符号表生成装置32では、代表シンボルの数を増やすことで、符号化効率の低下を小さくすることが期待できる。
第1実施形態に係る符号表生成装置32は、第2部分テーブル432に含まれる1つ以上の下位シンボルを1つの代表シンボルと見なして、ハフマン木60を生成する。これに対して、第2実施形態に係る符号表生成装置32は、1つ以上の下位シンボルを2つ以上の代表シンボルと見なして、ハフマン木60を生成する。第2実施形態の符号表生成装置32では、代表シンボルの数を増やすことで、符号化効率の低下を小さくすることが期待できる。
第2実施形態の符号表生成装置32の構成は第1実施形態の符号表生成装置32と同様である。第2実施形態と第1実施形態とでは、1つ以上の下位シンボルを2つ以上の代表シンボルと見なしてハフマン木60を生成し、2つ以上の代表シンボルそれぞれが代表するマージシンボルの部分木を用いて加算符号長を決定する処理の手順のみが異なる。以下、第1実施形態と異なる点を主に説明する。
図16は、代表シンボルがL個である場合の符号表生成装置32(符号表生成部32)を含む圧縮装置15の一構成例を示す。Lは、2以上の整数である。なお、Lが1である場合には、図7に示した第1実施形態の符号表生成装置32と同様の構成になる。図16では、代表シンボルが2つ(すなわち、L=2)である場合の符号表生成部32の構成を例示している。以下では、2つの代表シンボルを、第0代表シンボルと第1代表シンボルと称する。
符号表生成部32は、例えば、頻度カウント部321、頻度ソート部322、シンボルマージ部323、ハフマン木生成部324、符号長決定部325、およびカノニカルハフマン部326を備える。頻度カウント部321および頻度ソート部322については、第1実施形態において前述した通りである。
シンボルマージ部323はシンボル分配部371を備える。シンボルマージ部323は、さらに、L個の代表シンボルに対応する数の、代表シンボル頻度推定部372、マージシンボル数カウント部373、およびマージシンボル加算符号長決定部374のセットを備える。図16に示す例では、第0代表シンボルに対応する第0代表シンボル頻度推定部372-0、第0マージシンボル数カウント部373-0、および第0マージシンボル加算符号長決定部374-0のセットと、第1代表シンボルに対応する第1代表シンボル頻度推定部372-1、第1マージシンボル数カウント部373-1、および第1マージシンボル加算符号長決定部374-1のセットとが設けられている。
符号長決定部325は符号長計算部381を備える。符号長決定部325は、さらに、L個の代表シンボルに対応する数のマージシンボル符号長加算部382を備える。図16に示す例では、第0代表シンボルに対応する第0マージシンボル符号長加算部382-0と、第1代表シンボルに対応する第1マージシンボル符号長加算部382-1とが設けられている。
シンボル分配部371は、第1頻度テーブル41を、(L+1)個の部分テーブルに分割する。第1部分テーブル441は、第1頻度テーブル41に含まれるN個のエントリの内、上位のK個のエントリを含む。シンボル分配部371は、N個のエントリから上位のK個のエントリを除いた残りの(N-K)個のエントリをL個の集合(シンボル集合)に分割する。L個の集合それぞれは、L個の部分テーブルそれぞれに含まれる。
ここで、N=256、K=32、L=2である場合について例示する。この場合、シンボル分配部371は、第1頻度テーブル41を、第1部分テーブル441、第2部分テーブル442、および第3部分テーブル443に分割する。第1部分テーブル441は、第1頻度テーブル41に含まれる256個のエントリの内、インデックス0からインデックス31までの32個のエントリを含む。第2部分テーブル442は、第1頻度テーブル41に含まれる256個のエントリの内、インデックス32からインデックス63までの32個のエントリを含む。第3部分テーブル443は、第1頻度テーブル41に含まれる256個のエントリの内、インデックス64からインデックス255までの192個のエントリを含む。
シンボル分配部371は、第1部分テーブル441をハフマン木生成部324に送出する。シンボル分配部371は、第2部分テーブル442を、第0代表シンボル頻度推定部372-0、第0マージシンボル数カウント部373-0、および第0マージシンボル加算符号長決定部374-0に送出する。シンボル分配部371は、第3部分テーブル443を、第1代表シンボル頻度推定部372-1、第1マージシンボル数カウント部373-1、および第1マージシンボル加算符号長決定部374-1に送出する。
第0代表シンボル頻度推定部372-0および第1代表シンボル頻度推定部372-1それぞれの動作は、第1実施形態の代表シンボル頻度推定部372と同様である。
具体的には、第0代表シンボル頻度推定部372-0は、ハフマン木60を構築する際に、第2部分テーブル442に含まれる1つ以上のシンボル(第0下位シンボル)を1つの第0代表シンボルと見なすために、第0代表シンボルの出現頻度を推定する。第0代表シンボル頻度推定部372-0は、例えば、1つ以上の第0下位シンボルの出現頻度の総和を見積もることによって、第0代表シンボルの出現頻度を推定する。第0代表シンボル頻度推定部372-0は、第0代表シンボルの出現頻度をハフマン木生成部324に送出する。
また、第1代表シンボル頻度推定部372-1は、ハフマン木60を構築する際に、第3部分テーブル443に含まれる1つ以上のシンボル(第1下位シンボル)を1つの第1代表シンボルと見なすために、第1代表シンボルの出現頻度を推定する。第1代表シンボル頻度推定部372-1は、例えば、1つ以上の第1下位シンボルの出現頻度の総和を見積もることによって、第1代表シンボルの出現頻度を推定する。第1代表シンボル頻度推定部372-1は、第1代表シンボルの出現頻度をハフマン木生成部324に送出する。
ハフマン木生成部324は、第1部分テーブル441と、L個の代表シンボルそれぞれの出現頻度とを用いて、ハフマン木60を生成する。より詳しくは、ハフマン木生成部324は、K個の上位シンボルとL個の代表シンボルの内、出現頻度が0より大きいシンボルそれぞれに対応するリーフノードを有するハフマン木を生成する。よって、ハフマン木生成部324は、最大で(K+L)個のリーフノードを有するハフマン木の構築処理を行うことになる。ハフマン木生成部324は、生成したハフマン木60を符号長決定部325(より詳しくは、符号長計算部381)に送出する。
第0マージシンボル数カウント部373-0および第1マージシンボル数カウント部373-1それぞれの動作は、第1実施形態のマージシンボル数カウント部373と同様である。また、第0マージシンボル加算符号長決定部374-0および第1マージシンボル加算符号長決定部374-1それぞれの動作は、第1実施形態のマージシンボル加算符号長決定部374と同様である。
具体的には、第0マージシンボル数カウント部373-0および第0マージシンボル加算符号長決定部374-0は、第0代表シンボルが代表するC個のマージシンボル(以下、第0マージシンボルと称する)それぞれの加算符号長を決定する。Cは、0以上の整数である。第0マージシンボルは、第2部分テーブル442に含まれるシンボルの内、出現頻度が0より大きいシンボルである。第0マージシンボル加算符号長決定部374-0は、決定した加算符号長を第0マージシンボル符号長加算部382-0に送出する。
また、第1マージシンボル数カウント部373-1および第1マージシンボル加算符号長決定部374-1は、第1代表シンボルが代表するC’個のマージシンボル(以下、第1マージシンボルと称する)それぞれの加算符号長を決定する。C’は、0以上の整数である。第1マージシンボルは、第3部分テーブル443に含まれるシンボルの内、出現頻度が0より大きいシンボルである。第1マージシンボル加算符号長決定部374-1は、決定した加算符号長を第1マージシンボル符号長加算部382-1に送出する。
符号長決定部325は、ハフマン木60と、C個の第0マージシンボルの加算符号長と、C’個の第1マージシンボルの加算符号長とを用いて、第1部分テーブル441に含まれるK個の上位シンボルそれぞれの符号長と、C個の第0マージシンボルそれぞれの符号長と、C’個の第1マージシンボルそれぞれの符号長とを決定する。なお、ここでは、K個の上位シンボル、第0代表シンボル、および第1代表シンボルの全シンボルの出現頻度が0より大きいことを想定する。
具体的には、符号長決定部325の符号長計算部381は、ハフマン木60を用いて、K個の上位シンボルそれぞれの符号長(第1符号長46)と、第0代表シンボルの符号長(以下、第0符号長471と称する)と、第1代表シンボルの符号長(以下、第0’符号長472と称する)とを決定する。ハフマン木60を用いて各シンボルの符号長を決定する方法については、前述した通りである。
符号長計算部381は、決定した第0代表シンボルの第0符号長471を第0マージシンボル符号長加算部382-0に送出する。符号長計算部381は、決定した第1代表シンボルの第0’符号長472を第1マージシンボル符号長加算部382-1に送出する。符号長計算部381は、決定したK個の上位シンボルにそれぞれ対応するK個の第1符号長46を、符号表圧縮部34とカノニカルハフマン部326とに送出する。
第0マージシンボル符号長加算部382-0は、第0符号長471と、C個の第0マージシンボルにそれぞれ対応するC個の加算符号長とを用いて、C個の第0マージシンボルそれぞれの符号長(以下、第0マージシンボル符号長と称する)を決定する。具体的には、第0マージシンボル符号長加算部382-0は、C個の第0マージシンボルそれぞれについて、第0符号長471に、その第0マージシンボルに対応する加算符号長を加算することで、当該第0マージシンボルの符号長を決定する。第0マージシンボル符号長加算部382-0は、C個の第0マージシンボル符号長を、符号表圧縮部34とカノニカルハフマン部326に送出する。
第1マージシンボル符号長加算部382-1は、第0’符号長472と、C’個の第1マージシンボルにそれぞれ対応するC’個の加算符号長とを用いて、C’個の第1マージシンボルそれぞれの符号長(以下、第1マージシンボル符号長と称する)を決定する。具体的には、第1マージシンボル符号長加算部382-1は、C’個の第1マージシンボルそれぞれについて、第0’符号長472に、その第1マージシンボルに対応する加算符号長を加算することで、当該第1マージシンボルの符号長を決定する。第1マージシンボル符号長加算部382-1は、C’個の第1マージシンボル符号長を、符号表圧縮部34とカノニカルハフマン部326に送出する。
カノニカルハフマン部326は、K個の第1符号長46と、C個の第0マージシンボル符号長と、C’個の第1マージシンボル符号長とを用いて、カノニカルハフマン方式により、符号表49を生成する。符号長に基づく符号表49の生成方法については、第1実施形態において説明した通りである。
なお、符号表圧縮部34は、K個の第1符号長46と、C個の第0マージシンボル符号長と、C’個の第1マージシンボル符号長とに対する圧縮処理を行う。例えば、符号表圧縮部34は、K個の第1符号長46と、C個の第0マージシンボル符号長と、C’個の第1マージシンボル符号長とを、特定のシンボル順に並べ替え、並べ替えられた複数の符号長をランレングス符号化し、その結果をさらにハフマン符号化する。これにより、圧縮された符号表49を取得する。
このように、1つ以上の下位シンボルを代表する代表シンボルの数Lは、任意に設定可能である。符号表生成部32には、代表シンボルの数Lに応じて、対応する数の代表シンボル頻度推定部372、マージシンボル数カウント部373、マージシンボル加算符号長決定部374、およびマージシンボル符号長加算部382のセットが設けられる。
代表シンボルの数Lを増やすことによって、増加したL個の部分テーブルをそれぞれ用いてL個の代表シンボルの出現頻度が推定される。増加したL個の代表シンボルの出現頻度が用いられることにより、例えば、1つ以上の下位シンボルの出現頻度の傾向が途中で大きく変わる場合に、その出現頻度の傾向の変化が、ハフマン木60の生成に反映されやすくなる。したがって、符号表生成部32において代表シンボルの数Lを増やすことで、圧縮装置15における符号化効率の低下を小さくし得る。代表シンボルの数Lは、例えば、ハフマン木の生成に要する処理量と、符号化効率とを考慮して決定される。
以上説明したように、第1および第2実施形態に係る符号表生成装置32によれば、符号表を生成するための処理量を削減できる。頻度カウント部321は、入力されたシンボルのシンボル毎の出現頻度に基づいて、複数のシンボルと、前記複数のシンボルにそれぞれ関連付けられた複数の出現頻度とを含む頻度テーブルを生成する。頻度ソート部322は、頻度テーブルにおいて、複数のシンボルと複数の出現頻度とを、出現頻度の降順に並べ替える。シンボルマージ部323(より詳しくは、シンボル分配部371)は、並べ替えられた複数のシンボルから、上位のK個のシンボルと、残りのシンボルとを取得し、その残りのシンボルを1つ以上のシンボル集合に分割する。シンボルマージ部323(より詳しくは、代表シンボル頻度推定部372)は、1つ以上のシンボル集合にそれぞれ対応する1つ以上の部分木それぞれのルートノード(すなわち、代表シンボル)に関連付けられる出現頻度を決定する。ハフマン木生成部324は、K個のシンボルと、1つ以上の部分木それぞれのルートノードとを用いて、ハフマン木60を生成する。符号長決定部325は、ハフマン木60と1つ以上の部分木とに基づいて、複数のシンボルにそれぞれ対応する複数の符号長を決定する。カノニカルハフマン部326は、複数の符号長に基づいて、複数のシンボルにそれぞれ割り当てる複数の符号を決定する。なお、Kは、1以上であって、複数のシンボルの数以下である整数である。
これにより、符号表生成装置32では、最大で、Kと1つ以上の部分木の数の和に相当する数のリーフノードを有するハフマン木を生成するので、最大で、複数のシンボルの数に相当する数のリーフノードを有するハフマン木を生成する場合と比較して、ハフマン木生成の対象となるリーフノード(シンボル)の数が削減される。したがって、符号表生成装置32では、符号表を生成するための処理量を削減できる。
第1および第2実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…ホスト、3…メモリシステム、4…コントローラ、5…NAND型フラッシュメモリ、10…バス、11…ホストI/F、12…CPU、13…NAND I/F、14…DRAM I/F、15…圧縮装置、31…バッファ部、32…符号表生成装置(符号表生成部)、33…可変長符号化部、34…符号表圧縮部、35…パッキング部、321…頻度カウント部、322…頻度ソート部、323…シンボルマージ部、324…ハフマン木生成部、325…符号長決定部、326…カノニカルハフマン部、371…シンボル分配部、372…代表シンボル頻度推定部、373…マージシンボル数カウント部、374…マージシンボル加算符号長決定部、381…符号長計算部、382…マージシンボル符号長加算部、40…第0頻度テーブル、41…第1頻度テーブル、431…第1部分テーブル、432…第2部分テーブル、45…第0符号長、46…第1符号長、49…符号表。
Claims (11)
- 入力されたシンボルのシンボル毎の出現頻度に基づいて、複数のシンボルと、前記複数のシンボルにそれぞれ関連付けられた複数の出現頻度とを含む頻度テーブルを生成する頻度テーブル生成部と、
前記頻度テーブルにおいて、前記複数のシンボルと前記複数の出現頻度とを、出現頻度の降順に並べ替える頻度ソート部と、
並べ替えられた前記複数のシンボルから、上位のK個のシンボルと、残りのシンボルとを取得し、前記残りのシンボルを1つ以上のシンボル集合に分割し、前記1つ以上のシンボル集合にそれぞれ対応する1つ以上の部分木それぞれのルートノードに関連付けられる出現頻度を決定するシンボルマージ部と、
前記K個のシンボルと、前記1つ以上の部分木それぞれのルートノードとを用いて、ハフマン木を生成するハフマン木生成部と、
前記ハフマン木と前記1つ以上の部分木とに基づいて、前記複数のシンボルにそれぞれ対応する複数の符号長を決定する符号長決定部と、
前記複数の符号長に基づいて、前記複数のシンボルにそれぞれ割り当てる複数の符号を決定する符号決定部とを具備し、
前記Kは、1以上であって、前記複数のシンボルの数以下である整数である
符号表生成装置。 - 前記1つ以上の部分木それぞれは、1つ以上のリーフノードを有する部分木であり、
前記1つ以上のリーフノードは、前記1つ以上のシンボル集合の内の1つのシンボル集合に含まれ、且つ出現頻度が0より大きい1つ以上のシンボルにそれぞれ対応する
請求項1に記載の符号表生成装置。 - 前記1つ以上の部分木それぞれは、バランスされた二分木である
請求項1または請求項2に記載の符号表生成装置。 - 前記1つ以上の部分木は、第1部分木を含み、
前記1つ以上のシンボル集合は、前記第1部分木に対応する第1シンボル集合を含み、
前記シンボルマージ部は、前記第1シンボル集合に含まれる1つ以上のシンボルの内の少なくとも1つに関連付けられた出現頻度を用いて、前記第1部分木のルートノードに関連付けられる出現頻度を決定する
請求項1乃至請求項3のいずれか一項に記載された符号表生成装置。 - 前記複数のシンボルそれぞれは、出現頻度が0より大きいシンボルである
請求項1乃至請求項4のいずれか一項に記載の符号表生成装置。 - 請求項1乃至請求項5のいずれか一項に記載の符号表生成装置と、
前記複数のシンボルにそれぞれ割り当てられた前記複数の符号に基づいて、前記入力されたシンボルを符号に変換する符号化部と、
不揮発性メモリと、
前記符号を含むデータを前記不揮発性メモリに書き込む制御部とを具備する
メモリシステム。 - 入力されたシンボルのシンボル毎の出現頻度に基づいて、複数のシンボルと、前記複数のシンボルにそれぞれ関連付けられた複数の出現頻度とを含む頻度テーブルを生成し、
前記複数のシンボルから、出現頻度の降順に上位のK個のシンボルと、残りのシンボルとを取得し、
前記残りのシンボルを1つ以上のシンボル集合に分割し、
前記1つ以上のシンボル集合にそれぞれ対応する1つ以上の部分木それぞれのルートノードに関連付けられる出現頻度を決定し、
前記K個のシンボルと、前記1つ以上の部分木それぞれのルートノードとを用いて、ハフマン木を生成し、
前記ハフマン木と前記1つ以上の部分木とに基づいて、前記複数のシンボルにそれぞれ対応する複数の符号長を決定し、
前記複数の符号長に基づいて、前記複数のシンボルにそれぞれ割り当てる複数の符号を決定し、
前記Kは、1以上であって、前記複数のシンボルの数以下である整数である
符号表生成方法。 - 前記1つ以上の部分木それぞれは、1つ以上のリーフノードを有する部分木であり、
前記1つ以上のリーフノードは、前記1つ以上のシンボル集合の内の1つのシンボル集合に含まれ、且つ出現頻度が0より大きい1つ以上のシンボルにそれぞれ対応する
請求項7に記載の符号表生成方法。 - 前記1つ以上の部分木それぞれは、バランスされた二分木である
請求項7または請求項8に記載の符号表生成方法。 - 前記1つ以上の部分木は、第1部分木を含み、
前記1つ以上のシンボル集合は、前記第1部分木に対応する第1シンボル集合を含み、
前記1つ以上の部分木それぞれのルートノードに関連付けられる出現頻度を決定することは、前記第1シンボル集合に含まれる1つ以上のシンボルの内の少なくとも1つに関連付けられた出現頻度を用いて、前記第1部分木のルートノードに関連付けられる出現頻度を決定することを含む
請求項7乃至請求項9のいずれか一項に記載された符号表生成方法。 - 前記複数のシンボルそれぞれは、出現頻度が0より大きいシンボルである
請求項7乃至請求項10のいずれか一項に記載の符号表生成方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022030927A JP2023127253A (ja) | 2022-03-01 | 2022-03-01 | 符号表生成装置、メモリシステム、および符号表生成方法 |
US17/941,345 US20230283295A1 (en) | 2022-03-01 | 2022-09-09 | Code table generation device, memory system, and code table generation method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022030927A JP2023127253A (ja) | 2022-03-01 | 2022-03-01 | 符号表生成装置、メモリシステム、および符号表生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023127253A true JP2023127253A (ja) | 2023-09-13 |
Family
ID=87850067
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022030927A Pending JP2023127253A (ja) | 2022-03-01 | 2022-03-01 | 符号表生成装置、メモリシステム、および符号表生成方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230283295A1 (ja) |
JP (1) | JP2023127253A (ja) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8106797B2 (en) * | 2007-11-30 | 2012-01-31 | Comtech Ef Data Corporation | Assigning codes to and repairing Huffman trees |
US10756758B1 (en) * | 2019-08-30 | 2020-08-25 | International Business Machines Corporation | Length-limited huffman encoding |
-
2022
- 2022-03-01 JP JP2022030927A patent/JP2023127253A/ja active Pending
- 2022-09-09 US US17/941,345 patent/US20230283295A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230283295A1 (en) | 2023-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6692448B2 (ja) | ストレージ装置及びストレージ装置の制御方法 | |
JP2021527376A (ja) | データ圧縮 | |
US20190052284A1 (en) | Data compression apparatus, data decompression apparatus, data compression program, data decompression program, data compression method, and data decompression method | |
CN110419036B (zh) | 数据压缩方法、设备与计算设备 | |
JP2022094108A (ja) | 圧縮装置および制御方法 | |
US11139828B2 (en) | Memory compression method and apparatus | |
US11899934B2 (en) | Compression device, compression and decompression device, and memory system | |
JP5619326B2 (ja) | 符号化装置、復号装置、符号化方法、符号化プログラム、復号方法および復号プログラム | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
US20170300235A1 (en) | Information storage device and method for deduplication | |
JP2023127253A (ja) | 符号表生成装置、メモリシステム、および符号表生成方法 | |
US9787323B1 (en) | Huffman tree decompression | |
US11770132B2 (en) | Compression device and control method | |
US20240204796A1 (en) | Code table generation device, memory system, and code table generation method | |
US12057862B2 (en) | Data decompression device, memory system, and data decompression method | |
US11431995B2 (en) | Memory system | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
US20230403027A1 (en) | Dictionary compressor, data compression device, and memory system | |
US20240106459A1 (en) | Compression device and compression method | |
US11748307B2 (en) | Selective data compression based on data similarity | |
KR20230091001A (ko) | 압축된 연속 취소 알고리즘을 통한 높은 처리량의 극 ecc 디코딩 | |
WO2011014182A1 (en) | Non-greedy differential compensation |