JP5778595B2 - データ圧縮方法及び装置 - Google Patents

データ圧縮方法及び装置 Download PDF

Info

Publication number
JP5778595B2
JP5778595B2 JP2012025250A JP2012025250A JP5778595B2 JP 5778595 B2 JP5778595 B2 JP 5778595B2 JP 2012025250 A JP2012025250 A JP 2012025250A JP 2012025250 A JP2012025250 A JP 2012025250A JP 5778595 B2 JP5778595 B2 JP 5778595B2
Authority
JP
Japan
Prior art keywords
character string
block
data
compression
search
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.)
Active
Application number
JP2012025250A
Other languages
English (en)
Other versions
JP2013162474A (ja
Inventor
篤司 新美
篤司 新美
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tamura Corp
Original Assignee
Tamura Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tamura Corp filed Critical Tamura Corp
Priority to JP2012025250A priority Critical patent/JP5778595B2/ja
Publication of JP2013162474A publication Critical patent/JP2013162474A/ja
Application granted granted Critical
Publication of JP5778595B2 publication Critical patent/JP5778595B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は、メモリ容量や、CPUの処理能力に制限のあるコンピュータシステムに適したデータ圧縮方法及び装置に関する。
データの圧縮アルゴリズムとして、ハッシュ値を用いた辞書や、ハフマン符号による圧縮アルゴリズムが考案されてきた。また、冗長部分を探索するために、スライドウインドウを形成して処理していたが、このような処理は、データを繰り返し比較しなければならないので、大きなメモリやCPU処理能力を必要とする。このためメモリ容量や、CPUの処理能力に制限のある組み込み型のコンピュータシステムに採用することは難しいという課題があった。
例えば、特許文献1は、辞書式の一例であって、過去に出現したデータ系列の中から一致する最大長の部分列を探索して、その部分列の位置と一致長を符号化して出力するものであり、過去に出現したデータ系列は辞書に登録する。すなわち、サンプルデータ中に出現する文字列を先頭のn文字が等しい文字列のグループに分類した後、各グループから最頻出文字列を検出し、該検出した最頻出文字列を辞書に登録する。
特許文献2は、辞書式の他の例であって、入力されたテキストデータを複数のブロックに分割し、文字列と符号とが対応付けられて格納された基準辞書に基づき、処理対象ブロックに出現する文字列のうち、基準辞書に登録されていない文字列と、基準辞書において処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた差分辞書を生成する。そして、作成した差分辞書と基準辞書とに基づいて生成した処理対象辞書を参照し、処理対象ブロックに出現する文字列を対応する符号に置き換える。
特許文献3は、ランレングス式の一例であって、データを複数のブロック単位に分割し、分割された1ブロック中の1データを基準データとして、当該ブロック内の隣接するデータ間の差分データを算出する。算出された差分データの絶対値における有効絶対値から圧縮後のデータのデータ長を算出し、算出されたデータ長に基づいて複数の圧縮データを生成する。
特開2007−124561号公報 特開2011−114546号公報 特開2009−207064号公報
前記の特許文献1や2のような辞書式やハフマン符号などの従来技術は、圧縮対象のデータの格納メモリとは別に、大きなメモリ容量や高い処理能力を有するCPUが必要である。そのため、メモリ容量や高い処理能力のCPUを持つことのできない組み込み型コンピュータシステムにおいては、従来のデータ圧縮技術を採用することは不可能であり、データ圧縮を行わずに通信を行ったり蓄積を行ったりしていた。このため、高効率の通信や、蓄積を行うことができなかった。
特許文献3のように、対象となるデータをブロックに分割したランレングスによる圧縮は簡便ではあるが、圧縮効率が悪いという欠点があった。
本発明は、上記のような従来技術の課題を解決するもので、その目的は辞書方式やハフマン符号方式、スライドウインドウを用いることなく、少ないメモリ容量と低い処理能力のCPUによっても、高い圧縮効率を実現することができるデータ圧縮方法及び装置を提供することにある。
上記の目的を達成するために、本発明のデータ圧縮方法及び装置は、次のような特徴を有する。
(A)入力装置から圧縮対象のデータを読み込むデータ読込部と、圧縮対象のデータを分割するブロック特定部と、分割されたブロックの文字列データを他のブロックの文字列と比較することで圧縮可能部分を探索する圧縮部分探索部を備える。
(B)前記ブロック特定部は、圧縮対象の文字列の中から予め指定したバイト数の検索対象文字列を順次読み込むと共に、予め指定されたバイト数の指定文字列を取得し、これらを記憶する記憶部と、この記憶部に記憶されている検索対象文字列の中から前記指定文字列と同一の文字列を検索する検索部と、前記検索部による検索結果に従い圧縮対象の文字列をブロック化する分割処理部とを有する。
(C)前記分割処理部は、
(1) 同一の文字列が発見された場合は、発見された文字列の直前までを1ブロックとする。
(2) 前記(1) において、発見された文字列部分で2文字連続して同じ文字が続く場合は、連続した2文字の間までを1ブロックとする。
(3) 同一の文字列が発見されなかった場合は、検索対象文字列の全体を1ブロックとする。
という条件で、しかも、前記(2) (1) (3) の優先順序に従って、圧縮対象の文字列をブロック化する。
(D)前記圧縮部分探索部は、前記分割処理部によって分割された各ブロック間の文字列を比較することで、冗長性除去による圧縮とランレングス圧縮を行う。
また、本発明のデータ圧縮方法は、次のような処理を順次行うことを特徴とする。
(A)圧縮対象の文字列の中から予め指定したバイト数の検索対象文字列を順次読み込む。
(B)前記検索対象文字列の中から、予め指定されたバイト数の指定文字列と同一の文字列を検索する。
(C)前記検索処理の結果、
(1) 同一の文字列が発見された場合は、発見された文字列の直前までを1ブロックとする。
(2) 前記(1) において、発見された文字列部分で2文字連続して同じ文字が続く場合は、連続した2文字の間までを1ブロックとする。
(3) 同一の文字列が発見されなかった場合は、検索対象文字列の全体を1ブロックとする。
という条件を、前記(2) (1) (3) の優先順序に従って適用することにより、圧縮対象の文字列をブロック化する。
(D)前記分割された各ブロック間の文字列を比較することで、冗長性除去による圧縮とランレングス圧縮を行う
本発明によれば、圧縮対象の文字列をブロック化することで、各ブロックの内容に応じて、冗長性除去による圧縮とランレングス圧縮の2つの圧縮方法を採用することが可能になり、メモリの少ないまたは処理能力の低い組み込み型コンピュータシステムにおいても高い圧縮率を得ることができるデータ圧縮方法及び装置を提供することが可能となる。
本発明の第1実施形態に係るデータ圧縮装置を示すブロック図である。 第1実施形態におけるデータ圧縮方法の全体構成を示すフローチャートである。 第1実施形態における1ブロックの探索処理を示すフローチャートである。 第1実施形態における最大冗長度の探索処理を示すフローチャートである。 第1実施形態における1ブロックの探索処理を説明するデータ構成図である。 第1実施形態における最大冗長度の探索処理を説明するデータ構成図である。 第2実施形態における1ブロックの探索処理を示すフローチャートである。 第2実施形態における1ブロックの探索処理を説明するデータ構成図である。 図7のフローチャートにおける文字列の探索処理の一例を示すデータ構造図である。 図7のフローチャートにおける文字列の探索処理の他の例を示すデータ構造図である。
1.第1実施形態
以下、本発明の実施形態を、図1及び図2に従って説明する。
[構成]
本実施形態のデータ圧縮装置は、データの圧縮処理を行う圧縮処理部1、対象のデータを入力する入力装置2、圧縮後のデータを出力する出力装置3、及びこれらを制御する制御部4とから構成されている。
圧縮処理部1は、入力装置2から圧縮対象のデータを読み込むデータ読込部11、読み込んだ圧縮対象のデータや圧縮処理の過程で記憶すべき各種の情報を記憶する記憶部12を備えている。圧縮処理部1は、圧縮対象のデータを所定の条件に従って分割するブロック特定部13、分割されたブロックの文字列データを他のブロックの文字列と比較することで圧縮可能部分を探索する圧縮部分探索部14及び出力バッファ15を備えている。
データ読込部11は、制御部4からの指示に基づいて、入力装置2から文字データを読み込むものである。本実施形態において、圧縮対象の文字データとしては、例えば、各種機器の設定値、計測値、制御コマンドなど、数字、アルファベットその他複数種類の文字が連続した文字列データが用いられる。記憶部12は、データ読込部11が読み込んだ文字列データを一時的に保存するものであって、入力バッファとして使用される。
ブロック特定部13は、圧縮対象のデータを図5に示すような下記の条件に従って、小さいブロックに分割する。
(1) 先頭の1バイトと同じ値(同じ文字)の位置の直前まで
(2) 2文字連続して同じ値(同じ文字)が続く場合、連続した2文字の間
(ただし、前記(1) と(2) の条件が重なる場合は、(2) を優先する)
(3) 前記(1) (2) の条件が満たされなかった場合は、予め決めておいた最大長を1ブロックとする。
なお、本実施形態では、前記(3) の最大長を128バイトとしたが、この値に限定されることなく、圧縮対象のデータの種類やハードウェアリソースに応じて適宜設定することができる。
このような処理を行うため、ブロック特定部13は、圧縮対象の文字列の中から予め指定したバイト数の検索対象文字列を順次読み込むと共に、予め指定されたバイト数の指定文字列を取得し、これらを記憶する記憶部131と、この記憶部131に記憶されている検索対象文字列の中から前記指定文字列と同一の文字列を検索する検索部132と、前記検索部132による検索結果に従い圧縮対象の文字列をブロック化する分割処理部133とを有する。すなわち、この分割処理部133が、前記(1) から(3) に示す処理に従い、圧縮対象の文字列をブロック化し、その結果を圧縮部分探索部14に出力する。
前記圧縮部分探索部14は、記憶部12に記憶されている圧縮対象の文字列の中から、圧縮対象部分を探索するものである。この圧縮部分探索部14は、圧縮対象のデータを有するブロック(注目ブロックという)と、注目ブロックよりも前のブロックの文字列を比較して、同一の文字列の有無を探索する。
その場合、圧縮部分探索部14は、図6に示すような次の2つの処理を行う。
(a) 前のブロックの先頭の1バイトから注目ブロックの文字列を比較する処理(冗長性除去による圧縮)
(b) 前のブロックの最後の1バイトと注目ブロックの文字列を比較する処理(ランレングス圧縮)
この場合、注目するブロックの前ブロック(前ブロックは複数あってよい)に対して、前ブロックの先頭及び最後のバイトのそれぞれと、注目するブロックの先頭からバイト単位のコンペアを行い一致する長さを最大65536バイトまで求める(65536という値は参考値である、ハードウエアリソースにより決める)。また、前ブロックに対して、n個前のブロックに対しても一致サイズを求めてもよい。
圧縮部分探索部14は、これらの一致サイズのあらかじめ決めておいたサイズ以上の中から最長の一致サイズを持つものを採用し、これを冗長ブロックとして、そのブロックの識別子と、先頭または最後の1バイトから文字列が一致することを、圧縮データとして出力バッファ15に格納する。具体的には、圧縮部分探索部14は、前記(a) (b) の処理の結果得られた情報、例えば圧縮対象となったブロックの識別子、圧縮部分が発見されたブロックが注目ブロックの何個前であるか、先頭/最終バイト、一致したバイト数(文字列の数)などを出力バッファ15に書き出す機能を有する。
出力バッファ15は、圧縮部分探索部14からの圧縮部分に関する情報を一時的に記憶し、予め設定されたタイミングで外部の出力装置3に出力するものである。この出力バッファ15は、ハードウェアとしては記憶部12の一部に設けられていても良いが、本実施形態では、圧縮対象のデータを保存したり圧縮処理の途中で得られた情報を記憶する処理と、出力データに関する処理を区別するために、出力バッファ15を独立して説明している。
[作用]
前記の様な構成を有する本実施形態の作用を、図2〜図4に示すフローチャートにより説明する。
(I)全体的な処理…図2
図2は、データ圧縮方法の全体的な処理を示すものである。この図2の処理は、記憶部12に読み込んだ全データについて、1ブロックの探索処理と最大冗長度の探索処理を交互に行うことで、全データを1つずつ順番にブロック化しながらその都度最大冗長度の探索を行うものである。
なお、図2では、まず最大冗長度の探索を行い、その結果に従ってブロック化を実施するというループが示されているが、最初の1ブロックのみをまずブロック化して、その後、最大冗長度の探索と2ブロック目以降のブロック化を実行する様なループを有するフローチャートでも、同一の結果を得ることができる。
図2において、制御部4の指令に基づいて、圧縮処理部1のデータ読込部11が、入力装置2から圧縮対象のデータを受信すると、そのデータは記憶部12を構成するバッファ内に記憶される(ステップ21)。この場合、データ読込部11は、入力装置2からの全データを読み込んでも良いし、記憶部12に先読みバッファを設けて、そこに最大ブロック長以上を読み込んでおいても良い。
次に、圧縮部分探索部14は、記憶部12に記憶されているデータの先頭の位置を注目点に設定し(ステップ22)、この注目点からデータを構成する文字列中の圧縮部分、すなわち、連長圧縮及び冗長圧縮の対象となる部分があるか否かを探索する(ステップ23)。この圧縮部分の探索は、制御部4が、圧縮処理部1に設けられた圧縮部分探索部14を呼び出して、図4のフローチャートに示す処理を実行することにより行われる。なお、この圧縮部分探索の詳細は、後述する。
なお、読み込んだ全データの先頭位置(先頭バイト)を注目点とした最初の圧縮部分の探索処理は、データがブロック化されていないため、ステップ23において圧縮部分を発見することはできない。この最初の探索処理やその後作成したブロックに対して探索処理を実施した結果、圧縮部分が発見されなかった場合は(ステップ24のNO)、図3のフローチャートに示す1ブロックの探索処理を呼び出して、次の1ブロックの特定処理を行う(ステップ25)。なお、この1ブロックの特定処理の詳細は、後述する。
ステップ25において、1ブロックの特定が行われた後は、見つけた1ブロックを無圧縮のブロックとして、その識別子とサイズ及びデータ部分を出力バッファ15に書き出す(ステップ26)。同時に、見つけた1ブロックの先頭の位置と長さを、次のループの圧縮部分探索のために記憶部12に記憶する(ステップ27)。
その後、出力バッファ15のデータを出力装置3に書き出し(ステップ28)、全データについてそのブロック化と圧縮部分の探索が終わったかを確認する(ステップ29)。そして、すべてのデータについてブロック化と圧縮部分の探索が終わった場合には、データ圧縮処理を終了する(ステップ29のYES)。ブロック化と圧縮部分の探索するデータが残っている場合には、ステップ23に戻って圧縮部分の探索処理を行う(ステップ29のNO)。
一方、前記ステップ23において、圧縮部分の探索を行った結果、圧縮部分が発見された場合には(ステップ24のYES)、出力バッファ15に次の情報を書き込む(ステップ30)。
(1) 圧縮部分のブロックの識別子
(2) ブロックの先頭のバイトから圧縮部分を探索した冗長圧縮であるか、ブロックの最後のバイトから圧縮部分を探索した連長圧縮であるかの区別
(3) 圧縮の長さ
次いで、圧縮部分として処理した長さを1ブロックとして、そのブロックの先頭の位置と、ブロックの長さを記憶部12に記憶する(ステップ31)。この記憶した情報により、圧縮部分がなかったと判断して1ブロックの探索処理を行ったステップ25の場合と同様に、そのループにおける1ブロックの特定が可能となる。
その後、ステップ30で出力バッファ15に書き込んだ(1) 〜(3) の情報を、出力バッファ15から外部の出力装置3に書き出すことで、このループの処理を終了する。以下、ステップ29において、すべてのループの処理が終わったか否かを確認して、全部のデータについて処理が終了した場合には、読込部11によって読み込んだデータに対する圧縮処理を終了する。
(II)1ブロックの探索処理…図3
前記図2に示した全体処理のステップ25で呼び出される1ブロックの探索処理について、図3に従って説明する。制御部4により、1ブロックの探索処理が呼び出されると、ブロック特定部13が、記憶部12に読み込まれている全データの中から、予め定めた1ブロックの最大長分のデータ(本実施形態では128バイト)を読み込む(ステップ31)。
次いで、ブロック特定部13が、記憶部12に記憶されているデータの先頭を注目点とし、その位置の値をc1に設定する。この注目点の位置の値=c1は、先頭と同じ文字を有するバイトを見つけるためのものである(ステップ32)。この状態で、設定された注目点の位置の値を示す変数cprvにc1を、ブロック長を示す変数nlenに1を代入する(cprv=c1:nlen=1:ステップ33)。
前記のようにして注目点が設定された後、ブロック特定部13は、注目点を1バイト進め、進んだ後の注目点の位置の値を変数ccurに代入する(ステップ34)。次いで、1バイト進んだ注目点の位置の値ccurと、1バイト進む前の設定された注目点の位置の値cprvとを比較し、両者の値が等しい場合(ccur=cprv)には(ステップ35のYES)、連続する2バイトを見付けたので、2文字連続して同じデータが続くとして、そこをブロックの切れ目とする(ステップ36)。そして、ブロック長をその時点のnlenとする。この処理は、図5に示す1ブロックの探索処理を説明するデータ構造図中の(2)に相当する。
一方、1バイト進んだ注目点の位置の値ccurと、1バイト進む前の設定された注目点の位置の値cprvが異なる場合(ccur≠cprv)には(ステップ35のNO)、最初の注目点の位置の値c1と1バイト進んだ注目点の位置の値ccurとを比較する(ステップ37)。両者の値が等しい場合は(ccur=c1:ステップ37のYES)、1バイト進んだ注目点の次の位置の値cnxtを読み込み、これを1バイト進んだ注目点の位置の値ccurと比較する(ステップ38)。
両者が等しい場合、すなわちccur=cnxtの場合には(ステップ38のYES)、連続する2バイトを見付けたので、そこをブロックの切れ目とし、ブロック長をnlen+1とする(ステップ39)。この処理は図5に示すデータ構造図中の(3)に相当する。
両者が異なる場合、すなわちccur≠cnxtの場合には(ステップ38のNO)、先頭の1バイト目と同じバイトを見付けたので、そこをブロックの切れ目とし、ブロック長をnlenとする(ステップ40)。この処理は図5に示すデータ構造図中の1に相当する。このようにすることで、図5において、(1)と(2)の条件が重なる場合に、(2)を優先することができる。
前記ステップ37において、最初の注目点の位置の値c1と1バイト進んだ注目点の位置の値ccurが異なる場合は(ccur≠c1:ステップ37のNO)、ブロック長をnlen=nlen+1とし(ステップ41)、すべてのバイトに対する処理が終了しているか否かを判定する(ステップ42)。処理が終了していない場合には(ステップ42のNO)、再びステップ34に戻り、注目点を1バイト進めてデータの最後のバイトまで前記の処理を繰り返す。
一方、処理が終了した場合には(ステップ42のYES)、記憶部12に読み込んだデータ中には、図5の(1)〜(3)の条件を満たす文字列が見つからなかったとして、全データを1ブロックとする。すなわち、図5の(4)に示すように、予め決めておいた最大長を1ブロックとする。
このようにして、本実施形態では、ブロック特定部13によって全データが1つあるいは複数のブロックに分割されるので、この処理が終了した後は、制御部4は、図2に示す全体処理のステップ26に戻って圧縮処理を続行する。
(III)圧縮部分の探索
図2に示した全体処理のステップ23で呼び出される圧縮部分の探索処理について、図4のフローチャートに従って説明する。
本実施形態において、図5に示すような条件でデータのブロック分けを行った場合に、ブロック間には以下のような特徴を持つ。
(a) 隣り合うブロックの先頭の1バイトが同じ値になることが多い。
(b) 前のブロックの最後の1バイトが、先頭のブロックの先頭の1バイトと同じ値になることが多い。そこで、本実施形態では、前記(a)の特徴に着目して、冗長圧縮を行い、(b)の特徴に着目して連長圧縮を行う。
冗長圧縮に関しては、圧縮部分探索部14により、記憶部12に記録されているブロック化されたデータについて、最終のブロックを注目ブロックに設定し、その注目ブロックの先頭のバイトを注目点に設定する(ステップ41)。同時に、探索開始時の処理として、最大冗長度を示す長さデータの値をクリアする。
次に、注目点ブロックの1つ前のブロックに対して、注目点と1つ前のブロックの先頭のバイトからのデータの比較を行い、一致するデータの長さを求める(ステップ42)。この処理は、図6に示すデータ構造図中の(1)の処理に相当する。
比較の結果、データの長さが今までのブロックで一致したデータの長さよりも長い場合(ステップ43のYES)は、そのブロックが注目ブロックの何個前のブロックであるか、及び今までより長い一致したデータの長さを記憶部12に記憶する(ステップ44)。
なお、注目ブロックの1つ前のブロックの場合には、ステップ41で長さデータをクリアしているので、1つ前のブロックで一致した長さが一番長くなる。
このようにして、冗長圧縮の処理を行った後は、連長圧縮処理として、注目ブロックの最初のバイト(注目点)を開始点として、1つ前のブロックの最後のバイトと注目ブロックの各バイトとの比較を行い、一致する長さを求める(ステップ45)。この処理は、図6に示すデータ構造図中の(2)の処理に相当する。
求めた長さが今までよりも長い場合には(ステップ46のYES)、そのブロックが注目ブロックの何個前のブロックであるか、及び今までより長い一致したデータの長さを記憶部12に記憶する(ステップ47)。
その後、探索対象のブロックを1つさかのぼる(ステップ48)。そして、ループを繰り返す場合には(ステップ49のNO)、ステップ42に戻って、前記の処理を繰り返す。
一方、さかのぼるブロックが存在しないか、予め指定しておいた回数分ブロックをさかのぼった場合は(ステップ49のYES)、ループを終了して、コール元である図2の圧縮処理のフローチャートのステップ23に対して、一致した長さが最大のブロックの位置と、一致サイズを格納して、最大冗長度の探索処理を終了する。
この圧縮部分の探索処理において、ランレングス圧縮、冗長性探索のどちらも有効な圧縮ができなかった場合(すべてのループにおいて、ステップ43及びステップ46がNO)には、圧縮できないブロックとして、識別子のデータを格納する。しかし、前ブロックの先頭バイトを同じバイトを持つブロックの場合には、それを示す識別子をおき、先頭バイトを格納しない。このことにより、ブロックのデータ長が十分小さい場合には、識別子分のデータを増やしてしまうことなくブロック情報で圧縮データの中に格納できる。
また、上記のどの方法にも当てはまらない場合には、識別子1バイト以上と圧縮していないデータを格納する。
このような処理を行う本実施形態では、注目ブロックの先頭バイトからの文字列と直前のブロックの最終バイトとの比較結果である連長圧縮が、ランレングス圧縮と同じ結果を生むことから、この方法により、ランレングス圧縮と、冗長性除去による圧縮の2つの圧縮方式の両方を実施できる。
また、全データ探索を行っていないためスライディングウインドウを用いた冗長性の探索よりは、探索の精度が落ちるが、大量のデータコンペアを行う必要が無いため、処理能力に制限のあるCPUやメモリ容量が少ない機器においても、早い探索が可能である。
特に、本実施の形態において、ステップ42及びステップ45における文字列の比較処理は、ブロックを越えて予め定めた最大バイト(例えば65536バイト)まで実施することができる。そのようにすれば、同じバイトが連続する場合最大サイズのデータを数バイトにまで圧縮できる。なお、この最大バイトは、ハードウェアのリソースなどにより適宜設定することができる。
2.第2実施形態
第2実施形態は、第1実施形態における1ブロックの探索処理を、別の条件で行うものである。すなわち、第1実施形態は1ブロックの探索処理を1バイトのデータを注目点として、同一のデータが存在しないか、あるいは同じ値のデータ(文字)が連続していないかを基準としてブロックを特定した。これに対して、第2実施形態は、複数バイト(複数文字)を注目点として探索を行い、ブロックを特定する。
具体的には、図8に示すように、次の処理を行う。
(1) 予め設定した指定バイト分(例えば128バイト)の文字列を検索対象として、128バイトの文字列中に予め定めた複数バイトの文字列、図8では3バイト(A,B,C)の文字列と同じパターンの文字列(A,B,C)が見つかるまで探索を行う。そして、予め定めた3バイトの文字列が(A,B,C)のように異なる文字で構成されている場合には、見つかった同じ文字列の前のバイトまでを1ブロックとする。
(2) 前記(1) と同様にして検索を行い、予め定めた3バイトの文字列が(A,A,A)のように同一の文字で構成されている場合には、見つかった同じ文字列の1番目と2番目の文字列の間までを1ブロックとする。
(3) 予め設定した指定バイト(例えば128バイト)中に、指定した3バイト分の文字列と同一の文字列が発見されなかった場合には、指定バイト(例えば128バイト)を1ブロックとする。
以下、本実施形態の処理を図7のフローチャート及び図9及び図10のデータ構成図に従って説明する。
まず、ユーザが予め決めておいた注目点として探索を行う文字数(複数バイト)をcmax:=指定文字列のバイト数として、予め記憶部12に記憶させておく。本実施形態では、この文字数を3バイト(cmax:=)とする。この状態で、記憶部12のバッファに1ブロックの最大長分の文字列(例えば65536バイト)を読み込む(ステップ71)。
次に、初期値として、注目点p1をバッファの先頭(読み込んだ文字列の先頭)とし、探索開始場所を保持するための変数cpにバッファ先頭のバイトの位置を代入した後、注目点を1バイト進める(ステップ72)。そして、ブロック長nlenに1を代入する(ステップ73)。
次に、バッファ先頭cpから3バイト分の文字列と、バッファ先頭から1つ進んだ注目点p2から3バイト分の文字列を比較する(ステップ74)。図9の例では、バッファ先頭cpからの3バイト分の文字列が(A,B,C)であり、バッファ先頭から1つ進んだ注目点p2から3バイト分の文字列が(B,C,D)であるから、ステップ74の比較結果(ステップ75)はNOである。
比較の結果、3バイト分の文字列が異なる場合には、注目点を次のバイトに移動すると共に、nlen=nlen+1としてブロック長を1つ加算する(ステップ76)。この場合、図9の(3)に示すように、3バイト目を新たな注目点p3とする。その後、すべてのバイト(128バイト)に対する処理が終わったか否かの確認を行い(ステップ77)、図9の(3)のように、処理すべきバイトが残っている場合には、ステップ74に戻って次のバッファ先頭cpからの3バイト分の文字列(A,B,C)と、新たな注目点p3からの3バイト分の文字列(C,D,E)との比較を行う。
以下同様にして、注目点を進めるごとに3バイト分の文字列の比較を行い、n番目の注目点で3バイト分の文字列(A,B,C)が一致した場合(ステップ75のYES)は、フローチャート中のこのループから抜け出して、同一とされた3バイト分の文字列がすべて同じバイト(同じ文字)で構成されているかをチェックする(ステップ78)。
図9では、3バイト分の文字列は(A,B,C)であり、異なるバイトから構成されているから(ステップ79のNO)、図9の(4)のように、注目点の位置を次のブロックの先頭とし、ブロック長をその時点でのnlenとして、1ブロックの分割処理を終了する(ステップ80)。
一方、図10は、3バイト分の文字列が同一の文字列(A,A,A)から構成されている場合のデータ構造図であって、図7のフローチャートにおいて、3バイト分の文字列がすべて同じ文字で構成されているかを検査する処理(ステップ78)までは、図9の実施形態と同一である。
図10の実施形態では、3バイト分の文字列が同一の文字列(A,A,A)から構成されているので(ステップ79のYES)、図10の(4)に示すように、注目点pn+1の位置を次のブロックの先頭とし、ブロック長nlen=nlen+1として、1ブロックの分割処理を終了する(ステップ81)。
一方、図7のフローチャートのループにおいて、予め指定した1ブロックの最大長のバイト(128バイト)まで、バッファ先頭からの3バイト分の文字列と、順次ずらしていったすべての注目点からの3バイト分との文字列を比較しても、同一の文字列が発見できなかった場合は(ステップ77のYES)、予め指定した最大長のバイト数を1ブロックの長さ(ブロック長=探索最大長)とする(ステップ82)。
このようにして、第2実施形態においても、
(a) 隣り合うブロックの先頭の1バイトが同じ値になることが多い。
(b) 前のブロックの最後の1バイトが、先頭のブロックの先頭の1バイトと同じ値になることが多い。
という特徴を有するブロックに分割することができる。その結果、第2実施形態においても、前記(a)の特徴に着目して、冗長圧縮を行い、(b)の特徴に着目して連長圧縮を行うことが可能になる。
3.他の実施形態
本発明は、前記の実施形態に限定されるものではなく、下記のような他の実施形態も包含する。
(1)図示の実施形態は、記憶部12に読み込んだ全データについて、1ブロックの探索処理と、最大冗長度の探索処理とを交互に行うことで、全データを1つずつブロック化しながら最大冗長度の探索を行ったものである。しかし、本発明は、この実施形態に限定されるものではなく、予め全データを複数のブロックに分割してから最大冗長度の探索処理を行うことも可能である。
(2)本発明の請求項において、予め指定するバイト数の文字列とは、第2実施形態のような複数の文字列に限らず、第1実施形態のような1バイト分の文字も包含する。
(3)本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
1…圧縮処理部
2…入力装置
3…出力装置
4…制御部
11…データ読込部
12…記憶部
13…ブロック特定部
14…圧縮部分探索部
15…出力バッファ

Claims (2)

  1. 入力装置から圧縮対象のデータを読み込むデータ読込部と、圧縮対象のデータを分割するブロック特定部と、分割されたブロックの文字列データを他のブロックの文字列と比較することで圧縮可能部分を探索する圧縮部分探索部を備え、
    前記ブロック特定部は、圧縮対象の文字列の中から予め指定したバイト数の検索対象文字列を順次読み込むと共に、予め指定されたバイト数の指定文字列を取得し、これらを記憶する記憶部と、この記憶部に記憶されている検索対象文字列の中から前記指定文字列と同一の文字列を検索する検索部と、前記検索部による検索結果に従い圧縮対象の文字列をブロック化する分割処理部とを有し、
    前記分割処理部は、
    (1) 同一の文字列が発見された場合は、発見された文字列の直前までを1ブロックとする。
    (2) 前記(1) において、発見された文字列部分で2文字連続して同じ文字が続く場合は、連続した2文字の間までを1ブロックとする。
    (3) 同一の文字列が発見されなかった場合は、検索対象文字列の全体を1ブロックとする。
    という条件で、しかも、前記(2) (1) (3) の優先順序に従って、圧縮対象の文字列をブロック化するものであり、
    前記圧縮部分探索部は、前記分割処理部によって分割された各ブロック間の文字列を比較することで、冗長性除去による圧縮とランレングス圧縮を行うことを特徴とするデータ圧縮装置。
  2. 圧縮対象の文字列の中から予め指定したバイト数の検索対象文字列を順次読み込む処理と、
    前記検索対象文字列の中から、予め指定されたバイト数の指定文字列と同一の文字列を検索する処理と、
    前記検索処理の結果、
    (1) 同一の文字列が発見された場合は、発見された文字列の直前までを1ブロックとする。
    (2) 前記(1) において、発見された文字列部分で2文字連続して同じ文字が続く場合は、連続した2文字の間までを1ブロックとする。
    (3) 同一の文字列が発見されなかった場合は、検索対象文字列の全体を1ブロックとする。
    という条件を、前記(2) (1) (3) の優先順序に従って適用することにより、圧縮対象の文字列をブロック化する処理と、
    前記分割された各ブロック間の文字列を比較することで、冗長性除去による圧縮とランレングス圧縮を行うことを特徴とするデータ圧縮方法。
JP2012025250A 2012-02-08 2012-02-08 データ圧縮方法及び装置 Active JP5778595B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012025250A JP5778595B2 (ja) 2012-02-08 2012-02-08 データ圧縮方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012025250A JP5778595B2 (ja) 2012-02-08 2012-02-08 データ圧縮方法及び装置

Publications (2)

Publication Number Publication Date
JP2013162474A JP2013162474A (ja) 2013-08-19
JP5778595B2 true JP5778595B2 (ja) 2015-09-16

Family

ID=49174362

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012025250A Active JP5778595B2 (ja) 2012-02-08 2012-02-08 データ圧縮方法及び装置

Country Status (1)

Country Link
JP (1) JP5778595B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107294538B (zh) * 2017-06-09 2020-09-01 深圳市华星光电半导体显示技术有限公司 Oled显示装置的补偿表压缩方法及解压方法
CN116032292B (zh) * 2023-03-27 2023-06-09 山东智慧译百信息技术有限公司 一种基于翻译文件的大数据高效存储方法
CN117216023B (zh) * 2023-11-07 2024-01-26 陕西长瑞安驰信息技术集团有限公司 一种大规模网络数据存储方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2604492B2 (ja) * 1990-09-06 1997-04-30 日本電気株式会社 順編成ファイルのデータ圧縮処理方式
JP2729424B2 (ja) * 1991-10-31 1998-03-18 シャープ株式会社 テキスト圧縮装置およびテキスト圧縮用辞書の自動構築装置
JPH1051642A (ja) * 1996-07-31 1998-02-20 Fuji Xerox Co Ltd 画像処理装置
JP2001175454A (ja) * 1999-10-07 2001-06-29 Funai Electric Co Ltd 多語連長圧縮装置、動的連長圧縮装置、多語連長解凍装置、動的連長解凍装置、アーカイブ装置、アーカイブ方法およびアーカイブプログラムを記録した媒体

Also Published As

Publication number Publication date
JP2013162474A (ja) 2013-08-19

Similar Documents

Publication Publication Date Title
US10305512B2 (en) Encoding method and apparatus
US8108348B2 (en) Multi-version control method for data documents and device thereof
US8838551B2 (en) Multi-level database compression
JP6319740B2 (ja) データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム
US8134483B2 (en) Data processing apparatus and method
WO2017052864A1 (en) Look-ahead hash chain matching for data compression
WO2012033498A1 (en) Systems and methods for data compression
KR101866151B1 (ko) 적응형 레이트 압축 해시 프로세싱 디바이스
JP5778595B2 (ja) データ圧縮方法及び装置
US9577666B2 (en) Method and system
JP2019036810A (ja) データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法
US8117343B2 (en) Landmark chunking of landmarkless regions
JP2007043595A (ja) 可変長符号復号化方法および装置ならびにデータ伸長装置
JP4960417B2 (ja) 可変長のデータ断片の開始・終了オフセットを決定する方法及び装置
JP5913748B2 (ja) セキュアで損失のないデータ圧縮
JP4907380B2 (ja) データ生成方法、データ復元方法、データ生成装置およびデータ復元装置
EP3136607A1 (en) A method and a system for encoding and decoding of suffix tree and searching within encoded suffix tree
JP2018061166A (ja) 符号化プログラム、符号化装置および符号化方法
US12001339B2 (en) Dictionary compression device and memory system
US8838544B2 (en) Fast history based compression in a pipelined architecture
KR101028904B1 (ko) 데이터 처리 장치 및 방법
JP4600342B2 (ja) データ圧縮プログラム
JP5149063B2 (ja) データ比較装置およびプログラム
US11593311B2 (en) Compression system with longest match processing for generating compressed data
KR100481204B1 (ko) 데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150123

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150618

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: 20150630

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150709

R150 Certificate of patent or registration of utility model

Ref document number: 5778595

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250