JP2014183551A - データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム - Google Patents
データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム Download PDFInfo
- Publication number
- JP2014183551A JP2014183551A JP2013058644A JP2013058644A JP2014183551A JP 2014183551 A JP2014183551 A JP 2014183551A JP 2013058644 A JP2013058644 A JP 2013058644A JP 2013058644 A JP2013058644 A JP 2013058644A JP 2014183551 A JP2014183551 A JP 2014183551A
- Authority
- JP
- Japan
- Prior art keywords
- symbol
- symbol string
- block
- data
- code
- 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.)
- Granted
Links
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/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
-
- 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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【解決手段】データ圧縮装置2の探索手段2aは、圧縮対象のデータ1を、データ1内の記号の配列を調査し、先に出現した第1の記号列1aと記号の配列が一致する第2の記号列1bを探索する。データ圧縮装置2の符号化手段2bは、第1の記号列1aの先頭の記号が属するブロックを特定する情報を含む符号に、第2の記号列1bを符号化する。データ復元装置4の符号取得手段4aは、圧縮データ3aの先頭から順に、符号を取得する。データ復元装置4の復元手段4bは、第2の記号列1bの符号を取得した場合には、第1の記号列1aの先頭の記号が属するブロックを特定する情報に基づいて、記憶手段5から、復元された第1の記号列1aの先頭の記号が属するブロック以降の1以上のブロックを取得し、第2の記号列1bを復元する。
【選択図】図1
Description
〔第1の実施の形態〕
まず、第1の実施の形態について説明する。第1の実施の形態は、圧縮されたデータの復元時に数バイト単位でメモリアクセスを行うことでメモリアクセス回数を低減し、復元速度を高速化するものである。例えばコンピュータは、長いデータ長単位でメモリアクセスを行うことで、処理を高速化することができる。特に最近のCPUが有するレジスタのサイズは、32ビット(4バイト)や64ビット(8バイト)が一般的となっており、長いサイズのデータをそのままレジスタに格納し、レジスタ内でコピーなどの操作を行うことが可能である。そこで1命令で複数データを扱うSIMD(Single Instruction Multiple Data)命令を用い、16バイトまたは32バイト単位でメモリのデータをレジスタにコピーすることで、データのコピーを高速に行うことができる。なおSIMD命令を有する命令セットには、例えばSSE(Streaming SIMD Extensions)がある。
符号取得手段4aは、圧縮データ3aの先頭から順に、符号を取得する。符号取得手段4aは、取得した符号を、復元手段4bに渡す。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、データの復元時にレジスタ内でのデータのシフトによって、符号に対応するデータのコピーを可能とし、処理効率を向上させたものである。
図4は、符号のデータ構造の一例を示す図である。第2の実施の形態では、2バイト(16ビット)の符号に符号化される。一致記号列がある場合は、相対ブロック数、シフトバイト数、ストアブロック数、およびストアバイト数を示す値に符号化される。また一致記号列がない場合は、不一致符号、シフトバイト数、ストアブロック数、ストアバイト数を示す値に符号化される。相対ブロック数は、5ビットのデータであり、「1−31」の数値である。シフトバイト数は3ビットのデータであり、「0−7」の数値である。ストアブロック数は5ビットのデータであり、「1−31」の数値を示す。ストアバイト数は3ビットのデータであり、「0−7」の数値を示す。ここで一致記号列がない場合、相対ブロック数の領域に「0」が設定される。この「0」値が、不一致符号である。
図5は、一致記号列がある場合の符号の一例を示す図である。圧縮対象データ31は、8バイトのブロック単位に分けられている。各ブロックには「0」から昇順のアドレスが付与されている。ブロック内の各記号(1バイト)には、左から順に、「0」から昇順のバイト番号が付与されている。
図8は、データの圧縮・復元の機能を示すブロック図である。コンピュータ100は、圧縮部110、圧縮データ記憶部120、復元部130、および復元データ記憶部140を有している。
圧縮部110は、データ取得部111、バッファ112、一致検出部113、相対ブロック数算出部114、シフトバイト数算出部115、ストアブロック数算出部116、ストアバイト数算出部117、および符号生成部118を有する。
一致検出部113は、符号化部112bの先頭から始まるできるだけ長い記号列に一致する記号列を、バッファ112の参照部112a内の記号列から検出する。一致検出部113は、一致する記号列が見つかった場合、参照部112a内の該当する記号列の位置と、記号列の長さとを特定する。また一致検出部113は、一致する記号列が見つからなかった場合、一致する記号列が見つからなかった記号列の長さを特定する。一致検出部113は、一致する記号列が見つからなかった場合、不一致符号を示す値「0」を5ビットで表し、その値を符号生成部118に出力する。また一致検出部113は、一致する記号列が見つからなかった場合、不一致であることを示す情報を符号生成部118に出力してもよい。その場合、不一致であることを示す情報を受け取った符号生成部118が符号を生成する際に、その符号の先頭の5ビットに「0」を設定する。
復元部130は、符号解析部131、ブロック取得部132、レジスタ群133、記号列生成部134、およびブロック出力部135を有する。
ブロック出力部135は、レジスタ群133内に復元された記号列を、ブロック単位で復元データ記憶部140に格納する。
次に、圧縮処理の手順について説明する。
[ステップS101]データ取得部111は、バッファ112の符号化部112bの容量分の記号列を、圧縮対象データの先頭から順に符号化部112bに格納する。なお符号化部112b内の符号化された記号は参照部112aにシフトされる。そのため、データ取得部111は、記号列が符号化されるごとに、符号化されたデータ量分の未圧縮の記号列を符号化部112bに格納する。
[ステップS102]一致検出部113は、一致する記号列があるか否かを判断する。一致する記号列がある場合、処理がステップS104に進められる。一致する記号列がない場合、処理がステップS103に進められる。
[ステップS121]符号解析部131は、圧縮データの先頭から順に符号を読み出す。そして符号解析部131は、読み出した符号が、一致記号列がある場合の符号か否かを判断する。例えば符号の最初の5ビットの値が「0」でなければ、一致記号列がある場合の符号である。一致記号列がある場合の符号であれば、処理がステップS122に進められる。また一致記号列がない場合の符号であれば、処理がステップS124に進められる。
ロード用レジスタ41,42は、ブロック取得部132が取得したブロック単位の記号列を格納するレジスタである。例えば8バイトの2つのレジスタが、ロード用レジスタ41,42として使用される。
未ストアバッファ44は、復元された記号列のうち、復元データ記憶部140に格納されていない記号列を格納しておくバッファである。例えば8バイトの1つのレジスタが、未ストアバッファ44として使用される。
次に、レジスタ内での記号列の操作を含めた、圧縮・復元の詳細な処理手順について説明する。
[ステップS201]データ取得部111が圧縮対象のデータをバッファ112に格納すると共に、一致検出部113がパラメータを初期化する。初期化されるパラメータは、以下の通りである。
current_p=0
code_p=0
literal_num=0
pre_storeB=0
「current_p」は、現在、一致・不一致の探索対象となっている記号の位置が、圧縮対象データ31の何バイト目かを示している。「code_p」は、生成した符号の圧縮データ32内での格納位置が、圧縮データ32の何バイト目かを示している。「literal_num」は、一致する記号列なしと判定された記号列の長さを示している。「pre_storeB」は、直前の符号の復元により未ストアバッファ44に格納された、記号列のバイト数(現在のストアバイト数)を示している。
shiftB=[8+{(current_p - literal_num) % 8} - (code_p + 2) % 8] % 8; ・・・(1)
「=」は代入演算子である。「%」は剰余を示す演算子である。「current_p - literal_num」は、不一致記号列の先頭の記号の位置を示している。「current_p - literal_num」を8で除算したときの剰余は、圧縮対象データ31内での不一致記号列の先頭の記号のブロック内での位置を表している。「(code_p + 2)」は、圧縮データ32における不一致の場合の符号(2バイト)の次の位置を示しており、この位置が、不一致記号列の圧縮データ32内での位置となる。「(code_p + 2)」を8で除算した剰余は、圧縮データ32内での不一致記号列の先頭の記号のブロック内での位置を表している。この式(1)により、圧縮対象データ31内での不一致記号列の先頭の記号のブロック内での位置と、圧縮データ32内での不一致記号列の先頭の記号のブロック内での位置との差分が、シフトバイト数「shiftB」に設定される。
storeBL = (pre_storeB + literal_num) / 8; ・・・(2)
「/」は、除算の商を計算する演算子である。
storeB = (pre_storeB + literal_num) % 8; ・・・(3)
[ステップS207]符号生成部118は、ステップS206で算出された値に基づいて、符号を生成する。例えば、符号生成部118は、以下の処理を行う。
CodeBuff[code_p] = 0 | shiftB; ・・・(4)
CodeBuff[code_p+1] = storeBL<<3 | storeB; ・・・(5)
「|」は、論理和を示している。「<<」は、右側の数値分(バイト)の左シフトを示している。「CodeBuff[]」は、圧縮データ32を格納するバッファ(圧縮データ記憶部120)を示している。例えば「CodeBuff[code_p]」は、圧縮データ32内の「code_p」で示される記憶領域を示している。式(4)により、圧縮データ32に、不一致符号とシフトバイト数とを示す1バイトの値(符号の前半)が設定される。式(4)で設定された値に続けて、式(5)により、ストアブロック数とストアバイト数とを示す1バイトの値(符号の後半)が設定される。その後、圧縮データ32内での次の格納位置が、2バイト先に更新される。すなわち、「code_p +=2」が実行される。「+=」は、左のパラメータへの右側の数値の加算を示している。
CodeBuff[code_p] = OriBuff[current_p - literal_num]; ・・・(6)
「OriBuff[]」は、圧縮対象データ31が格納されたバッファを示している。[]内の値により、バッファ内の記憶領域が特定される。式(6)により、不一致記号列のうちのコピーが未了の記号が、圧縮データ32にコピーされる。その後、「literal_num」がデクリメント(literal_num --)される。また「code_p」がインクリメントされ、圧縮データ32内での次の格納位置が1バイト先に更新される(code_p ++)。
relativeBL = (current_p % 8) - (match_p % 8); ・・・(7)
「(current_p % 8)」により、符号化部112b内の一致した記号列の先頭の記号を含むブロックのアドレスが得られる。「(match_p % 8)」により、参照部112a内の一致した記号列の先頭の記号を含むブロックのアドレスが得られる。式(7)により、それらのアドレスの差分が得られる。
shiftB = {8+(current_p % 8) - (match_p % 8)} % 8; ・・・(8)
ストアブロック数「storeBL」は、例えば以下の式で計算される。
storeBL = (pre_storeB + match_len) / 8; ・・・(9)
ストアバイト数「storeB」は、例えば以下の式で計算される。
storeB = (pre_storeB + match_len) % 8; ・・・(10)
[ステップS211]符号生成部118は、ステップS210で算出された値に基づいて、符号を生成する。例えば、符号生成部118は、以下の処理を行う。
CodeBuff[code_p] = (relativeBL<<3) | shiftB; ・・・(11)
CodeBuff[code_p+1] = (storeBL<<3) | storeB; ・・・(12)
式(11)により、圧縮データ32に、相対ブロック数とシフトバイト数とを示す1バイトの値(符号の前半)が設定される。式(11)で設定された値に続けて、式(12)により、ストアブロック数とストアバイト数とを示す1バイトの値(符号の後半)が設定される。さらに、現在のストアバイト数「pre_storeB」に、ストアバイト数「storeB」が設定される(pre_storeB = storeB)。その後、圧縮データ32内での次の格納位置が、2バイト先に更新される(code_p +=2)。また「current_p」に、一致する記号列の長さ「match_len」が加算される(current_p += match_len)。
図13は、レジスタを効率的に利用した復元処理の手順の一例を示すフローチャートである。
ori_p8 = 0
code_p = 0
pre_storeB = 0
「ori_p8」は、復元データ33における、次に復元するブロックのアドレスを示す。「code_p」は、次に復元する符号の位置を示す。
relativeBL = CodeBuff[code_p] >> 3; ・・・(13)
shiftB = CodeBuff[code_p] & 0x07; ・・・(14)
storeBL = CodeBuff[code_p+1] >> 3; ・・・(15)
storeB = CodeBuff[code_p+1] & 0x07; ・・・(16)
「>>」は、右側の数値分(バイト)の右シフトを示している。「&」は、論理積の演算子である。式(13)では、「CodeBuff[code_p] >> 3」により、符号の前半の1バイトが右に3ビットシフトされ、上位5ビットの値のみが残される。残された5ビットで示される値が、相対ブロック数(relativeBL)に設定される。式(14)では、「CodeBuff[code_p] & 0x07」により、符号の前半1バイトの値と、上位5ビットが「0」であり下位3ビットが「1」のビット列との、ビットごとの論理和演算が行われる。これにより、符号の前半1バイトの下位3ビットの値みが残される。残された3ビットで示される値が、シフトバイト数(shiftB)に設定される。式(15)では、「CodeBuff[code_p+1] >> 3」により、符号の後半の1バイトが右に3ビットシフトされ、上位5ビットの値のみが残される。残された5ビットで示される値が、ストアブロック数(storeBL)に設定される。式(16)では、「CodeBuff[code_p+1] & 0x07」により、符号の後半の1バイトの値と、上位5ビットが「0」であり下位3ビットが「1」のビット列との、ビットごとの論理和演算が行われる。これにより、符号の後半1バイトの下位3ビットの値のみが残される。残された3ビットで示される値が、ストアバイト数(storeB)に設定される。その後、「code_p」で示す位置が、2バイト分先に進められる(code_p += 2)。
copy_p8 = OriBuff8 + ori_p8 -relativeBL; ・・・(17)
「OriBuff8」は、復元データ33が格納された領域の先頭を示すポインタである。その後、処理がステップS227に進められる。
copy_p8 = CodeBuff8 + (code_p / 8); ・・・(18)
「CodeBuff8」は、圧縮データ32が格納された領域の先頭を示すポインタである。その後、「code_p」で示す位置が、不一致記号列の次の符号の位置に進められる。例えば、以下の式により、「code_p」が更新される。
code_p+=storeBL*8+storeB-pre_storeB; ・・・(19)
[ステップS227]ブロック取得部132は、現在のストアバイト数(pre_storeB)よりもシフトバイト数(shiftB)の方が大きいか否かを判断する。シフトバイト数(shiftB)の方が大きければ、処理がステップS228に進められる。現在のストアバイト数がシフトバイト数以上であれば、処理がステップS229に進められる。
load_data2 = *(copy_p8); copy_p8++; ・・・(20)
load_data1 = *(copy_p8); copy_p8++; ・・・(21)
store_data = {(load_data2<<8*8) | load_data1)}>>(shiftB*8); ・・・(22)
「load_data2」は、ロード用レジスタ41への格納データを示す。「load_data1」は、ロード用レジスタ42への格納データを示す。「store_data」は、マージ用レジスタ43への格納データを示す。「*(copy_p8)」は、「copy_p8」で示される位置の1ブロックを取得することを示す。
load_data1 = *(copy_p8);copy_p8++; ・・・(23)
store_data = load_data1>>(shiftB*8); ・・・(24)
[ステップS230]記号列生成部134は、マージ用レジスタ43に格納した記号列と、未ストアバッファ44内の記号列とをマージする。例えば、以下の命令により、マージ処理を行うことができる。
store_data = (BLBuff & MASK1[pre_storeB])|(store_data & MASK2[pre_storeB]);
・・・(25)
「BLBuff」は、未ストアバッファ44の格納データを示す。「MASK1[]」は、以下のようなマスクデータである。
MASK1[] = {0x00 00 00 00 00 00 00 00,
0xFF 00 00 00 00 00 00 00,
0xFF FF 00 00 00 00 00 00,
0xFF FF FF 00 00 00 00 00,
...
0xFF FF FF FF FF FF FF FF}
「MASK1[pre_storeB]」により、現在のストアバイト数(pre_storeB)に応じたマスクデータが得られる。例えば、現在のストアバイト数(pre_storeB)が「7」であれば、「MASK1[pre_storeB]」は、「0xFF FF FF FF FF FF FF 00」となる。「BLBuff & MASK1[pre_storeB]」によって、未ストアバッファ44から、ストアバイト数分の記号列が抽出される。
MASK2[] = {0xFF FF FF FF FF FF FF FF,
0x00 FF FF FF FF FF FF FF,
...
0x00 00 00 00 00 00 00 00}
「MASK2[pre_storeB]」により、現在のストアバイト数(pre_storeB)に応じたマスクデータが得られる。例えば、現在のストアバイト数(pre_storeB)が「7」であれば、「MASK2[pre_storeB]」は、「0x00 00 00 00 00 00 00 FF」となる。「store_data & MASK2[pre_storeB]」によって、マージ用レジスタ43の先頭から、ストアバイト数分の記号列が消去される。従って、式(25)により、ロード用レジスタ41,42からマージ用レジスタ43にコピーされた記号列と、未ストアバッファ44内のストアバイト数分の記号列とがマージされる。
OriBuff8[ori_p8] = store_data; ・・・(26)
その後、「ori_p8」の値がインクリメントされ(ori_p8 ++;)、「storeBL」の値がデクリメントされる(storeBL --;)。
load_data2 = *(copy_p8);copy_p8++; ・・・(27)
store_data = {(load_data1<<8*8) | load_data2)}>>(shiftB*8); ・・・(28)
load_data1 = load_data2; ・・・(29)
式(27)により、次のブロックがロード用レジスタ41に格納される。式(28)により、ロード用レジスタ42内を記号列が左に1ブロック分シフトした値と、ロード用レジスタ41内の記号列とが、マージ用レジスタ43内にコピーされる。そして、マージ用レジスタ43内の記号列が、シフトバイト数分、右にシフトされる。式(29)により、ロード用レジスタ41内の記号列が、ロード用レジスタ42にコピーされる。その後、処理がステップS231に進められる。
BLBuff = store_data; ・・・(30)
pre_storeB = storeB; ・・・(31)
[ステップS235]符号解析部131は、圧縮データ32の復元が終了したか否かを判断する。例えば符号解析部131は、最後の符号の解析が終了した場合、復元が終了したと判断する。復元が終了した場合、ブロック出力部135が、未ストアバッファ44内の先頭からストアバイト数分の記号列を復元データ33に追加し、復元処理を終了する。復元が終了していなければ、処理がステップS222に進められる。
以上説明したように、第2の実施の形態では、コピー元の記号列が属するブロックを相対ブロック数で指定しているため、データ復元時における復元データ33へのアクセスを、ブロック単位で行うことができる。これにより、コピー元の符号を符号(バイト)単位で読み出す場合に比べ、メモリアクセス回数を低減させることができる。その結果、データ復号処理時間が短縮される。
第2の実施の形態では、圧縮データ32の1つのブロックに、符号と不一致記号列とが混在している。そのため圧縮データからの符号の読み出しは、符号ごとに行っている。そこで、データ圧縮の際に、1つのブロックに符号をまとめて格納することで、圧縮データ32からの符号の読み出しも、ブロック単位で行うことが可能となる。
1a 第1の記号列
1b 第2の記号列
1c 第3の記号列
1−1〜1−3 ブロック
2 データ圧縮装置
2a 探索手段
2b 符号化手段
3 記録媒体
3a 圧縮データ
4 データ復元装置
4a 符号取得手段
4ba,4bb レジスタ
4b 復元手段
5 記憶手段
5a 復元データ
Claims (20)
- 圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査し、先に出現した第1の記号列と記号の配列が一致する第2の記号列を探索する探索手段と、
前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号を生成し、前記第2の記号列を該符号に符号化する符号化手段と、
を有するデータ圧縮装置。 - 前記符号化手段は、前記第1の記号列の先頭の記号が属するブロックのアドレスと、前記第2の記号列の先頭の記号が属するブロックのアドレスとの差分を、前記第1の記号列の先頭の記号が属するブロックを特定する情報とする、
ことを特徴とする請求項1記載のデータ圧縮装置。 - 前記符号化手段は、前記第1の記号列の先頭の記号のブロック内での位置と、前記第2の記号列の先頭の記号のブロック内での位置とのずれ量を、前記第2の記号列の符号に含めることを特徴とする請求項1または2記載のデータ圧縮装置。
- 前記符号化手段は、前記第2の記号列の先頭の記号が属するブロックのアドレスと、前記第2の記号列の最後の記号が属するブロックのアドレスとの差分を、前記第2の記号列の符号に含めることを特徴とする請求項1乃至3のいずれかに記載のデータ圧縮装置。
- 前記符号化手段は、前記第2の記号列の最後の記号が属するブロックの先頭から、該ブロック内での該最後の記号の位置までの差分を、前記第2の記号列の符号に含めることを特徴とする請求項1乃至4のいずれかに記載のデータ圧縮装置。
- 前記符号化手段は、先に調査した範囲に記号の配列が一致する記号列がない第3の記号列に基づいて、一致する記号列がないことを示す情報を含む符号を生成し、前記第2の記号列の符号、前記第3の記号列の符号、および前記第3の記号列のコピーを含む圧縮データを生成することを特徴とする請求項1乃至5のいずれかに記載のデータ圧縮装置。
- 前記符号化手段は、前記第3の記号列の先頭の記号の、前記データのブロック内での位置と、前記圧縮データを複数のブロックに分けたときの、前記第3の記号列のコピーの先頭の記号の、前記圧縮データのブロック内での位置との差分を、前記第3の記号列の符号に含める、
ことを特徴とする請求項6記載のデータ圧縮装置。 - 前記符号化手段は、前記第3の記号列の先頭の記号が属するブロックのアドレスと、前記第3の記号列の最後の記号が属するブロックのアドレスとの差分を、前記第3の記号列の符号に含めることを特徴とする請求項6または7記載のデータ圧縮装置。
- 前記符号化手段は、前記第3の記号列の最後の記号が属するブロックの先頭から、該ブロック内での該最後の記号の位置までの差分を、前記第3の記号列の符号に含めることを特徴とする請求項6乃至8のいずれかに記載のデータ圧縮装置。
- 前記符号化手段は、前記圧縮データを複数のブロックに分け、符号と前記第3の記号列のコピーとを、異なるブロックに格納することを特徴とする請求項6乃至9のいずれかに記載のデータ圧縮装置。
- 圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査した場合に、先に出現した第1の記号列と記号の配列が一致する第2の記号列が、前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号に符号化された圧縮データの先頭から順に、符号を取得する符号取得手段と、
取得した符号から順に元の記号列に復元して、復元した記号列をブロック単位で記憶手段に格納し、前記第2の記号列の符号を取得した場合には、前記第1の記号列の先頭の記号が属するブロックを特定する情報に基づいて、前記記憶手段から、復元された前記第1の記号列の先頭の記号が属するブロック以降の1以上のブロックを取得し、該1以上のブロックから前記第1の記号列をコピーして、前記第2の記号列を復元する復元手段と、
を有するデータ復元装置。 - 前記圧縮データにおける前記第2の記号列の符号には、前記第1の記号列の先頭の記号が属するブロックを特定する情報として、前記第1の記号列の先頭の記号が属するブロックのアドレスと、前記第2の記号列の先頭の記号が属するブロックのアドレスとの差分が示されており、
前記復元手段は、復元した前記第2の記号列が属するブロックのアドレスよりも、該差分だけ前のアドレスのブロック以降の1以上のブロックを、前記記憶手段から取得する、
ことを特徴とする請求項11記載のデータ復元装置。 - 前記圧縮データにおける前記第2の記号列の符号には、前記第1の記号列の先頭の記号のブロック内での位置と、前記第2の記号列の先頭の記号のブロック内での位置とのずれ量が含まれており、
前記復元手段は、前記記憶手段から取得したブロック内の前記第1の記号列の記号を、前記ずれ量だけシフトして、直前に復元された記号列と結合する、
ことを特徴とする請求項11または12記載のデータ復元装置。 - 前記圧縮データにおける前記第2の記号列の符号には、前記第2の記号列の先頭の記号が属するブロックのアドレスと、前記第2の記号列の最後の記号が属するブロックのアドレスとの差分が含まれており、
前記復元手段は、前記第2の記号列を復元したとき、該差分で示された数のブロックを前記記憶手段に格納することを特徴とする請求項11乃至13のいずれかに記載のデータ復元装置。 - 前記圧縮データにおける前記第2の記号列の符号には、前記第2の記号列の最後の記号が属するブロックの先頭から、該ブロック内での該最後の記号の位置までの差分が含まれており、
前記復元手段は、前記第2の記号列を復元したとき、復元された記号列の後方から、該差分で示された範囲の記号列を保持し、該記号列の後方に、次に取得した符号に基づいて復元した記号列を結合することを特徴とする請求項11乃至14のいずれかに記載のデータ復元装置。 - 前記圧縮データには、先に調査した範囲に記号の配列が一致する記号列がない第3の記号列の符号と、前記第3の記号列のコピーとが含まれており、
前記復元手段は、前記第3の記号列の符号を取得すると、前記圧縮データから、前記第3の記号列のコピーをブロック単位で取得する、
ことを特徴とする請求項11乃至15のいずれかに記載のデータ復元装置。 - コンピュータが、
圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査し、先に出現した第1の記号列と記号の配列が一致する第2の記号列を探索し、
前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号を生成し、前記第2の記号列を該符号に符号化する、
データ圧縮方法。 - コンピュータが、
圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査した場合に、先に出現した第1の記号列と記号の配列が一致する第2の記号列が、前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号に符号化された圧縮データの先頭から順に、符号を取得し、
取得した符号から順に元の記号列に復元して、復元した記号列をブロック単位で記憶手段に格納し、
前記第2の記号列の符号を取得した場合には、前記第1の記号列の先頭の記号が属するブロックを特定する情報に基づいて、前記記憶手段から、復元された前記第1の記号列の先頭の記号が属するブロック以降の1以上のブロックを取得し、該1以上のブロックから前記第1の記号列をコピーして、前記第2の記号列を復元する、
データ復元方法。 - コンピュータに、
圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査し、先に出現した第1の記号列と記号の配列が一致する第2の記号列を探索し、
前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号を生成し、前記第2の記号列を該符号に符号化する、
処理を実行させるデータ圧縮プログラム。 - コンピュータに、
圧縮対象のデータを、2以上の記号を含む複数のブロックに分け、該データ内の記号の配列を先頭から順に調査した場合に、先に出現した第1の記号列と記号の配列が一致する第2の記号列が、前記第1の記号列の先頭の記号が属するブロックを特定する情報を含む符号に符号化された圧縮データの先頭から順に、符号を取得し、
取得した符号から順に元の記号列に復元して、復元した記号列をブロック単位で記憶手段に格納し、
前記第2の記号列の符号を取得した場合には、前記第1の記号列の先頭の記号が属するブロックを特定する情報に基づいて、前記記憶手段から、復元された前記第1の記号列の先頭の記号が属するブロック以降の1以上のブロックを取得し、該1以上のブロックから前記第1の記号列をコピーして、前記第2の記号列を復元する、
処理を実行させるデータ復元プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013058644A JP6048251B2 (ja) | 2013-03-21 | 2013-03-21 | データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム |
US14/180,436 US20140289208A1 (en) | 2013-03-21 | 2014-02-14 | Data compression apparatus, data compression method, data decompression apparatus, and data decompression method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013058644A JP6048251B2 (ja) | 2013-03-21 | 2013-03-21 | データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014183551A true JP2014183551A (ja) | 2014-09-29 |
JP6048251B2 JP6048251B2 (ja) | 2016-12-21 |
Family
ID=51569916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013058644A Expired - Fee Related JP6048251B2 (ja) | 2013-03-21 | 2013-03-21 | データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20140289208A1 (ja) |
JP (1) | JP6048251B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111723053A (zh) * | 2020-06-24 | 2020-09-29 | 北京航天数据股份有限公司 | 一种数据的压缩方法及装置、解压方法及装置 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10102215B2 (en) * | 2015-03-27 | 2018-10-16 | Intel Corporation | Apparatus for hardware implementation of lossless data compression |
CN108141225B (zh) * | 2016-07-14 | 2020-10-27 | 华为技术有限公司 | 使用simd引擎的通用数据压缩 |
US11509328B2 (en) * | 2018-05-31 | 2022-11-22 | Microsoft Technology Licensing, Llc | Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets |
US11652495B2 (en) * | 2021-09-14 | 2023-05-16 | Mastercard International Incorporated | Pattern-based string compression |
CN117335810A (zh) * | 2022-06-23 | 2024-01-02 | 加特兰微电子科技(上海)有限公司 | 数据压缩、解压缩方法及装置 |
CN117200803A (zh) * | 2023-03-01 | 2023-12-08 | 山东华科信息技术有限公司 | 用于电力数据的数据解压缩系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0378322A (ja) * | 1989-08-22 | 1991-04-03 | Fujitsu Ltd | データ圧縮方式 |
JP2000315954A (ja) * | 1999-03-22 | 2000-11-14 | Lucent Technol Inc | 入力データストリームの圧縮方法とその装置 |
WO2009057459A1 (ja) * | 2007-10-30 | 2009-05-07 | Nec Corporation | データ圧縮方法 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6535642B1 (en) * | 1999-07-13 | 2003-03-18 | Microsoft Corporation | Approximate string matching system and process for lossless data compression |
JP2001357048A (ja) * | 2000-06-13 | 2001-12-26 | Hitachi Ltd | ブロックソート圧縮データの検索方法、および検索に適したブロックソート圧縮法の符号化方法 |
US6744388B1 (en) * | 2002-06-19 | 2004-06-01 | Xilinx, Inc. | Hardware-friendly general purpose data compression/decompression algorithm |
US8244677B2 (en) * | 2004-01-23 | 2012-08-14 | Elad Baron | Focal point compression method and apparatus |
GB0416481D0 (en) * | 2004-07-23 | 2004-08-25 | Hewlett Packard Development Co | Method, apparatus and system for data block rearrangement for LZ data compression |
US8417730B2 (en) * | 2008-04-14 | 2013-04-09 | Objectif Lune Inc. | Block compression algorithm |
US8688621B2 (en) * | 2008-05-20 | 2014-04-01 | NetCee Systems, Inc. | Systems and methods for information compression |
US8108353B2 (en) * | 2008-06-11 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for block size optimization in de-duplication |
US8032495B2 (en) * | 2008-06-20 | 2011-10-04 | Perfect Search Corporation | Index compression |
US8447740B1 (en) * | 2008-11-14 | 2013-05-21 | Emc Corporation | Stream locality delta compression |
US8106799B1 (en) * | 2009-03-23 | 2012-01-31 | Marvell International Ltd. | Data compression and decompression using parallel processing |
US9195675B2 (en) * | 2011-02-24 | 2015-11-24 | A9.Com, Inc. | Decoding of variable-length data with group formats |
US8456331B2 (en) * | 2011-04-15 | 2013-06-04 | Cavium, Inc. | System and method of compression and decompression |
US20130099946A1 (en) * | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
US9703796B2 (en) * | 2011-12-06 | 2017-07-11 | Brocade Communications Systems, Inc. | Shared dictionary between devices |
US9098202B2 (en) * | 2012-04-27 | 2015-08-04 | Hitachi, Ltd. | Storage apparatus and data management method |
US8812243B2 (en) * | 2012-05-09 | 2014-08-19 | International Business Machines Corporation | Transmission and compression of genetic data |
-
2013
- 2013-03-21 JP JP2013058644A patent/JP6048251B2/ja not_active Expired - Fee Related
-
2014
- 2014-02-14 US US14/180,436 patent/US20140289208A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0378322A (ja) * | 1989-08-22 | 1991-04-03 | Fujitsu Ltd | データ圧縮方式 |
JP2000315954A (ja) * | 1999-03-22 | 2000-11-14 | Lucent Technol Inc | 入力データストリームの圧縮方法とその装置 |
WO2009057459A1 (ja) * | 2007-10-30 | 2009-05-07 | Nec Corporation | データ圧縮方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111723053A (zh) * | 2020-06-24 | 2020-09-29 | 北京航天数据股份有限公司 | 一种数据的压缩方法及装置、解压方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
JP6048251B2 (ja) | 2016-12-21 |
US20140289208A1 (en) | 2014-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6048251B2 (ja) | データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム | |
JP5895545B2 (ja) | プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 | |
US10044370B1 (en) | Lossless binary compression in a memory constrained environment | |
WO2019153700A1 (zh) | 编解码方法、装置及编解码设备 | |
US8400335B2 (en) | Using variable length code tables to compress an input data stream to a compressed output data stream | |
EP3120266B1 (en) | Ozip compression and decompression | |
US9337863B1 (en) | Methods and apparatus for rational compression and decompression of numbers | |
US8669889B2 (en) | Using variable length code tables to compress an input data stream to a compressed output data stream | |
JP5812188B2 (ja) | プログラム、圧縮データ生成方法、伸張方法、情報処理装置、および記録媒体 | |
WO2014106782A1 (en) | High bandwidth compression to encoded data streams | |
US20200294629A1 (en) | Gene sequencing data compression method and decompression method, system and computer-readable medium | |
US20190052284A1 (en) | Data compression apparatus, data decompression apparatus, data compression program, data decompression program, data compression method, and data decompression method | |
US8515882B2 (en) | Efficient storage of individuals for optimization simulation | |
US20130262808A1 (en) | Compression and decompression system, compression apparatus, decompression apparatus and compression and decompression method | |
US10103747B1 (en) | Lossless binary compression in a memory constrained environment | |
US10380240B2 (en) | Apparatus and method for data compression extension | |
US9455742B2 (en) | Compression ratio for a compression engine | |
US9479195B2 (en) | Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device | |
US8463759B2 (en) | Method and system for compressing data | |
US8140488B2 (en) | Reducing memory required for prediction by partial matching models | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
US10681106B2 (en) | Entropy sharing across multiple compression streams | |
US20150193462A1 (en) | Control method and control device | |
US8373584B2 (en) | Compressing and decompressing data | |
KR101705461B1 (ko) | 문자열 압축 및 해제를 위한 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20151106 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160720 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160809 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20161003 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20161025 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161107 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6048251 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |