【文献】
Koichi Marumo,Shinichi Yamagiwa,Time-sharing Multithreading on Stream-based Lossless Data Compression,2017 Fifth International Symposium on Computer and Networking,2017年11月,pp.305-310
(58)【調査した分野】(Int.Cl.,DB名)
圧縮装置が、入力されたシンボルが複数のエントリを有する第1テーブルに未登録である場合に、前記複数のエントリの一つに前記シンボルを登録するとともに、非圧縮を示す指標データと前記シンボルとを出力する処理と、前記シンボルが前記テーブルに登録済みの場合に、圧縮を示す指標データと、前記シンボルが登録されているエントリの位置を示すとともに前記シンボルのサイズより小さいサイズを有する位置情報とを出力する処理と、を行い、
解凍装置が、前記非圧縮を示す指標データ及び前記シンボルを受信した場合に、前記圧縮装置における前記シンボルの登録方法と同一の方法で前記第1テーブルと同一のデータ構造を有する第2テーブルに前記シンボルを登録するとともに前記シンボルを出力する処理と、前記圧縮を示す指標データと前記位置情報とを受信した場合に、前記位置情報によって示される前記第2テーブル中のエントリに登録された前記シンボルを読み出して出力する処理と、を行い、
前記圧縮装置が、前記圧縮を示す指標データと前記位置情報を出力する場合に、前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第1のビット数で表現された前記位置情報を出力し、
前記解凍装置が、前記非圧縮を示す指標データ及び前記シンボルを受信して前記シンボルを前記第2テーブルに登録した場合に、前記第2テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1のビット数の算出方法と同じ算出方法により算出される、前記第2テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第2のビット数を用いて、前記圧縮装置から送信され前記解凍装置に入力されるビット列から前記位置情報を抽出する
データの圧縮及び解凍方法。
前記圧縮装置は、前記シンボルの前記第1テーブルの検索において前記シンボルが登録されたエントリがヒットした場合に、前記第1テーブルに関して、前記ヒットしたエントリに登録されていたシンボルを前記ヒットしたエントリより先頭側にある所定の移動先エントリに登録するとともに、前記移動先エントリから前記ヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させ、
前記解凍装置は、前記シンボルの前記第2テーブルの検索において前記シンボルが登録されたエントリがヒットした場合に、前記第2テーブルに関して、前記ヒットしたエントリ中のシンボルを前記ヒットしたエントリより先頭側にある所定の移動先エントリに登録するとともに、前記移動先エントリから前記ヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させる
請求項1から4のいずれか一項に記載のデータの圧縮及び解凍方法。
前記圧縮装置は、前記シンボルの前記第1テーブルの検索において前記シンボルが登録されたエントリがヒットしない場合に、前記第1テーブルにおける第1エントリが空き状態であれば、前記第1テーブルにおける第1エントリに前記シンボルを登録し、前記第1テーブルの全てのエントリが使用中であれば、前記第1テーブルにおける第1エントリに前記シンボルを上書き登録し、
前記解凍装置は、前記シンボルの前記第2テーブルの検索において前記シンボルが登録されたエントリがヒットしない場合に、前記第2テーブルにける第1エントリが空き状態であれば、前記第2テーブルにおける第1エントリに前記シンボルを登録し、前記第2テーブルの全てのエントリが使用中であれば、前記第2テーブルにおける第1エントリに前記シンボルを上書き登録する、
請求項1から8のいずれか一項に記載のデータの圧縮及び解凍方法。
前記圧縮装置は、前記第1テーブルに関して、シンボルが登録されたエントリのヒット数、又はシンボルが登録されたエントリのミスヒット数が所定値に達した場合に、シンボルを登録しているエントリのうちインデックス番号が最大のエントリ中のシンボルを削除し、
前記解凍装置は、前記第2テーブルに関して、シンボルが登録されたエントリのヒット数、又はシンボルが登録されたエントリのミスヒット数が所定値に達した場合に、シンボルを登録しているエントリのうちインデックス番号が最大のエントリ中のシンボルを削除する
請求項1から11のいずれか一項に記載のデータの圧縮及び解凍方法。
前記圧縮装置は、前記第1テーブルに関して、前記インデックス番号が最大のエントリが先頭から所定範囲にあるエントリに該当する場合には、前記インデックス番号が最大のエントリ中のシンボルを削除せず、
前記解凍装置は、前記第2テーブルに関して、前記インデックス番号が最大のエントリが先頭から所定範囲にあるエントリに該当する場合には、前記インデックス番号が最大のエントリ中のシンボルを削除しない
請求項12に記載のデータの圧縮及び解凍方法。
前記圧縮装置が、前記圧縮を示す指標データ及び前記第1テーブルの空き状態のエントリを示す位置情報の出力に続いて、非圧縮を示す指標データと前記命令を示す命令シンボルとを出力し、
前記解凍装置は、前記例外の発生時に、前記命令シンボルが示す命令を実行する
請求項16に記載のデータの圧縮及び解凍方法。
前記圧縮装置が、前記非圧縮を示す指標データ及び前記第1テーブルにおいて登録中のシンボルの出力に続いて、非圧縮を示す指標データと前記命令を示す命令シンボルとを出力し、
前記解凍装置は、前記例外の発生時に、前記命令シンボルが示す命令を実行する
請求項18に記載のデータの圧縮及び解凍方法。
前記第1テーブル及び前記第2テーブルは、テーブルの分割によって得られた複数のバンクの一つであり、前記第1テーブル及び前記第2テーブルの選択は、同一のハッシュ関数を用いて行う
請求項1から20のいずれか一項に記載のデータの圧縮及び解凍方法。
前記圧縮装置は、前記シンボルに対する圧縮処理のために設定する複数のパラメータから選択される2以上のパラメータの組み合わせを含む共通鍵を前記解凍装置に送信し、その後、前記非圧縮を示す指標データと前記シンボルとの組み合わせ、及び前記圧縮を示す指標データと前記位置情報との組み合わせに対する、前記共通鍵を用いた暗号化を行い、前記暗号化の結果を前記解凍装置に送信し、
前記解凍装置が、前記圧縮装置から送信された前記共通鍵中の前記2以上のパラメータを、前記非圧縮を示す指標データと前記シンボルとの組み合わせ、又は前記圧縮を示す指標データと前記位置情報との組み合わせを用いて前記シンボルを出力する解凍処理のために設定し、前記暗号化の結果の復号を前記共通鍵を用いて行うとともに、復号した結果に対する前記解凍処理を行う
請求項1から21のいずれか一項に記載のデータの圧縮及び解凍方法。
入力されたシンボルが複数のエントリを有する第1テーブルに未登録の場合に、前記複数のエントリの一つに前記シンボルを登録するとともに、非圧縮を示す指標データと前記シンボルとを出力する処理と、前記シンボルが前記テーブルに登録済みの場合に、圧縮を示す指標データと、前記シンボルが登録されているエントリの位置を示すとともに前記シンボルのサイズより小さいサイズを有する位置情報とを出力する処理と、を行う圧縮器
を含み、
前記圧縮器は、前記圧縮を示す指標データと前記位置情報を出力する処理において、前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数で表現された前記位置情報を出力する、
データ圧縮装置。
入力されたシンボルが複数のエントリを有する第1テーブルに未登録の場合に、前記複数のエントリの一つに前記シンボルを登録するとともに、非圧縮を示す指標データと前記シンボルとを出力する処理と、前記シンボルが前記テーブルに登録済みの場合に、圧縮を示す指標データと、前記シンボルが登録されているエントリの位置を示すとともに前記シンボルのサイズより小さいサイズを有する位置情報とを出力する処理と、をコンピュータに実行させ、
前記圧縮を示す指標データと前記位置情報を出力する処理において、前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数で表現された前記位置情報を出力する
、
プログラム。
解凍装置が、圧縮装置から送信された、非圧縮を示す指標データ及びシンボルを受信した場合に、前記圧縮装置における前記シンボルの登録方法と同一の方法で前記圧縮装置が有する第1テーブルと同一のデータ構造を有する第2テーブルに前記シンボルを登録するとともに前記シンボルを出力する処理と、圧縮を示す指標データと前記第1テーブルにおいて前記シンボルが登録されたエントリの位置を示す位置情報とを受信した場合に、前記位置情報によって示される前記第2テーブル中のエントリに登録された前記シンボルを読み出して出力する処理と、
を行い、
前記位置情報は、前記圧縮装置が前記圧縮を示す指標データと前記位置情報を出力する場合に前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて算出される、前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第1のビット数で表現されており、
前記解凍装置は、前記非圧縮を示す指標データ及び前記シンボルを受信して前記シンボルを前記第2テーブルに登録した場合に前記第2テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1のビット数の算出方法と同じ算出方法により算出される、前記第2テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第2のビット数を用いて、前記圧縮装置から送信され前記解凍装置に入力されるビット列から前記位置情報を抽出する
データ解凍方法。
圧縮装置から送信された、非圧縮を示す指標データ及びシンボルを受信した場合に、前記圧縮装置における前記シンボルの登録方法と同一の方法で前記圧縮装置が有する第1テーブルと同一のデータ構造を有する第2テーブルに前記シンボルを登録するとともに前記シンボルを出力する処理と、圧縮を示す指標データと前記第1テーブルにおいて前記シンボルが登録されたエントリの位置を示す位置情報とを受信した場合に、前記位置情報によって示される前記第2テーブル中のエントリに登録された前記シンボルを読み出して出力する処理と、を行う解凍器
を含み、
前記位置情報は、前記圧縮装置が前記圧縮を示す指標データと前記位置情報を出力する場合に前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて算出される、前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第1のビット数で表現されており、
前記解凍器は、前記非圧縮を示す指標データ及び前記シンボルを受信して前記シンボルを前記第2テーブルに登録した場合に前記第2テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1のビット数の算出方法と同じ算出方法により算出される、前記第2テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第2のビット数を用いて、前記圧縮装置から送信され前記解凍装置に入力されるビット列から前記位置情報を抽出する
データ解凍装置。
圧縮装置から送信された、非圧縮を示す指標データ及びシンボルを受信した場合に、前記圧縮装置における前記シンボルの登録方法と同一の方法で前記圧縮装置が有する第1テーブルと同一のデータ構造を有する第2テーブルに前記シンボルを登録するとともに前記シンボルを出力する処理と、圧縮を示す指標データと前記第1テーブルにおいて前記シンボルが登録されたエントリの位置を示す位置情報であって、前記第1テーブルの使用状況に応じてサイズが変更される位置情報とを受信した場合に、前記位置情報によって示される前記第2テーブル中のエントリに登録された前記シンボルを読み出して出力する処理と
、をコンピュータに実行させ、
前記位置情報は、前記圧縮装置が前記圧縮を示す指標データと前記位置情報を出力する場合に前記第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて算出される、前記第1テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第1のビット数で表現されており、
前記非圧縮を示す指標データ及び前記シンボルを受信して前記シンボルを前記第2テーブルに登録した場合に前記第2テーブルの前記複数のエントリの使用状況を示す情報に基づいて前記第1のビット数の算出方法と同じ算出方法により算出される、前記第2テーブルにおける使用中のエントリの位置情報を表現可能な最小のビット数である第2のビット数を用いて、前記圧縮装置から送信され前記解凍装置に入力されるビット列から前記位置情報を抽出するプログラム。
【発明を実施するための形態】
【0011】
実施形態に係るデータの圧縮及び解凍方法は、以下を含む。
(1)圧縮装置が、入力されたシンボルが複数のエントリを有する第1テーブルに未登録である場合に、前記複数のエントリの一つに前記シンボルを登録するとともに、非圧縮を示す指標データと前記シンボルとを出力する処理と、前記シンボルが前記テーブルに登録済みの場合に、圧縮を示す指標データと、前記シンボルが登録されているエントリの位置を示すとともに前記シンボルのサイズより小さいサイズを有する位置情報とを出力する処理と、前記複数のエントリの使用状況に応じて前記位置情報のサイズを変更する処理と、を行う。
(2)解凍装置が、前記非圧縮を示す指標データ及び前記シンボルを受信した場合に、前記圧縮装置における前記シンボルの登録方法と同一の方法で前記第1テーブルと同一のデータ構造を有する第2テーブルに前記シンボルを登録するとともに前記シンボルを出力する処理と、前記圧縮を示す指標データと前記位置情報とを受信した場合に、前記位置情報によって示される前記第2テーブル中のエントリに登録された前記シンボルを読み出して出力する処理と、を行う。
【0012】
実施形態に係る圧縮装置は、第1テーブルの前記複数のエントリの使用状況を示す情報に基づいて位置情報を表現するビット数を算出し、ビット数で表現された位置情報を出力してもよい。この場合、解凍装置は、第2テーブルの複数のエントリの使用状況を示す情報に基づいて位置情報を表現するビット数を算出し、ビット数を用いて解凍装置に入力されるビット列から位置情報を抽出するようにしてもよい。
【0013】
実施形態に係る圧縮装置は、第1テーブルの複数のエントリの使用状況を示す情報を、第1テーブルの使用中のエントリ数k及び下記式1を用いて算出し、解凍装置が、第2テーブルの前記複数のエントリの使用状況を示す情報を、使用中の第2テーブルのエントリ数k及び下記式1を用いて算出する、ようにしてもよい。
式1:ceil(log
2k)
【0014】
或いは、実施形態に係る圧縮装置は、第1テーブルの複数のエントリの使用状況を示す情報を、所定数のシンボルに対する圧縮処理の結果における第1テーブルの使用率と、シンボルが登録されたエントリのヒット率と、下記式2とを用いて算出してもよい。この場合、解凍装置は、第2テーブルの複数のエントリの使用状況を示す情報を、所定数のシンボルに対する解凍処理の結果における第1テーブルの使用率と、シンボルが登録されたエントリのヒット率と、下記式2とを用いて算出するようにしてもよい。
式2:ceil(log
2((使用率/ヒット率)*エントリ数))
【0015】
例えば、シンボルのサイズがNビットであり、位置情報のオリジナルサイズがMビットである場合において、複数のエントリの使用状況を示す情報に対応する有効ビット数であって前記Nより小さい有効ビット数を示すMビットのデータマスクを生成し、前記データマスクに基づいて、オリジナルサイズの位置情報から無効なビットを除くことにより、前記有効ビット数により表現された位置情報を生成してもよい。
【0016】
上述した位置情報は、例えば、第1及び第2テーブルの複数のエントリに対して先頭のエントリから順に割り当てられたインデックス番号であってもよい。この場合、圧縮装置は、シンボルの第1テーブルの検索においてシンボルが登録されたエントリがヒットした場合に、シンボルを第1テーブルの先頭のエントリに移動させるともに、第1テーブルの先頭のエントリから前記ヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させてもよい。この場合、解凍装置は、シンボルの第2テーブルの検索においてシンボルが登録されたエントリがヒットした場合に、シンボルを第2テーブルの先頭のエントリに移動させるとともに、第2テーブルの先頭のエントリからヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させる。先頭のエントリは、リザーブされたエントリであってもよい。
【0017】
実施形態に係る圧縮装置は、シンボルの第1テーブルの検索においてシンボルが登録されたエントリがヒットした場合に、第1テーブルに関して、ヒットしたエントリに登録されていたシンボルをヒットしたエントリより先頭側にある所定の移動先エントリに登録するとともに、移動先エントリからヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させてもよい。この場合、解凍装置は、シンボルの第2テーブルの検索においてシンボルが登録されたエントリがヒットした場合に、第2テーブルに関して、ヒットしたエントリ中のシンボルをヒットしたエントリより先頭側にある所定の移動先エントリに登録するとともに、移動先エントリからヒットしたエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させる。
【0018】
上記した所定の移動先エントリは、第1テーブル及び前記第2テーブルにおける先頭のエントリであってもよい。また、所定の移動先エントリは、第1テーブル及び第2テーブルにおいて、ヒットしたエントリから先頭方向に所定数だけ遡った位置にあるエントリであってもよい。この場合に、圧縮装置及び解凍装置は、所定数遡った位置が先頭を超える場合には、先頭のエントリを移動先に設定してもよい。所定の移動先エントリは、リザーブされたエントリであってもよい。
【0019】
実施形態に係る圧縮装置は、第1テーブルの全てのエントリが使用中の状態における、シンボルの第1テーブルの検索において前記シンボルが登録されたエントリがヒットしない場合に、シンボルを第1テーブルの先頭のエントリに登録するとともに、第1テーブルの先頭のエントリから末尾のエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させて前記末尾に登録されていたエントリ中のシンボルを削除してもよい。この場合、解凍装置は、第2テーブルの全てのエントリが使用中の状態における、シンボルの第2テーブルの検索においてシンボルが登録されたエントリがヒットしない場合に、シンボルを第2テーブルの先頭のエントリに登録するとともに、第2テーブルの先頭のエントリから末尾のエントリの1つ前にあるエントリまでの間にあるエントリに登録されているシンボルを次のエントリに移動させて末尾に登録されていたエントリ中のシンボルを削除する。
【0020】
実施形態に係る圧縮装置は、シンボルの第1テーブルの検索においてシンボルが登録されたエントリがヒットしない場合に、第1テーブルにおける第1エントリが空き状態であれば、第1テーブルにおける第1エントリにシンボルを登録し、第1テーブルの全てのエントリが使用中であれば、第1テーブルにおける第1エントリに前記シンボルを上書き登録してもよい。この場合、解凍装置は、シンボルの第2テーブルの検索においてシンボルが登録されたエントリがヒットしない場合に、第2テーブルにける第1エントリが空き状態であれば、第2テーブルにおける第1エントリにシンボルを登録し、第2テーブルの全
てのエントリが使用中であれば、第2テーブルにおける第1エントリに前記シンボルを上書き登録する。例えば、第1テーブルにおける第1エントリは第1テーブルの末尾のエントリであり、第2テーブルにおける第1エントリは第2テーブルの末尾のエントリである。但し、他のエントリを第1エントリにしてもよい。
【0021】
実施形態に係る圧縮装置は、第1テーブルに関して、シンボルが登録されたエントリのヒット数、又はシンボルが登録されたエントリのミスヒット数が所定値に達した場合に、シンボルを登録しているエントリのうちインデックス番号が最大のエントリ中のシンボルを削除してもよい。この場合、解凍装置は、第2テーブルに関して、シンボルが登録されたエントリのヒット数、又はシンボルが登録されたエントリのミスヒット数が所定値に達した場合に、シンボルを登録しているエントリのうちインデックス番号が最大のエントリ中のシンボルを削除する。
【0022】
実施形態に係る圧縮装置は、第1テーブルに関して、インデックス番号が最大のエントリが先頭から所定範囲にあるエントリに該当する場合には、インデックス番号が最大のエントリ中のシンボルを削除しなくてもよい。この場合、解凍装置は、第2テーブルに関して、インデックス番号が最大のエントリが先頭から所定範囲にあるエントリに該当する場合には、インデックス番号が最大のエントリ中のシンボルを削除しない。
【0023】
また、実施形態において、第1テーブル及び第2テーブルにおける同一の所定エントリに命令を示す命令シンボルが登録されている場合に、圧縮装置は、圧縮を示す指標データと前記所定エントリを示す位置情報とを出力するとともに、前記命令シンボルが示す命令を実行してもよい。この場合、解凍装置は、圧縮装置から受信される、圧縮を示す指標データと所定エントリを示す位置情報とに基づいて、第2テーブルにおける所定エントリに登録された命令シンボルを読み出し、命令シンボルが示す命令を実行する。
【0024】
実施形態において、第1テーブル及び第2テーブルにおける同一の所定エントリに解凍装置に実行させる命令を示す命令シンボルが登録されている場合に、圧縮装置は、非圧縮を示す指標データと前記命令シンボルとを出力してもよい。この場合、解凍装置は、非圧縮を示す指標データに基づく命令シンボルの登録処理において第2テーブルに既に命令シンボルが登録されていることに対する例外処理として命令シンボルが示す命令を実行する。
【0025】
実施形態に係る圧縮装置は、前記解凍装置に命令を実行させる場合に、圧縮を示す指標データと前記第1テーブルの空き状態のエントリを示す位置情報とを出力してもよい。この場合、解凍装置が、圧縮装置から受信された、圧縮を示す指標データ及び位置情報に基づくシンボルの読出処理において位置情報が示す第2テーブルのエントリにシンボルが登録されていないことによって生じる例外の発生時に、命令を示す情報を取得して実行するようにしてもよい。
【0026】
実施形態に係る圧縮装置は、圧縮を示す指標データ及び第1テーブルの空き状態のエントリを示す位置情報の出力に続いて、非圧縮を示す指標データと命令を示す命令シンボルとを出力してもよい。この場合、解凍装置は、例外の発生時に、命令シンボルが示す命令を実行する。
【0027】
また、実施形態に係る圧縮装置は、解凍装置に命令を実行させる場合に、非圧縮を示す指標データと第1テーブルにおいて登録中のシンボルとを出力してもよい。この場合、解凍装置は、圧縮装置から受信された、非圧縮を示す指標データに基づくシンボルの登録処理において第2テーブルに同一のシンボルが登録されていることによって生じる例外の発生時に、命令を示す情報を取得して実行する。
【0028】
また、実施形態に係る圧縮装置は、非圧縮を示す指標データ及び第1テーブルにおいて登録中のシンボルの出力に続いて、非圧縮を示す指標データと前記命令を示す命令シンボルとを出力してもよい。この場合、解凍装置は、例外の発生時に、命令シンボルが示す命令を実行する。
【0029】
シンボルは、圧縮装置の前段に位置する他の圧縮装置によって圧縮処理が施されたシンボル列をなすシンボルであり、解凍装置が出力するシンボルが、シンボル列の一部として、解凍装置の後段にある他の解凍装置に入力される構成を採用できる。このように、圧縮装置や解凍装置をカスケード接続できる。
【0030】
第1テーブル及び第2テーブルは、テーブルの分割によって得られた複数のバンクの一つであり、第1テーブル及び第2テーブルの選択は、同一のハッシュ関数を用いて行う構成を採用してもよい。
【0031】
また、圧縮装置と解凍装置とは、以下のような暗号化に係るやりとりを行ってもよい。すなわち、圧縮装置は、シンボルに対する圧縮処理のために設定する複数のパラメータから選択される2以上のパラメータの組み合わせを含む共通鍵を解凍装置に送信する。その後、圧縮装置は、非圧縮を示す指標データとシンボルとの組み合わせ、及び圧縮を示す指標データと位置情報との組み合わせに対する、共通鍵を用いた暗号化を行い、暗号化の結果を解凍装置に送信する。解凍装置は、圧縮装置から送信された共通鍵中の2以上のパラメータを、非圧縮を示す指標データとシンボルとの組み合わせ、又は圧縮を示す指標データと位置情報との組み合わせを用いてシンボルを出力する解凍処理のために設定し、暗号化の結果の復号を前記共通鍵の使用によって行うとともに、復号した結果に対する解凍処理を行う。
【0032】
複数のパラメータは、後述するが、シンボルのビット数N、シンボルに対する圧縮処理の結果(シンボル又は位置情報)のビット数M、圧縮装置から出力するビット数の単位を示すK、エントロピーカリングに用いるヒット回数又はミスヒット回数、例外シンボルの設定、スクランブル演算の種類、スクランブルキー、近接エントリ交換オフセットk、バンク構成(バンク数)などである。
【0033】
また、圧縮装置からの暗号化の結果送信の前に、圧縮装置は、第1テーブルの状態を初期化する処理を行うとともに、第2テーブルの状態を初期化する情報を解凍装置に送信し、解凍装置が上記初期化する情報に基づいて第2テーブルの状態を初期化してもよい。
【0034】
〔参考例〕
本発明の実施形態を説明する前に、参考例に係る圧縮器及び解凍器(圧縮及び解凍方法について説明する。
図1は、参考例に係る圧縮器及び解凍器に実装される変換テーブルを模式的に示す。変換テーブルは、インデックスを有する複数のエントリからなる。エントリ数として、圧縮器及び解凍器について同じ数の適宜の数が決定される。エントリ数の最大値は、インデックスの最大値に1を加えた数となる。
図1に示す例では、インデックス値が0〜3であり、エントリ数は4である。
【0035】
エントリには、圧縮前のシンボルと、カウント値とが登録される。変換テーブルには、登録ポインタと削除ポインタとが設定される。登録ポインタ及び削除ポインタの初期位置はインデックス“0”である。登録ポインタは、未登録の圧縮前エントリを登録するエントリ位置を示す。登録ポインタが指すエントリにシンボルが登録されると、登録ポインタは、次の未登録のエントリを指すため、インデックス値が大きくなる方向に移動する。但し、登録ポインタの現在位置が末尾のエントリ(参考例ではインデックス“3”のエント
リ)である場合には、登録ポインタはインデックス“0”に戻った後、未登録のエントリ位置に設定される。
【0036】
削除ポインタは、カウント値を減じるエントリを示す。カウント値は、エントリのエージング処理に使用される値である。カウント値が0になった場合に、そのエントリの登録内容(圧縮前シンボル)は削除され、エントリは未登録状態となる。エントリに圧縮前シンボルが登録される場合に、カウンタ値の初期値(
図1の例では2)が設定される。削除ポインタが指すエントリのカウント値は一つ減算される。このとき、削除ポインタは、インデックス値が大きくなる方向に一つ移動する。但し、削除ポインタの現在位置が末尾のエントリ(インデックス“3”のエントリ)である場合には、インデックス0に戻る。エントリがヒットした場合、そのエントリのインデックス値が一つ加算される。削除ポインタはラウンドロビンで移動してよい。
【0037】
<参考例の圧縮器の動作例>
次に、圧縮器の動作例(圧縮方法)を示す。
図2A〜C、
図3A〜C、
図4A及B、
図5A及びBは、参考例の圧縮方法の説明図である。
図2Aには、動作例に係る変換テーブルが示されている。この変換テーブルは、
図1を用いて説明した構造を有する。変換テーブルの全エントリ数は4であり、カウント値の初期値は2である。入力は、一例として、8ビット(1バイト)のデータ(シンボル)が連なるデータ列である。初期状態の変換テーブルでは、全てのエントリが未登録状態である。登録ポインタ及び削除ポインタは、変換テーブルが初期状態である場合、インデックス“0”のエントリを指す。以下の説明では、エントリをインデックス値で特定することがある(例えば、インデックス値“0”のエントリは、単にインデックス“0”と称する)。
【0038】
変換テーブルが初期状態である場合において、圧縮器に入力された圧縮前シンボル(“オリジナルシンボル”とも称する)列“ABAC0ADBCFGDEDA1AB・・・”が入力された場合を仮定する。圧縮器は、シンボル列のうち2シンボル毎に圧縮処理を行う。
図2Aは、シンボル列のうち、最初のシンボル列“AB”の処理を示す。この場合、変換テーブルからシンボル列“AB”が検索される。しかし、変換テーブルにシンボル列“AB”は登録されていない(“AB”がヒットしない)。この場合、オリジナルシンボル列“AB”とカウント値の初期値“2”とが、登録ポインタが指すエントリ(インデックス“0”)に登録(記憶)される。このとき、圧縮器の出力(圧縮処理後のシンボル)として、オリジナルシンボル列“AB”がそのまま出力される。また、新たにシンボルが登録されたインデックス“0”に削除ポインタが設定され、登録ポインタが次の未登録エントリであるインデックス“1”に進む。
【0039】
図2Bは、シンボル列“AB”に続くオリジナルシンボル列“AC”の処理を示す。シンボル“AC”は変換テーブルに登録されていない。このため、オリジナルシンボル列“AC”とカウント値“2”とを、登録ポインタが指すエントリ(インデックス“1”)に登録する。また、圧縮器からオリジナルシンボル列“AC”が出力される。また、登録ポインタが次の未登録エントリ(インデックス“2”)に進む。また、インデックス“0”のカウント値が一つ減算され(2→1)、削除ポインタが次のインデックス“1”に進む。
【0040】
図2Cは、シンボル列“AC”に続くオリジナルシンボル列“AB”の処理を示す。シンボル列“AB”は登録済であるため、変換テーブルからシンボル列“AB”が検索される(ヒットする)。この場合、シンボル列“AB”が登録されたエントリのインデックス値“0”が圧縮後のシンボルとして出力される。これにより、2バイトのオリジナルシンボル列が1バイトの圧縮シンボルに圧縮される。このとき、インデックス“0”のカウント値のインクリメントが行われる(1→2)。また、削除ポインタが指すインデックス“
1”のカウント値のデクリメントが行われ(2→1)、削除ポインタがインデックス“0”に進む。また、登録ポインタが次の未登録エントリであるインデックス“2”に進む。
【0041】
図3Aは、シンボル列“AB”に続くオリジナルシンボル列“AD”の処理を示す。シンボル列“AD”は変換テーブルに登録されていない。このため、オリジナルシンボル列“AD”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“2”)に登録される。登録ポインタは次のインデックス“3”に進む。また、削除ポインタが指すインデックス“0”のカウント値が一つ減算され(2→1)、削除ポインタが次のインデックス“1”に進む。
【0042】
図3Bは、シンボル列“AD”に続くオリジナルシンボル列“BC”の処理を示す。変換テーブルにシンボル列“BC”は登録されていない。このため、オリジナルシンボル列“BC”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“3”)に登録される。圧縮器からはオリジナルシンボル列“BC”が出力される。また、削除ポインタが指すインデックス“1”のカウント値のデクリメントが行われ、削除ポインタが次のインデックス“2”に進む。インデックス“1”では、カウント値が0となることによって、シンボル“AC”が削除され、インデックス“1”は未登録の状態となり、登録ポインタが設定される。
【0043】
図3Cは、シンボル列“BC”に続くオリジナルシンボル列“FG”の処理を示す。変換テーブルにシンボル列“FG”は登録されていない。このため、オリジナルシンボル列“FG”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“1”)に登録される。圧縮器からはオリジナルシンボル列“FG”が出力される。この時点で、変換テーブルの全エントリが登録済となっている(空き状態のエントリがない)。この場合、登録ポインタは、どのエントリを指してもよい。但し、説明のため、
図3Cに示す例では、インデックス値が大きくなる方向に一つ進むというルールに従って、次のインデックス“2”を指す。また、削除ポインタが指すインデックス“2”のカウント値のデクリメントが行われ、削除ポインタが次のインデックス“3”に進む。
【0044】
図4Aは、シンボル列“FG”に続くオリジナルシンボル列“DE”の処理を示す。変換テーブルにシンボル“DE”は登録されていない。しかし、変換テーブルがフル(空きエントリなし)であるため、シンボル列“DE”を登録できない。この場合、登録処理は行われず、入力シンボル列“DE”がそのまま出力される。これによりスループットが維持される。また、削除ポインタが指すエントリ(インデックス“3”)のカウント値のデクリメントが行われ、次の位置(インデックス“0”)に進む。この場合も、登録ポインタの位置はどこでもよい。
図4Aに示す例では、一例としてインデックス“3”を指している。
【0045】
図4Bは、シンボル“DE”に続くオリジナルシンボル列“DA”の処理を示す。変換テーブルにシンボル列“DA”は登録されていない。しかし、変換テーブルに空きエントリがない。このため、シンボル列“DA”の登録を行うことなく、シンボル列“DA”を出力してスループットを維持する。このとき、削除ポインタが指すインデックス“0”のカウント値のデクリメントが行われ(1→0)、削除ポインタがインデックス“1”に進む。デクリメントによってインデックス“0”のカウント値が0となり、インデックス“0”は未登録状態となるとともに、登録ポインタが設定される。
【0046】
図5Aは、シンボル“DA”に続くオリジナルシンボル列“FG”の処理を示す。変換テーブルにシンボル“FG”は登録されている。このため、対応するエントリのインデックス値“1”が出力される。このとき、インデックス“1”のインクリメントとデクリメントとが行われ、カウント値は“2”のままとなる。このとき、削除ポインタがインデッ
クス“2”に進む。登録ポインタは移動しない。
【0047】
図5Bは、シンボル列“FG”に続くオリジナルシンボル列“AB”の処理を示す。変換テーブルにシンボル“AB”は登録されていない。このため、シンボル列“AB”が出力される。また、シンボル列“AB”及びカウント値“2”がインデックス“0”に登録される。また、削除ポインタが指すインデックス“2”のカウント値が一つ減算され(1→0)、削除ポインタがインデックス“3”に進む。これによって、インデックス“2”のカウント値が0になるため、当該エントリが未登録の状態となり、登録ポインタが設定される。このようにして、圧縮器からは、圧縮後のシンボル列として、“ABAC0ADBCFGDEDA0AB・・・が出力される。
【0048】
<参考例の解凍器の動作例>
次に、解凍器の動作例(解凍方法)について説明する。解凍器には、圧縮器から出力されたデータ列(シンボル列)“ABAC0ADBCFGDEDA0AB・・・”が入力される。
図6A〜C、
図7A〜C、
図8A及びB、
図9A及びBは、参考例の解凍方法の説明図である。
図6Aは、解凍器が有する変換テーブルを示す。変換テーブルの構造は圧縮器が有する変換テーブルの構造と同じである。また、
図6Aは、解凍器の変換テーブルが初期状態である場合において、解凍器に入力されたシンボル列“AB”に係る処理を示す。
【0049】
最初に、インデックス“A”が変換テーブルから検索される。しかし、インデックス“A”はヒットしないため、インデックス“A”は、範囲外、または、登録されていないことがわかる。この場合、次の入力シンボルを読み進めてそのまま出力する。ここでは、シンボル“A”とこれに続くシンボル“B”からなるシンボル列“AB”が解凍の結果として出力される。また、インデックス“0”にシンボル列“AB”及びカウント値“2”が登録される。また、インデックス“0”に削除ポインタが設定され、登録ポインタがインデックス“1”に進む。
【0050】
図6Bは、後続するシンボル列“AC”に係る処理を示す。この場合も、シンボル“A”に合致する変換テーブルのインデックスを検索する。しかし、対応するインデックスは見つからない。このため、次のシンボル“C”を含めたシンボル列“AC”がそのまま出力される。また、シンボル列“AC”及びカウント値“2”が、登録ポインタが指すエントリ(インデックス“1”)に登録され、登録ポインタが次のインデックス“2”に進む。また、インデックス“0”のカウント値が一つ減算された後、削除ポインタがインデックス“1”に進む。
【0051】
図6Cは、後続するシンボル“0”に係る処理を示す。この場合、変換テーブルから対応するインデックス“0”が検索される。この場合、インデックス“0”のエントリに登録されているシンボル列“AB”が解凍器から出力される。このとき、インデックス“0”のカウント値に1が加算され(1→2)、削除ポインタが設定される。また、登録ポインタの位置は、インデックス“2”に止まる。
【0052】
図7Aは、後続するシンボル列“AD”に係る処理を示す。このとき、シンボル“A”に合致する変換テーブルのインデックスはない。このため、シンボル“A”とこれに続くシンボル“D”とからなるシンボル列“AD”が解凍器から出力される。また、シンボル列“AD”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“2”)に登録される。登録ポインタは次のインデックス“3”に進む。また、削除ポインタが指すインデックス“0”のカウント値が一つ減算され、削除ポインタが次のインデックス“1”に進む。
【0053】
図7Bは、後続するシンボル列“BC”に係る処理を示す。この場合、シンボル“B”
に対応する変換テーブルのインデックスはない。このため、シンボル“B”と次のシンボル“C”とからシンボル列“BC”が解凍器から出力される。また、シンボル列“BC”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“3”)に登録される。また、削除ポインタが指すインデックス“1”のカウント値が一つ減算され(1→0)、削除ポインタが次のインデックス“2”に進む。インデックス“1”のカウント値が0となることによって、インデックス“1”のエントリが未登録状態となる。登録ポインタは、インデックス“1”に設定される。
【0054】
図7Cは、後続するシンボル列“FG”に係る処理を示す。この場合、シンボル“F”と合致するインデックスはない。このため、シンボル“F”と次のシンボル“G”とからなるシンボル列“FG”が解凍器から出力される。また、シンボル列“FG”とカウント値“2”とが、登録ポインタが指すエントリ(インデックス“1”)に登録される。また、削除ポインタが指すインデックス“2”のカウント値が一つ減算され、削除ポインタが次のインデックス“3”に進む。登録ポインタの位置は変換テーブルがフルであるため、どこでもよい。但し、本動作例では、登録か未登録かに拘わらず、登録ポインタが一つ進む例を示す。
図7Cは、インデックス“2”へ進んだ場合を例示する。
【0055】
図8Aは、後続するシンボル列“DE”に係る処理を示す。この場合、シンボル“D”に対応するインデックスはない。このため、シンボル“D”と次のシンボル“E”とからなるシンボル列“DE”が解凍器から出力される。但し、変換テーブルはフルであるため、シンボル列“DE”の登録は行われない。削除ポインタが指すインデックス“3”のカウント値が一つ減算され、削除ポインタがインデックス“0”に戻る。登録ポインタの位置はどこでもよい。
図8Aでは、登録ポインタを現在位置から1つ進めるというルールに従って、登録ポインタがインデックス“3”へ進んだ例を示す。
【0056】
図8Bは、後続するシンボル列“DA”に係る処理を示す。この場合、シンボル“D”に合致するインデックスはない。このため、シンボル“D”及びシンボル“A”からなるシンボル列“DA”が出力される。しかし、変換テーブルに空きエントリがないため、シンボル“DA”の登録は行われない。このとき、削除ポインタが指すインデックス“0”のカウント値が一つ減算され、削除ポインタがインデックス“1”に進む。インデックス“0”のカウント値は0となり、インデックス“0”は未登録状態となり、登録ポインタが設定される。
【0057】
図9Aは、後続するシンボル“1”に係る処理を示す。この場合、変換テーブルに合致するインデックス“1”がある。このため、インデックス“1”のエントリに登録されたシンボル列“FG”が解凍器から出力される。このとき、削除ポインタが指すインデックス“1”のカウント値のデクリメントと、インデックス“1”に対するカウント値のインクリメントとが行われ、インデックス“1”カウント値は“2”となる。削除カウンタは、インデックス“2”に進み、登録カウンタはインデックス“0”を指す。
【0058】
図9Bに、後続するシンボル列“AB”に係る処理を示す。この場合、変換テーブルにシンボル“A”は登録されていない。このため、シンボル“A”と次のシンボル“B”とからなるシンボル列“AB”が解凍器から出力される。また、シンボル列“AB”とカウント値“2”とが空きエントリであるインデクス“0”に登録される。このとき、削除ポインタが指すインデックス“2”のカウント値が一つ減算され、削除ポインタがインデックス“3”に進む。インデックス“2”のエントリのカウント値が0になるため、インデックス“2”が未登録状態となり、登録ポインタが設定される。
【0059】
以上説明した参考例では、圧縮器における変換テーブルの登録内容を示さずとも、解凍器にて圧縮器と同じ登録内容を有する変換テーブルが生成され、その変換テーブルを用い
た解凍処理を行うことができる。
【0060】
なお、参考例の動作例では、圧縮後のシンボル(例えば“0”)を圧縮前のシンボルに使わないことを前提としている。しかし、現実的には、8ビットデータに関して全ての組合せ(256種類)が使用されるのが通常である。このため、オリジナルのシンボル“0”と圧縮したことを示す“0”とを区別することができない。そこで、圧縮後のシンボル又はシンボル列に対して、“Cmarkビット”と呼ぶ圧縮(変換)/非圧縮(非変換)を示
すビットを付加する。Cmarkビットの値“0”は非圧縮を示し、値“1”は圧縮を示す。
但し、逆でもよい。
【0061】
<参考例に係る課題>
<<課題1>>
参考例に係る圧縮及び解凍方法では、圧縮後のシンボル長が固定長であった。例示したように、2シンボルの入力を1シンボルに変換する圧縮では、圧縮率は最大でも50%であった。このため、さらなる圧縮率の向上が望まれていた。
【0062】
ここで、シャノンの平均情報量(シャノン情報量、エントロピーとも呼ばれる)を考える。平均情報量は、「データの複雑さ」を表す指標であり、以下の式(1)で表現される。式(1)において、iはデータを示し、piはデータiの出現率を示す。
【0064】
例えば、データシンボル列(1シンボル8ビット)が“ABACABADBC”である場合、シンボル“A”、“B”、“C”、及び“D”のそれぞれの出現確率は以下となる。
Aの出現確率:4/10=0.4
Bの出現確率:3/10=0.3
Cの出現確率:2/10=0.2
Dの出現確率:1/10=0.1
【0065】
上記データシンボル列についての平均情報量Hは、式(1)を用いて計算すると、H=1.84643934465となる。換言すれば、このデータシンボル列は、2の1.84643934465乗の組み合わせからなり、1.84643934465ビットで表現することができる。このデータシンボル列の各要素(シンボル)は、Ceil(1.84643934465)=2であることから、2ビットで表現することができる。
【0066】
例えば、A=00、B=01、C=10、D=11と定義した場合、上記データシンボル列は“00010010000100110110”となる。8ビットのデータを2ビットに圧縮できるため、データ量は1/4になる。
【0067】
<<課題2>>
上述した参考例に係る圧縮・解凍方法では、圧縮データの終端が不明であった。もし、特殊なコードを埋め込むことができれば、解凍器に圧縮データ列の終端を知らせることができる。
【0068】
本願の発明者らは、上記した平均情報量(エントロピー)の考えを用いて、変換テーブルの使用率に従って、圧縮後のシンボル長を変更することで、圧縮率の向上を図ることができないかと考えた。鋭意努力の結果、発明者らは、以下の実施形態にて表される圧縮及
び解凍方法を発明するに至った。
【0069】
〔実施形態〕
以下、図面を参照して、データの圧縮及び解凍方法、データ圧縮方法、データ圧縮装置。データ圧縮プログラム、データ解凍方法、データ解凍装置、データ解凍プログラムの実施形態について説明する。実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【0070】
〔実施形態1〕
<圧縮装置の構成>
図10は、実施形態1における圧縮装置の構成例を示す。
図10において、圧縮装置10は、圧縮器11と、シリアライザ12とを備える。圧縮器11には、Nビット(Nは正の整数)のオリジナルのシンボルデータが入力される。圧縮器11は、Mビット(Mは正の整数)の圧縮シンボル)と、Cmarkビットと、Mビットのデータマスクとを出力する。
以下の実施形態の説明では、N=Mに設定されている場合を中心に説明する。但し、N<Mの場合やN>Mの場合もあり得る。Mを“log
2(エントリ数)”とすると、エントリ数が2のN乗より大きいとN<Mとなる。逆の場合はN>Mとなる。
【0071】
圧縮シンボルは、圧縮器11から出力される、圧縮処理後のシンボルデータを示す。Cmarkビットは、圧縮器11から出力されたシンボルデータが、圧縮器11によって圧縮さ
れているか否かを示すビットである。一例として、ビット値“0”の場合に非圧縮を示し、ビット値“1”の場合に圧縮を示す。ビット値と意味は逆でもよい。データマスクは、圧縮シンボルをなすビット列のうち、有効なビットの桁又は有効なビット数を表現するために使用される。例えば、データマスクは、有効なビット桁を“1”で示す。また、データマスクは、有効なビット数を示すビット列でもよい。
【0072】
シリアライザ12は、圧縮シンボルと、Cmarkビットと、データマスクとを受け取り、Cmarkビットと、データマスクが示す圧縮シンボルの中の有効ビットとを直列に連ねてなるデータを出力する。出力されたデータは解凍装置へ向けて送信される伝送データとなる。圧縮器11からの出力がN>Mの場合でも、データマスクによって示される有効ビット数はNまでの値とされる。よって、圧縮装置10の出力は、Nビットのオリジナルシンボルについて最長N+1ビットとなる。伝送データは、伝送路(ネットワーク)を介して解凍装置へ送られる。
【0073】
<<シリアライザ>>
図11は、シリアライザ12における処理例を示すフローチャートである。S1において、シリアライザ12は、データマスクに基づいて、圧縮シンボルから不要な(無効の)ビットを除去する。すなわち、シリアライザ12は、データマスクにおいて“1”で示された桁に対応する部分を圧縮シンボルから切り出す。
【0074】
S2では、シリアライザ12は、切り出した圧縮シンボルの部分の最上位に、Cmarkビ
ットを付加する。S3では、シリアライザ12は、Cmarkビット及び切り出し後の圧縮シ
ンボルについて、適宜のルールに従って、Kビット分ずつ、ビットの出力を行う。
【0075】
図12は、圧縮シンボル、Cmarkビット、及びデータマスクと、シリアライザの出力と
の関係を例示する表である。例えば、ビッグエンディアン(big endian)である場合において、圧縮シンボルデータ、Cmarkビット、データマスク列の夫々が、“0001000”(M=7)、“1”、“0011111”(M=7)である場合を仮定する。この場合、データマスク
は最下位ビット(LSB)から5ビット目までを有効ビットとして示す。このため、シリアライザ12において、最上位ビット(MSB)から2ビット目までが圧縮シンボルから
除去され、Cmarkビット“1”と有効ビット列“01000”とのビット列(シリアルデータ)“101000”が出力される。
【0076】
次の圧縮器11からの出力が圧縮シンボルデータ“1110100”、Cmarkビット“0”、デ
ータマスク“1111111”である場合、シリアライザ12の出力は、Cmarkビット“1”及び
有効ビット“1110100”のシリアルデータ“01110100”となる。
図12には、他の圧縮シ
ンボルとCmarkビットとの組み合わせに係るシリアライザ12の出力も例示されている。
【0077】
<<圧縮器>>
図13は、圧縮器11の構成例を示す。圧縮器11は、シンボル変換部111、エントロピー計算部112、及びマスク生成部113を含む。シンボル変換部111は、変換テーブルを用いたシンボル変換処理を行う。
【0078】
図14は、圧縮装置及び解凍装置が備える変換テーブルのデータ構造例を示す。変換テーブルは、複数のエントリからなる。複数のエントリには、先頭のエントリから順に、値が大きくなるインデックス番号(インデックス値)が割り当てられている。圧縮後のシンボルの最長のビット数をX(Xは正の整数)とすると、エントリ数は2
Xとなる。
図14に示す変換テーブルの例は、X=2の場合を示し、エントリ数は4である。初期状態の変換テーブルでは、例えば、全エントリが空である。但し、全エントリにシンボルが設定されていてもよい。圧縮装置が備える変換テーブルは、第1テーブルの一例であり、解凍装置が備える変換テーブルの一例は、第2テーブルの一例である。インデックス番号は、エントリの位置を示す位置情報の一例である。
【0079】
エントロピー計算部112は、変換テーブルの複数のエントリの使用状況を示す情報としてのエントロピーを、所定の計算方法により計算する。マスク生成部113は、エントロピー計算部112のエントロピーの計算結果を受け取り、これに対応するデータマスクを生成する。本実施形態では、1例として、N=M=8ビットの場合について説明する。
【0080】
図15は、圧縮器11の処理例を示すフローチャートである。S11において、シンボル変換部111に、オリジナルシンボル(Nビット)が入力される。すると、シンボル変換部111は、変換テーブルからオリジナルシンボルが登録されたエントリを検索する(S12)。オリジナルシンボルが登録されている場合(エントリがヒットした場合)には、処理がS13に進み、オリジナルシンボルが登録されていない場合(エントリがヒットしない場合)場合には、処理がS14に進む。
【0081】
S13に処理が進んだ場合には、シンボル変換部111は、オリジナルシンボルが登録されていたエントリのインデックス値を圧縮シンボルとして出力する。その後、処理がS15に進む。インデックス値は、その値に応じて表現に要するビット数が変わる。例えば、ヒットしたエントリのインデックス値が“0”や“1”の場合、インデックス値は1ビットで表現できる。本実施形態では、変換テーブルの使用状況に基づいてインデックス値を表現する有効ビット数が決定され、有効ビット数はデータマスクによって示される。シリアライザ12において、圧縮器11から出力されたインデックス値(Mビット)は、データマスクによって示される有効ビット数となる。このとき、インデックスがNより小さいビット数に変換されることによって、データが圧縮される。
【0082】
S14に処理が進んだ場合には、オリジナルシンボルそのものを圧縮シンボルとして出力する。S15では、圧縮シンボルに対応するCmarkビットをシンボル変換部111は出
力する。例えば、オリジナルシンボルが変換テーブルからヒットしなかった場合(変換テーブルに登録されていなかった場合)には、非圧縮を示すCmarkビット“0”をシンボル
変換部111は出力する。これに対し、オリジナルシンボルがヒットした場合(変換テー
ブルに登録されている場合)には、圧縮を示すCmarkビット“1”をシンボル変換部11
1は出力する。
【0083】
S16では、シンボル変換部111が変換テーブルの更新処理を行う。変換テーブルの更新処理については後述する。S17では、エントロピー計算部112がエントロピー計算を行う。S16とS17の順序は逆でもよい。S18では、マスク生成部113がエントロピーの計算結果に応じたデータマスクを出力する。但し、Cmarkビットが“0”の場
合、エントロピー計算値とは無関係にオール“1”のデータマスクが出力されるようにしてもよく、データマスクが出力されない(Cmarkビットが“1”のときに出力される)よ
うにしても良い。
【0084】
<変換テーブルの第1の操作方法>
図16A〜Cは、変換テーブルの第1の操作方法を説明する図である。
図16Aは、オリジナルシンボルがヒットした場合を示す。
図16Aに示すような変換テーブルへの登録状況において、オリジナルシンボル“B”が入力された場合を仮定する。この場合、シンボル“B”は変換テーブルに既登録であり、シンボル“B”がヒットする。このとき、シンボル変換部111は、ヒットしたシンボル“B”を先頭のエントリに移動する。また、シンボル“B”が登録されたエントリのインデックス値“1”と、圧縮を示すCmarkビッ
ト“1”とをシンボル変換部111は出力する。
【0085】
図16Bは、空きエントリがあってオリジナルシンボルがミスヒットする場合を示す。
図16Bに示すように、インデックス“3”のエントリが空きエントリである場合に、オリジナルシンボル“B”が入力された場合を仮定する。 この場合、シンボル“B”は変
換テーブルに未登録であり、シンボル“B”はミスヒットとなる。このとき、シンボル変換部111は、変換テーブル全体をプッシュし、既登録の各シンボル(“A”、“C”、“D”)をインデックス値が1つ加算された位置へ移動させる。これによって先頭のエントリ(インデックス“0”)が空き状態となる。シンボル変換部111は、先頭のエントリにシンボル“B”を登録する。また、オリジナルシンボル“B”と、非圧縮を示すCmarkビット“0”とをシンボル変換部111は出力する。
【0086】
図16Cは、空きエントリがなくオリジナルシンボルがミスヒットする場合を示す。
図16Cに示すように、変換テーブルの全てのエントリにシンボルが登録されている(フルである)場合に、オリジナルシンボル“B”が入力された場合を仮定する。 この場合、
シンボル“B”は変換テーブルに未登録であり、シンボル“B”はミスヒットとなる。このとき、シンボル変換部111は、変換テーブル全体をプッシュして既登録の各シンボル(“A”、“C”、“D”、“E”)をインデックス値が1つ加算された位置へ移動させる。但し、末尾のエントリ(インデックス“3”)に登録されていたシンボル“E”は、変換テーブルから追い出されて削除される。シンボル変換部111は、空き状態となった先頭のエントリにシンボル“B”を登録する。また、オリジナルシンボル“B”と、非圧縮を示すCmarkビット“0”とをシンボル変換部111は出力する。
【0087】
<変換テーブルの第2の操作方法>
図17A〜Cは、変換テーブルの第2の操作方法を説明する図である。
図17Aは、オリジナルシンボルがヒットした場合を示す。
図17Aに示すような変換テーブルへの登録状況において、オリジナルシンボル“B”が入力された場合を仮定する。この場合、シンボル変換部111は、シンボル“B”がヒットしたため、シンボル“B”を先頭のエントリに移動する。また、インデックス値“1”と、Cmarkビット“1”とをシンボル変換部
111は出力する。これは、第1の操作方法と同じである。
【0088】
図17Bは、空きエントリがあってオリジナルシンボルがミスヒットした場合を示す。
図17Bに示すように、インデックス“3”が空きエントリである場合に、オリジナルシンボル“B”が入力された場合を仮定する。 この場合、シンボル“B”は変換テーブル
に未登録であり、シンボル“B”はミスヒットとなる。このとき、シンボル変換部111は、空きエントリ中の予め定めた位置(例えば末尾の空きエントリ)に該当するインデックス“3”にシンボル“B”を登録する。また、オリジナルシンボル“B”と、Cmarkビ
ット“0”とをシンボル変換部111は出力する。
【0089】
図17Cは、空きエントリがなくオリジナルシンボルがミスヒットする場合を示す。
図17Cに示すように、変換テーブルがフルである場合に、オリジナルシンボル“B”が入力された場合を仮定する。 この場合、シンボル“B”はミスヒットとなる。シンボル変
換部111は、予め定めたエントリ(例えば末尾のインデクス“3”)にシンボル“B”を上書き登録する(シンボル“E”は結果として削除)。シンボル変換部111は、シンボル“B”と、Cmarkビット“0”とを出力する。
【0090】
但し、
図17B及び
図17Cに示す例は一例であって、ミスヒットしたシンボルの登録位置について、圧縮器と解凍器との間で等価なルールが適用され、圧縮器の変換テーブルの登録状況の変遷を解凍器の変換テーブルで再現できるようなっていればよい。
【0091】
シンボル変換部111は、第1の操作方法と第2の操作方法とのいずれを実行してもよい。なお、第1の操作方法は、プッシュ操作を行うハードウェア(回路)が複雑になるため、ソフトウェア(プロセッサ及びメモリ)を用いた実装が好ましい。これに対し、第2の操作方法は、第1の操作方法に比べて、ハードウェアによる実装が容易である。
【0092】
<エントロピーの計算方法(第1の計算方法)>
圧縮器11は、オリジナルシンボルが変換テーブルから検出された場合(オリジナルシンボルがヒットした場合)、Cmarkビット“1”を出力するとともに、エントロピー計算
の結果に従ったデータマスクを出力する。
【0093】
第1の計算方法では、オリジナルシンボルがNビットの場合、変換テーブルにおける使用中のエントリ数kの二進対数の天井関数(すなわちceil(log
2k))の値だけビットを“1”に設定したNビットのマスクを生成する。すなわち、エントロピー値Eを以下の式1にてにて求める。
式1:E= ceil(log
2k)
【0094】
例えば、変換テーブル中の使用中のエントリ数が1である場合、ceil(log
21)=0
となる。また、使用中のエントリ数が2の場合、ceil(log
22)=1となる。また、使
用中のエントリ数が3の場合、ceil(log
23)=2となる。また、使用中のエントリ数
が5の場合ceil(log
25)=3となる。
【0095】
図18A〜Cは、エントロピーの第1の計算方法の例示を示す。
図18A〜Cに示す例では、変換テーブルは、インデックス数が8(インデックス値が“0”〜“7”)のエントリを有する。
【0096】
図18Aに示す例では、インデックス“0”のみにシンボルが登録されている場合、使用中のエントリ数はk=1である。このため、エントロピー計算部112によって算出されるエントロピーの計算結果はceil(log
21)=0となる。この場合、Nビットのデー
タマスクとして、“00000000”をマスク生成部113が生成して出力する。k=1の場合にCmarkビットが“1”であれば、必ずインデックス“0”のエントリにシンボルが登録
されていることが自明である。このため、インデックス“0”は0ビットで表され、Cmarkビットのみがシリアライザ12から出力される。
【0097】
図18Bに示す例では、インデックス“0”〜“2”にシンボルが登録されており、使用中のエントリ数は3である。この場合、エントロピーの計算結果はceil(log
23)=
2となり、データマスクとして、N=8ビットのうち、最下位ビットから2桁のビットが“1”に設定された(有効ビットが下位2ビットを示す)データマスク“00000011”が出力される。
図18Cに示す例では、使用中のエントリ数が5であるため、エントロピーの計算結果はceil(log
25)=3となり、データマスクとして、N=8ビットのうち、最
下位ビットから3桁のビットが“1”に設定された(有効ビットが下位3ビットを示す)データマスク“00000111”が出力される。
【0098】
図18A〜Cに示した変換テーブルでは、インデックス“0”のみにシンボルが登録されている場合、データマスク中の有効ビット数は0になる。また、インデックス“0”及び“1”にシンボルが登録されている場合、データマスク中の有効ビット数は1となる。インデックス“0”から“2”まで、又は“0”から“3”までにシンボルが登録されている場合、データマスク中の有効ビット数は2となる。インデックス“0”から“4”以降までシンボルが登録されている場合、データマスク中の有効ビット数は3となる。
【0099】
<解凍装置の構成>
図19は、実施形態1における解凍装置の構成例を示す。
図19において、解凍装置50は、デシリアライザ51と、解凍器52とを備える。デシリアライザ51には、Kビット毎に分けて伝送された伝送データが入力される。デシリアライザ51は、伝送データから、Mビットの圧縮シンボルと、1ビットのCmarkビットを取り出し、解凍器52に入力
する。解凍器52は、圧縮シンボルとCmarkビットを用いて、Mビットのデータマスクを
出力するとともに、Nビットのオリジナルシンボルデータを出力する。
【0100】
図20は、解凍器52の構成例を示す。解凍器52は、シンボル変換部521と、エントロピー計算部522と、マスク生成部523とを有する。シンボル変換部521は、圧縮器11が有する変換テーブルと同じ構成の変換テーブルを有している。シンボル変換部521は、圧縮シンボル及びCmarkビットを受け取り、これらと変換テーブルを用いてオ
リジナルシンボルを出力する。
【0101】
エントロピー計算部522は、変換テーブルの使用中のエントリ数を示す情報をシンボル変換部521から取得し、圧縮器11のエントロピー計算部112が行う計算方法と同じ計算方法でエントロピーを計算し、計算結果をマスク生成部523に与える。マスク生成部523は、シンボル変換部521からCmarkビットを受け取り、ビット値が“0”で
あれば、全て“1”のデータマスクを出力し、ビット値が“1”であれば、エントロピー計算部522からのエントロピー計算結果に従った有効ビット数を有するデータマスクを出力する。データマスクは、デシリアライザ51に入力される。
【0102】
図21は、デシリアライザ51の処理例を示すフローチャートである。S21では、デシリアライザ51は、入力された伝送データの最初の1ビット(Cmarkビットに該当する
)を読み出す。
【0103】
S22では、デシリアライザ51は、ビット値が“1”か“0”かを判定する。ビット値が“1”の場合、解凍器52から入力されるデータマスクが示すビット数の伝送データを読み出し、圧縮シンボルとして出力する(S23)。これに対し、ビット値が“0”の場合、デシリアライザ51は、Nビットの伝送データを読み出し、圧縮シンボルとして出力する(S24)。このNビットの出力は、デシリアライザ51にNビット全てが有効ビットを示すデータマスク(“11111111”:N=M=8ビットの場合)を入力し、デシリアライザ51が当該データマスクを参照することで行ってもよく、データマスクの値とは無
関係にNビット出力する定義に従って行ってもよい。実施形態1では、Cmarkビット“0
”の場合にデータマスク“11111111”が入力される態様について説明する。
【0104】
S25では、S21で読み出したビットをCmarkビットとして出力する。S25の処理
は、S23及びS24の前に実行されてもよく、S22の前に実行されてもよい。S26では、伝送データが終了したかを判定し、伝送データがない場合には、処理が終了する。伝送データがある場合には、処理がS21に戻る。
【0105】
図22は、解凍器52の処理例を示すフローチャートである。S31において、解凍器52のシンボル変換部521は、デシリアライザ51から入力されたCmarkビットの値が
“0”か“1”かを判定する。Cmarkビットの値が“0”の場合(S31,0)、シンボ
ル変換部521は、変換テーブルに、登録対象のシンボルが既に登録されているか否かを判定する。このとき、登録対象のシンボルが既登録と判定される場合には(S38,Y)、解凍器52は所定のエラー処理を行い(S41)、処理を終了する。
【0106】
これに対し、登録対象のシンボルが登録されていないと判定される場合には(S38,N)、シンボル変換部521は、圧縮シンボルを変換テーブルに登録する処理(テーブル更新)を行う(S39)。その後、シンボル変換部521は、デシリアライザ51から入力された圧縮シンボルをオリジナルシンボルとして出力する(S40)。その後、処理がS36に進む。但し、S39の処理とS40の処理順は逆でも並列でもよい。
【0107】
これに対し、Cmarkビットの値が“1”の場合(S31,1)、シンボル変換部521
は、デシリアライザ51から入力された圧縮シンボルの値に合致するインデックスを変換テーブルから検索する(S32)。シンボル変換部521は、インデックスがヒットしたかを判定し(S33)、ヒットしなかった場合には(S33,N)、所定のエラー処理を行い(S42)、
図22の処理を終了する。
【0108】
これに対し、インデックスがヒットした場合には(S33,Y)、シンボル変換部521は、インデックスに対応するエントリ中のシンボルを、オリジナルシンボルとして出力する(S34)。S35では、シンボル変換部521は、テーブル更新処理を行い、ヒットしたシンボルを所定位置(インデックス“0”)に移動させるとともに、インデックス“0”からヒットしたシンボルが登録されていたエントリより1つ前のエントリに登録されていたシンボルを、次のエントリに移動させる。S34とS35の処理順は逆でも並列でもよい。
【0109】
S36において、エントロピー計算部522は、オリジナルシンボルの出力毎に、変換テーブルの使用状況を示す情報(使用率、ヒット率)を取得する。取得は、変換テーブルを参照して、使用率などを取得するようにしてもよく、シンボル変換部521から使用率などを示す情報を取得するようにしてもよい。エントロピー計算部522は、第1又は第2の計算方法を用いてエントロピー計算を行う。マスク生成部523は、エントロピー計算値を取得し、このエントロピー計算値に応じた有効ビットを有するデータマスクを生成し、デシリアライザ51に供給する。その後、
図22の処理が終了する。なお、実施形態3において、S38及びS41の処理と、S33及びS42の処理とは、必ずしも必要でない。
【0110】
<動作例>
<<圧縮方法>>
図23A〜C、
図24A〜C、
図25A〜C、
図26A〜C、
図27A〜C、
図28は、圧縮装置10の動作例(圧縮方法)の説明図である。
図23Aには、動作例に係る変換テーブルが示されている。この変換テーブルは、
図18A〜Cを用いて説明した構造を有
する。変換テーブルの全エントリ数は8(インデックス値“0”〜“7”)である。入力は、一例として、8ビットのオリジナルシンボルが連なるシンボルデータ列“ABACDABFGEFHJAB”である。初期状態の変換テーブルでは、全てのエントリが未登録状態であると仮
定する。以下の動作例では、変換テーブルの第1の操作方法により、変換テーブルの更新処理が行われる。変換テーブルの更新処理は、圧縮器11(シンボル変換部)111により行われる。エントロピー計算部112は、第1の計算方法を用いてエントロピーを計算する。また、本動作例は、N=M=8ビットの場合について説明する。
【0111】
図23Bは、入力されたオリジナルシンボル“A”の処理を示す。オリジナルシンボル“A”は変換テーブルに登録されていない(ミスヒットとなる)。このため、シンボル変換部111は、オリジナルシンボル“A”を先頭のエントリ(インデックス“0”)に登録する。シンボル変換部111は、オリジナルシンボル“A”を圧縮シンボルとして出力するとともに、非圧縮を示すCmarkビット“0”を出力する。
【0112】
マスク生成部113は、8ビットの全てが有効ビットであることを示すデータマスク“11111111”を出力する。シリアライザ12は、
図11に示した処理を行い、データマスク“11111111”に従って、Cmarkビット“0”にシンボル“A”(ASCIIコード:01000001)を続けた“0A”のシリアルデータを出力する。但し、シンボルはASCIIコー
ド以外で表されてもよい。
【0113】
図23Cは、オリジナルシンボル“A”の次に入力されたオリジナルシンボル“B”の処理を示す。オリジナルシンボル“B”は未登録であるため、シンボル変換部111は、プッシュ処理をして、シンボル“B”をインデックス“0”に登録し、シンボル“A”は、次のエントリであるインデックス“1”に登録する。シンボル変換部111は、シンボル“B”及びCmarkビット“0”を出力する。このとき、マスク生成部113は、データ
マスク“11111111”を出力する。シリアライザ12は、データマスクに従って、Cmarkビ
ット“0”にシンボル“B”(ASCIIコード:01000010)を続けた“0B”のシリアルデータを出力する。
【0114】
図24Aは、オリジナルシンボル“B” の次に入力されたオリジナルシンボル“A”
の処理を示す。シンボル“A”はインデックス“1”に登録されている。このため、シンボル“A”がヒットする。この場合、シンボル変換部111は、シンボル“A”が登録されていたエントリのインデックス値“1”を示すビット値“1”を圧縮シンボルとして出力するとともに圧縮を示すCmarkビット“1”を出力する。また、シンボル変換部111
は、ヒットしたシンボル“A”を先頭のエントリ(インデックス“0”)に移動する一方で、インデックス“0”に登録されていたシンボル“B”を次のエントリ(インデックス“1”)に移動させる。
【0115】
この場合、エントロピー計算部112におけるエントロピーの計算結果は、ceil(log
22)=1となる。このため、マスク生成部113は、データマスク“00000001”を生成して出
力する。シンボルが圧縮された(シンボル変換が行われた)場合、シリアライザ12は、Cmarkビットが“1”の場合、データマスクが示す有効ビット数(=1)のビット“1”
を、圧縮シンボルとして出力する(
図21、S23)。これによって、Cmarkビット“1
”に圧縮シンボル“1”が続く2ビットのシリアルデータ“11”をシリアライザ12は出力する。
【0116】
図24Bは、シンボル“A” の次に入力されたオリジナルシンボル“C”の処理を示
す。シンボル“C”は未登録であるため、シンボル変換部111は、シンボル“C”及びCmarkビット“0”を出力するとともに、シンボル“C”についてのプッシュ処理を行う
。すなわち、シンボルCをインデックス“0”に登録し、既登録のシンボルを次のエント
リに移動する。この場合、マスク生成部113は、オール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボ
ル“C”(ASCIIコード:01000011)が続く“0C”のシリアルデータを出力する。
【0117】
図24Cは、シンボル“C” の次に入力されたオリジナルシンボル“D”の処理を示
す。シンボル“D”は未登録であるため、シンボル変換部11は、シンボル“C”及びCmarkビット“0”を出力するとともに、シンボル“D”についてのプッシュ処理を行う。
マスク生成部113は、オール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボル“D”(ASCIIコー
ド:01000100)が続く“0D”のシリアルデータを出力する。
【0118】
図25Aは、シンボル“D” の次に入力されたオリジナルシンボル“A”の処理を示
す。シンボル“A”はインデックス“2”に登録されている(
図24C)。このため、シンボル変換部111は、シンボル“A”が登録されていたエントリのインデックス値“2”(
図24C)を示すビット値“10”を圧縮シンボルとして出力するとともに圧縮を示すCmarkビット“1”を出力する。また、シンボル変換部111は、ヒットしたシンボル
“A”をインデックス“0”に移動する一方で、シンボル“D”,“C”,“B”を次のエントリに移動させる。
【0119】
この場合、エントロピー計算部112におけるエントロピーの計算結果は2となる。このため、マスク生成部113は、データマスク“00000011”を生成して出力する。シリアライザ12は、Cmarkビットが“1”であるため、データマスクが示す有効ビット数(=
2)のビット“10”を圧縮シンボルとして出力する。これによって、Cmarkビット“1
”に圧縮シンボル“10”が続く3ビットのシリアルデータ“110”がシリアライザ12から出力される。
【0120】
図25Bは、シンボル“A” の次に入力されたオリジナルシンボル“B”の処理を示
す。シンボル“B”はインデックス“3”に登録されているため(
図25A)、シンボル変換部111は、シンボル“B”が登録されていたエントリのインデックス値“3”を示すビット値“11”を圧縮シンボルとして出力するとともに圧縮を示すCmarkビット“1
”を出力する。また、シンボル変換部111は、シンボル“B”をインデックス“0”に移動する一方で、シンボル“A”,“D”,“C”を次のエントリに移動させる。
【0121】
この場合、エントロピー計算部112におけるエントロピーの計算結果は2となり、マスク生成部113は、データマスク“00000011”を生成及び出力する。シリアライザ12は、Cmarkビットが“1”であるため、データマスクが示す有効ビット数(=2)のビッ
トを圧縮シンボルとして出力する。これによって、Cmarkビット“1”に圧縮シンボル“
11”が続く3ビットのシリアルデータ“111”がシリアライザ12から出力される。
【0122】
図25Cは、シンボル“B” の次に入力されたオリジナルシンボル“F”の処理を示
す。シンボル“F”は未登録であるため、シンボル変換部111は、シンボル“F”及びCmarkビット“0”を出力するととともに、シンボル“F”についてのプッシュ処理を行
う。この場合、マスク生成部113はオール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボル“F”(A
SCIIコード:01000110)が続く“0F”のシリアルデータを出力する。
【0123】
図26Aは、シンボル“F”に続くシンボル“G”の処理を示す。シンボル“G”は未登録であるため、シンボル変換部111は、シンボル“G”及びCmarkビット“0”を出
力するととともに、シンボル“G”についてのプッシュ処理を行う。この場合、マスク生成部113はオール“1”のデータマスクを生成及び出力する。シリアライザ12は、デ
ータマスクに従って、Cmarkビット“0”にシンボル“G”(ASCIIコード:01000110)が続く“0G”のシリアルデータを出力する。
【0124】
図26Bは、シンボル“G”に続くシンボル“E”の処理を示す。シンボル“E”は未登録であるため、シンボル変換部111は、シンボル“E”及びCmarkビット“0”を出
力するととともに、シンボル“E”についてのプッシュ処理を行う。この場合、マスク生成部113はオール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボル“E”(ASCIIコード:01000101)が続く“0E”のシリアルデータを出力する。
【0125】
図26Cは、シンボル“E” の次に入力されたオリジナルシンボル“F”の処理を示
す。シンボル“F”はインデックス“2”に登録されている(
図26B)。このため、シンボル変換部111は、インデックス値“2”を示すビット値“10”とCmarkビット“
1”とを出力する。また、シンボル“F”をインデックス“0”に移動する一方で、シンボル“E”,“G”を次のエントリに移動させる(シンボル“B”,“A”,“D”,“C”はそのままである)。
【0126】
この場合、エントロピー計算部112は、エントロピーの計算結果“3”を出力し、マスク生成部113は、データマスク“00000111”を生成及び出力する。シリアライザ12は、Cmarkビットが“1”であるため、データマスクが示す有効ビット数(=3)のビッ
ト“010”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”に圧縮
シンボル“010”が続く4ビットのシリアルデータ“1010”がシリアライザ12から出力される。
【0127】
図27Aは、シンボル“F” の次に入力されたオリジナルシンボル“H”の処理を示
す。シンボル“H”は未登録であるため、シンボル変換部111は、シンボル“H”及びCmarkビット“0”を出力するととともに、シンボル“H”についてのプッシュ処理を行
う。この場合、マスク生成部113はオール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボル“H”(A
SCIIコード:01001000)が続く“0H”のシリアルデータを出力する。
【0128】
図27Bは、シンボル“H”の次のシンボル“J”の処理を示す。シンボル“J”は未登録であるため、シンボル変換部111は、シンボル“J”及びCmarkビット“0”を出
力するととともに、シンボル“J”についてのプッシュ処理を行う。このとき、シンボル“C”は変換テーブルから追い出されて削除される。マスク生成部113はオール“1”のデータマスクを生成及び出力する。シリアライザ12は、データマスクに従って、Cmarkビット“0”にシンボル“J”(ASCIIコード:01001010)が続く“0J”のシリ
アルデータを出力する。
【0129】
図27Cは、シンボル“J”に続くシンボル“A”の処理を示す。シンボル“A”はインデックス“6”に登録されている(
図27B)。このため、シンボル変換部111は、インデックス値“6”を示すビット値“110”とCmarkビット“1”とを出力する。ま
た、シンボル“A”をインデックス“0”に移動する一方で、シンボル“J”から“B”を次のエントリに移動させる。
【0130】
この場合、エントロピー計算部112は、エントロピーの計算結果“3”を出力し、マスク生成部113は、データマスク“00000111”を生成及び出力する。シリアライザ12は、Cmarkビットが“1”であるため、データマスクが示す有効ビット数(=3)のビッ
ト“110”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”に圧縮
シンボル“110”が続く4ビットのシリアルデータ“1110”がシリアライザ12か
ら出力される。
【0131】
図28は、シンボル“A”に続くシンボル“B”の処理を示す。シンボル“B”はインデックス“6”に登録されている(
図27C)。このため、シンボル変換部111は、インデックス値“6”(ビット値“111”)とCmarkビット“1”とを出力する。また、
シンボル“B”をインデックス“0”に移動する一方で、シンボル“A”から“G”を次のエントリに移動させる。
【0132】
この場合、エントロピー計算部112は、エントロピーの計算結果“3”を出力し、マスク生成部113は、データマスク“00000111”を生成及び出力する。シリアライザ12は、Cmarkビットが“1”であるため、データマスクが示す有効ビット数(=3)のビッ
ト“110”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”に圧縮
シンボル“110”が続く4ビットのシリアルデータ“1110”がシリアライザ12から出力される。
【0133】
なお、上記した圧縮装置10の出力では、オリジナルシンボル列“ABACDABFGEFHJAB”
(15×8=120ビット)に対するシリアライザ12の出力は101ビットとなり、圧縮率は84%となる。
【0134】
<<解凍方法>>
図29A〜C、
図30A〜C、
図31A〜C、
図32A〜C、
図33A〜C、
図34は、解凍装置50の動作例(圧縮方法)の説明図である。
図29Aには、解凍装置50の動作例に係る変換テーブルが示されている。この変換テーブルは、
図23Aに示した圧縮装置10が有する変換テーブルと同じデータ構造を有する。このため、再度の説明は省略する。
【0135】
解凍装置50に対する入力は、一例として、圧縮装置10の動作例において圧縮装置10から出力されたシリアルデータ(Cmarkビット+圧縮シンボルの)ビット列、“0A”
,“0B”,“11”,“0C”,“0D”,“110”,“111”,“0F”,“0G”,“0E”,“1010”,“0H”,“0J”,“1110”,“1110”である。
【0136】
また、解凍器52における初期状態の変換テーブルでは、全てのエントリが未登録状態であると仮定する。以下の動作例では、変換テーブルの第1の操作方法により、変換テーブルの更新処理が行われる。変換テーブルの更新処理は、解凍器52(シンボル変換部521)により行われる。エントロピー計算部522は、第1の計算方法を用いてエントロピーを計算する。
【0137】
図29Bは、解凍装置50にシリアルデータ“0A”が入力された場合の処理を示す。デシリアライザ51によって、シリアルデータ“0A”はCmarkビット“0”と圧縮シン
ボル“A”とに分離され、解凍器52に入力される。
【0138】
Cmarkビットが“0”であるため、シンボル変換部521は、圧縮シンボル“A”をオ
リジナルシンボル(解凍シンボル)として出力する。エントロピー計算部522は、エントロピーの計算結果として0を出力し、データマスク生成部523は、エントロピー計算値とは無関係に全て有効ビットを示すデータマスク“11111111”を生成及び出力する。
【0139】
図29Cは、解凍装置50にシリアルデータ“0B”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“0B”をCmarkビット“0”と圧縮シンボル“
B”とに分離し、解凍器52に入力する。Cmarkビットが“0”であるため、シンボル変
換部521は、圧縮シンボル“B”をオリジナルシンボルとして出力する。このとき、データマスク“11111111”を生成及び出力する。
【0140】
図30Aは、解凍装置50にシリアルデータ“11”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“11”の最初の“1”を参照して、Cmarkビッ
ト“1”と判定する。この場合、解凍器52からのデータマスク“00000001”に従って1ビット読み出し、圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧
縮シンボル“1”との分離が行われ、それぞれが解凍器52に入力される。
【0141】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“1”が示
すインデックス、すなわちインデックス“1”に登録(記憶)されたシンボル“A”(
図29C)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“A”をインデックス“0”に移動し、シンボル“B”を次のエントリ(インデックス“1”)に移動させる。エントロピー計算部522はエントロピーの計算結果として“1”を出力し、マスク生成部523がデータマスク“00000001”を生成してデシリアライザ51に供給する。
【0142】
図30Bは、解凍装置50にシリアルデータ“0C”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”と判定し、Nビットの出力を行う。これに
よって、圧縮シンボル“C”が出力される。デシリアライザ51は、Cmarkビット“0”
及び圧縮シンボル“C”を解凍器52に供給する。
【0143】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“C”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“C”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0144】
図30Cは、解凍装置50にシリアルデータ“0D”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“D”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“D”を解凍器52に供給する。
【0145】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“D”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“D”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0146】
図31Aは、解凍装置50にシリアルデータ“110”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“110”の最初の“1”を参照して、Cmark
ビット“1”と判定する。この場合、解凍器52からのデータマスク“00000011”に従って2ビット読み出し、ビット値“10”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧縮シンボル“10”とが解凍器52に入力される。
【0147】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“10”が
示すインデックス、すなわちインデックス“2”に登録されたシンボル“A”(
図30C)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“A”をインデックス“0”に移動し、シンボル“D”及び“C”を次のエントリに移動させる。エントロピー計算部522はエントロピーの計算結果として“2”を出力し、マスク生成部523がデータマスク“00000011”を生成してデシリアライザ51に供給する。
【0148】
図31Bは、解凍装置50にシリアルデータ“111”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“111”の最初の“1”を参照して、Cmark
ビット“1”と判定する。この場合、解凍器52からのデータマスク“00000011”に従って2ビット読み出し、ビット値“11”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧縮シンボル“11”とが解凍器52に入力される。
【0149】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“11”が
示すインデックス、すなわちインデックス“3”に登録されたシンボル“B”(
図31A)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“B”をインデックス“0”に移動し、シンボル“A”,“D”,“C”を次のエントリに移動させる。エントロピー計算部522はエントロピーの計算結果として“2”を出力し、マスク生成部523がデータマスク“00000011”を生成してデシリアライザ51に供給する。
【0150】
図31Cは、解凍装置50にシリアルデータ“0F”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“F”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“F”を解凍器52に供給する。
【0151】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“F”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“F”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0152】
図32Aは、解凍装置50にシリアルデータ“0G”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“G”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“G”を解凍器52に供給する。
【0153】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“G”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“G”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0154】
図32Bは、解凍装置50にシリアルデータ“0E”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“E”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“E”を解凍器52に供給する。
【0155】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“E”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“E”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0156】
図32Cは、解凍装置50にシリアルデータ“1010”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“1010”の最初の“1”を参照して、Cmarkビット“1”と判定する。この場合、解凍器52からのデータマスク“00000111”に
従って3ビット読み出し、ビット値“010”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧縮シンボル“010”とが解凍器52に入力される。
【0157】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“010”
が示すインデックス、すなわちインデックス“2”に登録されたシンボル“F”(
図32B)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“F”をインデックス“0”に移動し、シンボル“E”,“G”を次のエントリに移動させる。エントロピー計算部522はエントロピーの計算結果として“3”を出力し、マスク生成部523がデータマスク“00000111”を生成してデシリアライザ51に供給する。
【0158】
図33Aは、解凍装置50にシリアルデータ“0H”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“H”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“H”を解凍器52に供給する。
【0159】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“H”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“H”をインデックス“0”に登録する。この場合、データマスク“11111111”が生成及び出力される。
【0160】
図33Bは、解凍装置50にシリアルデータ“0J”が入力された場合の処理を示す。デシリアライザ51は、Cmarkビットが“0”であるため、Nビットの出力により、圧縮
シンボル“J”を出力する。デシリアライザ51は、Cmarkビット“0”及び圧縮シンボ
ル“J”を解凍器52に供給する。
【0161】
シンボル変換部521は、Cmarkビットが“0”であるため、圧縮シンボル“J”をオ
リジナルシンボルとして出力するとともに、変換テーブルに対するプッシュ処理を行い、シンボル“J”をインデックス“0”に登録する。このとき、シンボル“C”は変換テーブルから追い出されて削除される。エントロピー計算部522はエントロピー計算結果として“3”を出力し、マスク生成部523がデータマスク“00000111”をデシリアライザ51に供給する。
【0162】
図33Cは、解凍装置50にシリアルデータ“1110”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“1110”の最初の“1”を参照し、Cmarkビット“1”と判定する。この場合、解凍器52からのデータマスク“00000111”に従
って3ビット読み出し、ビット値“110”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧縮シンボル“110”とが解凍器52に入力される。
【0163】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“110”
が示すインデックス、すなわちインデックス“6”に登録されたシンボル“A”(
図33B)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“A”をインデックス“0”に移動し、シンボル“J”から“B”を次のエントリに移動させる。エントロピー計算部522はエントロピーの計算結果として“3”を出力し、マスク生成部523がデータマスク“00000111”を生成してデシリアライザ51に供給する。
【0164】
図34は、解凍装置50にシリアルデータ“1110”が入力された場合の処理を示す。デシリアライザ51は、シリアルデータ“1110”の最初の“1”を参照し、Cmark
ビット“1”と判定する。この場合、解凍器52からのデータマスク“00000111”に従って3ビット読み出し、ビット値“110”を圧縮シンボルとして出力する。これによって、Cmarkビット“1”と圧縮シンボル“110”とが解凍器52に入力される。
【0165】
シンボル変換部521は、Cmarkビットが“1”であるため、圧縮シンボル“110”
が示すインデックス、すなわちインデックス“6”に登録されたシンボル“B”(
図33C)を読み出し、オリジナルシンボルとして出力する。また、シンボル変換部521は、シンボル“A”をインデックス“0”に移動し、シンボル“A”から“G”を次のエントリに移動させる。エントロピー計算部522はエントロピーの計算結果として“3”を出力し、マスク生成部523がデータマスク“00000111”を生成してデシリアライザ51に供給する。
【0166】
上述した解凍方法によれば、圧縮器11が備える変換テーブルが解凍器52において再現され、変換テーブルを用いて、オリジナルシンボルを解凍(復元)することができる。このとき、変換テーブルの使用状況に応じて、圧縮シンボル長を可変にすることができる。従って、テーブル(複数のエントリ)の使用状況に応じて、圧縮率を高めることができる。また、圧縮装置10と解凍装置50との間の伝送路を流れるデータ量を減らすことができる。
【0167】
〔実施形態2〕
次に、実施形態2に係る圧縮装置及び解凍装置について説明する。実施形態2は実施形態1と同様の構成を含むため、同様の構成については説明を省略し、主として相違点について説明する。
【0168】
実施形態1では、オリジナルシンボルの種類が増えてくると、変換テーブルがフルとなり、フルの場合は、データマスクがMビットとなり、変換テーブルからオリジナルシンボルがヒットしたとしても、圧縮シンボルはMビットとなるため、エントロピー制御を局所的に行うことができない。このため、実施形態2では、シンボルのヒットの回数、又はミスヒットの回数に応じて、使用中のエントリのうち、最後に位置する(インデックス値がもっとも大きい)エントリ中のシンボルをクリアすることで、エントロピーの削減を図る(エントロピーカリングと呼ぶ)。
【0169】
図35は、実施形態2に係る、エントロピーカリングの一例を示す。
図35の左上に示すように、圧縮装置の変換テーブルにおいて、シンボル“A”〜“E”がインデックス“0”〜“4”に登録されている場合を仮定する。このとき、オリジナルシンボルとしてシンボル“D”(8ビット)が入力されると、インデックス“3”(ビット値:011)がヒットする。このとき、第1の計算方法によるエントロピー計算結果は3であり、これに基づくデータマスクは“00000111”となるため、圧縮装置からの出力、すなわちCmarkビ
ット及び圧縮シンボルのシリアルデータは、“1011”となる。
【0170】
シンボル“D”のヒットに基づき、第1の操作方法に従って、シンボル“D”がインデックス“0”に移動し、シンボル“A”,“B”,“C”が次のエントリに移動する(図中右上の変換テーブルを参照)。
【0171】
その後、オリジナルシンボルとして、シンボル“C”が入力されたと仮定する。この場合も、インデックス“3”がヒットする。エントロピー値及びデータマスクに変更はないため、シリアルデータ“1011”が出力される。
【0172】
シンボル“C”のヒットに基づき、第1の操作方法に従って、シンボル“C”がインデックス“0”に移動し、シンボル“D”,“A”,“B”が次のエントリに移動する(図中左下の変換テーブルを参照)。また、2回のヒットをトリガとして、使用中のエントリのうちの、インデックス値が最大のエントリ中のシンボル“E”が削除(クリア)される。
【0173】
その後、シンボル“B”がオリジナルシンボルとして入力されると、インデックス“4”がヒットする。ここで、シンボル“E”の削除によってエントロピーの計算結果は2となり、データマスクは“00000011”となる。従って、Cmarkビット“1”及び圧縮シンボ
ル“11”からなるシリアルデータ“111”が圧縮装置から出力される。
【0174】
その後、シンボル“B”のヒットに基づき、第1の操作方法に従って、シンボル“B”がインデックス“0”に移動し、シンボル“C”,“D”,“A”が次のエントリに移動する(図中右下の変換テーブルを参照)。その後、シンボル“C”がオリジナルシンボルとして入力されると、インデックス“1”がヒットする。この時点でのエントロピーの計算結果は2となり、データマスクは“00000011”となる。従って、Cmarkビット“1”及
び圧縮シンボル“01”からなるシリアルデータ“101”が圧縮装置から出力される。
【0175】
解凍装置においても同様に、2回のヒットを契機として、使用中のエントリのうち、インデックス値が最大のエントリ中のシンボルがクリアされる。これによって、解凍装置における変換テーブルも、
図35に示したような遷移を行う。上記の点を除き、圧縮装置及び解凍装置の構成は、実施形態1と同様である。
【0176】
なお、先頭から所定の位置までにある(所定の範囲にある)エントリに登録されたシンボルはカリングによって削除されないルールを定めることができる。これによって、カリングによって登録済のシンボルが削除されすぎないようにすることができる。例えば、
図35に示した変換テーブルにおいて、インデックス“0”及び“1”のエントリに登録されたシンボルは、カリングの条件が満たされても、クリアの対象とならない構成を採用できる。所定の位置は、適宜設定可能である。
【0177】
また、上述した例では、2回目のヒットにより、カリングが行われる例を示したが、所定回数のミスヒットをトリガとして、カリングが実行されてもよい。回数を計数するヒット又はミスヒットの間に、ミスヒットやヒットが挟まっていてもよい(ヒット又はミスヒットの回数は連続であることを要しない)。
【0178】
実施形態2によれば、エントロピーカリングによって、局所的なエントロピーの制御を行うことができ、圧縮シンボルのサイズを小さくすることができる。
【0179】
〔実施形態3〕
次に、実施形態3に係る圧縮装置及び解凍装置について説明する。実施形態3は実施形態1と同様の構成を含むため、同様の構成については説明を省略し、主として相違点について説明する。
【0180】
参考例の課題2として示したように、参考例では、解凍側で圧縮シンボル列の末尾を認識することができない。そこで、変換テーブルの先頭から所定の位置までのエントリを例外シンボルによって予約(リザーブ)する。例外シンボルは、所定の命令(コマンド)が割り当てられたシンボルであり、解凍側では、例外シンボルによって示される、制御に関する命令を認識する。リザーブされたエントリに登録された例外シンボルは、上書き登録や削除の対象とならない。圧縮側では、変換テーブルを用いた変換処理をバイパスして、例外シンボルの出力を行ってもよい。また、圧縮装置からの出力において、例外シンボルの後ろに、コマンドに付随する引数を、Cmarkビット“0”且つNビット幅で続けること
ができる。解凍側(解凍装置)ではその引数の個数は把握しているものとする。
【0181】
<コマンド送信>
図37A〜Cは、例外シンボルの説明図である。
図37Aには、圧縮装置と解凍装置と
で共有する変換テーブルの一例が示されている。変換テーブルは、所定数(一例として4つ)のエントリ(インデックス“0”〜“3”)を有し、インデックス“0”がコマンド1を示す例外シンボルの登録用にリザーブされ、インデックス“1”がコマンド2を示す例外シンボルの登録用にリザーブされている。
【0182】
図37Bは、コマンド1の送信方法(第1送信方法)の一例を示す。コマンド1を圧縮側から解凍側に送る場合、圧縮装置は、Cmarkビット“1”と、圧縮シンボルとしてのイ
ンデックス“0”とを解凍側に送る。解凍装置は、Cmarkビット“1”に従って、インデ
ックス“0”からコマンド1の例外シンボルを読み出し、コマンド1を認識して、コマンド1に応じた処理を行う。但し、第1送信方法を用いる場合には、コマンドに使用されるビット列(シンボル)はオリジナルシンボルとして出現しないことを保証することが要求される。或いは、コマンドが登録されるエントリがオリジナルエントリの登録用として使用されないようにリザーブする必要がある。
【0183】
図37Cは、コマンド1の他の送信方法(第2送信方法)を示す。圧縮装置は、コマンド1を解凍装置へ送る場合、Cmarkビット“0”と、圧縮シンボルとしてのコマンド1の
例外シンボルとを、解凍装置へ送る。解凍装置では、Cmarkビット“0”に従って、コマ
ンド1の例外シンボルを変換テーブルに登録しようとするが、コマンド1の例外シンボルは既に登録されているため、エラー(例外)が発生する(
図22、S38、S41参照)。解凍装置は、この例外に対する例外処理において、例外コマンドであるコマンド1を実行する。
【0184】
図38A〜Cは、エントリのリザーブを行わずに、コマンドを圧縮装置から解凍装置へ送る方法を示す。
図38Aには、変換テーブルの一例が示されている。変換テーブルは、所定数(一例として4つ)のエントリを有し、インデックス“0”及び“1”には、2つのシンボル“AB”と“CD”とがそれぞれ登録されている。シンボル“AB”と“CD”とは、例外シンボルではなく、通常のオリジナルシンボルである。なお、シンボルの数は例示であり、1又は3以上であってもよい。
【0185】
図38Bは、コマンドの第3の送信方法を示す。圧縮装置と解凍装置とで、
図38Aに示した登録内容の変換テーブルを有している状況で、Cmarkビット“1”と、圧縮シンボ
ルとしての、空エントリのインデックスであるインデックス“2”又は“3”とを送信する。解凍装置は、Cmarkビット“1”に従ってインデックス“2”又は“3”からシンボ
ルの読み出しを試行するが、空エントリであるため読み出しができず、エラーとなる(
図22、S33、S42参照)。このエラーの発生を、例外(コマンド実行)の発生と解凍装置は扱う。このとき、インデックス“2”であればコマンド1、インデックス“3”であればコマンド2と解釈することもできる。
【0186】
図38Cは、コマンドの第4の送信方法を示す。圧縮装置と解凍装置とで、
図38Aに示した登録内容の変換テーブルを有している状況で、Cmarkビット“0”と、圧縮シンボ
ルとしての、シンボル“AB”又は“CD”とを送信する。解凍装置は、Cmarkビット“
0”に従ってシンボル“AB”又は“CD”の登録を試行するが、シンボル“AB”及び“CD”は既に登録されているためエラーとなる。このエラーの発生を、例外(コマンド実行)の発生と解凍装置は扱う。このとき、シンボル“AB”であればコマンド1の実行を、シンボル“CD”であればコマンド2の実行と解釈することもできる。
【0187】
第1〜第4の送信方法の実行に当たって、シンボル変換部111は、変換テーブルに係る通常の処理を行わずに、コマンド対応のCmarkビットと圧縮シンボルとの組み合わせを
生成して送信するようにしてもよい。
【0188】
図39は、第1〜第4の送信方法をまとめた表である。上述した第1及び第2の送信方法は、コマンドとしての例外シンボルを登録するためのエントリをリザーブする類型(類型1)に属する。これに対し、第3及び第4の送信方法は、コマンド(例外シンボル)用のエントリをリザーブしない類型(類型2)に属する。類型1及び類型2のそれぞれは、解凍側にエントリのインデックスを送信する類型(類型3)と、解凍側にオリジナルシンボルを送信する類型(類型4)とに分類される。
【0189】
第1の送信方法は、類型1と類型3との組み合わせである。上述したように、圧縮装置は、リザーブされたエントリのインデックスと、Cmarkビット“1”とを解凍装置に送信
する。解凍装置は、インデックスにより指定されたエントリに登録されたコマンドを取得して、コマンドを実行する。第1の送信方法は、RETI(Reserve Entry, Transmit Index)と呼ばれる。
【0190】
第2の送信方法は、類型1と類型4との組み合わせである。上述したように、圧縮装置は、リザーブされたエントリに登録されたオリジナルシンボル(コマンド)と、Cmarkビ
ット“0”とを解凍装置に送る。解凍装置では、オリジナルシンボル(コマンド)が既に登録済であるためエラー(例外)が発生する。解凍装置は、この例外に対する例外処理としてコマンドを実行する。第2の送信方法は、RETO(Reserve Entry, Transmit Original)と呼ばれる。
【0191】
第3の送信方法は、類型2と類型3との組み合わせである。上述したように、圧縮装置は、未使用のエントリのインデックスと、Cmarkビット“1”とを解凍装置に送信する。
解凍装置では、インデックスが示すエントリが未使用であるのでエラー(例外)が生じる。解凍装置は、この例外に対する例外処理として所定のコマンドを実行する。第3の送信方法は、FETI(Free Entry, Transmit Index)と呼ばれる。
【0192】
第4の送信方法は、類型2と類型4との組み合わせである。上述したように、圧縮装置は、リザーブされたエントリに登録されたオリジナルシンボル(コマンド)と、Cmarkビ
ット“0”とを解凍装置に送る。解凍装置では、オリジナルシンボルが既に登録済であるためエラー(例外)が発生する。解凍装置は、この例外に対する例外処理として所定のコマンドを実行する。第4の送信方法は、FETO(Free Entry, Transmit Original)と
呼ばれる。第3及び第4の送信方法では、圧縮装置から送られたコマンドを用いてもよく、解凍装置が例外発生時にローカルに保持されたコマンドを取得して実行してもよい。コマンドの取得経路は問わない。
【0193】
類型1の長所は、エントリの全検索を要しないことである。これに対し、類型1の短所は、圧縮に利用できないエントリが生じることや、コマンド登録用のエントリを事前に定義することである。類型2の長所は、エントリの全検索を要するが、全てのエントリを圧縮に利用することができる。類型2の短所としては、変換テーブルがフルの場合と空きエントリがある場合とで、第3の送信方法(FETI)と、第4の送信方法(FETO)とを使い分けることを要する。具体的には、変換テーブルがフルの場合はFETOが実行される。変換テーブルに空きエントリがある場合はFETIが実行される。これら以外では、FETOが実行される。
【0194】
図40は、コマンド送信の一例を示すタイミングチャートである。オリジナルシンボル列に対する圧縮装置10の圧縮処理中に、例外を入力すると、オリジナルシンボルに対する圧縮処理が停止され、所定の例外処理が実行される。例外処理として、解凍装置50にコマンド実行用データを圧縮シンボル列間に挿入する処理が行われる。コマンド実行用データは、例えば、例外を発生させる例外シンボル(
図37B及びCや、
図38B及びCに示したインデックスやシンボル)、解凍装置50に実行させるコマンドを含む。さらに、
コマンド実行用データには、コマンド実行に係る1又は2以上の引数を含むことができる。
図40ではコマンドの後に、二つの引数が挿入されている。例外処理が終わると、オリジナルシンボルに対する圧縮処理が再開される。
【0195】
解凍装置50では、圧縮シンボルに対する解凍処理中に、例外シンボルを検出すると、例外が生じ、例外処理として、コマンドの実行が割り込みによって行われる。コマンドの実行の間、圧縮シンボルに対する解凍処理は停止され、例外シンボル、コマンド、引数は、解凍結果として出力されない。
【0196】
<動作例>
<<圧縮装置における処理>>
図41A〜C、
図42A〜C、
図43A〜C、
図44A〜C、
図45A〜C、
図46A及びBは、実施形態3における圧縮装置10の動作例(圧縮方法)を説明する図である。本動作例では、8ビットのオリジナルシンボルを扱う。変換テーブルのテーブルサイズは、エントリ数8(インデックス“0”〜“7”)である(
図41A参照)。例外シンボルに関して、FETI(第3の送信方法)又はFETO(第4の送信方法)を用いた対応を行う。
【0197】
例外シンボルによるコマンドとして、本動作例では、RES(Reset Table)コマンドと
EOS(End of Stream)コマンドとを用いる。RESコマンドは、変換テーブルの登録
内容をリセットするコマンドである。RESコマンドは“RET”と表記する。RESコマンドはシンボル“E”により表される。EOSコマンドは、圧縮シンボル列の終端を示すコマンドであり、“EOS”と表記する。EOSコマンドはシンボル“F”により表される。以下の説明において、コマンドの実行をシンボル変換部111、521が行う例を示すが、コマンドの実行は、シンボル変換部111、521以外によって行われてもよい。例えば、コマンドを実行するコマンド実行部を設けてもよい。
【0198】
圧縮装置10に対し、オリジナルシンボル列として、“ABAC(RET)BACAGFHJK(EOS)”が
入力された場合を仮定する。
図41Bは、オリジナルシンボル列のうち最初のシンボル“A”に対する処理を示し、
図41Cは、シンボル“A”の次のシンボル“B”に対する処理を示す。シンボル“A”及び“B”に対する処理は、実施形態1と同様であるので説明を省略する。
【0199】
図42Aは、シンボル“B”の次のシンボル“A”に対する処理を示し、
図42Bは、シンボル“A”の次のシンボル“C”に対する処理を示す。シンボル“A”及び“C”に対する処理は、実施形態1と同様であるので説明を省略する。
【0200】
図42Cは、例外コマンド“RET”が入力された場合の処理を示す。圧縮装置10の圧縮器11のシンボル変換部111は、“RET”が入力されると、FETO(第4の送信方法)による対応を行う。本動作例では、登録済のエントリの一例としてインデックス“0”を用い、インデックス“0”に登録されたシンボル“C”を圧縮シンボルとして出力する。シンボル変換部111は、このシンボル“C”に対するCmarkビットの値を“0
”に設定する。これにより、解凍装置50でシンボル“C”に関する矛盾が生じ、例外発生のトリガとなる。続いて、RESコマンドを意味するコマンドシンボル“E”をシンボル変換部111は出力する。なお、FETOに用いるエントリは、登録済であればインデックス“0”以外でもよい。
【0201】
図43Aは、“RET”に従って例外(RESコマンド)が実行された場合を示す。圧縮器11(シンボル変換部111)は、RESコマンドの実行によって、変換テーブルのリセット(全ての登録済のシンボルのクリア)を行い、変換テーブルを初期化する。RE
Sコマンドによって、異なるデータストリームのためにエントロピーの履歴をリセットすることができる。
【0202】
図43Bは、オリジナルシンボル“B”に対する処理を示し、
図43Cは、シンボル“B”の次のオリジナルシンボル“A”に対する処理を示す。これらの処理は実施形態1と同様であるので説明を省略する。
【0203】
図44Aは、オリジナルシンボル“C”に対する処理を示し、
図44Bは、シンボル“C”の次のオリジナルシンボル“A”に対する処理を示し、
図44Cは、シンボル“A”の次のオリジナルシンボル“G”に対する処理を示す。これらの処理は実施形態1と同様であるので説明を省略する。
【0204】
図45Aは、オリジナルシンボル“F”に対する処理を示し、
図45Bは、シンボル“F”の次のオリジナルシンボル“H”に対する処理を示し、
図45Cは、シンボル“H”の次のオリジナルシンボル“J”に対する処理を示す。これらの処理は実施形態1と同様であるので説明を省略する。
【0205】
図46Aは、シンボル“J”の次のオリジナルシンボル“K”に対する処理を示す。これらの処理は実施形態1と同様であるので説明を省略する。
図46Bは、例外コマンド
“EOS”が入力された場合の処理を示す。圧縮装置10の圧縮器11のシンボル変換部111は、“EOS”が入力されると、FETO(第4の送信方法)による対応として、インデックス“0”に登録されたシンボル“K”を圧縮シンボルとして出力する。シンボル変換部111は、このシンボル“K”に対するCmarkビットの値を“0”に設定する。
これにより、解凍装置50でシンボル“C”に関する矛盾が生じ、例外発生のトリガとなる。続いて、EOSコマンドを意味するコマンドシンボル“F”をシンボル変換部111は出力する。その後、圧縮装置10では、例外コマンド“EOS”により、オリジナルシンボル列の終端を認識し、所定の処理を行う(圧縮処理を終了してもよい)。
【0206】
<<解凍装置における処理>>
図47A〜C、
図48A〜C、
図49A〜C、
図50A〜C、
図51A〜C、
図52A及びBは、実施形態3における解凍装置50の動作例(解凍方法)の一例を説明する図である。
図47Aは、解凍装置50の解凍器52が有する変換テーブルを示し、圧縮装置10が有する変換テーブルと同じ構造を有する。本動作例では、圧縮シンボルとして“AB1CCEBAC1GFHJKKF”が解凍装置50に入力される場合について説明する。但し、各シンボル
は、その前にCmarkビットが置かれ、Cmarkビットとの組み合わせによるシリアルデータをなしている。この点は実施形態1と同じである。
【0207】
図47Bは、シリアルデータ“0A”についての処理を示す。実施形態3でも、デシリアライザ51が、シリアルデータ“0A”を、Cmarkビット“0”と圧縮シンボル“A”
とに分離して解凍器52に入力する。解凍器52は、Cmarkビット“0”に従って圧縮シ
ンボル“A”をオリジナルシンボルとして出力する。これは、実施形態1と同様の処理である。
【0208】
但し、実施形態3では、シンボル変換部521は、シンボルを変換テーブルに登録する場合、全てのエントリに関して登録対象のシンボルが登録されていないことを確認してから登録を行う。ここでは、シンボル変換部521は、シンボル“A”が登録されていないことを確認してから、シンボル“A”の登録を行う。
【0209】
図47Cは、シリアルデータ“0A”の次のシリアルデータ“0B”に対する処理を示す。
図48Aは、シリアルデータ“0B”の次のシリアルデータ“11”に対する処理を
示す。
図48Bは、シリアルデータ“11”の次のシリアルデータ“0C”に対する処理を示す。これらの処理は、実施形態1と同様であるので説明を省略する。
【0210】
図48Cは、シリアルデータ“0C”に対する処理を示す。シンボル変換部521は、Cmarkビット“0”に従って、シンボル“C”を変換テーブルに登録しようとする。とこ
ろが、シンボル“C”は既に変換テーブルに登録されている。このため、矛盾(エラー)が発生する。すると、シンボル変換部521は、次に入力される圧縮シンボルを参照し、シンボルの値がシンボル“E”であると、コマンド“RET”を実行し、変換テーブルの全てのエントリをクリアする。これにより、テーブルリセットがなされる(
図49A参照)。シンボル変換部521は、シンボル“C”は、矛盾発生用のシンボルであり、シンボル“E”はコマンドシンボルであるため、シンボル変換部521は、これらに対応するオリジナルシンボル(解凍シンボル)の出力は行わない。
【0211】
図49Bは、テーブルリセット後に入力されたシリアルデータ“0B”に対する処理を示す。
図49Cは、シリアルデータ“0B”の次のシリアルデータ“0A”に対する処理を示す。
図50Aは、シリアルデータ“OA”の次のシリアルデータ“0C”に対する処理を示す。
図50Bは、シリアルデータ“0C”の次のシリアルデータ“11”に対する処理を示す。
図50Cは、シリアルデータ“11”の次のシリアルデータ“0G”に対する処理を示す。これらの処理は実施形態1と同様であるため、説明を省略する。
【0212】
図51Aは、シリアルデータ“OG”の次のシリアルデータ“0F”に対する処理を示す。
図51Bは、シリアルデータ“0F”の次のシリアルデータ“0H”に対する処理を示す。
図51Cは、シリアルデータ“0H”の次のシリアルデータ“0J”に対する処理を示す。
図52Aは、シリアルデータ“0J”の次のシリアルデータ“0K”に対する処理を示す。これらの処理は実施形態1と同様であるため、説明を省略する。
【0213】
図52Bは、シリアルデータ“0K”の次に入力されたシリアルデータ“0K”に対する処理を示す。シンボル変換部521は、Cmarkビット“0”に従って、シンボル“K”
を変換テーブルに登録しようとする。ところが、シンボル“K”は既に変換テーブルに登録されているため、矛盾が発生する。すると、シンボル変換部521は、次の圧縮シンボルを参照する。次のシンボルが“F”であると、シンボル変換部はコマンド“EOS”を実行し、オリジナルシンボル列の終端を認識(検出)する。これに伴い、所定の処理(解凍処理の終了など)を行う。
【0214】
実施形態3によれば、圧縮装置10から解凍装置50へコマンドを送り、テーブルリセットやオリジナルシンボル列の終端位置の認識などを行わせることができる。コマンドの内容は例示であり、RETやEOS以外のコマンドを送ることもできる。
【0215】
〔実施形態4〕
次に、実施形態4に係る圧縮装置及び解凍装置について説明する。実施形態4は実施形態1及び実施形態3と同様の構成を含むため、同様の構成については説明を省略し、主として相違点について説明する。
【0216】
実施形態4は、実施形態3において説明した、変換テーブルにコマンドシンボル登録用のエントリをリザーブする形態を示す。
図53A〜C、
図54A〜C、
図55A〜C、
図56A〜C、
図57A〜C、
図58は、実施形態4における圧縮装置10の動作例(圧縮方法)を示す。
図53Aに示すように、実施形態4では、圧縮装置10及び解凍装置50の各変換テーブルに、インデックス“0”及び“1”がリザーブされ、コマンド用のシンボル“C”及び“F”が予め登録される。オリジナルシンボルを登録可能なエントリは、インデックス“2”を先頭として、インデックス“2”〜“7”となる。
【0217】
インデックス“0”及び“1”にシンボルが登録された状態となるので、実施形態4におけるエントロピー計算値の初期値は“1”となる。その他の条件は、実施形態3と同じであり、オリジナルシンボル及び例外シンボル(コマンド)の列も、実施形態3と同じである。
【0218】
図53Bは、オリジナルシンボル“A”に対する処理を示す。シンボル変換部111は、シンボル“A”が未登録のため、インデックス“2”にシンボル“A”を登録し、Cmarkビット“0”及び圧縮シンボル“A”を出力する。エントロピー計算値は2となる。デ
ータマスクはオール1となる。
図53Bは、オリジナルシンボル“B”に対する処理を示す。この場合、シンボル“B”がインデックス“2”に登録され、シンボル“A”は次のインデックス“3”に移動する。Cmarkビット“0”及び圧縮シンボル“B”が出力され
る。エントロピー計算値は2であり、データマスクはオール1である。
【0219】
図54Aは、オリジナルシンボル“A”に対する処理を示す。インデックス“3”にシンボル“A”が登録されているため(
図53C)、Cmarkビット“1”とインデックス値
“3”とが出力される。このときのエントロピー計算値は2であり、データマスクは有効ビット数2を示す“00000011”となる。
【0220】
図54Bは、オリジナルシンボル“C”に対する処理を示す。インデックス“0”にシンボルCは登録されているため、Cmarkビット“1”とインデックス値“0”とが出力さ
れる。このように、オリジナルシンボルとしてのシンボル“C”に対しては、コマンドシンボル“C”の登録用にリザーブされたインデックス“0”が、オリジナルシンボル“C”の圧縮に使用される。この場合におけるエントロピー計算値は2であり、データマスクは“00000011”である。
【0221】
図54Cは、コマンドシンボル“RET”の入力時の処理を示す。コマンドシンボル“RET”が入力されると、シンボル変換部111は、RETO(第4の送信方法)を用いて、予め定められたインデックス“0”に登録されたRETのコマンドシンボル“C”を圧縮シンボルとして出力するとともに、解凍装置50にて矛盾を引き起こすためのCmark
ビット“0”を出力する。このため、データマスクはオール1となる。シンボル変換部111は、コマンド“RET”に従って、インデックス“2”以降のエントリ中の登録済シンボルをクリアする。
【0222】
図55Aはオリジナルシンボル“B”に対する処理を示し、
図55Bはオリジナルシンボル“A”に対する処理を示し、
図55Cはオリジナルシンボル“C”に対する処理を示す。
図56Aは、オリジナルシンボル“A”に対する処理を示し、
図56Bは、オリジナルシンボル“G”に対する処理を示す。これらは、実施形態3と同様に第1の操作方法に従って行われる。詳細な説明は省略する。
【0223】
図56Cは、オリジナルシンボル“F”に対する処理を示す。シンボル“F”はコマンドシンボルとしてインデックス“1”に登録されている。このエントリをオリジナルシンボル“F”の圧縮用に用い、シンボル変換部111は、Cmarkビット“1”とインデック
ス値“1”とを出力する。このときのエントロピー計算値は3であり、データマスク“00000111”が出力される。
【0224】
図57Aはオリジナルシンボル“H”に対する処理を示し、
図57Bはオリジナルシンボル“J”に対する処理を示し、
図57Cはオリジナルシンボル“K”に対する処理を示す。これらの処理は、実施形態3と同様に、第1の操作方法に従って行われる。詳細な説明は省略する。
【0225】
図58は、コマンドシンボル“EOS”の入力時の処理を示す。コマンドシンボル“EOS”が入力されると、シンボル変換部111は、RETO(第4の送信方法)を用いて、予め定められたインデックス“1”に登録されたEOSのコマンドシンボル“F”を圧縮シンボルとして出力するとともに、解凍装置50にて矛盾を引き起こすためのCmarkビ
ット“0”を出力する。このため、データマスクはオール1となる。圧縮器11(圧縮装置10)では、コマンド“EOS”によって、オリジナルシンボル列の終端を認識し、所定の処理を行う。
【0226】
図59A〜C、
図60A〜C、
図61A〜C、
図62A〜C、
図63A〜C、
図64は、実施形態4における解凍装置50の動作例(解凍方法)を示す。
図59Aに示すように、解凍器52が有する変換テーブルのインデックス“0”及び“1”は、圧縮装置10と同様にリザーブされ、シンボル“C”及び“F”が登録(記憶)されている。このため、エントロピー計算値の初期値は1である。
【0227】
解凍装置50には、伝送データとして、圧縮装置10から出力されたシリアルデータ列が入力される。シリアルデータ列は、圧縮シンボル“AB30CBA02G1HJKF”のそれぞれの前
にCmarkビットが付加されたシリアルデータの集合である。以下、解凍装置50における
処理を、実施形態3との比較において説明する。
【0228】
図59Bは、シリアルデータ“0A”に対する処理を示す。解凍装置50では、デシリアライザ51がシリアルデータ“0A”をCmarkビット“0”と圧縮シンボル“A”とに
分離して解凍器52に供給する。デシリアライザ51の動作は、実施形態3と同じである、解凍器52では、シンボル変換部521が実施形態3と同様の処理を行う(
図22)。但し、インデックス“0”及び“1”がリザーブされているため、圧縮シンボルを登録するためのエントリがインデックス“2”から始まること、これによって、エントロピーの計算結果が変わってくることを除き、実施形態3と同じである。
【0229】
図59Cは、シリアルデータ“0B”に対する処理を示す。
図60Aは、シリアルデータ“111”に対する処理を示す。
図60Bは、シリアルデータ“100”に対する処理を示す。これらに関して、上述した登録位置及びエントロピー計算値が異なること以外は実施形態3と同じであるので説明を省略する。
【0230】
図60Cは、シリアルデータ“0C”に対する処理を示す。解凍器52には、Cmarkビ
ット“0”と、圧縮装置10におけるRETOによって圧縮シンボルとして出力されたシンボル“C”(コマンド“RET”のシンボル)とが入力される。シンボル変換部521は、Cmarkビット“0”に従って、変換テーブルを参照すると、シンボル“C”が既に登
録されているため、エラーとなる。このエラーを契機にシンボル“C”が割り当てられたコマンド“RET”を実行し、リザーブ領域を除いて変換テーブルの登録内容をリセットする。
【0231】
図61A〜Cは、シリアルデータ“0B”,“0A”,“100”に対する処理を示す。
図62A〜Cは、シリアルデータ“110”,“0G”,“0F”に対する処理を示す。時63A〜Cは、シリアルデータ“0H”,“0J”,“0K”に対する処理を示す。これらは、実質的に実施形態3の動作と同じであるので説明を省略する。
【0232】
図64は、シリアルデータ“0F”に対する処理を示す。解凍器52には、Cmarkビッ
ト“0”と、圧縮装置10がRETOによって出力した圧縮シンボル “F”(コマンド
“EOS”のシンボル)とが入力される。Cmarkビット“0”に従って、変換テーブルか
らシンボル“F”が検索され、シンボル“F”が既に登録されているため、エラーとなる
。このエラーを契機にシンボル“F”が割り当てられたコマンド“EOS”が実行され、オリジナルシンボル列の終端が認識される。終端の認識に応じた所定の処理が実行されてもよい。
【0233】
実施形態4によれば、実施形態3と同様に、所定のコマンド(命令)を解凍装置50に実行させることができる。
【0234】
〔実施形態5〕
次に、実施形態5に係る圧縮装置及び解凍装置について説明する。実施形態5の構成は、実施形態1と共通点を有するので、主として相違点について説明し、共通点については説明を省略する。
【0235】
実施形態1では、検索対象のシンボルが登録されたエントリがヒットした場合、ヒットしたエントリ中のシンボルがインデックス“0”のエントリに移動し、プッシュにより他のエントリに登録されたシンボルが次のエントリに移動する(
図16A)。実施形態1では、ヒットしたエントリの位置(インデックス)とは無関係に、インデックス“0”への移動が行われる。しかし、このような処理をハードウェア(回路)により実装する場合、回路構成が複雑化し、回路規模の増大と動作周波数の低下を招来する可能性がある。
【0236】
そこで、実施形態5では、テーブル更新(
図15のS16、
図23のS35)において、ヒットしたエントリのインデックスi(iは0以上の整数)からk個遡ったエントリにヒットしたエントリ中のシンボルを移動させる。これによって、プッシュにより移動するシンボルの数を減らして、回路規模の縮小が図られるようにする。但し、i−k≦0の場合は、オリジナルシンボルの登録領域の先頭のエントリにシンボルを移動させる。先頭のエントリは、リザーブがなければインデックス“0”であり、リザーブがあれば、リザーブされたエントリ数+1のインデックスが先頭のエントリとなる。
【0237】
図65A〜C、
図66A〜C、
図67A〜Cは、実施形態5における圧縮装置10の動作例を示す。
図65Aは、実施形態5における圧縮装置10及び解凍装置50が有する変換テーブルのデータ構造を示す。本動作例では、実施形態1と同様に、オリジナルシンボルのサイズが8ビットであり、エントリ数が8(インデックス“0”〜“7”)の変換テーブルを用いる。また、本動作例では、変換テーブルの操作に第1の操作方法を用い、エントロピーの計算に第1の計算方法を用いる。例外シンボルについては、RETI(第3の送信方法)によって処理する。
【0238】
但し、実施形態1と異なり、エントリがヒットした場合、ヒットしたエントリ中のシンボルが、そのインデックスiからk個遡ったエントリに移動する(k=2)。但し、kの値は、2以外の適宜の数を設定できる。また、2回のエントリのヒット時(ヒット回数(ヒットカウント=2)の場合)に、実施形態2において説明したエントリピーカリングが行われる。
【0239】
図65Aに示すように、本動作例では、インデックス“0”がリザーブされ、コマンド1が登録されている。コマンド1のシンボル(例外シンボル)はオリジナルシンボル以外である。本動作例ではコマンド1はコマンド“EOS”であるが、EOS以外のコマンドでもよい。インデックス“0”のリザーブのため、オリジナルシンボルを登録用のエントリの先頭はインデックス“1”である。
【0240】
図65Bは、オリジナルシンボル“A”に対する処理を示す。
図65Cは、オリジナルシンボル“B”に対する処理を示す。これらの動作は、シンボル“A”の登録位置が、オリジナルシンボルの登録領域の先頭であるインデックス“1”に登録される点を除き、実
施形態1と同じであるため、詳細な説明は省略する。データマスクについても、その作成方法は実施形態と同じである。
【0241】
図66Aは、オリジナルシンボル“A”に対する処理を示す。この場合、シンボル“A”が登録されたインデックス“2”がヒットする。但し、i−k=2−2=0(i−k≦0)であるため、シンボル“A”は、オリジナルシンボルの登録領域の先頭であるインデックス“1”に移動する(
図66Aの矢印参照)。なお、この場合、Cmarkビットは“1
” 、圧縮シンボルは“2”、データマスクは“00000011”となる。また、ヒット回数(
ヒットカウント)の値が1となる。
【0242】
図66B及びCは、オリジナルシンボル“C”及び“D”に対する処理を示す。これらの処理は、実施形態1における、未登録のシンボルに対する処理と同様であるので説明を省略する。
【0243】
図67Aは、オリジナルシンボル“B”に対する処理を示す。シンボル“B”はインデックス“4”に登録されているため、Cmarkビット“1”及びインデックス値“4”が圧
縮器11から出力される。このとき、ヒットしたエントリのインデックス“4”から2個遡ったインデックス“2”にシンボル“B”が移動する。このとき、シンボル“A”及び“C”がプッシュされて、それぞれ次のエントリへ移動する。これらの変換テーブルの書き換え処理は、例えば圧縮器11(シンボル変換部111)によって行われるが、シンボル変換部111以外で行うようにしてもよい。この場合のエントロピー計算値は2、データマスクは“00000011”となる。
【0244】
また、ヒットカウントが2となる。このため、既登録のエントリのうち、末尾にあるエントリであるインデックス“4”に登録されたシンボル“A”が、エントロピーカリングによって削除される。この処理も、圧縮器11(シンボル変換部111)又はシンボル変換部111以外で行うことができる。カリングの実施に伴い、ヒットカウントの値はリセットされる(0となる)。
【0245】
図67Bは、オリジナルシンボル“C”に対する処理を示す。シンボル“C”はインデックス“3”に登録されているため、Cmarkビット“1”及びインデックス値“3”が圧
縮器11から出力される。このとき、ヒットしたエントリのインデックス“3”から2個遡ったインデックス“1”にシンボル“C”が移動する。このとき、シンボル“D”及び“B”がプッシュされて、それぞれ次のエントリへ移動する。この場合のエントロピー計算値は2、データマスクは“00000011”、ヒットカウントは1となる。
【0246】
図67Cは、コマンドシンボル“EOS”が入力された場合の処理を示す。この場合、RETI(第1の送信方法)が行われる。すなわち、“EOS”を示すシンボル(コマンド1)がリザーブされたインデックス“0”に登録されているため、Cmarkビット“1”
とインデックス“0”とが圧縮器11から出力される。コマンドシンボルのヒットの場合、ヒットしたシンボルの移動は起こらない。このため、このヒットをカリングの発生条件であるヒットカウントに加えるか否かは任意であり、コマンド仕様に従う。
図67Cでは、ヒットの回数に加えてカリングが実行され、末尾のシンボル“B”が削除された例を示す。この場合、エントロピー計算値は2であり、データマスクは“00000011”であり、ヒットカウントが0となる。カリングが行われない場合、シンボル“B”及びヒットカウント値“1”が維持される。
【0247】
図68A〜C、
図69A〜C、
図70A〜Cは、実施形態5における解凍装置50の動作例を示す。
図68Aは、解凍器52が有する変換テーブルを示す。変換テーブルのデータ構造は、圧縮器11が有する変換テーブルのデータ構造と同じである。解凍装置50に
は、オリジナルシンボル列の変換によって得られた圧縮シンボル列“AB2CD430”の各シンボルに、Cmarkビットが付加されたシリアルデータ列が入力される。
【0248】
図68B及びCは、シリアルデータ“0A”及び“0B”に対する処理を示す。解凍装置50では、デシリアライザ51がシリアルデータをCmarkビット“0”と圧縮シンボル
“A”とに分離して解凍器52に供給する。デシリアライザ51の動作は、実施形態3と同じである、解凍器52では、シンボル変換部521が実施形態3と同様の処理を行う(
図22)。但し、インデックス“0”がリザーブされているため、圧縮シンボルを登録するためのエントリがインデックス“1”から始まること、これによって、エントロピーの計算結果が変わってくることを除き、実施形態3と同じである。
【0249】
図69Aは、シリアルデータ“110”に対する処理を示す。Cmarkビット“1”と、
圧縮シンボル“10”に基づいて、インデックス“2”がヒットする。この場合、インデックス“2”に登録されたシンボル“A”がインデックス“1”に移動し(i−k≦0が満たされるため)、インデックス“1”に登録されていたシンボル“B”がインデックス“2”に移動する。解凍シンボルとして、シンボル“A”が出力される。エントロピー計算値は2であり、データマスクは“00000011”であり、ビットカウントは1となる。
【0250】
図69Bは、シリアルデータ“0C”に対する処理を示す。Cmarkビット“0”に基づ
いて、圧縮シンボル“C”がインデックス“1”に登録され、シンボル“A”及び“B”が次のエントリに移動する。解凍シンボルとしてシンボル“C”が出力される。エントロピー計算値、データマスク、ビットカウントに変化はない。
【0251】
図69Cは、シリアルデータ“0D”に対する処理を示す。Cmarkビット“0”に基づ
いて、圧縮シンボル“D”がインデックス“1”に登録され、シンボル“C”,“A”,“B”が次のエントリに移動する。解凍シンボルとしてシンボル“D”が出力される。エントロピー計算値が3となり、データマスクは“00000111”となる。ビットカウントは1のままである。
【0252】
図70Aは、シリアルデータ“1100”に対する処理を示す。Cmarkビット“1”と
、圧縮シンボル“100”とに基づいて、インデックス“4”がヒットする。この場合、インデックス“4”に登録されたシンボル“B”がインデックス“2”に移動し(k=2のため)、インデックス“2”及び“3”に登録されていたシンボル“C”及び“A”が次のエントリに移動する。このとき、ヒットカウントが2となるため、エントロピーカリングが行われ、末尾に位置するシンボル“A”が削除される。これによって、エントロピー計算値は2となり、データマスクは“00000011”となる。ヒットカウントはリセットされる。
【0253】
図70Bは、シリアルデータ“111”に対する処理を示す。Cmarkビット“1”と、
圧縮シンボル“11”とに基づいて、インデックス“3”がヒットする。この場合、インデックス“3”に登録されたシンボル“C”がインデックス“1”に移動し(k=2のため)、インデックス“1”及び“2”に登録されていたシンボル“D”及び“B”が次のエントリに移動する。このとき、ヒットカウントが1となる。解凍シンボルとして、シンボル“C”が出力される。エントロピー計算値は2であり、データマスクは“00000011”である。
【0254】
図70Cは、シリアルデータ“100”に対する処理を示す。Cmarkビット“1”と、
圧縮シンボル“00”とに基づいて、インデックス“0”がヒットする。この場合、インデックス“0”に登録されたシンボル“コマンド1=コマンドEOS”が読み出される。EOSが実行され、解凍器52は、オリジナルシンボル列の終端を認識する。この認識に
従って、所定の処理が行われてもよい。また、
図70Cに示す例では、エントロピーカリングによって末尾のシンボル“B”が削除された様子を示すが、削除しなくてもよい。
【0255】
実施形態5によれば、エントリの近接交換によって、ヒットに伴い登録内容が変更されるエントリの範囲を小規模にすることができ、変換テーブルの更新処理に係る負荷や時間を低減することができる。
【0256】
〔実施形態6〕
次に、実施形態6に係る圧縮装置及び解凍装置について説明する。実施形態6の構成は、実施形態1と共通点を有するので、主として相違点について説明し、共通点については説明を省略する。
【0257】
実施形態6として、実施形態1で説明した圧縮器11、解凍器52をカスケード接続する例を示す。
図71は、実施形態6に係る圧縮装置10Aを示す。
図71において、圧縮装置10Aは、複数の(
図71の例では3)の圧縮器11a、11b、11cと、シリアライザ12とが直列に接続されてなる。
【0258】
圧縮器11aにはオリジナルシンボルデータ(Nビット)が入力される。圧縮器11aは、実施形態1で説明した変換テーブルを有し、オリジナルシンボルデータ(例えば“ABCDABCDABEF”)を、N=4シンボルで、Nビットの圧縮シンボル“ABCD1010ABEF”に変換し、圧縮シンボルに対応するCmarkビットとともに出力する。圧縮器11bも、圧縮器1
1aと同じ構成を有する。圧縮器11bは、圧縮器11aから入力されるNビットの圧縮シンボルを、N=2シンボルで、Nビットの圧縮シンボル“ABCD1002EF”に変換し、対応するCmarkビットともに出力する。圧縮器11bは「他の圧縮装置」の一例である。
【0259】
圧縮器11c及びシリアライザ12は、実施形態1において説明した圧縮器11及びシリアライザ12と同じ構成を有する。圧縮器11cはMビットの圧縮シンボルと、Cmark
ビット、及びデータマスクを出力する。
【0260】
図72は、実施形態6に係る解凍装置50Aを示す。
図72において、解凍装置50Aは、デシリアライザ51と、圧縮装置10Aが有する圧縮器の数(3つ)に応じた解凍器52a、52b、52cとが直列に接続されてなる。
【0261】
デシリアライザ51及び解凍器52aは、実施形態1におけるデシリアライザ51及び解凍器52と同じ構成を有する。デシリアライザ51は、圧縮装置10Aから送信された、Kビットの伝送データ(圧縮装置10A)が入力され、Mビットの圧縮シンボルと、圧縮シンボルに対するCmarkビットとを出力する。
【0262】
解凍器52bには、解凍器52aからの解凍シンボル及びCmarkビットが入力され、解
凍器52bは、Nビットの圧縮シンボルと対応するCmarkビットとを出力する。解凍器5
2bは「他の解凍装置」の一例である。
【0263】
解凍器52cには、解凍器52bからの解凍シンボル及びCmarkビットが入力され、解
凍器52cは、Nビットのオリジナルシンボルデータを出力する。解凍器52aは、Nビットの解凍シンボル“ABCD1002EF”を出力し、解凍器52bは、N=2シンボルでの解凍を行い、解凍シンボル“ABCD1010ABEF”を出力し、解凍器52cは、オリジナルシンボルデータ“ABCDABCDABEF”を出力する。
【0264】
実施形態6によれば、圧縮装置10A及び解凍装置50Aは、圧縮や解凍を行うビット幅(シンボル数)の異なる複数の圧縮器(圧縮器11a〜11c)や複数の解凍器(解凍
器52a〜52c)がカスケード接続された構成を有する。これによって、長いビットパターンを有するオリジナルシンボルデータの、伝送路におけるサイズを十分に小さくすることが可能となる。
【0265】
〔実施形態7〕
次に、実施形態7に係る圧縮装置及び解凍装置について説明する。実施形態7の構成は、実施形態1と共通点を有するので、主として相違点について説明し、共通点については説明を省略する。
【0266】
実施形態7では、変換テーブルを複数のバンクに分割する。分割によって、各バンクが有するエントリ数が、1つの変換テーブルが有するエントリ数より少なくなる。このため、ソフトウェアによる実装では、検索回数の削減による高速化が可能であり、ハードウェアによる実装では、周波数の向上が可能となる。
【0267】
分割されたテーブル(バンク)の選択は、ハッシュ関数を用いて行う。ハッシュ関数について特に制限はなく、オリジナルシンボルをなすビットの一部を用いる場合、バンク番号をラウンドロビンに指定する場合、1次ハッシュ、2次ハッシュを用いる場合、などである。
【0268】
図73A及びBは、実施形態7の説明図である。
図73Aは、圧縮装置10の圧縮器11が有する変換テーブルの例を示す。
図73Aに示す例では、8つのエントリを有する変換テーブルが2つのエントリを有する4つのバンク#0〜#3”に分割されている。各バンクのエントリには、インデックス値“0”及び“1”が割り当てられている。ハッシュ関数として、オリジナルシンボル(Nビット)の下位2ビットをバンク番号としてハッシュする関数が適用される。
【0269】
例えば、8ビットのオリジナルシンボル“A(ASCIIコード:01000010)”に対しては
、その下位2ビットの“10”(二進数の3)に基づき、バンク#2が選択される。バンク#2の検索により、シンボル“A”が登録されたエントリとして、インデックス“1”がヒットする。この場合、圧縮器11は、バンク番号“10”に、インデックス番号“1”を続けた圧縮シンボルを生成する。圧縮シンボルの前には、圧縮を示すCmarkビット“
1”が付加される。よって、オリジナルシンボル“A”は、4ビットのシリアルデータ“1101”に圧縮され、伝送データとして解凍装置50へ送信される。実施形態7では、圧縮装置10、解凍装置50のそれぞれにおいて、バンク毎にエントロピー計算が行われ、バンク毎にデータマスクが生成される。
【0270】
上述したように、シンボルデータは、エントリがヒットした場合、Cmarkビット“1”
+バンク番号+インデックス番号を示すビットからなる。但し、ハッシュ値がデータの順番により決まる場合(例えば、バンクがバンク番号に従ってラウンドロビンに決定される場合)では、バンク番号をシンボルデータに含めなくてよい。
【0271】
バンク番号及びインデックス番号は、
図73Aの例ではそれぞれ2ビット、1ビットで表現されているが、バンク数やインデックス数に応じた所定のビット数で表現される。シンボルデータは、エントリがヒットしなかった場合、例えば、Cmarkビット“0”+オリ
ジナルシンボルの組み合わせとなる。ハッシュ関数によりバンクが一意に決まるため、バンク内では、バンク化されていない場合と同じ動作をすればよいからである。解凍器では、Cmarkビット“0”以降のNビットをオリジナルシンボルとして認識することができる
。但し、シンボルデータにおけるCmarkビット、バンク番号、インデックス番号、オリジ
ナルシンボルの位置(順序)は、解凍側で圧縮側と同じハッシュ関数を用いていれば、バンク内のエントリ使用状態から一意に決まる。
【0272】
図73Bに示すように、解凍装置50の解凍器52が有する変換テーブルも、
図73Aと同様の構成を有する。解凍器52は、例えば、シリアルデータ“1101”が入力された場合、Cmarkビット“1”に基づいて、次の2ビット“10”を用いてハッシュを行い
、バンク番号2のバンク#2にアクセスする。また、シリアルデータの最下位ビットをインデックス番号と認識し、インデックス“1”に登録されているシンボルをオリジナルシンボルとして出力する。このようにして、オリジナルシンボル“A”が出力される。
【0273】
なお、オリジナルシンボルを含むシリアルデータに関しては、Cmarkビットが“0”で
あるため、解凍器52がシリアルデータの最下位からNビットをオリジナルシンボルとしと認識する。Cmarkビット“0”に続くオリジナルシンボルに対するハッシュによってバ
ンク番号が決まり、バンクに対応するエントロピー計算によってデータマスクが決まり、バンク内部でオリジナルシンボルが登録される。
【0274】
圧縮シンボル中のバンク番号やインデックス番号を表すビット数は、実施形態1で用いたエントロピー計算部112(522)、マスク生成部113(523)、シリアライザ12、及びデシリアライザ51を用いて、バンクにおけるエントリの使用状況に応じて変動する構成を採用してもよい。
【0275】
〔実施形態8〕
次に、実施形態8に係る圧縮装置及び解凍装置について説明する。実施形態8の構成は、実施形態1と共通点を有するので、主として相違点について説明し、共通点については説明を省略する。
【0276】
実施形態1〜7で示した圧縮方法では、圧縮シンボルの一部が複雑になり、変換テーブルの構成が不明であるとオリジナルシンボルに復元できない。また、圧縮のために変換されるデータの一部は元のデータを含むため、圧縮シンボルそのままを暗号として扱うことは好ましくない。実施形態8は、このような問題を解決するものである。実施形態8では、共通鍵暗号化方式を用いて、圧縮装置から解凍装置へ送信される伝送データの暗号化を行う。
【0277】
図74は、実施形態8における圧縮装置10Bを示し、
図75は、実施形態8における解凍装置50Bを示す。圧縮装置10Bと解凍装置50Bとは共通鍵暗号方式を用いて通信を行う。
【0278】
図74に示すように、圧縮装置10Bは、実施形態1で示した圧縮装置10の構成に加えて、スクランブル演算部14を含む。スクランブル演算部14には、シリアライザ12から出力されるデータ(Kビット)と、スクランブルキー(共通鍵)とが入力される。スクランブル演算部14は、スクランブルキーを用いたスクランブル演算によりデータを暗号化し、暗号化されたデータ(暗号データ、Kビット)を出力する。暗号データは伝送データとして、伝送路(ネットワーク)を介して解凍装置50Bに送られる。
【0279】
解凍装置50Bは、実施形態1で示した解凍装置50の構成に加えて、スクランブル逆演算部53を含む。スクランブル逆演算部53には、圧縮装置10Bから送信された暗号データ(Kビット)と、スクランブルキー(共通鍵)とが入力される。スクランブル逆演算部53は、スクランブルキーを用いたスクランブル逆演算により暗号データを復号したデータ(Kビット)を出力する。データは実施形態1における伝送データであり、デシリアライザ51に入力される。以降の処理は実施形態1と同じである。
【0280】
圧縮装置10Bと解凍装置50Bとが暗号通信を開始するために、以下のような手順(
ステップ1〜3)が実行される。但し、ステップ2はオプションである。
(ステップ1)第1キー(共通鍵)を圧縮装置10Bから解凍装置50Bへ送る。
(ステップ2)第2キーを圧縮装置10Bから解凍装置50Bへ送る。最後にEOK(End of Key)コマンドを送信する。EOKコマンドは、鍵交換の終了を示すコマンドである。
(ステップ3)暗号化するデータ(オリジナルシンボルデータ)を圧縮装置10Bに入力する。
【0281】
ステップ1では、シンボルに対する圧縮処理のために設定する複数のパラメータから選択される2以上のパラメータ、すなわち圧縮及び解凍に係る複数の種類のパラメータから選ばれる1又は2以上のパラメータの組み合わせを、第1キーとして圧縮装置10に設定する。パラメータは、オリジナルシンボルのビット数N、圧縮シンボルのビット数M、シリアライザ12からの出力に用いるビット数K、エントロピーカリングに用いるヒット回数又はミスヒット回数、例外シンボルの設定、スクランブル演算の種類、スクランブルキー、近接エントリ交換オフセットk、バンク構成(バンク数)である。
例えば、上記のパラメータを全て組み合わせた場合の一例としては以下となる。
(8,8,4,+2,EOK by RETI,f(x),0xA5,2,1)
【0282】
上記の組み合わせは、N=8、M=8、K=4、2回のヒット/ミスヒットでカリングを実施、スクランブル演算に用いる関数f(x)、スクランブルキー、k=2、バンク数=1(分割なし)を示す。関数f(x)は、例えば、“f(x)=X xor cyclic(KEY)”であり、ビット列Xをサイクリックキーにより排他的論理和(XOR)演算する関数である。
【0283】
ステップ2において送信する第2キーは、プライベートキーであり、圧縮装置10及び解凍装置50にて変換テーブルの初期状態を作成するために送信される。例えば、圧縮装置10は、実施形態5で示した“ABACDBC(EOK)”に、コマンド“EOK”が所定回数(例えば4回)繰り返された、“ABACDBC(EOK)(EOK)(EOK)(EOK)(EOK)”を出力する動作を行う。これによって、プライベートキーは、解凍装置50に送られる。第2キーは、「第2テーブルの状態を初期化する情報」の一例である。
【0284】
実施形態5において出力される圧縮シンボル列“ABACDBC(EOK)”をなすシンボルのそれぞれは、シリアライザ12から出力される場合、“001000001”、“001000010”、“110
”、“001000011”、“001000100” 、“1100”、“111”、“100”といったシリアルデ
ータとなる。これらのシリアルデータが、スクランブル演算部14に入力される。
【0285】
スクランブル演算部14は、上記のシリアルデータを繋げたビット列をNビット(本実施形態では8)で区切り、サイクリックキーでXOR演算した値を出力する。具体的には、以下のような演算となる。
00100000 xor 10100101 = 10000101
10010000 xor 11010010 = 01000010
10110001 xor 01101001 = 11011000
00001100 xor 10110100 = 10111000
10001001 xor 01011010 = 11010011
10011110 xor 00101101 = 10111111
01001001 xor 10010110 = 11011111
00100100 xor 01001011 = 01101111
【0286】
その後、スクランブル演算部14は、スクランブル演算の結果を、Kビット(本実施形態では4)でシリアライズする。すなわち、4ビットで区切って出力する。この結果、スクランブル演算部14からは、“1000”、“0101”、“0100”、“0010”、“1101”、“
1000”、“1011”、“1000”、“1101”、“0011”、“1011”、“1111”、“1101”、“1111”、“0110”、“1111”といったシリアルデータが暗号データとして出力される。
【0287】
解凍装置50Bでは、ステップ1における第1キーを受け取り解凍装置50に設定する。第1キーは、解凍装置50において復号に用いる共通鍵(スクランブルキー)として扱われる。また、解凍装置50は、第1キーに含まれるパラメータ群に従って、圧縮装置10から受信されるデータの解凍処理を行うためのデシリアライザ51及び解凍器52の仕様設定(コンフィグ設定)を行う。第1キーは、上述した例に従えば以下となる。
(8,8,4,+2,EOK by RETI,f
-1(x),0xA5,2,1)
但し、f
-1(x)は、スクランブル演算に用いる関数f(x)の逆関数であり、“f
-1(x)=X xor cyclic(KEY)”である。
【0288】
上記した暗号データは,解凍装置50のスクランブル逆演算部53に入力される。スクランブル逆演算部53は、Kビット(K=4)からMビット(M=8)へのデシリアライズを行い、f
-1(x)を用いた演算を行う。演算を以下に示す。
10000101 xor 10100101 = 00100000
01000010 xor 11010010 = 10010000
11011000 xor 01101001 = 00100001
10111000 xor 10110100 = 00000100
11010011 xor 01011010 = 00001000
10111111 xor 00101101 = 00001100
11011111 xor 10010110 = 00000000
01101111 xor 01001011 = 00000000
【0289】
スクランブル逆演算部53は、演算の結果を1つなぎにまとめ、Cmarkビット+圧縮シ
ンボルの形式に区切る。この結果、シリアライザ12の出力と同じシリアルデータ、“001000001”、“001000010”、“110”、“001000011”、“001000100” 、“1100”、“111”、“100”が得られる。すなわち、暗号データの復号がなされる。このようなシリアルデータ群を用いて、解凍器52における変換テーブルの初期状態が生成される。解凍装置50では、コマンド“EOK”の繰り返しを検出することで、変換テーブルの初期状態を作成するシンボル列の終端を検出する。
【0290】
以上のようにして、第1キーに基づいて、圧縮装置10と解凍装置50とで、共通の仕様を有する状態への設定が行われ、第2キーに基づいて、圧縮装置10は、圧縮装置10の変換テーブルを初期化する処理を行い、解凍装置50は圧縮装置10から送信された第2キーを用いて解凍装置50の変換テーブルを初期化する。これによって、圧縮装置10と解凍装置50の間で同期のとられた変換テーブルの初期状態が生成される。その後、圧縮装置10は、オリジナルシンボル列の圧縮結果を第1キーで暗号化し、伝送データとして伝送路へ送る。解凍装置50は伝送路から受信される伝送データを第1キーを用いて復号し、解凍処理を行う。実施形態8によれば、伝送路を流れるデータを暗号化することができる。
【0291】
〔実施形態9〕
実施形態1〜8に示した圧縮装置及び解凍装置は、ソフトウェアによって実装されてもよく、ハードウェアによって実装されてもよい。
【0292】
<ソフトウェアによる実装例>
図76は、実施形態1〜8に係る圧縮装置及び解凍装置に適用可能な端末装置の構成例を示す。端末装置30は、汎用又は専用のコンピュータ(情報処理装置)である、汎用のコンピュータとして、例えば、パーソナルコンピュータ(PC)やワークステーションを
適用できる。専用コンピュータとして、例えばサーバマシンを適用できる。また、端末装置30は、固定端末でも無線端末であってもよい。無線端末は、スマートフォンやタブレット端末のようなスマートデバイスを含む。また、端末装置30は、カーナビゲーション装置やゲーム装置なども含み得る。
【0293】
端末装置30は、
図1に示すように、例えば、CPU31にバスを介して接続された記憶装置32,入力装置33,出力装置34,及び通信インタフェース(通信IF)35を含む。
【0294】
記憶装置32は、主記憶装置と補助記憶装置とを含む。主記憶装置は、CPU31の作業領域,プログラムやデータの記憶領域,通信データのバッファ領域として使用される。主記憶装置は、いわゆるメモリであり、例えば、Random Access Memory(RAM),或いはRAMとRead Only Memory(ROM)との組み合わせで形成される。
【0295】
補助記憶装置は、CPU31によって実行されるプログラム,及びプログラムの実行に際して使用されるデータを記憶する。補助記憶装置は、例えば、ハードディスクドライブ(HDD),Solid State Drive(SSD),フラッシュメモリ,Electrically Erasable
Programmable Read-Only Memory(EEPROM)などである。また、補助記憶装置は、情報処理装置に対して着脱自在な可搬性記憶媒体を含む。可搬性記憶媒体は、例えばUniversal Serial Bus(USB)メモリである。
【0296】
入力装置33は、端末装置30に情報やデータを入力するために使用される。入力装置33は、例えば、ボタン、キー、マウスなどのポインティングデバイス,タッチパネルなどを含む。入力装置33は、マイクロフォンのような音声入力装置を含み得る。また、入力装置33は、カメラやイメージスキャナのような撮像装置や、センシングデータを取得するセンサなども含み得る。
【0297】
出力装置34は、情報やデータを出力する。出力装置は、例えばディスプレイ装置である。出力装置34は、スピーカのような音声出力装置を含み得る。通信IF35は、データの伝送路(ネットワーク)に接続される。通信IF35は、例えばLocal Area Network(LAN)カードである。通信IF35は、無線通信用の無線回路を含み得る。無線通信規格に制限はなく、例えば、3G(W−CDMAなど)、Long Term Evolution(LTE)
、無線LAN(IEEE802.11シリーズやWi-Fi)、Bluetooth(登録商標)、BLEなどを適用し得る。但し、通信規格はこれらに制限されない。
【0298】
CPU31は、プロセッサの一例であり、記憶装置32に記憶されたプログラムをロードして実行する。記憶装置32には、オペレーティングシステム(OS)及びアプリケーションプログラムがインストールされている。CPU31がプログラムを実行することによって、端末装置30は、実施形態1〜9に示したような、圧縮装置10、10A、10B、解凍装置50、50A、50Bとして動作する。
【0299】
すなわち、CPU31は、圧縮器11(圧縮器11a〜11c)、シリアライザ12として動作することできる。換言すれば、
図11や
図15に示した動作例の主体となり得る。また、CPU31は、デシリアライザ51、解凍器52(解凍器52a〜52c)として動作する。換言すれば
図21及び
図22に示した動作例の主体となり得る。また、CPU31は、コマンドの認識やコマンドの実行主体となり得る。
【0300】
変換テーブルは、記憶装置32に記憶される。但し、記憶装置32以外にて記憶されてもよい。オリジナルシンボルデータは、入力装置33からの入力や通信IF35による受信によって取得される。通信IF35は、伝送データの送信や受信に使用される。出力装
置34は、解凍によって得られたオリジナルシンボルデータの出力や表示に使用することができる。
【0301】
なお、CPU31で実行される処理は、複数のCPU(プロセッサ)によって実行されても良い。CPU11で実行される処理の少なくとも一部は、例えばDigital Signal Processor(DSP)などのCPU以外のプロセッサによって実行されても良い。また、CPU31で実行される処理の少なくとも一部は、上述したように、ハードウェアによって実行されてもよい。ハードウェアは、例えば、Field Programmable Gate Array(FPGA
)、IC,LSI,Application Specific Integrated Circuit(ASIC)などの集積
回路を含む。また、圧縮装置及び解凍装置は、MCU(Micro Control Unit)やSoC(System-on-a-Chip)のような回路とプロセッサの組み合わせにより実装されてもよい。
【0302】
<ハードウェアによる実装例>
<<圧縮装置の回路構成>>
図77は、圧縮装置10の回路構成例を示す。
図77において、圧縮装置10は、解凍装置オリジナルシンボルデータを保持するフリップフロップ(F/F)61と、テーブル回路62と、変換テーブルの操作回路63と、圧縮/非圧縮の判定回路64と、エントロピー計算部112及びマスク生成部113として動作する回路65と、シリアライザ12として動作するバレルシフタ66とを含む。
【0303】
テーブル回路62は、n個(インデックス“0”〜“n−1”、
図77の例はn=4)の記憶領域621を有しており、記憶領域の621のそれぞれは変換テーブルのエントリとして使用される。記憶領域621に図示する“v”は、エントリが使用中か否か(オリジナルシンボルが記憶されているか否か)を示す情報(ビット)である。例えばvビットが“0”のとき空を示し、vビットが“1”のときに使用中を示す。
【0304】
判定回路64は、比較器641と、セレクタ642とを含む。比較器641には、記憶領域621のそれぞれからの出力と、F/F61からの出力(オリジナルシンボル)とが入力される。比較器641は、オリジナルシンボルの値と記憶領域621のそれぞれからの値とを比較し、一致する記憶領域621が無かった場合には、Cmarkビット“0”を出
力する。これに対し、オリジナルシンボルと同じ値を出力した記憶領域621がある場合には、Cmarkビット“1”と、その記憶領域621のインデックス値(INDEX)とを出力する。
【0305】
セレクタ642には、F/F61のオリジナルシンボルと、比較器641からのインデックス値とが入力される入力端子を有する。また、セレクタ642は、Cmarkビットが入
力される制御端子と、Cmarkビットが“0”のときにオリジナルシンボルを圧縮シンボル
として出力し、Cmarkビットが“1”のときにインデックス値を圧縮シンボルとして出力
する出力端子とを有する。
【0306】
操作回路63は、セレクタ631と、セレクタ632とを有する。セレクタ632は、インデックス“1”〜“n−1”に記憶されたシンボルが入力される入力端子と、オリジナルシンボルと同じシンボルが登録されていた記憶領域621(エントリ)のインデックス値が入力される制御端子と、インデックス値に合致するシンボルをセレクタ631に入力する出力端子とを有する。
【0307】
セレクタ631は、セレクタ632からの出力と、F/F61からのオリジナルシンボルとが入力される入力端子と、Cmarkビットが入力される制御端子とを有する。また、セ
レクタ631は、Cmarkビットが“0”のときにオリジナルシンボルを先頭の(インデッ
クス“0”の)記憶領域621に出力し、Cmarkビットが“1”のときにセレクタ632
からのシンボルをインデックス“0”の記憶領域621に出力する出力端子を有する。
【0308】
記憶領域621のそれぞれは、インデックス値が大きくなる方向において、次の記憶領域621と接続されており、Cmarkビット“1”を受けたとき、その記憶領域621にシ
ンボルが記憶されていれば、そのシンボルを次の記憶領域621に移動させる。但し、インデックス“n−1”の記憶領域621に対しては、シンボルの値が上書きされる。
【0309】
また、記憶領域621には、比較器641からのインデックス値が入力されるようになっている。記憶領域621は、例えば大小の比較器を有し、入力されたインデックス値が自身のそのインデックス値より大きい場合に、記憶しているシンボル値をセレクタ632に入力する。但し、シンボルを記憶している場合(vビット値が“1”の場合)に限る。このようにして、エントリがヒットした場合における、先頭エントリへのシンボル移動や、次のエントリへの移動(プッシュ動作)が行われる。
【0310】
回路65には、インデックス値と、Cmarkビットと、記憶領域621のそれぞれからの
vビットとが入力される。vビットにより、変換テーブルの使用率がわかる。回路65は、Cmarkビットが“1”の場合に、第1又は第2の計算方法によるエントロピー計算を行
う。回路65は、エントロピー計算値に応じたデータマスクを生成し、バレルシフタ66に入力する。
【0311】
なお、実施形態9では、テーブル回路62、判定回路64、操作回路63が、シンボル変換部111としての動作を行う。なお、vビットの代わりに、記憶領域621(エントリ)の使用数を示すカウンタを用いてもよい。
【0312】
バレルシフタ66には、Cmarkビットと、セレクタ642からの圧縮シンボルと、回路
65からのデータマスクとが入力される。バレルシフタ66は、Cmarkビット+圧縮シン
ボルを、Kビット単位で出力する。バレルシフタ66の出力は、伝送データとして解凍装置50へ送信される。
【0313】
なお、Cmarkビットが“0”のとき、エントロピー計算値に関わらず、回路65からデ
ータマスク“11111111”がバレルシフタに入力されるように回路を構成する。或いは、Cmarkビットが“0”のとき、回路65はデータマスクを出力せず、バレルシフタ66が、
圧縮シンボルについてはCmarkビットに続けてそのまま出力するようにしてもよい。
【0314】
<<解凍装置の回路構成>>
図78は、解凍装置50の回路構成例を示す。
図78に示す解凍装置50は、
図77に示した圧縮装置10に対応した構成を有する。解凍装置50は、デシリアライザ51として動作するバレルシフタ76と、回路75と、AND回路77と、F/F71と、テーブル回路72と、変換テーブルの操作回路73と、解凍要否の判定回路74とを有する。
【0315】
バレルシフタ76には、伝送路を通って送られてきた伝送データが入力される。バレルシフタは、Cmarkビットと圧縮シンボルとを分離して出力する。Cmarkビットは回路75に入力され、圧縮シンボルはAND回路77の入力端に入力される。
【0316】
テーブル回路72は、テーブル回路62と同様の構成を有し、複数の(n個の)シンボルの記憶領域721(エントリ)を有している。記憶領域721のそれぞれには、上述したvビットが設定されており、記憶領域721のそれぞれのvビットの状態は、変換テーブルの使用状況を示す情報として回路75に入力される。
【0317】
回路75は、エントロピー計算部522及びマスク生成部523として動作し、エント
ロピー計算と、その計算結果に応じたデータマスクの生成とを行う。そして、回路75は、データマスクをAND回路77の入力端に入力する。なお、バレルシフタ76からAND回路77に入力される圧縮シンボルのビット数は、データマスクに示される有効ビット数で決まる。
【0318】
AND回路77は、圧縮シンボルとデータマスクとのAND演算を行い、その結果をF/Fに出力する。回路75は、Cmarkビットが“1”のとき、エントロピー計算値に応じ
た有効ビット数を示すデータマスクを出力する。Cmarkビットが“0”のとき、エントロ
ピー計算値に関わらず、全ビットが有効であることを示すデータマスク“11111111”を出力する。但し、Cmarkビットが“0”のとき、回路75はデータマスクを出力せず、バレ
ルシフタ66から出力される圧縮シンボルがそのままF/F71に入力される構成を採用してもよい。
【0319】
判定回路74は、セレクタ741と、セレクタ742とを含む。セレクタ741には、記憶領域621のそれぞれからの出力と、F/F71からの出力とが入力される。セレクタ741は、F/F71から出力され、セレクタ741の制御端に入力される圧縮シンボルがオリジナルシンボルである場合、セレクタ741からセレクタ742への出力を停止する。これに対し、制御端から入力される圧縮シンボルがインデックス値である場合、セレクタ741は、インデックス値に対応する記憶領域721から読み出したオリジナルシンボルをセレクタ742に入力する。
【0320】
セレクタ742は、セレクタ741からの入力があれば、その入力を出力し、セレクタ741からの入力がない場合、F/F71からの入力を出力する。これによって、F/F71からの出力がオリジナルシンボルである場合、そのオリジナルシンボルがセレクタ742から出力される。これに対し、F/F71からの出力がインデックス値である場合、セレクタ741から出力されたオリジナルシンボルがセレクタ742から出力される。
【0321】
操作回路73は、セレクタ731と、セレクタ732とを有する。セレクタ732は、インデックス“1”〜“n−1”に記憶されたシンボルが入力される入力端子と、オリジナルシンボルと同じシンボルが登録されていた記憶領域621(エントリ)のインデックス値が入力される制御端子と、インデックス値に合致するシンボルをセレクタ731に入力する出力端子とを有する。
【0322】
セレクタ731は、セレクタ732からの出力と、F/F71からのオリジナルシンボルとが入力される入力端子と、Cmarkビットが入力される制御端子とを有する。また、セ
レクタ631は、Cmarkビットが“0”のときにオリジナルシンボルを先頭の(インデッ
クス“0”の)記憶領域621に出力し、Cmarkビットが“1”のときにセレクタ732
からのシンボルをインデックス“0”の記憶領域721に出力する出力端子を有する。
【0323】
記憶領域721のそれぞれは、インデックス値が大きくなる方向において、次の記憶領域721と接続されており、Cmarkビット“1”を受けたとき、その記憶領域721にシ
ンボルが記憶されていれば、そのシンボルを次の記憶領域721に移動させる。但し、インデックス“n−1”の記憶領域621に対しては、シンボルの値が上書きされる。
【0324】
また、記憶領域721には、F/F71からのインデックス値が入力されるようになっている。記憶領域721は、例えば大小の比較器を有し、入力されたインデックス値が自身のそのインデックス値より大きい場合に、記憶しているシンボル値をセレクタ732に入力する。但し、シンボルを記憶している場合(vビット値が“1”の場合)に限る。このようにして、エントリがヒットした場合における、先頭エントリへのシンボル移動や、次のエントリへの移動(プッシュ動作)が行われる。
【0325】
実施形態9に示すように、圧縮装置及び解凍装置は、ソフトウェアによる実装でもハードウェアによる実装でもよい。
【0326】
〔実施形態10〕
実施形態10として、実施形態1で説明したエントロピー計算方法(第1の計算方法)と異なるエントロピーの第2の計算方法について説明する。エントロピーの第2の計算方法では、過去Tシンボルに対する圧縮処理における変換テーブルの使用率及びエントリのヒット率を用いてエントロピーを算出する。例えば、第1の計算方法におけるceil(log
2k)の代わりに、以下の式2を用いてエントロピー値Eを求める。
式2:E=ceil(log
2((使用率/ヒット率)*エントリ数))
【0327】
使用率及びヒット率は、過去T(Tは正の整数)シンボルの圧縮結果に対する変換テーブルの使用率及びヒット率を示す。但し、エントロピー値Eの範囲は、0≦E≦Mである。Mは圧縮器・解凍器のデータマスクの最大ビット長である。また、Eが負数の場合は0とする。
【0328】
第2の計算方法は、過去のヒット率、テーブル使用率の統計値に依存するため、圧縮の際にオリジナルシンボルがヒットするインデックスが、式2を用いたエントロピーの計算によって得られた数値が示すインデックスの範囲を越える場合がある(例えばE=2である場合に、インデックス“7”がヒットする場合など)。このため、実施形態1と異なる方法で圧縮・解凍処理を行う。
【0329】
図79は、実施形態10に係る、第2の計算方法を用いる圧縮器の処理例を示すフローチャートである。実施形態10に係る圧縮器11の処理は、実施形態1における圧縮器の処理(
図15)との比較において、S12とS13との間にS12Aの処理が設けられている点において、実施形態1と異なる。
【0330】
S12Aにおいて、圧縮器11は、S12でヒットしたエントリのインデックス値が2のE乗以上であるか否かを判定する。インデックス値が2のE乗以上でない(2のE乗未満)と判定される場合、S13に処理が進み、実施形態1と同様の動作となる。これに対し、インデックス値が2のE乗以上と判定される場合、圧縮器11は、S14の処理を行い、S15の処理においてCmarkビット“0”を出力する。すなわち、インデックス値が
2のE乗以上であれば、ミスヒット(未登録)として扱う。
【0331】
図80は、実施形態10に係る、第2の計算方法を用いる解凍器の処理例を示すフローチャートである。実施形態10に係る解凍器52の処理は、実施形態1における解凍器の処理(
図22)との比較において、S38,S39,S40,S41の代わりに、S38A,S38B,S38C,S38Dの処理が設けられている点において、実施形態1と異なる。
【0332】
S31において、Cmarkビット“0”と判定された場合、解凍器52は、変換テーブル
の、インデックス値が2のE乗以降のエントリに関して、圧縮シンボルの検索を行う(S38A)。圧縮シンボルがヒットしたと判定される場合(S38B、Y)、解凍器52は、第1の操作方法のヒット時の動作(
図16C参照)を行う(S38C)、すなわち、ヒットした圧縮シンボルをオリジナルシンボル(解凍シンボル)として出力するとともに、圧縮シンボルを所定位置(例えばエントリの先頭)に移動し、先頭エントリからヒットしたエントリの一つ前のエントリのそれぞれに登録されたシンボルを次のエントリに移動する。
【0333】
これに対し、圧縮シンボルがヒットしなかった(ミスヒット)と判定される場合(S38B、N)、解凍器52は、第1の操作方法のミスヒット時の動作(
図16(B))を行う(
図38D)。すなわち、解凍器52は、圧縮シンボルを先頭エントリに登録し、先頭エントリ以降のエントリに登録されているシンボルを次のエントリへ移動する。S38C又はS38Dの処理が終了すると、処理がS36に進む。
図79及び
図80の処理の説明は、上述した点を除いて、
図15及び
図22に示した処理と同じであるので、同じ処理については説明を省略する。
【0334】
図81A及びB、
図81A及びB、
図82A及びB、
図83A及びB、
図84A及びB、並びに
図85は、エントロピーの第2の計算方法の例を示す。過去T=5回のシンボルの入力(圧縮処理)における使用率及びヒット率を用いてエントロピー値を計算する。なお、この計算例では、エントリがヒットすることによる登録位置の変更や、ヒット数又はミスヒット数に伴うエントリの削除は行われないものとする。エントロピー値Eの計算式は、式2、すなわちE=ceil(log
2((使用率/ヒット率)*エントリ数))である。Eの範囲は0≦E≦Mであり、Mはデータマスクの最長ビット数である。
【0335】
図81Aは、計算例における初期状態を示す。入力データの例として“ABCABABDAB”のシンボル列が入力される場合を仮定する。
図79Aの左上に示すように、初期状態の変換テーブル(エントリ数=4、インデックス“0”〜“3”、従ってM=2)には、シンボルは登録されていないものとする。
図81Aの下側に示した表は、過去に入力された5つのシンボル(4入力前、3入力前、2入力前、現在)のそれぞれについての変換テーブルの使用率及びヒット率、並びに平均値を示す。
図79Aに示す例では、使用率の平均の初期値を“0/20”とし、ヒット率の平均の初期値を“5/5”としている。但し、使用率の平均の初期値を“4/4”とし、ヒット率の平均の初期値を“0”に設定してもよい。この場合、エントロピー値Eは0となる。
【0336】
図81Bは、シンボル“A”が入力され、変換テーブルに登録された場合の計算例を示す。現在の使用率は“1/4”となり、その平均値は“1/20”となる。また、ヒット率の平均値は“4/5”となる。そして、式2によるエントロピーの計算値は“−2”となる。計算結果がEのとり得る範囲より小さいため、エントロピー値Eはその範囲の下限である0とされる。
【0337】
図82Aは、シンボル“A”の次のシンボル“B”が入力され、変換テーブルに登録された場合の計算例を示す。現在の使用率は“2/4”となり、その平均値は“3/20”となる。また、ヒット率の平均値は“3/5”となる。このときのエントロピーの計算値及びEの値はともに“0”である。なお、このときのシンボル“B”に対する圧縮処理では、シンボル“B”はミスヒットとなり、シンボル“B”が圧縮シンボルとして出力されるため、データマスクは使用されない。使用エントリ数が2である一方、データマスクが示す有効ビット数は0ビットとなるが、データマスクが使用されないため、解凍側で齟齬が生じない。
【0338】
図82Bは、シンボル“B”の次のシンボル“C”が入力され、変換テーブルに登録された場合の計算例を示す。現在の使用率は“3/4”となり、その平均値は“6/20”となる。また、ヒット率の平均値は“2/5”となる。このときのエントロピーの計算値は“1.58”であり、エントロピー値Eは2となる。
【0339】
図83Aは、シンボル“C”の次のシンボル“A”が入力され、インデックス“2”がヒットした場合の計算例を示す。現在の使用率は“3/4”となり、その平均値は“9/20”となる。また、ヒット率の平均値は“2/5”となる。このときのエントロピーの計算値は“2.16”であるが、Eの範囲の上限値“2”を超えるため、Eの値は上限値
“2”とされる。
【0340】
図83Bは、シンボル“A”の次のシンボル“B”が入力され、インデックス“1”がヒットした場合の計算例を示す。現在の使用率は“3/4”となり、その平均値は“12/20”となる。また、ヒット率の平均値は“2/5”となる。このときのエントロピーの計算値は“2.58”であるが、Eの範囲の上限値“2”を超えるため、Eの値は上限値“2”とされる。
【0341】
図84Aは、シンボル“B”の次のシンボル“A”が入力され、インデックス“2”がヒットした場合の計算例を示す。現在の使用率は“3/4”となり、その平均値は“14/20”となる。また、ヒット率の平均値は“3/5”となる。このときのエントロピーの計算値は“2.22”であるが、Eの範囲の上限値“2”を超えるため、Eの値は上限値“2”とされる。
【0342】
図84Bは、シンボル“A”の次のシンボル“B”が入力され、インデックス“1”がヒットした場合の計算例を示す。現在の使用率は“3/4”となり、その平均値は“15/20”となる。また、ヒット率の平均値は“4/5”となる。このときのエントロピーの計算値は“1.90”であり、エントロピー値Eは2となる。
【0343】
図85Aは、シンボル“B”の次のシンボル“D”が入力され、シンボルが登録された場合の計算例を示す。現在の使用率は“4/4”となり、その平均値は“16/20”となる。また、ヒット率の平均値は“4/5”となる。このときのエントロピーの計算値及びEの値は“2”である。
【0344】
図85Bは、シンボル“D”の次のシンボル“A”が入力され、インデックス“3”がヒットした場合の計算例を示す。現在の使用率は“4/4”となり、その平均値は“17/20”となる。また、ヒット率の平均値は“4/5”となる。このときのエントロピーの計算値は“2.08”であるが、Eの範囲の上限値“2”を超えるため、Eの値は上限値“2”とされる。
【0345】
図86は、シンボル“A”の次のシンボル“B”が入力され、インデックス“2”がヒットした場合の計算例を示す。現在の使用率は“4/4”となり、その平均値は“18/20”となる。また、ヒット率の平均値は“4/5”となる。このときのエントロピーの計算値は“2.17”であるが、Eの範囲の上限値“2”を超えるため、Eの値は上限値“2”とされる。
【0346】
〔計算方法の性能評価〕
実施形態1〜10で説明したエントロピー計算がシャノンの平均情報量を正しく表現できているかを実験的に証明する。実施形態1で説明した圧縮装置10を用いて、上述したエントロピーの第1の計算方法及び第2の計算方法を用いて、オリジナルシンボルが入力される毎に、エントロピーを計算して記録し、オリジナルシンボル列全体の処理が終わった場合における第1及び第2の計算方法による計算結果の平均値の夫々と、オリジナルシンボル列全体のシャノンの平均情報量とを比較する。
【0347】
実験において、圧縮装置10の構成に関して、第2の計算方法(実施形態10)における、過去のシンボル数Tは100とした。また、変換テーブルのエントリ数は256とした。但し、4回のヒットをトリガにエントロピーカリングを実施した。また、実験では、k=8の設定を採用した。このため、エントリがヒットした場合に、そのエントリのインデックスから8つ遡ったインデックス位置にエントリの登録内容が移動し、その移動後の位置から、ヒットしたエントリ位置までにあるエントリの内容を一つずつずらす。
【0348】
1〜256の中から種類数を選択可能なデータに関して、種類数を決定する(例えば128(0〜127)種類)。種類数が128のデータに関して、ランダムにデータ(オリジナルシンボル)を出現させたときのオリジナルシンボル列に関して、オリジナルシンボルの出現毎の、エントロピー計算を行い、その全体の平均値を求める。また、上記オリジナルシンボル列に関してシャノンの平均情報量を求め、比較を行う。
【0349】
図36は、実験の結果を示すグラフであり、縦軸がエントロピー値を示し、横軸はデータ(シンボル)の種類数を示す。点線がシャノンの平均情報量を示すグラフであり、太線が第1の計算方法(式1)を用いた場合のグラフであり、細線が第2の計算方法(式2)を用いた場合のグラフを示す。破線は、データの種類数が64種類の場合を示す。
【0350】
64種類のデータが出現する場合、6ビットで表現可能であるため、シャノンの平均情報量のグラフと、第2の計算方法のグラフとの値はほぼ6となる。これより、式2を用いる第2の計算方法から得られる値は、エントロピーの理論値に一致しているといえる。第1の計算方法のグラフでは、エントロピー値は5.66となり、ほぼ理論値となる。もっとも、理論値よりやや低くなるため、少ないビット数で圧縮シンボルを表現可能であることを示している。
【0351】
〔実施形態11〕
実施形態11について説明する。実施形態11は、実施形態4及び実施形態5の変形例にあたる。実施形態4及び5では、変換テーブルのリザーブされたエントリ領域については、登録されたシンボルが固定され、エントリのヒット/ミスヒットに伴うテーブル更新の対象となっていない(
図54A、
図66Aを参照)。
【0352】
しかし、RERI、RETOを行う場合において、リザーブされたエントリが空にならないように制御すれば、エントリがヒットしたときの交換対象とすることも可能である。例えば、
図53Cの状態において、実施形態4で説明した
図54Aに示す処理を行う代わりに、
図87Aに示す処理を行ってもよい。すなわち、シンボル“A”が入力され、インデックス“3”がヒットした場合に、圧縮器11が、シンボル“A”を先頭のインデックス“0”に移動し、シンボル“C”,“F”及び“B”のそれぞれを次のエントリに移動させてもよい。
【0353】
或いは、
図65Cの状態において、実施形態4で説明した
図54Aに示す処理を行う代わりに、
図87Aに示す処理を行ってもよい。すなわち、シンボル“A”が入力され、インデックス“2”がヒットした場合に、圧縮器11が、シンボル“A”を先頭のインデックス“0”に移動し、シンボル“コマンド1”,及び“B”のそれぞれを次のエントリに移動させてもよい。
【0354】
この場合、“コマンド1”は、オリジナルシンボルとして扱われ、“コマンド1”のエントリ内容はコマンドとして意味を成さなくなるが、圧縮・解凍は正しく動作する。従って、リザーブエントリの内容は書き換わるが、RETI、RETOは実現できる。但し、テーブルリセットコマンドやエントロピーカリングでリザーブされたエントリを空にしないことが条件となる。このような制御をした方が、リザーブされたエントリを犠牲にしないため、圧縮率が良くなると考えられる。
【0355】
上述した実施形態の構成は、適宜組み合わせることができる。実施形態2以降に示す構成は、オプションであって、必須の構成要件ではない。逆に言えば、実施形態2以降で説明した構成、特に、実施形態3及び4にて説明したコマンドを圧縮側から解凍側へ送るための構成は、エントロピー計算によってインデックスの有効ビット数を可変にする圧縮装
置及び解凍装置以外に適用可能である。例えば、参考例に示した圧縮装置及び解凍装置に適用が可能である。
【解決手段】圧縮装置が、入力されたシンボルが複数のエントリを有する第1テーブルに未登録の場合に、前記複数のエントリのうちの所定のエントリに前記シンボルを登録するとともに、非圧縮を示す指標データと前記シンボルとを出力する処理と、前記シンボルが前記テーブルに登録済みの場合に、圧縮を示す指標データと、前記シンボルが登録されているエントリの位置を示すとともに前記シンボルのサイズより小さいサイズを有する位置情報とを出力する処理と、前記複数のエントリの使用状況に応じて前記位置情報のサイズを変更する処理とを行う。