JP6609404B2 - 圧縮プログラム、圧縮方法および圧縮装置 - Google Patents

圧縮プログラム、圧縮方法および圧縮装置 Download PDF

Info

Publication number
JP6609404B2
JP6609404B2 JP2014149271A JP2014149271A JP6609404B2 JP 6609404 B2 JP6609404 B2 JP 6609404B2 JP 2014149271 A JP2014149271 A JP 2014149271A JP 2014149271 A JP2014149271 A JP 2014149271A JP 6609404 B2 JP6609404 B2 JP 6609404B2
Authority
JP
Japan
Prior art keywords
data
length
unit
code
frequency
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
JP2014149271A
Other languages
English (en)
Other versions
JP2016025536A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014149271A priority Critical patent/JP6609404B2/ja
Priority to US14/799,773 priority patent/US9397696B2/en
Publication of JP2016025536A publication Critical patent/JP2016025536A/ja
Application granted granted Critical
Publication of JP6609404B2 publication Critical patent/JP6609404B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K5/00Manipulating of pulses not covered by one of the other main groups of this subclass
    • H03K5/00006Changing the frequency
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K5/00Manipulating of pulses not covered by one of the other main groups of this subclass
    • H03K5/01Shaping pulses
    • H03K5/04Shaping pulses by increasing duration; by decreasing duration
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding

Description

本発明は、圧縮プログラム、圧縮方法および圧縮装置に関する。
データに対して、文字の出現頻度を集計した後、最長一致文字列検索をおこない、その結果に応じて、データを圧縮する技術がある。例えば、ZIPは、1段目に文字の出現頻度の集計とハフマン木の生成を行い、2段目にLZ77とハフマン圧縮を行う圧縮技術である。
LZ77系圧縮では、スライド窓で最長一致文字列探索を行い、その結果に応じて、圧縮符号に識別ビットを設け、文字、または、文字列の位置と長さに対し、前記のハフマンを利用して、ハフマン符号化を行う。以下の説明では、最長一致文字列検索によって得られる文字列を、最長一致データと表記する。
例えば、スライド窓で最長一致文字列検索を行った結果、最長一致データが3バイト未満の場合には、識別ビット「0」と、1バイト文字コードの2進数表現とを対応付けたものを、ハフマン木を用いて、可変長の圧縮符号として出力する。これに対して、最長一致データが3バイト以上の場合には、識別ビット「1」と、最長一致データの位置と長さとを対応付けたものを、それぞれ同様に、可変長の圧縮符号として出力する。
特開平05−241777号公報
従来、スライド窓を利用した文字の出現頻度集計とハフマン木の生成に関して、最長一致文字列の長さの出現頻度が集計されていない。したがって、最長一致文字列の長さに対して出現頻度に応じた最適な圧縮符号が割り当てられていないため、圧縮率が低下するという問題があった。
一つの側面では、ファイルの圧縮率を向上させる圧縮プログラム、圧縮方法および圧縮装置を提供することを目的とする。
第1の案では、圧縮プログラムはコンピュータに、下記の処理を実行させる。コンピュータに圧縮対象のデータに対して、スライド窓を利用し、最長一致文字列検索を行わせ、最長一致文字列の長さの頻度と文字の頻度を集計し、それぞれを合算した頻度をもとにハフマン木を生成させる。コンピュータに、LZ77系圧縮として、最長一致文字列検索を行い、圧縮符号となる文字、または、文字列の位置と長さの2進数を抽出し、ハフマン木を用いて、可変長の圧縮符号を割り当て、圧縮データを出力する。
本発明の1実施態様によれば、ファイルの圧縮率を改善できるという効果を奏する。
図1は、参考例1で集計される文字の出現回数と範囲を説明するための図である。 図2は、参考例1で生成されるハフマン木の一例を示す図である。 図3は、圧縮処理の流れを説明するための図である。 図4は、伸張処理の流れを説明するための図である。 図5は、参考例の情報処理装置の各処理部と記憶部との関係を説明するための図である。 図6は、参考例1の情報処理装置の圧縮に係るシステム構成の例を示す図である。 図7は、参考例1のハフマン符号の符号長を説明するための第1の図である。 図8は、参考例1のハフマン符号の符号長を説明するための第2の図である。 図9は、伸長部の構成の参考例を示す機能ブロック図である。 図10は、本実施例で集計される文字と長さの出現回数と範囲を説明するための図である。 図11は、実施例1で生成されるハフマン木の第1の例を示す図である。 図12は、実施例1の情報処理装置の各処理部と記憶部との関係を説明するための図である。 図13は、実施例1の情報処理装置の圧縮に係るシステム構成の例を示す図である。 図14は、圧縮処理全体の流れの例を示すフロー図である。 図15は、頻度計算の処理の流れの例を示すフロー図である。 図16は、コード変換表を作成する処理の流れの例を示す図である。 図17は、実施例1のハフマン符号の符号長を説明するための第1の図である。 図18は、実施例1のハフマン符号の符号長を説明するための第2の図である。 図19は、本実施例に係る伸長部の構成を示す機能ブロック図である。 図20は、伸長処理の流れの例を示すフロー図である。 図21は、実施例1の情報処理装置のハードウェア構成を示す図である。 図22は、コンピュータで動作するプログラムの構成例を示す図である。 図23は、実施形態のシステムにおける装置の構成例を示す図である。
以下に、本願の開示する圧縮プログラム、圧縮方法および圧縮装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
本発明の実施例を説明する前に、LZ77を用いた圧縮技術、および伸長技術の参考例について説明する。
(参考例1における文字の出現頻度の集計)
図1は、参考例1で集計される文字の出現頻度とその範囲を説明するための図である。図1の例に示すように、参考例1に係る情報処理装置100aがソースファイルF1を記憶領域A2にリードする。記憶領域A2には、「1st horse」という文字列が含まれる。
記憶領域A2は、例えば、スライド窓の参照部である。記憶領域A2は、「1st horse」という文字列を含む。情報処理装置100aは、記憶領域A2内に格納された1バイトの各文字の出現回数をカウントする。例えば、情報処理装置100aは、「1st horse」に含まれる文字「1」「s」「t」「(スペース)」「h」「o」「r」「s」「e」の各文字の出現回数をカウントする。情報処理装置100aは、スライド窓A2内の各文字の出現回数カウントが終了すると、処理の高速化のため、集計処理を打ち切る。なお、記憶領域A2を繰返し使用してソースファイルF1の全ての文字の出現回数をカウントし、圧縮率の向上を図ることもできる。
情報処理装置100aは、各文字の出現回数に基づいて出現回数表H1を生成する。図1の例に示すように、出現回数表H1は、文字とそのコードと、出現回数とを対応付ける。例えば、文字の列の「00h(NUL)」は、コード「00h」と制御文字「NUL」とを表す。また、「61h(a)」は、コード「61h」と英小文字「a」を表す。出現回数の列は、各文字の出現回数を表す。
情報処理装置100aは、生成した文字回数表H1に基づいてハフマン木を生成する。図2は、参考例1で生成されるハフマン木の一例を示す図である。図2の例のように、参考例1で生成されたハフマン木10は、根11と、節点12a〜12fと、葉13a〜13dを有する。節点12a〜12fは、節点のデータ構造10aに示されるように上位節点へのポインタ、下位の左および右の節点または葉のポインタを有する。葉13a〜13dは、葉のデータ構造10bに示されるように葉の識別子、予備情報、文字コードまたは最長一致文字列の長さとを有する。
頻度表H2aは、葉13a〜13dのそれぞれのコードと文字と、その頻度(実際)と符号長と、を対応付ける。
情報処理装置100aは、文字の出現頻度に基づいて符号長を求める。具体的には、情報処理装置100aは、葉のテーブル24においてコードと文字と、その頻度(実際)に基づいて符号長を算出する。頻度(実際)は、出現回数表H1に格納されている文字の出現回数を基に算出された各文字の頻度である。
例えば、情報処理装置100aは、葉23aにおいて文字「e」の出現頻度「0.1104」に基づいて、コード「65h」に符号長「3」を割当てる。また、情報処理装置100aは、葉23cにおいて文字「NUL」の出現頻度「0.000121」に基づいて、コード「00h」に符号長「12」を割当てる。このように、情報処理装置100aは、文字の出現頻度の高さに応じて短い符号長を割当てることで、圧縮率が向上する。
(圧縮処理に関して)
参考例1に係る情報処理装置100aは、生成したハフマン木10を用いてファイルの圧縮処理を行う。図3は、圧縮処理の流れを説明するための図である。参考例1に係る情報処理装置100aによって、記憶領域A1、記憶領域A2および記憶領域A3が例えばメモリ内に確保される。記憶領域A1は、例えば、符号化部と呼ばれる。ファイルF1には、「・・・1st horse・・・2nd horse・・・3rd horse・・・」というコンテンツのデータを含んでおり、ファイルF1内のデータが順次、記憶領域A1にロードされる。記憶領域A1にロードされたデータに対して圧縮処理がおこなわれた後、記憶領域A1にロードされたデータは記憶領域A2にコピーされる。記憶領域A2は、例えば、参照部と呼ばれる。
情報処理装置100aは、圧縮処理において記憶領域A1のデータと記憶領域A2のデータとを照合し、照合結果に応じて圧縮データを生成する。情報処理装置100aは、生成された圧縮データを、順次記憶領域A3に格納する。情報処理装置100aは、記憶領域A3に格納された圧縮データに基づいて圧縮ファイルF2を生成する。なお、ファイルF1に含まれる同一単語「horse」を区別するため、「1st horse」の「horse」上部に「△」、「2nd horse」の「horse」上部に「○」、「3rd horse」の「horse」上部に「□」を付す。また、ファイルF1に表した「・・・」は不特定な文字列である。また、記憶領域A3に表した「*」は、圧縮符号である。
図3の(i)の例に係る圧縮データd1の生成について説明する。まず、情報処理装置100aは、記憶領域A1に含まれる「horse・・・」と一致する最長一致文字列を、記憶領域A2内において検索する(図3に示す「照合」)。図3の(i)の例では、記憶領域A1の先頭の「h」と一致するデータが記憶領域A2内に存在しないので、最長一致文字列の長さは0バイトである。情報処理装置100aは、最長一致文字列の長さが3バイト未満の場合、ハフマン木10を参照し、記憶領域A1の先頭の文字を、ハフマン符号に変換する。図3の(i)の例では、情報処理装置100aは、記憶領域A1の「h」をハフマン符号に変換し、圧縮データd1を生成する。なお、情報処理装置100aは、記憶領域A1の先頭文字を圧縮したことを示す識別子「0」を圧縮データd1に含ませる。
図3の(ii)の例に係る圧縮データd2の生成について説明する。まず、情報処理装置100aは、記憶領域A1に含まれる「horse・・・」と一致する最長一致文字列を、記憶領域A2内において検索する(図3に示す「照合」)。図3の(ii)の例では、記憶領域A1の△が付された「horse」と、記憶領域A2の○が付された「horse」とが一致するので、5バイトの文字列「horse」が最長一致文字列となる。情報処理装置100aは、最長一致文字列の長さが3バイト以上の場合、識別子「1」と、記憶領域A2における最長一致文字列の位置と、最長一致文字列の長さのハフマン符号とを有する圧縮データd2を生成する。識別子「1」は、圧縮データが最長一致文字列の位置および長さに基づく圧縮データであることを表す。情報処理装置100aは、ハフマン木10を参照し、最長一致文字列の長さをハフマン符号に変換する。図3の(ii)の例では、情報処理装置100aは、識別子「1」と、「horse」の位置と、「horse」の長さ「5」のハフマン符号とを含む圧縮データd2を生成する。
図3の(iii)の例に係る圧縮データd3の生成について説明する。まず、情報処理装置100aは、記憶領域A1に含まれる「horse・・・」と一致する最長一致文字列を記憶領域A2内において検索する(図3に示す「照合」)。図3の(iii)の例では、記憶領域A2の△または○が付された「horse」と、記憶領域A1の□が付された「horse」とが一致するので、5バイトの文字列「horse」が最長一致文字列となる。情報処理装置100aは、最長一致文字列の長さが3バイト以上であるので、(ii)の例と同様に、識別子「1」と、「horse」の位置と、「horse」の長さ「5」のハフマン符号とを有する圧縮データd3を生成する。
情報処理装置100aは、スライド窓を利用して、文字の出現回数を集計し、その頻度をもとに符号長を算出する。最長一致文字列の長さが3バイト未満の場合は、1バイトの各文字に分解され、識別子「0」と文字の出現頻度に対応したハフマン符号が生成されるため、圧縮率の向上が図れる。
しかし、最長一致文字列の長さに対しては、その出現回数が集計されておらず、その頻度をもとに、符号長を算出することができない。このため、情報処理装置100aは、出現頻度の高い最長一致文字列の長さに対して、そのコードに該当する、出現頻度の低い文字に応じて、長い符号長を割当てる場合が発生し、ファイルの圧縮率が低下する。例えば、長さ「3」の頻度(仮想)は0.0891で、符号長は3に対して、そのコード「00h」に該当する文字「NUL」の頻度(実際)は0.000121であり、符号長12が割り当てられる。
(伸張処理に関して)
情報処理装置100aは、生成したハフマン木を基にしてファイルを伸長する処理を行う。図4は、伸張処理の流れを説明するための図である。情報処理装置100aは、圧縮ファイルF2内の圧縮データを順次記憶領域B1にロードする。記憶領域B1は、例えば符号化部と呼ばれる。情報処理装置100aは、圧縮データを含む圧縮ファイルF2の圧縮データに対して伸張処理を行い、伸長データを生成する。情報処理装置100aは、生成した伸長データを、記憶領域B2と記憶領域B3にコピーする。記憶領域B2は、例えば参照部と呼ばれる。そして、情報処理装置100aは、記憶領域B3に収集された伸長データに基づいて伸長ファイルF3を生成する。なお、図4の「*」は、圧縮されたデータである。
例えば、図4の(iv)の例では、以下のようにして伸張処理がおこなわれる。図4の(iv)の例に示される記憶領域B1の圧縮データd1「****」が伸張処理の対象である。圧縮データd1は、文字を圧縮した場合に付される識別子「0」と、「h」のハフマン符号とを有する。情報処理装置100aは、識別子が「0」である場合、ハフマン木10を参照し、ハフマン符号に対応する伸長文字(文字データ)を取得する。(iv)の例では、情報処理装置100aは、ハフマン木10から伸長文字「h」を取得する。そして、情報処理装置100aは、取得した伸長文字「h」を、記憶領域B2と記憶領域B3とにコピーする。
図4の(v)の例では、以下のようにして伸張処理がおこなわれる。図4の(v)の例に示される記憶領域B1の圧縮データd1「****」が伸張処理の対象である。圧縮データd2は、識別子「1」と、記憶領域B2における最長一致文字列の位置と、最長一致文字列の長さのハフマン符号とを有する。識別子「1」は、圧縮データが最長一致文字列の位置および長さに基づく圧縮データであることを表す。(v)の例では、情報処理装置100aは、ハフマン木10から最長一致文字列の長さ「5」を取得する。そして、情報処理装置100aは、記憶領域B2における最長一致文字列の位置と、最長一致文字列の長さ「5」に基づいて記憶領域B2から最長一致文字列「horse」を取得し、記憶領域B1の圧縮データd1「****」と置き換える。情報処理装置100aは、記憶領域B1で置き換えられた「horse」を、記憶領域B2と記憶領域B3とにコピーする。
図4の(vi)の例では、以下のようにして伸張処理がおこなわれる。図4の(vi)の例に示される記憶領域B1の圧縮データd1「****」が伸張処理の対象である。圧縮データd3は、識別子「1」と、記憶領域B2における最長一致文字列の位置と、最長一致文字列の長さのハフマン符号とを有する。情報処理装置100aは、(v)の例と同様にして最長一致文字列「horse」を圧縮データd3と置き換え、記憶領域B1で置き換えられた「horse」を記憶領域B2と記憶領域B3とにコピーする。
(情報処理装置の各処理部と記憶部との関係)
図5は、情報処理装置の各処理部と記憶部との関係を説明するための図である。図5の例に示すように、情報処理装置100aの記憶部400aは、圧縮部200aと伸張部300aとに接続される。記憶部400aは例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリなどの半導体メモリ素子、ハードディスクや光ディスクなどの記憶装置に対応する。記憶部400aは、例えば、後述する図6の第1記憶領域216および第2記憶領域229に対応する。
また、情報処理装置100aは、圧縮部200aと、伸張部300aとを有する。圧縮部200aおよび伸張部300aの機能は例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路により実現することができる。また、圧縮部200aおよび伸張部300aの機能は例えば、CPU(Central Processing Unit)が所定のプログラムを実行することで実現することができる。圧縮部200aは、例えば、後述する図6の第1段階処理部210および第2段階処理部220の各処理部に対応する。
(参考例1に係る圧縮部200aのシステム構成)
図6は、参考例1の情報処理装置の圧縮に係るシステム構成の例を示す図である。図6の例に示されるように、圧縮部200aは、第1段階処理部210と、第2段階処理部220とを有する。第1段階処理部210は、第1ファイルリード部211、文字頻度集計部212、頻度表生成部213、ハフマン木生成部214、頻度表格納部215、および第1記憶領域216を含む。一方、第2段階処理部220は、第2ファイルリード部221、最長一致文字列探索部222、第1符号化部223、第2符号化部224、識別ビット生成部225および参照部更新部226を含む。さらに、第2段階処理部220は、ファイルライト部227および第2記憶領域229を含む。なお、第1ファイルリード部211と第2ファイルリード部221とは、同じ構成であってもよい。
第1段階処理部210は、各文字の出現回数を集計して出現回数表H1を生成し、出現回数表H1に基づいてハフマン木を作成する処理部である。第1段階処理部210に含まれる各部について説明する。
第1ファイルリード部211は、所定の記憶領域に圧縮対象となるファイルF1のコンテンツ部分を読み出す処理部である。第1ファイルリード部211は、ファイルF1のコンテンツ部分を、スライド窓の参照部に対応する記憶領域A2にリードする。ここでは、記憶領域A2は、第1記憶領域216に存在するものとする。第1ファイルリード部211は、記憶領域A2における集計処理が完了すると、リード処理を打ち切る。
出現回数集計部212は、第1ファイルリード部211によって記憶領域A2に読み出されたコンテンツを参照し、文字毎に文字の出現回数を集計する処理部である。出現回数集計部212は、集計が完了すると、集計結果を頻度表生成部213に出力する。
頻度表生成部213は、出現回数集計部212から取得する各文字の出現回数の集計結果を基にして、頻度表H2aを生成する処理部である。頻度表H2aは、文字の出現回数の合計をもとに、各文字に文字の頻度を対応付ける。頻度表H2aは、256のレコードを有する。頻度表生成部213は、頻度表H2aの情報を、ハフマン木生成部214と頻度表格納部215に出力する。
ハフマン木生成部214は、頻度表H2aに基づいてハフマン木を生成する処理部である。ハフマン木生成部214は、256個の葉の構造体を作成し、頻度表H2aに基づいて、各葉のコードと文字、その頻度と符号長とを割り当てる。
ハフマン木生成部214は、文字の出現頻度の順にソートして配置し、各々の文字の出現頻度に応じて枝を生成する。例えば、ハフマン木は、図2に示したハフマン木10に対応した根と節点、枝と葉を持つ。根と節点の構造体は、上位の節点へのポインタ、下位の左と右の節点へのポインタ、または、葉のデータが格納される。
頻度表格納部215は、頻度表H2aの内容をファイルF2のヘッダ部に格納する。
第2段階処理部220は、第1段階処理部210によって生成されたハフマン木に基づいてファイルF1を圧縮する処理部である。第2段階処理部220に含まれる各部の処理について説明する。第2ファイルリード部221は、ファイルF1内のコンテンツ部分のデータを、符号化部に対応する記憶領域A1に読み出す処理部である。第2ファイルリード部221は、記憶領域A1に格納されたデータに対する処理が終了し、記憶領域A1のデータが参照部である記憶領域A2に移行し、圧縮符号が格納された記憶領域A3のデータを圧縮ファイルF2へ書き込んだ後に、新たなデータをファイルF1から読み出し、記憶領域A1に格納されたデータを更新する。
最長一致文字探索部222は、参照部となる記憶領域A2に格納されたデータと、符号化部となる記憶領域A1に格納されたデータとを比較して、最長一致文字列を検索する処理部である。最長一致文字列を検索する処理は、図3に示した処理と同様である。最長一致文字探索部106は、最長一致文字列の位置および長さを、第1符号化部223、第2符号化部224、識別ビット生成部225に出力する。
第1符号化部223は、最長一致文字列の長さが3バイト未満の場合に処理を行う。第1符号化部223は、最長一致文字列の長さが3バイト未満の場合に、それぞれ、1バイトの文字データと、ハフマン木10とを比較して、文字データのハフマン符号を特定する。第1符号化部223は、ハフマン符号と、識別ビット生成部225から取得する識別ビットとを合わせた圧縮データを、記憶領域A3に格納し、ファイルライト部227に出力する。
第2符号化部224は、最長一致文字列の長さが3バイト以上の場合に処理を行う。第2符号化部224は、最長一致文字列の長さが3バイト以上の場合に、最長一致文字列の記憶領域A2での先頭からの位置と、最長一致文字列の長さとを特定する。第2符号化部224は、最長一致文字列の長さとハフマン木10とを比較して、最長一致文字列の長さのハフマン符号を特定する。第2符号化部224は、最長一致文字列の位置と、最長一致文字列の長さのハフマン符号と、識別ビットとを合わせた圧縮データを、記憶領域A3に格納し、ファイルライト部227に出力する。
識別ビット生成部225は、最長一致文字列の長さに基づいて、識別ビット「0」または識別ビット「1」を出力する処理部である。具体的に、識別ビット生成部225は、最長一致文字列の長さが3バイト未満である場合には、識別ビット「0」を第1符号化部223に出力する。これに対して、識別ビット生成部225は、最長一致文字列の長さが3バイト以上である場合には、識別ビット「1」を第2符号化部224に出力する。
参照部更新部226は、記憶領域A1と記憶領域A2との照合が完了した場合に、記憶領域A1に格納されたデータを、記憶領域A2に格納する処理部である。
ファイルライト部227は、最長一致文字列の長さが3バイト未満の場合に、識別ビット「0」と、第1符号化部223から出力されるハフマン符号とを合わせた圧縮データを、記憶領域A3に書き込む。また、ファイルライト部227は、最長一致文字列の長さが3バイト以上の場合に、識別ビット「1」と、第2符号化部224から出力される最長一致文字列の位置および長さとを合わせた圧縮データを、記憶領域A3に書き込む。
また、ファイルライト部227は、記憶領域A1に対する処理が終了すると、記憶領域A3のデータを圧縮ファイルF2に書き込む。
(文字および最長一致文字列の長さに割り当てられる符号長に関して)
図7を用いて、参考例1のハフマン木によって文字および最長一致文字列の長さに割り当てられる符号長について説明する。図7は、参考例1のハフマン符号の符号長を説明するための第1の図である。図7の例に示される頻度分布表1aは、参考例1に係る情報処理装置100aによって集計されたコードの出現頻度を表す。頻度分布表1aの縦軸は、各文字の出現頻度を表す。また、頻度分布表1aの横軸には、出現頻度の高い文字から順に、英小字、数字、英大字、特殊文字、制御文字の文字が列挙される。
また、符号長分布表1bは、各文字に割り当てられる符号長を表す。符号長分布表1bの縦軸は、符号長を表す。符号長分布表1bの横軸は、頻度分布表1aに対応する。
例えば、文字「e」および最長一致文字列の長さ「104」に対応するコード「65h」には、文字の出現頻度に応じて、符号長分布表1bのように、符号長「3」が割り当てられる。また、文字「NUL」および最長一致文字列の長さ「3」に対応するコード「00h」には、符号長「12」が割り当てられる。
頻度分布表2aは、各文字の出現頻度と各最長一致文字列の長さの出現頻度とを表す。頻度分布表2aの縦軸は、各文字または各最長一致文字列の長さの出現頻度を表す。また、頻度分布表2aの横軸には、出現頻度の高い文字から順に、英小字、数字、英大字、特殊文字、制御文字の文字が列挙され、さらに最長一致文字列の長さが列挙される。頻度分布表2aの実線は、各文字の出現頻度を表す。頻度分布表2aの一点鎖線は、各最長一致文字列の長さの出現頻度を表す。なお、参考例1に係る圧縮部200aは、最長一致文字列の長さの出現頻度を集計しない。
符号長分布表2bは、各文字および各最長一致文字列の長さに割り当てられる符号長を表す。符号長分布表2bの縦軸は、符号長を表す。符号長分布表2bの横軸は、頻度分布表2aに対応する。
上述したように圧縮部200aは、各コードに対して文字の出現頻度に応じた符号長を割り当てる。例えば、最長一致文字列の長さの中で出現頻度が最も高い「3」と制御文字「NUL」とは、いずれもコード「00h」に対応する。符号長分布表2bにおいて「3」および「NUL」は、点Psに対応し、それぞれに割り当てられる符号長は「12」となる。したがって、最長一致文字列の長さの出現頻度が高いにもかかわらず、符号長の長いハフマン符号が割当てられるのでファイルの圧縮率が低下する。
一方、符号長分布表1bに示される一点鎖線は、出現頻度が高い最長一致文字列の長さの出現頻度(仮想)に対して短い符号長を割り当てた場合の符号長を示す。本来、出現頻度が高いものに対して符号長の短い圧縮符号を割り当てることで圧縮率が向上する。例えば、参考例1においては、符号長分布表2bの実線のように出現頻度が高い最長一致文字列の長さに対して長い符号長が割り当てられるが、一点鎖線のように出現頻度(仮想)が高い最長一致文字列の長さに対して短い符号長を割り当てれば圧縮率が向上する。例えば、符号長分布表2bにおいて、実線では、最長一致文字列の長さ「3」の出現頻度(実際)に応じて、割り当てられる符号長が点Psの「12」であるのに対して、一点鎖線では、出現頻度(仮想)に応じて、符号長が点Plの「3」に割り当てられる。
図8を用いて、参考例1のハフマン木によってCJK文字および最長一致文字列の長さに割り当てられる符号長について説明する。図8は、参考例1のハフマン符号の符号長を説明するための第2の図である。英数字は1バイト単位でコード化されるのに対し、UTF−8のCJK文字は3バイト以上の単位でコード化される。1バイト単位に出現回数を集計するため、英数字に比べ、CJK文字は頻度の偏りが無く、頻度分布もなだらかな曲線となる。図8の例に示される頻度分布表3aは、参考例1に係る情報処理装置100aによって集計されたCJK文字(1byte)の出現頻度を表す。頻度分布表3aの縦軸は、各々のCJK文字(1byte)の出現頻度を表す。CJK文字(1byte)は、CJK文字に含まれる1バイトのビット列である。また、頻度分布表3aの横軸には、出現頻度の高いCJK文字(1byte)から順に列挙される。
また、符号長分布表3bは、各CJK文字(1byte)に割り当てられる符号長を表す。符号長分布表3bの縦軸は、符号長を表す。符号長分布表3bの横軸には、出現頻度の高いCJK文字(1byte)から順に列挙される。
日本語テキストの場合、文字として、ひらがな、カタカナ、漢字が多く含まれる。例えば、ひらがなの「あ」文字は、UTF−8コードでは、「e38182h」にコード化されている。また、カタカナや漢字の多くも「e3xxxxh」にコード化されているため、1バイトのCJK文字としては、e3hの出現頻度が比較的高い。具体的には、CJK文字(1byte)Aおよび最長一致文字列の長さ「230」に対応するコード「e3h」には、符号長分布表3bより符号長「6」が割り当てられる。
頻度分布表4aは、各CJK文字(1byte)の出現頻度と各最長一致文字列の長さの出現頻度とを表す。頻度分布表4aの縦軸は、各々のCJK文字(1byte)の出現頻度を表す。また、頻度分布表4aの横軸には、出現頻度の高いCJK文字(1byte)から順に列挙される。また、頻度分布表4aの横軸には、最長一致文字列の長さが列挙される。頻度分布表4aの実線は、各々のCJK文字(1byte)の出現頻度を表す。頻度分布表4aの一点鎖線は、各々の最長一致文字列の長さの出現頻度を表す。なお、参考例1に係る圧縮部200aは、最長一致文字列の長さの出現頻度を集計しない。
符号長分布表4bは、各CJK文字および各最長一致文字列の長さに割り当てられる符号長を表す。符号長分布表4bの縦軸は、符号長を表す。符号長分布表4bの横軸は、頻度分布表4aに対応する。
上述したように圧縮部200aは、各コードに対してCJK文字の出現頻度に応じた符号長を割り当てる。このため、出現頻度の高い最長一致文字列の長さにも関わらず、長い符号長が割り当てられる場合がある。例えば、図8の例に示すように、最長一致文字列の長さの中で出現頻度が最も高い「3」と「CJK文字(1byte)B」とは、いずれもコード「00h」に対応する。「3」および「CJK文字(1byte)B」は、点Qsに対応し、符号長「11」が割り当てられる。したがって、コードに対応する最長一致文字列の長さの出現頻度が高いにもかかわらず、コードに対して符号長の長いハフマン符号が割当てられるのでファイルの圧縮率が低下する。
一方、符号長分布表4bに示される一点鎖線は、出現頻度が高い最長一致文字列の長さの出現頻度(仮想)に対して、出現頻度に応じた短い符号長を割り当てた場合の符号長を示す。本来、出現頻度が高いものに対して符号長の短い圧縮符号を割り当てることで圧縮率が向上する。例えば、参考例1においては、符号長分布表4bの実線のように出現頻度が高い最長一致文字列の長さに対して長い符号長が割り当てられるが、一点鎖線のように出現頻度(仮想)が高い最長一致文字列の長さに対して短い符号長を割り当てれば圧縮率が向上する。例えば、符号長分布表4bにおいて、実線では、最長一致文字列の長さ「3」の出現頻度(実際)に応じて、割り当てられる符号長が点QSの「11」であるのに対して、一点鎖線では、現頻度(仮想)に応じて、符号長が点Qlの「3」に割り当てられる。このように、出現頻度が高い最長一致文字列の長さに割り当てられる符号長が長くなるため、圧縮率が低下する。
(参考例1に係る伸長部300aのシステム構成)
次に伸長部300aの構成の一例について説明する。図9は、伸長部の構成の参考例を示す機能ブロック図である。図9に示すように、伸長部300aは、第1段階処理部330aと第2段階処理部340aとを有する。第1段階処理部330aは、頻度表リード部331と、ハフマン木生成部332とを有する。第2段階処理部340aは、ファイルリード部341と、圧縮符号識別部342と、第1伸長部343と、第2伸長部344と、参照部更新部345と、ファイルライト部346とを有する。
第1段階処理部330aは、圧縮ファイルF2のヘッダ情報に含まれる頻度表を基にして、ハフマン木を生成する処理部である。第1段階処理部330aに含まれる各処理部について説明する。
頻度表リード部331は、頻度表H2aの情報を読み出して、ハフマン木生成部332に出力する処理部である。例えば、頻度表リード部331は、図6の頻度表生成部213によって生成された頻度表H2aの情報を取得する。
ハフマン木生成部332は、頻度表H2aを基にしてハフマン木を生成する処理部である。ハフマン木生成部332がハフマン木を生成する処理は、図6のハフマン木生成部214と同様である。
第2段階処理部340aは、圧縮ファイルF2を伸長する処理部である。第2段階処理部340aに含まれる各部の処理について説明する。
ファイルリード部341は、圧縮ファイルF2内の圧縮データを記憶領域B1に読み出す処理部である。ファイルリード部341は、記憶領域B1に格納された圧縮データに対する処理が終了した場合に、新たな圧縮データを圧縮ファイルF2から読み出し、記憶領域B1に格納された圧縮データを更新する。
圧縮符号識別部342は、記憶領域B1の圧縮データから、識別子を読み出し、識別子が「0」であるのか「1」であるのかを判定する処理部である。圧縮符号識別部342は、判定結果を、第1伸長部343および第2伸長部344に出力する。
第1伸長部343は、圧縮データの識別子が「0」である場合に処理を行う。第1伸長部343は、識別子が「0」である場合に、圧縮データの識別子以降のデータ列と、ハフマン木10とを比較して、ハフマン木10を辿り、到達した葉に含まれるデータを、伸長データとして復号する処理部である。第1伸長部343は、伸長データを、参照部である記憶領域B2、および記憶領域B3に格納し、参照部更新部345およびファイルライト部346に出力する。
第2伸長部344は、圧縮データの識別子が「1」である場合に処理を行う。第2伸長部344は、識別子が「1」である場合に、伸長データは、参照部である記憶領域B2内のデータが伸長データとなるため、記憶領域B2から伸長データを取り出す。
第2伸長部344は、伸長データを取り出すべく、最長一致文字列の格納された記憶領域B2の先頭からの位置と、最長一致文字列の長さを特定する。位置の情報は、圧縮データの識別子「1」以降の固定長(16bit)の情報に対応する。また、長さの情報は、位置の情報以降の固定長(8bit)の情報に対応する。また、長さの情報は、ハフマン符号化されているため、第2伸長部344は、長さのハフマン符号と、ハフマン木10とを比較して、ハフマン木10を辿り、到達した葉に含まれる長さの情報を得る。
第2伸長部344は、位置と長さに対応するデータを参照部である記憶領域B2から取り出し、取り出したデータを伸長データとする。第2伸長部344は、伸長データを、参照部である記憶領域B2、および記憶領域B3に格納し、参照部更新部345およびファイルライト部346に出力する。
参照部更新部345は、第1伸長部343または第2伸長部344から伸長データを取得した場合に、伸長データによって、記憶領域B2を更新する処理部である。
ファイルライト部346は、第1伸長部343または第2伸長部344から伸長データを取得した場合に、伸長データを、記憶領域B3に格納し、ファイルF3に書き込む処理部である。
(実施例1における文字と最長一致文字列の長さの出現回数の集計)
図10を用いて実施例1における出現回数表H11bおよび出現回数表H12bの生成について説明する。図10は、本実施例で集計される文字と長さの出現回数と範囲を説明するための図である。図10の例に示すように、実施例1に係る情報処理装置100bがソースファイルF1を記憶領域A1にリードする。ファイルF1は、「△horse△」という文字列を複数含む。
一方、情報処理装置100bは、記憶領域A1にデータをリードし、記憶領域A2と最長一致文字列検索を行い、文字と最長一致文字列の長さの出現回数を集計する。記憶領域A1は、例えば、スライド窓の符号化部である。また、記憶領域A2は、例えば、スライド窓の参照部である。図10の例において記憶領域A1および記憶領域A2には、いずれにも「△horse△」という文字列が含まれているとする。情報処理装置100bは、例えば、最長一致文字列「△horse△」の長さ「7」に対応するコード「04h」の出現回数をカウントする。なお、情報処理装置100bは、仮に最長一致文字列の長さが3バイト未満の場合、記憶領域A1内の文字の出現回数をカウントする。
情報処理装置100bは、文字の出現回数または最長一致文字列の長さの出現回数をカウントする度に、ファイルF1から続きの部分のデータを記憶領域A1にリードする。情報処理装置100bは、カウントした各文字の出現回数に基づいて出現回数表H11bを更新する。出現回数表H11bは、文字毎の出現回数を保持する。図1の例に示すように、出現回数表H11bは、文字と出現回数とを対応付ける。
情報処理装置100bは、カウントした各最長一致文字列の長さの出現回数に基づいて出現回数表H12bを更新する。出現回数表H12bは、最長一致文字列の長さ毎の出現回数を保持する。長さの列において、「00h(3)」は、コード「00h」に対応する最長一致文字列の長さ「3」を表す。「01h(4)」は、コード「01h」に対応する最長一致文字列の長さ「4」を表す。なお、以降の説明では、最長一致文字列の長さを、長さと呼ぶことがある。
(実施例1におけるハフマン木の生成に関して)
情報処理装置100bは、出現回数表H11bおよび出現回数表H12bに基づいてハフマン木を生成する。図11は、実施例1で生成されるハフマン木の第1の例を示す図である。図11の例のように、実施例1で生成されたハフマン木20は、根21と、節点22a〜22fと、葉23a〜23eとを有する。節点22a〜22eは、節点のデータ構造20aに示されるように上位節点へのポインタ、下位の左および右の節点または葉のポインタを有する。葉23a〜23dは、葉のデータ構造10bに示されるように葉の識別子、予備情報、文字コードまたは最長一致文字列の長さを有する。
また、頻度表H2bは、葉22a〜22eのそれぞれのコードとその頻度(実際)と符号長と、コードに対応する文字とその頻度(小計)と、コードに対応する最長一致文字列の長さとその頻度(小計)と、を対応付ける。例えば、葉23aは、コードが「65h」、該コードの頻度(合計)が「0.110403」、該コードの符号長が「3」であることを表す。また、葉23aは、コード「65h」に対応する文字が「e」、該文字「e」の頻度(小計)が「0.1104」であることを表す。また、葉23aは、コード「65h」に対応する長さが「104」、該長さ「104」の頻度(小計)が「0.000003」であることを表す。
ここで、1つのコードは、1つの文字を表すとともに、1つの最長一致文字列の長さを表す。例えば、コード「65h」は、文字「e」と長さ「104」とを表す。また、コード「61h」は、文字「a」と長さ「100」とを表す。
情報処理装置100bは、文字の出現頻度(小計)と長さの出現頻度(小計)とを合算した出現頻度(実際)に基づいて、コードに符号長を割当てる。例えば、情報処理装置100bは、文字「e」の出現頻度(小計)「0.1104」と長さ「104」の出現頻度(小計)「0.000003」とを合算してコード「65h」の出現頻度(実際)「0.110403」を求める。情報処理装置100bは、コード「65h」の出現頻度(実際)「0.110403」に基づいて、コード「65h」に符号長「3」を割当てる。また、情報処理装置100bは、文字「NUL」の出現頻度(小計)「0.000121」と長さ「3」の出現頻度(小計)「0.0891」とを合算してコード「00h」の出現頻度(実際)「0.089221」を求める。情報処理装置100bは、コード「00h」の出現頻度(実際)「0.089221」に基づいて、コード「00h」に符号長「3」を割当てる。このように、葉13bにおいては、最長一致文字列の長さ「3」の出現頻度(小計)がコード「00h」の出現頻度(実際)に反映されるので、出現頻度が高いコード「00h」に対して短い符号長が割当てられる。
このように、情報処理装置100bは、コードに対応する文字および長さの出現頻度(小計)を合算したコードの出現頻度(実際)に応じて符号長を割当てる。情報処理装置100bは、最長一致文字列の長さの出現頻度(小計)をコードの出現頻度(実際)に反映するので、出現頻度が高いコードに割当てられる符号長が短くなり、圧縮率が向上する。
(情報処理装置の各処理部と記憶部との関係)
図12は、実施例1の情報処理装置の各処理部と記憶部との関係を説明するための図である。図12の例に示すように、情報処理装置100bの記憶部400bは、圧縮部200bと伸張部300bとに接続される。記憶部400bは例えば、RAM、ROM、フラッシュメモリなどの半導体メモリ素子、ハードディスクや光ディスクなどの記憶装置に対応する。記憶部400bは、例えば、後述する図13の第1記憶領域258および第2記憶領域269に対応する。
また、情報処理装置100bは、圧縮部200bと、伸張部300bとを有する。圧縮部200bおよび伸張部300bの機能は例えば、ASICやFPGAなどの集積回路により実現することができる。また、圧縮部200bおよび伸張部300bの機能は例えば、CPUが所定のプログラムを実行することで実現することができる。圧縮部200bは、例えば、後述する図13の第1段階処理部250および第2段階処理部260の各処理部に対応する。
(実施例1に係る圧縮部200bのシステム構成)
図13は、実施例1の情報処理装置の圧縮に係るシステム構成の例を示す図である。圧縮部200bは、第1段階処理部250と、第2段階処理部260とを有する。第1段階処理部250は、第1ファイルリード部251、第1最長一致文字列探索部252、文字出現回数集計部253、長さ出現回数集計部254、頻度表生成部255、ハフマン木生成部256、頻度表格納部257および第1記憶領域258を含む。一方、第2段階処理部260は、第2ファイルリード部261、最長一致文字列探索部262、第1符号化部263、第2符号化部264、識別ビット生成部265および参照部更新部266を含む。さらに、第2段階処理部260は、ファイルライト部267および第2記憶領域269を含む。なお、第1ファイルリード部251と第2ファイルリード部261とは、同じ構成であってもよい。
第1ファイルリード部251は、所定の記憶領域に圧縮対象となるファイルF1のコンテンツ部分を読み出す処理部である。第1ファイルリード部251は、ファイルF1のコンテンツ部分を、スライド窓の参照部に対応する記憶領域A1にリードする。記憶領域A1にリードされたコンテンツは、後述する集計処理が完了する度に、記憶領域A2に格納される。ここでは、記憶領域A1および記憶領域A2は、第1記憶領域258に存在するものとする。第1ファイルリード部251は、記憶領域A1および記憶領域A2における集計処理が完了すると、リード処理を打ち切る。
文字出現回数集計部253は、記憶領域A1に格納されたコンテンツを参照し、記憶領域A1に含まれる文字の出現回数を集計する処理部である。文字出現回数集計部253は、例えば、最長一致文字列の長さが3バイト未満の場合に処理を実行する。文字出現回数集計部253は、記憶領域A1のデータが更新される度に、文字の出現回数を計数する。文字出現回数集計部253は、集計が完了すると、集計結果を頻度表生成部255に出力する。
第1最長一致文字列探索部252は、参照部となる記憶領域A2に格納されたデータと、符号化部となる記憶領域A1に格納されたデータとを比較して、最長一致文字列を探索する処理部である。第1最長一致文字列探索部252は、例えば、最長一致文字列の長さが3バイト以上の場合に処理を実行する。第1最長一致文字列検索部252は、記憶領域A1のデータが更新される度に、最長一致文字列の長さを長さ出現回数集計部254に出力する。
長さ出現回数集計部254は、第1最長一致文字列探索部252によって出力された最長一致文字列の長さの出現回数を集計する処理部である。長さ出現回数集計部254は、第1最長一致文字列探索部252から出力された最長一致文字列の長さを基にして、各最長一致文字列の長さの出現回数を集計する。長さ出現回数集計部254は、集計が完了すると、集計結果を頻度表生成部255に出力する。
頻度表生成部255は、文字出現回数集計部253から取得する各文字の出現回数の集計結果を基にして、頻度表H11bを生成する。また、頻度表生成部255は、長さ出現回数集計部254から取得する各長さの出現回数の集計結果を基にして、頻度表H12bを生成する。頻度表生成部255は、文字の出現回数の合計をもとに、各文字に文字の頻度を対応付ける。また、頻度表生成部255は、長さの出現回数の合計をもとに、各長さに長さの頻度を対応付ける。頻度表H11bおよびH12bは、256のレコードを有する。頻度表生成部255は、頻度表H11bおよび頻度表H12bの情報を、ハフマン木生成部256と頻度表格納部257に出力する。
ハフマン木生成部256は、頻度表H11bおよび頻度表H12bに基づいて、ハフマン木20を生成する処理部である。ハフマン木生成部256は、コードと、予備情報とを対応付けた葉の構造体を256個生成する。また、ハフマン木生成部256は、256個の葉の構造体を作成し、頻度表H11bおよびH12bに基づいて、各葉にコード、その頻度(合計)と符号長とを割り当てる。コードの出現頻度(合計)は、文字の出現頻度(小計)と長さの出現頻度(小計)を合算した値である。
ハフマン木生成部256は、コードの出現頻度(合計)の順にソートして葉を配置し、各々のコードの出現頻度に応じて枝を生成する。例えば、ハフマン木は、図11に示したハフマン木20に対応した根と節点、枝と葉を持つ。根と節点の構造体は、上位の節点へのポインタ、下位の左と右の節点へのポインタ、または、葉のデータが格納される。
頻度表格納部257は、頻度表11bおよび頻度表H12bの内容をファイルF2のヘッダ部に格納する。
第2段階処理部260は、ファイルF1を圧縮する処理部である。第2段階処理部260に含まれる各部の処理について説明する。第2ファイルリード部261は、ファイルF1内のコンテンツ部分のデータを、符号化部に対応する記憶領域A1に読み出す処理部である。第2ファイルリード部261は、記憶領域A1に格納されたデータに対する処理が終了し、記憶領域A1のデータが参照部A2に移行し、圧縮符号が格納された記憶領域A3のデータをF2へ書き込んだ後に、新たなデータをファイルF1から読み出し、記憶領域A1に格納されたデータを更新する。
第2最長一致文字探索部262は、参照部となる記憶領域A2に格納された圧縮データと、記憶領域A1に格納されたデータとを比較して、最長一致文字列を検索する処理部である。最長一致文字列を検索する処理は、図3に示した処理と同様である。第二最長一致文字探索部262は、最長一致文字列の位置および長さを、第1符号化部263、第2符号化部264、識別ビット生成部265に出力する。
第1符号化部263は、最長一致文字列の長さが3バイト未満の場合に処理を行う。第1符号化部263は、最長一致文字列の長さが3バイト未満の場合に、それぞれ、1バイトの文字データと、ハフマン木20とを比較して、文字データのハフマン符号を特定する。第1符号化部263は、ハフマン符号を記憶領域A3に格納し、ファイルライト部267に出力する。このハフマン符号そのものが、圧縮データとなる。
第2符号化部264は、最長一致文字列の長さが3バイト以上の場合に、処理を行う。第2符号化部264は、最長一致文字列の長さが3バイト以上の場合に、最長一致文字列の記憶領域A2での先頭からの位置と、最長一致文字列の長さとを特定する。さらに、第2符号化部264は、最長一致文字列の長さと、ハフマン木20とを比較して最長一致文字列の長さのハフマン符号を特定する。第2符号化部264は、最長一致文字列の位置と、最長一致文字列の長さのハフマン符号と、識別ビットとを合わせた圧縮データを、記憶領域A3に格納し、ファイルライト部267に出力する。
識別ビット生成部265は、最長一致文字列の長さに基づいて、識別ビット「0」または識別ビット「1」を出力する処理部である。具体的に、識別ビット生成部265は、最長一致文字列の長さが3バイト未満である場合には、識別ビット「0」を第1符号化部263に出力する。これに対して、識別ビット生成部265は、最長一致文字列の長さが3バイト以上である場合には、識別ビット「1」を第2符号化部264に出力する。
参照部更新部266は、記憶領域A1と記憶領域A2との照合が完了した場合に、記憶領域A1に格納されたデータを、記憶領域A2に格納する処理部である。
ファイルライト部267は、最長一致文字列の長さが3バイト未満の場合に、識別ビット「0」と、第1符号化部263から出力されるハフマン符号とを合わせた圧縮データを、記憶領域A3に書き込む。また、ファイルライト部267は、最長一致文字列の長さが3バイト以上の場合に、識別ビット「1」と、第2符号化部264から出力される最長一致文字列の位置および長さとを合わせた圧縮データを、記憶領域A3に書き込む。
また、ファイルライト部267は、記憶領域A1に対する処理が終了すると、記憶領域A3のデータを圧縮ファイルF2に書き込む。
(圧縮処理全体の流れ)
図14は、圧縮処理全体の流れの例を示すフロー図である。なお、ステップS12の詳細なフローに関しては、後述のサブフローで示す。図14の例のように、情報処理装置100bは、ステップS10〜ステップS15の前半部においてハフマン木20を生成し、ステップS16〜ステップS24の後半部においてハフマン木20を用いて圧縮処理をおこなう。
まず、前半部のハフマン木20を生成する処理に関して説明する。情報処理装置100bは、前処理を行う(ステップS10)。例えば、情報処理装置100bは、記憶領域A1〜A3を第1記憶領域258に確保する。
情報処理装置100bは、ファイルF1のコンテンツ部分をリードして記憶領域A1に展開する(ステップS11)。記憶領域A1にリードされたコンテンツは、集計処理が完了する度に、記憶領域A2に格納される。
頻度表生成部255は、文字出現回数集計部253および長さ出現回数集計部254からの出力に基づいて、頻度表H11bおよび頻度表H12bを生成する(ステップS12)。ハフマン木生成部256は、頻度表H11bおよび頻度表H12bに基づいて、各コードの出現頻度(合計)を算出し、出現頻度の高いコードから順に各コードの順番をソートする(ステップS12)。
ハフマン木生成部256は、各々の葉の構造体を生成する(ステップS13)。ハフマン木生成部256は、ステップS12におけるソート結果に基づいて、コードの出現頻度(合計)の高い葉の構造体から順に並ぶように葉の構造体を配置する(ステップS14)。ハフマン木生成部256は、コードの出現頻度に応じて枝および節点を生成することで、ハフマン木を生成する(ステップS15)。
次に、後半部のハフマン木を用いた圧縮処理に関して説明する。まず、第2最長一致文字列探索部262は、記憶領域A1と記憶領域A2とを比較することで最長一致文字列を探索する(ステップS16)。
第1符号化部263は、最長一致文字列の長さiが所定長Lmin未満の場合(ステップS17No)、記憶領域A1に含まれる文字を取得する(ステップS21)。次いで、第1符号化部263は、取得した文字と、ハフマン木とを比較して、文字をハフマン符号に変換する(ステップS22)。参照部更新部266は、記憶領域A1から取得された文字を記憶領域A2にコピーすることで記憶領域A2を更新し、ファイルライト部267は、文字のハフマン符号を含む圧縮データを記憶領域A3にコピーすることで記憶領域A3を更新する(ステップS23)。そして、情報処理装置100bは、ステップS24の処理に移る。
一方、第2符号化部264は、第2最長一致文字列探索部262によって取得された最長一致文字列の長さiが所定長Lmin以上の場合(ステップS17Yes)、最長一致文字列の長さiを取得する(ステップS18)。さらに、第2符号化部264は、取得された最長一致文字列の長さiとハフマン木とを比較して、最長一致文字列の長さiをハフマン符号に変換する(ステップS19)。参照部更新部266は、記憶領域A1から取得された最長一致文字列を記憶領域A2にコピーすることで記憶領域A2を更新する(ステップS20)。また、ファイルライト部267は、最長一致文字列の位置および長さのハフマン符号を含む圧縮データを記憶領域A3にコピーすることで記憶領域A3を更新する(ステップS20)。そして、情報処理装置100bは、ステップS24の処理に移る。
情報処理装置100bは、ファイルF1の終点に至った場合(ステップS24Yes)、処理を終了する。一方、情報処理装置100bは、ファイルF1の途中であった場合(ステップS24No)、ステップS16の処理に戻り、次の文字列の圧縮処理をおこなう。
(頻度計算処理の流れ)
図15は、頻度計算処理の流れの例を示すフロー図である。図15のフローは、図14におけるステップS12に対応する。
第1ファイルリード部251は、ファイルF1のデータを、記憶領域A1にリードする(ステップS30)。なお、第1ファイルリード部251は、次回、ファイルF1のデータを、記憶領域A1にリードする場合、集計処理がなされたファイルF1部分の続きから新たにデータを記憶領域A1にリードする。
第1最長一致文字列探索部252は、記憶領域A1および記憶領域A2を比較して、最長一致文字列を探索する(ステップS31)。
頻度表生成部255は、探索された最長一致文字列の長さiが所定長Lmin未満である場合(ステップS32No)、頻度表H11bにおいて記憶領域A1に含まれる文字jの出現回数をインクリメントする(ステップS35)。第1ファイルリード部251は、記憶領域A1に格納されているデータを記憶領域A2にコピーして記憶領域A2を更新する(ステップS36)。そして、情報処理装置100bは、ステップS37の処理に移る。
一方、頻度表生成部255は、探索された最長一致文字列の長さiが所定長Lmin未満である場合(ステップS32Yes)、頻度表H12bにおいて長さiの出現回数をインクリメントする(ステップS33)。第1ファイルリード部251は、記憶領域A1に格納されているデータを記憶領域A2にコピーして記憶領域A2を更新する(ステップS34)。そして、情報処理装置100bは、ステップS37の処理に移る。
ハフマン木生成部256は、ファイルF1の終点に到達した場合(ステップS37Yes)、コードに対応する文字および長さの出現頻度(小計)を合算することで、コードの出現頻度(合計)を算出する(ステップS38)。ハフマン木生成部256は、算出した各コードの出現頻度(合計)に応じてコードの並び順をソートする(ステップS39)。情報処理装置100bは、ファイルF1をクローズする(ステップS40)。一方、情報処理装置100bは、頻度計算処理をファイルF1の途中まで行っていた場合(ステップS37No)、ステップS30の処理に戻り、頻度計算の処理をおこなう。
(コードの頻度表を作成する処理)
図16は、コードの頻度表を作成する処理の流れの例を示す図である。ハフマン木生成部256は、文字の頻度表H20bからコードに対応する文字の出現頻度(小計)を取得し、長さの頻度表H21bからコードに対応する長さの出現頻度(小計)を取得する。ハフマン木生成部256は、コードに対応する文字の出現頻度(小計)と長さの出現頻度(小計)とを合算し、コードの出現頻度(合計)を求める。ハフマン木生成部256は、コードの出現頻度(合計)に基づきコードに符号長を割当てる。ハフマン木生成部256は、コードに割当てられた頻度(合計)および符号長を、コードの頻度表22bに格納する。
例えば、ハフマン木生成部256は、コード「00h」に対応する「NUL」の出現頻度(小計)「0.000121」と長さ「3」の出現頻度(小計)「0.0891」とを合算し、コード「00h」の出現頻度(合計)「0.089221」を求める。ハフマン木生成部256は、コードの出現頻度(合計)「0.089221」に基づいて、コード「00h」に符号長「3」を割当てる。ハフマン木生成部256は、コード「00h」の出現頻度(合計)「0.089221」および符号長「3」をコード頻度表22bに格納する。また、ハフマン木生成部256は、コード「01h」に対応する「SOH」の出現頻度(小計)「0.000003」と長さ「4」の出現頻度(小計)「0.0532」とを合成し、コード「01h」の出現頻度(合計)「0.053203」を求める。ハフマン木生成部256は、コードの出現頻度(合計)「0.053203」に基づいて、コード「01h」に符号長「4」を割当てる。ハフマン木生成部256は、コード「01h」の出現頻度(合計)「0.053203」および符号長「4」をコードの頻度表22bに格納する。
ハフマン木生成部256は、出現頻度の高いコードから順に並ぶようにコードの頻度表22bをソートして頻度表23bを生成する。例えば、ハフマン木生成部256は、出現頻度が高いコードを左から順に「65h,00h,61h,・・・01h,02h,・・・」のように頻度表22bの列を並び替えて頻度表23bを生成する。なお、コード頻度表H3の配列は、ハフマン木の葉の構造体の配列に対応する。
(文字および最長一致文字列の長さに割り当てられる符号長に関して)
図17は、実施例1のハフマン符号の符号長を説明するための第1の図である。図17の例に示される頻度分布表5aは、実施例1に係る情報処理装置100bによって集計された文字と、長さとの出現頻度(小計)を表す。頻度分布表5aの横軸は、出現頻度の高い文字から順に、英小字、数字、英大字、特殊文字、制御文字を列挙したものである。制御文字の近傍に出現頻度が高いものから順に最長一致文字列の長さが列挙される。頻度分布表5aの縦軸は、各文字および各長さの出現頻度(小計)を示す。
符号長分布表5bは、各文字および各最長一致文字列の長さに割当てられた符号長を表す。符号長分布表5bの横軸は、頻度分布表5aの横軸に対応する。一方、符号長分布表5bの縦軸は、各文字および長さに割り当てられる符号長を示す。
頻度分布表6aは、符号長分布表5aの文字の出現頻度(小計)と長さの出現頻度(小計)とを合成してコードの出現頻度(合計)とし、コードを出現頻度(合計)の順にソートした場合のコードの出現頻度の分布を表す。頻度分布表6aの縦軸は、コードの出現頻度(合計)を示す。頻度分布表6aの横軸には、出現頻度順にソートされたコードが列挙される。例えば、頻度分布表6aにおいて、文字「e」および長さ「104」に対応するコード「65h」の出現頻度(合計)は「0.110403」である。また、文字「NUL」および長さ「3」に対応するコード「00h」の出現頻度(合計)は「0.089221」である。
符号長分布表6bは、コードを出現頻度順にソートした場合のコードの符号長の分布を表す。符号長分布表6bの横軸は、頻度分布表6aの横軸に対応する。符号長分布表6bの縦軸は、各コードに割り当てられる符号長を示す。例えば、コード「65h」に符号長「3」が割当てられる。また、コード「7fh」に符号長「12」が割り当てられる。
以上説明したように、実施例1の情報処理装置100bは、文字および長さの出現頻度(小計)を集計し、各コードに対応する文字の出現頻度(小計)および長さの出現頻度(小計)を合算することで各コードの出現頻度(合計)を求める。このように、コードに対応する長さの出現頻度(小計)がコードの出現頻度(合計)に反映される。このため、コードに対応する文字の出現頻度(小計)が低くても、コードに対応する長さの出現頻度(小計)が高ければ、コードに対して短い符号長が割当てられる。すなわち、出現頻度が高い長さに対応するコードに対して短い符号長が割当てられるので、ファイルの圧縮率が向上する。
図18は、実施例1のハフマン符号の符号長を説明するための第2の図である。図18の例に示される頻度分布表7aは、実施例1に係る情報処理装置100bによって集計されたCJK文字(1byte)と長さの出現頻度(小計)を表す。頻度分布表7aの横軸は、出現頻度の高いCJK文字(1byte)から順に、CJK文字(1byte)を列挙したものである。出現頻度が低いCJK文字(1byte)の近傍に、出現頻度が高いものから順に最長一致文字列の長さが列挙される。頻度分布表7aの縦軸は、各CJK文字(1byte)および各長さの出現頻度(小計)を示す。頻度分布表7aに表されるように、CJK文字同士で出現頻度に差異が生じにくく、各CJK文字の出現頻度(小計)は概ね均一である。
符号長分布表7bは、各コードに割当てられる符号長を表す。符号長分布表7bの横軸は、頻度分布表7aの横軸に対応する。符号長分布表7bの縦軸は、各コードに割り当てられる符号長を示す。
頻度分布表8aは、コードを出現頻度(合計)の順にソートした場合のコードの出現頻度(合計)の分布を表す。情報処理装置100bは、符号長分布表7aのCJK文字(1byte)の出現頻度(小計)と長さの出現頻度(小計)とを合算することでコードの出現頻度(合計)を算出する。頻度分布表8aの縦軸は、コードの出現頻度(合計)を示す。頻度分布表8aの横軸には、出現頻度順にソートされたコードが列挙される。頻度分布表8aの例に示されるように、最長一致文字列の長さの出現頻度(小計)がコードの出現頻度(合計)に反映されることで、出現頻度が高いコードと出現頻度が低いコードとの間の出現頻度の差異が大きくなる。
符号長分布表8bは、コードを出現頻度(合計)の順にソートした場合の符号長の分布を表す。符号長分布表8bの横軸は、頻度分布表8aの横軸に対応する。符号長分布表8bの縦軸は、各コードに割り当てられる符号長を示す。符号長分布表8bに示されるように、出現頻度が高いコードと出現頻度が低いコードとの間の出現頻度の差異が大きくなった結果、出現頻度が高いコードに短い符号長が割当てられる。
以上説明したように、実施例1の情報処理装置100bは、各コードに対応するCJK文字(1byte)の出現頻度(小計)および長さの出現頻度(小計)を合算することでコードの出現頻度(合計)を求める。CJK文字(1byte)の出現頻度(小計)のみをコードの出現頻度(合計)に反映する場合、コード同士の出現頻度に差異があまり生じないが、最長一致文字列の長さの出現頻度をコードの出現頻度に反映すれば、コード同士の出現頻度の差異が大きくなる。このため、出現頻度の高い最長一致文字列の長さに対応するコードに対してより短い符号長が割当てられるようになるので、ファイルの圧縮率が向上する。
(伸長部の構成)
図19は、本実施例に係る伸長部の構成を示す機能ブロック図である。図19に示すように、この伸長部300bは、第1段階処理部370bと、第2段階処理部380bとを有する。第1段階処理部370bは、頻度表リード部371と、ハフマン木生成部372とを有する。
第1段階処理部370bは、圧縮ファイルF2のヘッダ情報に含まれる頻度表H11bおよび頻度表H12bの情報を基にして、ハフマン木20を生成する処理部である。第1段階処理部370bに含まれる各処理部について説明する。
頻度表リード部371は、頻度表H11bおよび頻度表H12bの情報を読み出して、ハフマン木生成部372に出力する処理部である。例えば、頻度表リード部371が読み出す頻度表H11bおよび頻度表H12bは、図13の頻度表生成部255によって生成された頻度表H11bおよび頻度表H12bに対応する。
ハフマン木生成部372は、頻度表H11Bおよび頻度表H12Bを基にしてハフマン木20を生成する処理部である。ハフマン木生成部372がハフマン木20を生成する処理は、図13のハフマン木生成部256がハフマン木20を生成する処理と同じである。
第2段階処理部380bは、圧縮ファイルF2を伸長する処理部である。第2段階処理部380bに含まれる各部の処理について説明する。
ファイルリード部381は、圧縮ファイルF2内の圧縮データを記憶領域B1に読み出す処理部である。ファイルリード部381は、記憶領域B1に格納された圧縮データに対する処理が終了した場合に、新たな圧縮データを圧縮ファイルF2から読み出し、記憶領域B1に格納された圧縮データを更新する。
葉識別部382は、記憶領域B1に格納された圧縮データと、ハフマン木20とを比較して、ハフマン木20を辿り、葉を特定する処理部である。葉識別部382は、特定した葉の情報を、第1伸長部383および第2伸長部384に出力する。
第1伸長部383は、識別情報が「0」の場合に処理を行う。図4で説明したように、識別情報が「0」の場合には、第1伸長部383は、ハフマン木20を辿り、葉から文字の情報を抽出する。第1伸長部383は、抽出した文字の情報を、伸長データとして、参照部である記憶領域B2、および記憶領域B3に格納し、ファイルライト部386に出力する。
第2伸長部384は、識別情報が「1」の場合に処理を行う。図4で説明したように、識別情報が「1」の場合には、第2伸長部226は、ハフマン木20を辿り、葉から最長一致文字列の長さを特定する。また、第2伸長部384は、圧縮データに基に最長一致文字列の位置を特定し、特定した最長一致文字列の位置および長さに基づいて、記憶領域B2において最長一致文字列(データ)を特定する。第2伸長部384は、最長一致文字列(データ)を、参照部である記憶領域B2、およびB3に格納し、参照部更新部385およびファイルライト部386に出力する。
参照部更新部385は、第1伸長部383または第2伸長部384から伸長データを取得した場合に、伸長データによって、記憶領域B2を更新する処理部である。
ファイルライト部386は、第1伸長部383または第2伸長部384から伸長データを取得した場合に、伸長データを記憶領域B3に格納し、ファイルF3に書き込む処理部である。
(伸張処理全体の流れ)
図20は、伸張処理の流れの例を示すフロー図である。まず、情報処理装置100bは、前処理をおこなう(ステップS30)。例えば、伸長処理する際の作業領域として記憶領域B1、記憶領域B2および記憶領域B3を確保する。情報処理装置100bは、圧縮ファイルF2をリードして記憶領域B1に展開する(ステップS31)。頻度表リード部371は、圧縮ファイルF2のヘッダ部に含まれる頻度表H11Bおよび頻度表H12Bを読み出してハフマン木生成部372に出力する。ハフマン木生成部372は、各コードの出現頻度を算出し、各コードの出現頻度に基づいてハフマン木20を生成する(ステップS32)。ファイルリード部381は、ファイルF2から圧縮データを読み出す(ステップS33)。
第1伸長部383は、葉に含まれる識別ビットが「0」の場合(ステップS34Yes)に処理を行う。葉識別部382は、記憶領域B1に格納された圧縮データと、ハフマン木20とを比較して、ハフマン木20を探索し、葉を特定する(ステップS35)。第1伸長部383は、特定した葉に含まれるコードに基づいて文字を取得する(ステップS36)。ファイルライト部386は、ファイルF3に伸長文字を書き込む(ステップS37)。参照部更新部385は、参照部である記憶領域B2に文字を格納する(ステップS38)。
第2伸長部384は、葉に含まれる識別ビットが「1」の場合(ステップS34No)に処理を行う。葉識別部382は、記憶領域B1に格納された圧縮データと、ハフマン木20とを比較して、ハフマン木20を探索し、葉を特定する(ステップS39)。第2伸長部384は、特定した葉に含まれるコードに基づいて最長一致文字列の長さを取得する(ステップS40)。第2伸長部384は、取得された最長一致文字列の長さを用いて記憶領域B2から最長一致文字列を取得し、取得した最長一致文字列をファイルライト部386に出力する。ファイルライト部386は、出力された最長一致文字列をファイルF3に書き込む(ステップS41)。参照部更新部385は、参照部である記憶領域B2に最長一致文字列を格納する(ステップS42)。
情報処理装置100bは、圧縮ファイルF2の終点に至った場合(ステップS43Yes)、ファイルF2をクローズして(ステップS44)処理を終了する。一方、情報処理装置100bは、圧縮ファイルF2の終点に至っていない場合(ステップS43No)、ステップS33の処理に戻り、次の圧縮データの伸張処理をおこなう。
(効果)
情報処理装置100bは、圧縮対象のデータ列から抽出されたデータのうち、処理対象となるデータと最も長く一致する一致データのデータ長が所定長未満の場合に、一致データに含まれる文字データに対応するコードの出現頻度を取得し、一致データのデータ長が所定長以上の場合に、一致データに対応するコードの出現頻度を取得する取得部を有する。情報処理装置100bは、取得されたコードの出現頻度に基づき生成された圧縮符号を用いて圧縮対象のデータ列を圧縮する圧縮部を有する。なお、取得部は、第1段階処理部の一例である。圧縮部は、第2段階処理部の一例である。これにより、ファイルの圧縮率を改善できる。
圧縮部200bは、同じコードに対応する文字データの出現頻度および長さデータの出現頻度を合算した頻度に基づいて木を生成する。これにより、文字データの出現頻度と長さデータの出現頻度とをコードの出現頻度に反映できる。
圧縮部200bは、木の葉のそれぞれに文字データおよび長さデータを割り当てた木を用いて、圧縮対象のデータ列を圧縮する。これにより、出現頻度の高いコードに短い圧縮符号を割当てることができ、ファイルの圧縮率を改善できる。
(実施例1に関連する他の態様)
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
実施例1において、情報処理装置100bは、最長一致文字列の長さが3バイト以上の場合に最長一致文字列の長さを圧縮する旨を説明したが、最長一致文字列の長さを圧縮するか否かを判定する際の長さのバイト数を、任意のバイト数に変更してもよい。
また、圧縮処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮が行なわれてもよいし、複数のページをまとめた単位で圧縮が行なわれてもよい。
また、実施例1に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(情報処理装置のハードウェア構成)
図21は、実施例1の情報処理装置のハードウェア構成を示す図である。図21が示すように、コンピュータ500は、各種演算処理を実行するCPU501と、ユーザからのデータ入力を受け付ける入力装置502と、モニタ503とを有する。また、コンピュータ500は、記憶媒体からプログラム等を読み取る媒体読取装置504と、他の装置と接続するためのインターフェース装置505と、他の装置と無線により接続するための無線通信装置506とを有する。また、コンピュータ500は、各種情報を一時記憶するRAM(Random Access Memory)507と、ハードディスク装置508とを有する。また、各装置501〜508は、バス509に接続される。
ハードディスク装置508には、図13に示した第1段階処理部250および第2段階処理部260の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置508には、情報処理プログラムを実現するための各種データが記憶される。
CPU501は、ハードディスク装置508に記憶された各プログラムを読み出して、RAM507に展開して実行することで、各種の処理を行う。これらのプログラムは、コンピュータ500を図13に示した第1段階処理部250および第2段階処理部260として機能させることができる。
なお、上記の情報処理プログラムは、必ずしもハードディスク装置508に記憶されている必要はない。例えば、コンピュータ500が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ500が読み出して実行するようにしてもよい。コンピュータ500が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN(Local Area Network)等に接続された装置にこのプログラムを記憶させておき、コンピュータ500がこれらからプログラムを読み出して実行するようにしてもよい。
図22は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ500において、図22に示すハードウェア群21(501〜509)の制御を行なうOS(オペレーティング・システム)22が動作する。OS22に従った手順でCPU501が動作して、ハードウェア群21の制御・管理が行なわれることにより、アプリケーションプログラム24やミドルウェア23に従った処理がハードウェア群21で実行される。さらに、コンピュータ500において、ミドルウェア23またはアプリケーションプログラム24が、RAM507に読み出されてCPU501により実行される。
CPU501が、圧縮機能が呼び出された場合に、ミドルウェア23またはアプリケーションプログラム24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)圧縮部200の機能が実現される。圧縮機能は、それぞれアプリケーションプログラム24自体に含まれてもよいし、アプリケーションプログラム24に従って呼び出されることで実行されるミドルウェア23の一部であってもよい。
アプリケーションプログラム24(またはミドルウェア23)の圧縮機能により得られる圧縮ファイルF2は、部分的に伸張することも可能である。圧縮ファイルF2の途中を伸張する場合には、伸張対象の部分までの圧縮データの伸張処理が抑制されるため、CPU501の負荷が抑制される。また、伸張対象の圧縮データを部分的にRAM507上に展開するので、ワークエリアも削減される。
図23は、実施形態のシステムにおける装置の構成例を示す図である。図23のシステムは、コンピュータ500a、コンピュータ500b、基地局50およびネットワーク60を含む。コンピュータ500aは、無線または有線の少なくとも一方により、コンピュータ500bと接続されたネットワーク60に接続している。
100b 情報処理装置
200b 圧縮部
250 第1段階処理部
251 第1ファイルリード部
252 第1最長一致文字列探索部
253 文字出現回数集計部
254 長さ出現回数集計部
255 頻度表生成部
256 ハフマン木生成部
258 第1記憶領域
260 第2段階処理部
261 第2ファイルリード部
262 第2最長一致文字列探索部
263 第1符号化部
264 第2符号化部
265 識別ビット生成部
266 参照部更新部
267 ファイルライト部
269 第2記憶領域

Claims (3)

  1. コンピュータに、
    圧縮対象のデータ列から抽出されたデータのうち、処理対象となるデータと最も長く一致する一致データのデータ長が所定長未満の場合に、前記一致データに含まれる文字データおよび前記一致データのデータ長のうち前記一致データに含まれる文字データに対応するコードの出現頻度を取得し、前記一致データのデータ長が所定長以上の場合に、前記文字データおよび前記一致データのデータ長のうち前記一致データのデータ長に対応するコードの出現頻度を取得し、
    前記文字データの出現頻度および前記一致データのデータ長の出現頻度を合算した頻度に基づいて生成された、木の葉のそれぞれに前記文字データおよび前記一致データのデータ長に対応するコードを割り当てた木を用いて前記圧縮対象のデータ列を圧縮する
    処理を実行させることを特徴とする圧縮プログラム。
  2. 圧縮対象のデータ列から抽出されたデータのうち、処理対象となるデータと最も長く一致する一致データのデータ長が所定長未満の場合に、前記一致データに含まれる文字データおよび前記一致データのデータ長のうち前記一致データに含まれる文字データに対応するコードの出現頻度を取得し、前記一致データのデータ長が所定長以上の場合に、前記文字データおよび前記一致データのデータ長のうち前記一致データのデータ長に対応するコードの出現頻度を取得し、
    前記文字データの出現頻度および前記一致データのデータ長の出現頻度を合算した頻度に基づいて生成された、木の葉のそれぞれに前記文字データおよび前記一致データのデータ長に対応するコードを割り当てた木を用いて前記圧縮対象のデータ列を圧縮する
    処理をコンピュータが実行することを特徴とする圧縮方法。
  3. 圧縮対象のデータ列から抽出されたデータのうち、処理対象となるデータと最も長く一致する一致データのデータ長が所定長未満の場合に、前記一致データに含まれる文字データおよび前記一致データのデータ長のうち前記一致データに含まれる文字データに対応するコードの出現頻度を取得し、前記一致データのデータ長が所定長以上の場合に、前記文字データおよび前記一致データのデータ長のうち前記一致データのデータ長に対応するコードの出現頻度を取得する取得部と、
    前記文字データの出現頻度および前記一致データのデータ長の出現頻度を合算した頻度に基づいて生成された、木の葉のそれぞれに前記文字データおよび前記一致データのデータ長に対応するコードを割り当てた木を用いて前記圧縮対象のデータ列を圧縮する圧縮部と、
    を有することを特徴とする圧縮装置。
JP2014149271A 2014-07-22 2014-07-22 圧縮プログラム、圧縮方法および圧縮装置 Active JP6609404B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014149271A JP6609404B2 (ja) 2014-07-22 2014-07-22 圧縮プログラム、圧縮方法および圧縮装置
US14/799,773 US9397696B2 (en) 2014-07-22 2015-07-15 Compression method, compression device, and computer-readable recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014149271A JP6609404B2 (ja) 2014-07-22 2014-07-22 圧縮プログラム、圧縮方法および圧縮装置

Publications (2)

Publication Number Publication Date
JP2016025536A JP2016025536A (ja) 2016-02-08
JP6609404B2 true JP6609404B2 (ja) 2019-11-20

Family

ID=55167542

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014149271A Active JP6609404B2 (ja) 2014-07-22 2014-07-22 圧縮プログラム、圧縮方法および圧縮装置

Country Status (2)

Country Link
US (1) US9397696B2 (ja)
JP (1) JP6609404B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7405365B2 (ja) * 2020-01-31 2023-12-26 国立大学法人東海国立大学機構 レーザ加工方法、半導体部材製造方法、及び、レーザ加工装置
US11652495B2 (en) * 2021-09-14 2023-05-16 Mastercard International Incorporated Pattern-based string compression
CN115988569B (zh) * 2023-03-21 2023-06-30 浙江省疾病预防控制中心 一种蓝牙设备数据快速传输方法
CN117155406B (zh) * 2023-10-30 2024-02-02 深圳市成为高科技有限公司 一种社会调查数据智能管理系统
CN117254819B (zh) * 2023-11-20 2024-02-27 深圳市瑞健医信科技有限公司 一种医疗废物智能监管系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5532694A (en) * 1989-01-13 1996-07-02 Stac Electronics, Inc. Data compression apparatus and method using matching string searching and Huffman encoding
JP3241788B2 (ja) 1992-02-28 2001-12-25 富士通株式会社 データ圧縮方式
JP3541930B2 (ja) * 1998-08-13 2004-07-14 富士通株式会社 符号化装置及び復号化装置
JP2001136075A (ja) 1999-11-05 2001-05-18 Fujitsu Ltd データ圧縮/復元装置及びデータ圧縮/復元プログラムを記録した記憶媒体
DE10131801B4 (de) 2001-06-30 2013-03-07 Robert Bosch Gmbh Verfahren zur Datenkompression und Navigationssystem
JP4479530B2 (ja) * 2004-12-28 2010-06-09 カシオ電子工業株式会社 データ圧縮装置、及びデータ復元装置
US7215259B2 (en) * 2005-06-03 2007-05-08 Quantum Corporation Data compression with selective encoding of short matches
US7827237B2 (en) * 2007-03-12 2010-11-02 Citrix Systems, Inc. Systems and methods for identifying long matches of data in a compression history
WO2008142799A1 (ja) 2007-05-24 2008-11-27 Fujitsu Limited 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置
JP5782214B2 (ja) * 2008-05-30 2015-09-24 富士通株式会社 情報検索プログラム、情報検索装置および情報検索方法
US8610606B2 (en) * 2011-11-24 2013-12-17 International Business Machines Corporation Compression algorithm incorporating dynamic selection of a predefined huffman dictionary
JP5895545B2 (ja) * 2012-01-17 2016-03-30 富士通株式会社 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体

Also Published As

Publication number Publication date
US20160028415A1 (en) 2016-01-28
US9397696B2 (en) 2016-07-19
JP2016025536A (ja) 2016-02-08

Similar Documents

Publication Publication Date Title
KR101748982B1 (ko) 매체에 저장된 프로그램
JP6609404B2 (ja) 圧縮プログラム、圧縮方法および圧縮装置
US8838551B2 (en) Multi-level database compression
US20160321282A1 (en) Extracting method, information processing method, computer product, extracting apparatus, and information processing apparatus
KR100894002B1 (ko) 선택적 압축과 복원 및 압축 데이터에 대한 데이터 포맷을위한 장치 및 방법
JP5831298B2 (ja) プログラム、情報処理装置およびインデックス生成方法
JP6476647B2 (ja) 圧縮プログラム、圧縮装置、圧縮方法、伸長プログラム、伸長装置および伸長方法
US9916314B2 (en) File extraction method, computer product, file extracting apparatus, and file extracting system
US9509333B2 (en) Compression device, compression method, decompression device, decompression method, information processing system, and recording medium
JP2001345710A (ja) データ圧縮装置および方法
US11394956B2 (en) Encoding apparatus and encoding method
JP6686639B2 (ja) 符号化プログラム、符号化装置、符号化方法、復号化プログラム、復号化装置および復号化方法
JP2017073615A (ja) 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置
Rahman et al. A novel lossless coding technique for image compression
US9479195B2 (en) Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device
US20150248432A1 (en) Method and system
US11309909B2 (en) Compression device, decompression device, and method
JP6931442B2 (ja) 符号化プログラム、インデックス生成プログラム、検索プログラム、符号化装置、インデックス生成装置、検索装置、符号化方法、インデックス生成方法および検索方法
JPWO2014030189A1 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP2016170750A (ja) データ管理プログラム、情報処理装置およびデータ管理方法
JP6135788B2 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
US10318483B2 (en) Control method and control device
US20160210304A1 (en) Computer-readable recording medium, information processing apparatus, and conversion process method
JP3236747B2 (ja) データ伸長方式
Jrai Efficiency lossless data techniques for Arabic text compression

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180306

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180412

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181211

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20181218

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20190111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191028

R150 Certificate of patent or registration of utility model

Ref document number: 6609404

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150