JP6319740B2 - データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム - Google Patents

データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム Download PDF

Info

Publication number
JP6319740B2
JP6319740B2 JP2014061524A JP2014061524A JP6319740B2 JP 6319740 B2 JP6319740 B2 JP 6319740B2 JP 2014061524 A JP2014061524 A JP 2014061524A JP 2014061524 A JP2014061524 A JP 2014061524A JP 6319740 B2 JP6319740 B2 JP 6319740B2
Authority
JP
Japan
Prior art keywords
hash
computer
entry
hash value
character string
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
JP2014061524A
Other languages
English (en)
Other versions
JP2015186077A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2014061524A priority Critical patent/JP6319740B2/ja
Priority to US14/640,317 priority patent/US9214954B2/en
Priority to US14/748,310 priority patent/US9325345B2/en
Publication of JP2015186077A publication Critical patent/JP2015186077A/ja
Application granted granted Critical
Publication of JP6319740B2 publication Critical patent/JP6319740B2/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/4093Variable length to variable length coding
    • 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/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • 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/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory

Description

本発明は、データ圧縮の高速化の技術に関する。特には、本発明は、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をするための技術に関する。
ファイルを圧縮する場合に、例えば、zip、LHA、gzip、bzip2、又はLZMA(Lempel-Ziv-Markov chain-Algorithm)が使用されている。
bzip2は、ブロック・ソート(Blocking Sorting)という手法を用いて高い圧縮率を達成する。これに対して、zip、LHA、gzipは、LZ77符号とハフマン符号を組み合わせた手法である。LZ77符号は、辞書に基づく符号化方式(dictionary-based coding,辞書法)の一つであり、入力された文字列(記号列でもある)を辞書に登録し、その辞書を使って符号化を行う手法である。
辞書に基づく符号化方式として、静的辞書法(static dictionary method)と、適応型辞書法(adaptive dictionary method,動的辞書法ともいう)とがある。
静的辞書法では、符号化に先立って、辞書を編集しておいて、その辞書に基づいて符号化を行う。この静的辞書法では、符号化と復号において同じ辞書を用意しなければならない為に、復号するための辞書をファイルに添付する方法では、圧縮率の大幅な低下は避けられない。
一方、適応型辞書法は、前もって辞書を用意せずに、ファイル(入力ストリーム)を読み込みながら辞書を作成し、そして当該辞書に登録されている文字列が現れることに応じて、当該文字列を辞書の位置情報に変換することで圧縮を行う。この適応型辞書法では、最初は辞書が空の状態なので文字列を圧縮することはできないが、ファイルを読み込むに従って十分な文字列が辞書に登録される為に、当該ファイルの高い圧縮率を実現できる。
適応型辞書法として例えば、RLE、BPE、Deflate、及びLZ符号(Ziv-Lempel符号)が知られている。LZ符号として例えば、LZ77、LZ78、LZSS、LZW、LZML、LZO、LZMA、LZX、LZRW、LZJB、LZT及びROLZが知られている。
上記適応型辞書法のうち、最も有名な手法がLZ符号である。LZ符号は、LZ77符号(1977年に開発)とLZ78符号(1978年に開発)とに大別される。LZ77符号とLZ78符号とでは辞書の作成方法が異なっている。LZ77符号ではスライド辞書法に従い辞書が作成され、LZ78符号では動的辞書法に従い辞書が作成される。
LZ77符号には、沢山のバリエーションが存在する。その中で基本的に広く用いられている符号がLZSS符号である。
LZSS符号では、スライド・ウィンドウ(sliding window)及び最長一致法が使用される。LZSS符号をプログラムする場合に、スライド・ウィンドウの参照部から最長一致系列を探す処理が行われる。当該最長一致系列を探す処理において、ハッシュ法が用いられる。すなわち、LZSS圧縮の際の最長一致系列探索に要する時間を短縮する為に、ハッシュテーブルが用いられる。そして、ハッシュテーブルに文字列を登録することは、ハッシュ関数を用いて入力文字列の先頭から所定の文字数分の文字列でハッシュ値を求め、当該入力文字列(正確に言えば、当該文字列へのポインタ)をハッシュテーブルに登録することによって行われる。従って、LZSS符号では、入力文字列をスライドさせながら、それぞれのハッシュ値を計算して辞書を作成し、また同時に当該辞書に登録された過去の文字列と一致する最長一致系列を探していく。
ファイル圧縮においては、高い圧縮率、圧縮速度、及び復号速度の向上、並びに、メモリ要求の改善を目指して種々の方法が検討されている。
下記特許文献1は、辞書検索に外部ハッシュ法のリスト構造を利用したLZW符号化の処理を記載する(請求項1)。
下記特許文献2は、ハッシュ関数の選択方法を記載する(要約)。
下記特許文献3は、複数のハッシュ値算出手段から一つを選択する式選択手段を記載する(要約)。
下記特許文献4は、データのファイルサイズの縮小と検索ノイズの低減化とを図ることを記載する(要約)。
下記特許文献5は、複数文字からなる検索文字列を,ハッシュ関数発生手段に入力し,発生するハッシュ値を用いて,上記全文インデックスに格納された対応する文字の出現位置情報を検出し,検出された各文字の出現位置情報が,相対的に検索文字列の配置順に該当するか否かを判別することにより,検索を行うことを記載する(要約)。
下記特許文献6は、データハッシュ化及び/またはデータ冗長性除去のような用途のための、効率的な処理に関する方法及びシステムを記載する(段落0001)。
下記特許文献7は、検索性能の高速化を図ると共に総インデクスサイズの増加を最小限に抑えることが可能な技術を記載する(要約)。
下記非特許文献1は、ハッシュ化及び接尾辞ソートによるLZ77圧縮の速度を改善する旨を記載する(SUMMARY)。
特開平6−83573号公報 特開2009−296131号公報 特開平11−85771号公報 特開2011−138230号公報 特開平5−61910号公報 特表2010−515114号公報 特開2000−57151号公報
Kunihiko Sadakane et. al., "Improving the Speed of LZ77 Compression by Hashing and Suffix Sorting", IEICE transactions on fundamentals of electronics, communications and computer sciences, E83-A, No. 12, pages 2689 - 2698, 2000年12月<http://ci.nii.ac.jp/naid/110003208520>から入手可能
以下に、本発明の理解を容易にするために、辞書に基づく符号化方式においてデータを圧縮する為の基本的な処理を説明する。
辞書に基づく符号化方式では、記号を可変長の符号語に変換するのではなく、いわゆる語(word)又は節(phrase)と呼ばれる可変長の文字列を固定長又は可変長の符号語に変換する。
適応型辞書法では、辞書を前もって編集せずに、圧縮する文字列を読み込みながら、コンピュータは、当該文字列にハッシュ値を更新する関数を適用して計算されたハッシュ値に基づき、文字列を辞書に順次登録していく。
適応型辞書法のうちのLZ77符号では、スライド・ウィンドウを利用する。コンピュータは、LZ77符号では、所定の数の語を保存するバッファを用意し、このバッファを利用することで符号化を行う。バッファの大きさは有限であるので、新しく記号を読み込んだ分だけ、古い文字列を捨てて行かなければならない。この動作は、符号化が進むにつれて、当該バッファに保存されている文字列が与えられた文字列全体の中をスライドしていくように見えることから、当該バッファはスライド・ウィンドウとも呼ばれている。
スライド・ウィンドウは、参照部(例えば、16の大きさ)と符号化部(例えば、4の大きさ)とからなる。符号化部分が圧縮対象となる文字列である。例えば、LZ77符号のうちのLZSS符号では、参照部の中から符号化部と最も長く一致する文字列(最長一致系列とも呼ばれる)を探して、その位置情報と長さで符号化を行う。例えば、スライド・ウィンドウの参照部が8192であり且つ符号化部が16であるとすると、位置情報が13ビット、長さの情報が4ビットとなる。従って、合計17ビットで符号語を表すことができる。しかしながら、この場合には、2文字以下の文字列は圧縮できず、3文字以上の文字列に対してのみ符号化を行うことができる。
符号化における辞書の参照は、現在符号化の対象となっている位置から始まる文字列と一致し、スライド・ウィンドウ中の文字列で最も長いもの(最長一致系列と呼ばれる)を探索することにより行われる。
最長一致系列の探索において、参照部から最長一致系列を探す処理が重要である。例えば、スライド・ウィンドウのサイズがNであり、符号化部のサイズがFであるとすると、最悪、N×F回の比較が必要になる。そこで、当該比較の回数を減らす為に、ハッシュ法が用いられる。
ハッシュ法では、ハッシュテーブルと呼ばれるデータを格納する配列と、データを数値に変換する為のハッシュ関数とが使用される。例えば、ハッシュテーブルの大きさがNである場合に、ハッシュ関数がデータを0〜N−1までの整数値に変換する。当該整数値がハッシュ値である。ハッシュ値は、ハッシュテーブルの添字に対応し、この位置にデータが格納される。
ハッシュ法において不特定多数のデータを扱う場合に、異なるデータでも同じハッシュ値が生成される場合がある。同じハッシュ値が生成されることが、ハッシュ値の衝突である。ハッシュ値の衝突が起こる場合には、ハッシュテーブルにデータを登録することができない。そこで、このハッシュ値の衝突の問題を解決する為に例えば、オープン・アドレス法、又はチェーン法が採用される。
オープン・アドレス法では、コンピュータは、別のハッシュ関数を用意し、文字列に当該別のハッシュ関数を適用して新しいハッシュ値を計算する。そして、コンピュータは、ハッシュテーブルの空いている場所が見つかるまで、別のハッシュ関数を用意すること及び上記新しいハッシュ値を計算することを繰り返し、そして、空いている場所が見つかった場合に、その場所にデータを入れる。
一方、チェーン法では、コンピュータは、ハッシュテーブルに複数のデータを格納する。しかしながら、チェーン法におけるハッシュテーブルの配列には一つのデータしか格納できない。そこで、コンピュータは、データ構造として連結リストを用意する。従って、コンピュータは、ハッシュテーブルからデータを検索する場合に、最初にハッシュ値を算出し、次に当該算出したハッシュ値と同じハッシュ値を持つエントリの連結リスト(バケット・チェーンとも呼ばれる)の中からデータを探す。当該バケット・チェーンは、同じハッシュ値を持つことにより衝突を起こした文字列を、当該バケット・チェーンの先頭から順番に格納したものである。但し、ハッシュ値の衝突が頻繁に生じる場合には、データを格納する為の連結リストが長くなる為に、最長一致系列の探索に余分な時間がかかってしまう。従って、チェーン法において、効率的な探索を行う為に、衝突をあまり生じさせないような適切なハッシュ関数の選択が重要である。
この最長一致系列の探索を効率的に実行する為に、非常に軽量のハッシュ関数が用いられている。
上記に述べた通り、データ圧縮アルゴリズム、例えばハッシュテーブルとして辞書を適用可能なデータ圧縮アルゴリズムでは、入力データ(入力ストリームともいう)中の現在のデータとハッシュテーブル(辞書)に保存されたデータとの間で一致する文字列の最長一致系列を探索する。
図2は、従来手法に従い、文字列の選択された部分にハッシュ値を更新する関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索し、一致する文字列の最大長を見つける処理を説明するためのダイアグラムを示す。
入力ストリーム(201)はデータ圧縮対象のファイルであり、文字列を含む。コンピュータは、当該入力ストリーム(201)から、所定の固定長バイトの文字列をバッファ(すなわち、スライド・ウィンドウ)(211)に読み込む。コンピュータは、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「i」の位置(現在の位置、221)を開始位置とする所定の固定長バイト(図2に示す例の場合、3バイト)の文字列(222)「i,i+1,i+2」を使用するとする。
コンピュータは、上記文字列(222)にハッシュ値を更新する関数(241)を適用して、ハッシュ値hを算出する(291)。コンピュータは、当該算出されたハッシュ値hを用いて、当該ハッシュ値hが辞書(251)に登録されているか調べる(292)。コンピュータは、当該ハッシュ値hを辞書(251)に新たに登録し、更に、当該ハッシュ値hが辞書(251)にすでに登録されている場合には、当該ハッシュ値hを持つバケット・チェーン(251a)の各エントリ(261,262,263,・・・)を検索して、現在の位置(221)からの文字列と一致する文字列の最大長を見つける為の検索を行う(293)。
図2に示す上記例の場合、上記算出したハッシュ値hが辞書(251)に登録されており且つ当該ハッシュ値hが衝突を起こしているので、コンピュータは、当該ハッシュ値hを持つ上記バケット・チェーン(251a)の各エントリ(261,262,263,・・・)を検索して、現在の位置(221)からの文字列と一致する文字列の最大長を見つける為の検索を行う(293)。コンピュータは、上記バケット・チェーン(251a)のエントリ(261,262,263,・・・)の最後まで又は当該エントリ(261,262,263,・・・)の検索上限まで、一致する文字列の最大長を検索する(293)。当該エントリの検索上限は、データ圧縮アルゴリズムの圧縮レベル(例えば、最小の圧縮レベル、デフォルトの圧縮レベル、又は最大の圧縮レベル)がより高いほど(すなわち、より高圧縮であるほど)、より多い数のエントリを検索するように設定されうる。
コンピュータは、現在の位置(221)からの文字列と一致する文字列の最大長を見つける為に、現在の位置(221)からの文字列と辞書中の文字列との照合をシーケンシャルに行う。
コンピュータは、当該ハッシュ値hに関連付けられた上記バケット・チェーン(251a)の各エントリ(261,262,263,・・・)中において、文字列「abc」(すなわち、a[i]b[i+1]c[i+2])に一致する)(ハッシュ値を更新する関数(241)が3バイトを使用する場合であるので、最低3文字分の一致になる)、並びに、文字列「abcd」(すなわち、a[i]b[i+1]c[i+2]d[i+3])に一致する)を見つけた場合には、文字列「abcd」を、一致する最大文字列(最長一致系列)として返す。
コンピュータは、次に、スライド・ウィンドウ(211)内において、現在の位置を、文字列「i」の位置(221)から文字列「i+1」の位置(231)に一つずらす(232)。従って、コンピュータは、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「i+1」の位置(現在の位置、231)を開始位置とする所定の固定長バイト(図2に示す例の場合、3バイト)の文字列(232)「i+1,i+2,i+3」を使用するとする。従って、現在処理中の文字列(232)「i+1,i+2,i+3」は、一つ前に処理された文字列(222)「i,i+1,i+2」中の「i+1,i+2」を含む。
コンピュータは、上記文字列(232)にハッシュ値を更新する関数(241)を適用して、ハッシュ値h’を算出する(295)。コンピュータは、当該ハッシュ値h’を用いて、当該ハッシュ値h’が辞書(251)に登録されているか調べる(296)。コンピュータは、当該ハッシュ値h’を辞書(251)に新たに登録し、更に、当該ハッシュ値h’が辞書(251)にすでに登録されている場合には、当該ハッシュ値h’を持つバケット・チェーン(251b)の各エントリ(281,282,283,・・・)を検索して、現在の位置(231)からの文字列と一致する文字列の最大長を見つける為の検索を行う(297)。
図2に示す上記例の場合、上記算出したハッシュ値h’が辞書(251)に登録されており且つ当該ハッシュ値h’が衝突を起こしているので、コンピュータは、当該ハッシュ値h’に関連付けられた上記バケット・チェーン(251b)の各エントリ(281,282,283,・・・)を検索して、現在の位置(231)からの文字列と一致する文字列の最大長を見つける為の検索を行う(297)。コンピュータは、上記バケット・チェーン(251b)のエントリ(281,282,283,・・・)の最後まで又は当該エントリ(281,282,283,・・・)の検索上限まで、一致する文字列の最大長を検索する(297)。当該エントリの検索上限は、データ圧縮アルゴリズムの圧縮レベル(例えば、最小の圧縮レベル、デフォルトの圧縮レベル、又は最大の圧縮レベル)がより高いほど(すなわち、より高圧縮であるほど)、より多い数のエントリを検索するように設定されうる。
コンピュータは、以降同様にして、スライド・ウィンドウ(211)内の現在の位置を一つずつずらして文字列を順次処理していく。また、コンピュータは、スライド・ウィンドウ(211)内の文字列の処理が終了したら、スライド・ウィンドウ(211)をクリアし、入力ストリーム(201)から、所定の固定長バイトの次の文字列をスライド・ウィンドウ(211)に読み込み、同様に、スライド・ウィンドウ(211)内の文字列を順次処理していく。
全体的なパフォーマンスの向上の為に、上記に述べた通り、ハッシュ関数それ自体は軽量である必要がある。そこで、図2に示す例において、通常のハッシュ関数と異なり、前回のハッシュ値と新しい入力文字の1バイトを使用して次回のハッシュ値を計算している。ハッシュ値を更新する関数は、新しいハッシュ値を、下記式に従い以前のハッシュ値及び新しいバイトcから計算する。
new_value= (((prev_key)<< hash_shift) ^ (c)) & hash_mask)
new_value:新しいハッシュ値
prev_value:以前のハッシュ値
hash_shift:ハッシュ・シフト
c:新しいバイト
hash_mask:ハッシュ・マスク
上記ハッシュ・マスクとは、ハッシュテーブルの大きさで値をマスクすることである。当該ハッシュ・マスクは、計算されたハッシュ値がハッシュテーブルのテーブル・サイズに収まるようにする為に使用される。
ここで、例えばハッシュ・ビットが15であり(32Kのハッシュ・テーブル・サイズである)、ハッシュ・シフトが5でありうる。ハッシュ・シフトが5であるということは、1文字スライドさせるごとに前回のキーを5ビットシフトすることである。よって、1文字文中の5ビット分しかハッシュ計算に使用されていないことになる。従って、最初のバイトにおける3ビットがハッシュ計算において必ずしも使用されるとは限らず、ハッシュ衝突の可能性を増やすことを意味する。
図3は、従来手法に従い、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算した場合にハッシュ・インデックス衝突が生じ、一致する文字列の最大長を見つけること無しに、バケット・チェーンのエントリの探索の冗長なループ繰り返しが生じることを説明するためのダイアグラムである。
入力ストリーム(301)はデータ圧縮対象のファイルであり、文字列を含む。コンピュータは、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「a」の位置(現在の位置、321)を開始位置とする所定の固定長バイト(図3に示す例の場合、3バイト)の文字列(322)「a,a,b」を使用するとする。
コンピュータは、上記文字列(322)に3バイトを使用するハッシュ関数(341)を適用して、ハッシュ値を算出する(391)。コンピュータは、当該算出されたハッシュ値hを用いて、当該ハッシュ値hが辞書(351)に登録されているか調べる(392)。コンピュータは、当該ハッシュ値hを辞書(351)に新たに登録し、更に、当該ハッシュ値hが辞書(351)にすでに登録されている場合には、当該ハッシュ値hを持つバケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)を検索して、現在の位置(321)からの文字列と一致する文字列の最大長を見つける為の検索を行う(393)。
図3に示す上記例の場合、上記算出したハッシュ値hが辞書(351)に登録されており且つ当該ハッシュ値hが衝突を起こしているので、コンピュータは、当該ハッシュ値hを持つ上記バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)を検索して、現在の位置(321)からの文字列と一致する文字列の最大長を見つける為の検索を行う(393)。コンピュータは、上記バケット・チェーン(351a)のエントリ(361,362,363,364,・・・,及び365)の最後まで又は当該エントリ(361,362,363,364,・・・,及び365)の検索上限まで、一致する文字列の最大長を検索する(393)。当該エントリの検索上限は、データ圧縮アルゴリズムの圧縮レベル(例えば、最小の圧縮レベル、デフォルトの圧縮レベル、又は最大の圧縮レベル)がより高いほど(すなわち、より高圧縮であるほど)、多くの数のエントリを検索するように設定されうる。
コンピュータは、当該ハッシュ値hを持つ上記バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)中において、文字列「aabc」に一致する文字列を検索する。しかしながら、コンピュータは、指定されたすべてのエントリ(例えば、最大の圧縮レベルの場合における4096個)を検索してもそのような文字列「aabc」であるエントリを見つけることができない。従って、数多くのエントリの検索が行われることによっても、より高い圧縮効果はもたらされない。
コンピュータは、引き続き、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「a」の位置(現在の位置、331)を開始位置とする所定の固定長バイト(図3に示す例の場合、3バイト)の文字列(332)「a,a,b」を使用するとする。
コンピュータは、上記文字列(332)に3バイトを使用するハッシュ関数(341)を適用して、ハッシュ値を算出する(394)。コンピュータは、当該算出されたハッシュ値hを用いて、当該ハッシュ値hが辞書(351)に登録されているか調べる(395)。コンピュータは、当該ハッシュ値hを辞書(351)に新たに登録し、更に、当該ハッシュ値hが辞書(351)にすでに登録されている場合には、当該ハッシュ値hを持つバケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)を検索して、現在の位置(331)からの文字列と一致する文字列の最大長を見つける為の検索を行う(396)。
図3に示す上記例の場合、上記算出したハッシュ値hが辞書(351)に登録されており且つ当該ハッシュ値hが衝突を起こしているので、コンピュータは、当該ハッシュ値hを持つ上記バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)を検索して、現在の位置(331)からの文字列と一致する文字列の最大長を見つける為の検索を行う(396)。コンピュータは、上記バケット・チェーン(351a)のエントリ(361,362,363,364,・・・,及び365)の最後まで又は当該エントリ(361,362,363,364,・・・,及び365)の検索上限まで、一致する文字列の最大長を検索する(396)。当該エントリの検索上限は、上記したとおりである。
コンピュータは、当該ハッシュ値hを持つ上記バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)中において、文字列「aabd」に一致する文字列を検索する。しかしながら、コンピュータは、指定されたすべてのエントリ(例えば、最大の圧縮レベルの場合における4096個)を検索してもそのような文字列「aabd」であるエントリを見つけることができない。従って、数多くのエントリの検索が行われることによっても、より高い圧縮効果はもたらされない。
上記した例では、文字列(322,332)は、同一の3文字「a,a,b」を持ち、しかし4文字目が異なる(文字列(322)の場合「c」であり、文字列(332)の場合「d」である)。このような場合に、固定長である3バイトを使用するハッシュ関数は、多数の衝突を発生し、その結果長いバケット・チェーンを生成する。そして、バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)において4文字目以降一致する文字列を見つけることができないまま、バケット・チェーン(351a)の各エントリ(361,362,363,364,・・・,及び365)を検索するというループ繰り返しを引き起こす。すなわち、上記した例では、固定長である3バイトを使用するハッシュ関数は、幾つかの文字列(例えば、上記文字列(322,332))について、ハッシュ値のクラスタリング結果を生成するために、パフォーマンスの低下をもたらす。
上記ループ繰り返しを引き起こすという問題は、特に、より高い圧縮率が指定された場合に、圧縮の為に多くののCPU時間を要するが、当該圧縮率はさほど変わらないか寧ろ低下させる結果につながる。
そこで、本発明は、ハッシュテーブルに過去に登録されたハッシュ値を持つバケット・チェーンの各エントリの検索において、一致する最大文字列が見つからない場合におけるデータ圧縮に伴うパフォーマンスを改善することを目的とする。
また、本発明は、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリの検索において、一致する最大文字列が見つからない場合におけるハッシュ衝突を減少させることを目的とする。
本発明は、データ圧縮を高速化するための技法を提供する。当該技法は、当該データ圧縮をするための方法、並びに、当該データ圧縮をするためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
特には、本発明は、上記データ圧縮をするための圧縮アルゴリズムに関する。本発明は、上記圧縮アルゴリズムを備えたコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
(本発明に従う第1の態様)
本発明に従う第1の態様において、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をする方法であって、コンピュータが、
上記各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得するステップと、
上記指標が所定の閾値を超えたときに、上記ハッシュテーブルを再構築することなしに、上記ハッシュ関数を、上記文字列の選択された部分を広げる別のハッシュ関数に切り替えるステップと
を実行することを含む。
本発明の一つの実施態様において、上記コンピュータが、
所定のタイミングで、上記別のハッシュ関数を、元のハッシュ関数に戻すステップ
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記別のハッシュ関数を上記元のハッシュ関数に戻すステップが、
上記ハッシュテーブルがクリアされるときに、又は、所定の長さの文字列が処理されるごとに行われうる。
本発明の一つの実施態様において、上記指標が、上記ハッシュ値を持つ上記バケット・チェーンのエントリの最大長において、又は、上記ハッシュ値を持つ上記バケット・チェーンのエントリの検索上限において、検索中の文字列のエントリが見つからなかったときの検索に要した時間でありうる。
本発明の一つの実施態様において、上記指標が、上記ハッシュ値を持つ上記バケット・チェーンのエントリの最大長まで、又は、上記ハッシュ値を持つ上記バケット・チェーンのエントリの検索上限まで検索しても検索中の文字列のエントリが見つからなかった頻度でありうる。
(本発明に従う第2の態様)
本発明に従う第2の態様において、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をするためのコンピュータであって、
上記各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得する指標取得手段と、
上記指標が所定の閾値を超えたときに、上記ハッシュテーブルを再構築することなしに、上記ハッシュ関数を、上記文字列の選択された部分を広げる別のハッシュ関数に切り替えるハッシュ関数切り替え手段と
を備えている。
本発明の一つの実施態様において、上記コンピュータが、
所定のタイミングで、上記別のハッシュ関数を、元のハッシュ関数に戻す回復手段
をさらに備えうる。
本発明の一つの実施態様において、上記回復手段が、上記別のハッシュ関数を元のハッシュ関数に戻すことを、
上記ハッシュテーブルがクリアされるときに、又は、所定の長さの文字列を処理するごとに行いうる。
本発明の一つの実施態様において、上記指標が、上記ハッシュ値を持つ上記バケット・チェーンのエントリの最大長において、又は、上記ハッシュ値を持つ上記バケット・チェーンのエントリの検索上限において、検索中の文字列のエントリが見つからなかったときの検索に要した時間でありうる。
本発明の一つの実施態様において、上記指標が、上記ハッシュ値を持つ上記バケット・チェーンのエントリの最大長まで、又は、上記ハッシュ値を持つ上記バケット・チェーンのエントリの検索上限まで検索しても検索中の文字列のエントリが見つからなかった頻度でありうる。
(本発明に従う第3の態様)
本発明に従う第3の態様において、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をするためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第1の態様に記載の方法の各ステップを実行させる。
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、MO、CD−ROM、DVD、BD、ハードディスク装置、USBに接続可能なメモリ媒体、ROM、MRAM、RAM等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、1.他の言語、コード若しくは表記への変換及び、2.他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
本発明の実施態様に従うと、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標が所定の閾値を超えたときに、上記ハッシュテーブルを再構築することなしに、ハッシュ関数を、文字列の選択された部分を広げる別のハッシュ関数に切り替えることから、長いバケット・チェーンを処理する為に必要とされる演算処理装置(例えば、CPU)が浪費する時間を動的に避けることが可能になる。従って、データ圧縮に伴うパフォーマンスが改善される。
また、本発明の実施態様に従うと、上記したとおり、上記ハッシュテーブルを再構築することなしに、ハッシュ関数を、文字列の選択された部分を広げる別のハッシュ関数に切り替えることから、ハッシュ衝突が有意に減少する。従って、データ圧縮に伴うパフォーマンスが改善される。
本発明の実施態様に従う又は本発明の実施態様において使用されうるコンピュータの一例を示した図である。 従来手法に従い、文字列の選択された部分にハッシュ値を更新する関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索し、一致する文字列の最大長を見つける処理を説明するためのダイアグラムを示す。 従来手法に従い、文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算した場合にハッシュ・インデックス衝突が生じ、一致する文字列の最大長を見つけること無しに、バケット・チェーンのエントリの検索の冗長なループ繰り返しが生じることを説明するためのダイアグラムである。 本発明の実施態様に従い、ハッシュテーブルに過去に登録されたバケット・チェーンの各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標が所定の閾値を超えたときに、ハッシュテーブルを再構築することなしに、ハッシュ関数を文字列の選択された部分を広げる別のハッシュ関数に切り替える処理を説明するためのダイアグラムを示す。 本発明の実施態様に従い、ハッシュ関数を文字列の選択された部分を広げる別のハッシュ関数に切り替えて、データを圧縮する処理を示すダイアグラムを示す。 図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従いデータ圧縮をするコンピュータの機能ブロック図の一例を示した図である。
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
本発明の実施態様において使用されうるコンピュータは、データ圧縮をすることができるコンピュータであれば特に限定されない。当該コンピュータは、例えば、メインフレーム・コンピュータ、サーバ・コンピュータ、デスクトップ・コンピュータ、ノート・コンピュータ若しくは一体型パソコン、又は、タブレット端末若しくはスマートフォン(例えば、Windows(登録商標)、アンドロイド(登録商標)又はiOSを搭載したタブレット端末若しくスマートフォン)でありうる。
図1は、本発明の実施態様に従う又は本発明の実施態様において使用されうるコンピュータの一例を示した図である。
コンピュータ(101)は、CPU(102)とメイン・メモリ(103)とを備えており、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものである。当該CPU(102)は例えば、インテル社のCore(商標) iシリーズ、Core(商標) 2シリーズ、Atom(商標)シリーズ、Xeon(登録商標)シリーズ、Pentium(登録商標)シリーズ若しくはCeleron(登録商標)シリーズ、AMD(Advanced Micro Devices)社のAシリーズ、Phenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(登録商標)シリーズ若しくはSempron(商標)、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのPower(商標)シリーズでありうる。
バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。また、液晶ディスプレイ(LCD)は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ(106)は、コンピュータ(101)上で動作中のソフトウェア(例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ(101)上で動作中の各種コンピュータ・プログラム)が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はソリッド・ステート・ドライブ(SSD)が接続されうる。
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ドライブ(109)、例えばCD、DVD又はBDドライブが接続されうる。
バス(104)には、周辺装置コントローラ(110)を介して、例えばキーボード・マウス・コントローラ又はUSBバスを介して、任意的に、キーボード(111)及びマウス(112)が接続されうる。
ディスク(108)には、オペレーティング・システム、例えばz/OS(登録商標)、z/VM(登録商標)、z/VSE(登録商標)、z/TPF、VOS3、UNIX(登録商標)、Windows(登録商標)、MacOS(登録商標)、及びJ2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ(103)にロード可能なように記憶されうる。
ディスク(108)は、コンピュータ(101)内に内蔵されていてもよく、当該コンピュータ(101)がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ(101)がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク(108)にインストールするために使用されうる。
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に有線又は無線接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線LAN接続規格に基づく無線LAN環境、IEEE802.11a/b/g/nなどのWi−Fi無線LAN環境、又は携帯電話網環境(例えば、3G又は4G環境)でありうる。
図4は、本発明の実施態様に従い、ハッシュテーブルに過去に登録されたバケット・チェーンの各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標が所定の閾値を超えたときに、ハッシュテーブルを再構築することなしに、ハッシュ関数を文字列の選択された部分を広げる別のハッシュ関数に切り替える処理を説明するためのダイアグラムを示す。
入力ストリーム(401)はデータ圧縮対象のファイルであり、文字列を含む。コンピュータ(101)は、当該入力ストリーム(401)から、所定の固定長バイトの文字列をバッファ(すなわち、スライド・ウィンドウ)(図示せず)に読み込む。コンピュータ(101)は、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「a」の位置(現在の位置、421)を開始位置とする所定の固定長バイト(図4に示す例の場合、3バイト)の文字列(422)「a,a,b」を使用するとする。
コンピュータ(101)は、上記文字列(422)に3バイトを使用するハッシュ関数(441)を適用して、ハッシュ値を算出する(491)。コンピュータ(101)は、当該算出されたハッシュ値hを用いて、当該ハッシュ値hが辞書(451)に登録されているか調べる(492)。コンピュータ(101)は、当該ハッシュ値hを辞書(451)に新たに登録し、更に、当該ハッシュ値hが辞書(451)にすでに登録されている場合には、当該ハッシュ値hを持つバケット・チェーン(451a)の各エントリ(461,462,463,464,・・・,及び465)を検索して、現在の位置(421)からの文字列と一致する文字列の最大長を見つける為の検索を行う(493)。
図4に示す上記例の場合、上記算出したハッシュ値hが辞書(451)に登録されており且つ当該ハッシュ値hが衝突を起こしているので、コンピュータ(101)は、当該ハッシュ値hを持つ上記バケット・チェーン(451a)の各エントリ(461,462,463,464,・・・,及び465)を検索して、現在の位置(421)からの文字列と一致する文字列の最大長を見つける為の検索を行う(493)。コンピュータ(101)は、上記バケット・チェーン(451a)のエントリ(461,462,463,464,・・・,及び465)の最後まで又は当該エントリ(461,462,463,464,・・・,及び465)の検索上限まで、一致する文字列の最大長を検索する(493)。当該エントリの検索上限は、データ圧縮アルゴリズムの圧縮レベル(例えば、最小の圧縮レベル、デフォルトの圧縮レベル、又は最大の圧縮レベル)がより高いほど(すなわち、より高圧縮であるほど)、より多い数のエントリを検索するように設定されうる。
コンピュータ(101)は、上記ハッシュ値hを用いて、辞書(451)に過去に登録された当該ハッシュ値を持つバケット・チェーン(451a)の各エントリ(461,462,463,464,・・・,及び465)を検索する処理において一致する最大文字列(すなわち、「a,a,b,c」)が見つからず、当該検索が無駄になったことを示す指標を取得する。
コンピュータ(101)は、上記取得した指標が所定の閾値を超えたかを判断する(494)。コンピュータ(101)は、当該指標が所定の閾値を超えていることに応じて、辞書(451)を再構築することなしに、3バイトを使用するハッシュ関数(現在使用中のハッシュ関数)(441)を、4バイトを使用するハッシュ関数(文字列の選択された部分を広げる別のハッシュ関数)(442)に切り替える(495)。当該4バイトを使用するハッシュ関数への切り替え(495)は、オン・ザ・フライ(On the fly)で実行される。
コンピュータ(101)は、引き続き、下記に述べるハッシュ関数が適用されるデータとして、現在、文字列「a」の位置(現在の位置、431)を開始位置とする所定の固定長バイト(図4に示す例の場合、4バイト)の文字列(432)「a,a,b、d」を使用するとする。
コンピュータ(101)は、上記文字列(432)に4バイトを使用するハッシュ関数(442)を適用して、ハッシュ値h’を算出する(496)。コンピュータ(101)は、当該算出されたハッシュ値h’を用いて、当該ハッシュ値h’が辞書(451)に登録されているか調べる(497)。
当該辞書(451)は、上記3バイトを使用するハッシュ関数(441)から4バイトを使用するハッシュ関数(442)に切り替えられた(495)後の、当該4バイトを使用するハッシュ関数(442)を適用することによって上記バケット・チェーン(451b)に登録された文字列を含む点で、元の辞書の内容から更新されている。すなわち、当該辞書(451)は、4バイトを使用するハッシュ関数(442)を適用することによって上記バケット・チェーン(451b)に登録されたエントリ(新たに登録されたエントリ)(481及び482)(すなわち、ハッシュ値h’を持つエントリ(481及び482))を有している。また、当該辞書(451)は、ハッシュ値h’を持つ各エントリ(483及び484)をさらに有している。当該各エントリ(483及び484)は、上記切り替えられる前の3バイトを使用するハッシュ関数(441)を適用することによって上記バケット・チェーン(451b)に過去に登録されたエントリである。
コンピュータ(101)は、当該ハッシュ値h’を辞書(451)に新たに登録し、更に、当該ハッシュ値h’が辞書(451)にすでに登録されている場合には、当該ハッシュ値h’を持つバケット・チェーン(451b)の各エントリ(481,482,483,及び484)を検索して、現在の位置(431)からの文字列と一致する文字列の最大長を見つける為の検索を行う(498)。
上記3バイトを使用するハッシュ関数(441)から4バイトを使用するハッシュ関数(442)に切り替えることは、文字列を辞書に登録する際に、より検索効率の良い形に辞書を作り変えることにつながる。
図4に示す上記例の場合、上記算出したハッシュ値h’が辞書(451)に登録されており且つ当該ハッシュ値h’が衝突を起こしているので、コンピュータ(101)は、当該ハッシュ値h’を持つバケット・チェーン(451b)の各エントリ(481,482,483,及び484)を検索して、現在の位置(431)からの文字列と一致する文字列の最大長を見つける為の検索を行う(498)。
図4に示す上記例の場合、コンピュータ(101)は、バケット・チェーン(451b)の各エントリ(481,482,483,及び484)を検索して、文字列「aabd」であるエントリ(481)を見つける。すなわち、コンピュータ(101)は、エントリ数の少ない(すなわち、チェーンが短い)バケット・チェーン(451b)のエントリ(481)から、一致する最大文字列を検索することが可能になる。エントリ数の少ないバケット・チェーンから上記一致する最大文字列を検索することは、バケット・チェーンからの検索時間を短縮することにつながり、結果としてパフォーマンスの向上をもたらす。
なお、エントリ(483及び484)は、文字列「aabd」から始まる文字列でないが有害でない。なぜならば、エントリ(483及び484)は、一致する文字列検索で除外されるし、且つ、スライド・ウィンドウによりすぐに当該スライド・ウィンドウ外に出されうるからである。
図4に示すように、ハッシュ関数を文字列の選択された部分を広げる別のハッシュ関数に切り替える処理は、下記のようなデータ・ファイルを圧縮する場合に特に有用である。
zlibはDeflateアルゴリズムを利用した圧縮フォーマットの一種であり、Deflateストリームの入れ物として機能する。Deflateアルゴリズムは、ハフマン符号とLZ77とを組み合わせてデータ圧縮を行うアルゴリズムである。Deflateアルゴリズムは、3バイトを使用するハッシュ関数を使用する。PDFファイルの生成の為に、Deflateアルゴリズムを使用する場合には、入力データは、当該入力データ中に埋め込まれたフォント・データを含みうる。例えばTrueType(登録商標)フォントの場合には、フォント・ファイルが幾つかのテーブル、例えばhmtx(横測定基準;horizontal metrics)テーブル及びloca(glyfテーブルにおけるアウトライン・データの場所インデックス)テーブルを含む。これらテーブル・データは、いずれも4バイトのデータ・アレイであり、データが順番に格納されている。すなわち、当該4バイト・アレイでは、最初の3バイトが同一であり、4バイト目が異なるデータが並んでいる。
TrueType(登録商標)フォントのフォント・ファイルの上記特徴、すなわち上記テーブル・データが4バイトのデータ・アレイであることは、3バイトを用いるハッシュ関数(すなわち、Deflateアルゴリズム)を適用して計算されたハッシュ値間で数多くの衝突を発生させる。従って、ハッシュテーブルに過去に登録された当該衝突したハッシュ値を持つバケット・チェーンは長くなる。
そこで、本発明の実施態様に従うと、上記pdfファイルを圧縮しているコンピュータは、当該pdfファイル中の上記TrueType(登録商標)フォントのデータを、3バイトを用いるハッシュ関数で圧縮し始めると、上記検索が無駄になったことを示す指標が所定の閾値が超えたことを検出する。次に、当該コンピュータは、上記検出に応じて、ハッシュテーブルを再構築することなしに、現在使用中の3バイトを用いるハッシュ関数を、4バイトを用いるハッシュ関数に切り替える。当該4バイトを用いるハッシュ関数への切り替えによって、コンピュータは、4バイトを用いるハッシュ関数を適用して計算されたハッシュ値を用いて、文字列をハッシュテーブルに登録することから、上記テーブル・データは異なるハッシュ値に分散され、ハッシュ値の衝突が減少する。従って、上記バケット・チェーンが長くなることが防がれる。
図5は、本発明の実施態様に従い、ハッシュ関数を文字列の選択された部分を広げる別のハッシュ関数に切り替えて、データを圧縮する処理を示すダイアグラムを示す。
ステップ501において、コンピュータ(101)は、データ圧縮アルゴリズムをメモリ(103)に読み込んで、データを圧縮する処理を開始する。当該データ圧縮アルゴリズムは、辞書としてハッシュテーブルを適用可能であり、動的に辞書を作りながらデータを圧縮するアルゴリズムでありうる。例えば、当該データ圧縮アルゴリズムは、適応型辞書法に従う圧縮アルゴリズムでありうる。適応型辞書法に従う圧縮アルゴリズムは、上記した通り、前もって辞書を用意せずに、ファイルを読み込みながら辞書を作成し、そして当該辞書に登録されている文字列が現れることに応じて、辞書の位置情報に変換することで圧縮を行うアルゴリズムである。
ステップ502において、コンピュータ(101)は、データ圧縮をするファイルを例えば記憶媒体(108)から読み出し、当該ファイルを入力ストリームとし、当該入力ストリーム中の所定の数の文字列をバッファ(103)内に読み込む。当該バッファ(103)は、スライド・ウィンドウでありうる。
ステップ503において、コンピュータ(101)は、上記バッファ(103)に読み込んだ文字列を先頭から順に1バイトずつ移動して処理する。すなわち、コンピュータ(101)は、当該現在の位置から所定のバイト数の文字列を選択し、当該選択された文字列の部分にハッシュ関数を適用して、ハッシュ値を計算する。そして、コンピュータ(101)は、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を検索する。コンピュータ(101)は、このハッシュ関数の計算と一致する文字列の最大長を検索する処理を、前記バッファ(103)内の文字列に対して、現在の位置を1バイトずつずらしながら順に実行する。
ステップ504において、コンピュータ(101)は、ステップ503で算出されたハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索する処理において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得する。コンピュータ(101)は、上記指標を、データ圧縮アルゴリズムがデータ圧縮を行っている間に例えば、連続的に、断続的に又は所定の時間毎に取得しうる。
当該指標は例えば、下記(1)〜(4)に示す指標でありうる:
(1)文字列の選択された部分にハッシュ関数を適用して計算されたハッシュ値を持つバケット・チェーンのエントリの最大長において、検索中の文字列のエントリが見つからなかったときの検索に要した時間;若しくは、
(2)文字列の選択された部分にハッシュ関数を適用して計算されたハッシュ値を持つバケット・チェーンのエントリの検索上限において、検索中の文字列のエントリが見つからなかったときの検索に要した時間:又は、
(3)文字列の選択された部分にハッシュ関数を適用して計算されたハッシュ値を持つバケット・チェーンのエントリの最大長まで検索しても検索中の文字列のエントリが見つからなかった頻度;若しくは、
(4)文字列の選択された部分にハッシュ関数を適用して計算されたハッシュ値を持つバケット・チェーンのエントリの検索上限まで検索しても検索中の文字列のエントリが見つからなかった頻度。
上記(1)に示す各時間は、演算処理装置(例えば、CPU)が上記文字列のエントリの検索を最後まで行うために必要な(実際の)時間に相当しうる。
上記(2)に示す各時間は、演算処理装置(例えば、CPU)が上記文字列のエントリを検索上限まで行うために必要な(実際の)時間に相当しうる。
上記(3)に示す各頻度は、上記バケット・チェーンのエントリの検索が最後のエントリまで行われた回数を上記バケット・チェーンのエントリの検索の呼び出し合計回数で除した値でありうる。
上記(4)に示す各頻度は、上記バケット・チェーンのエントリの検索が検索上限のエントリまで行われた回数を上記バケット・チェーンのエントリの検索の呼び出し合計回数で除した値でありうる。
上記(2)及び上記(4)において、エントリの検索上限は例えば、データ圧縮アルゴリズムの圧縮レベル(例えば、最小の圧縮レベル、デフォルトの圧縮レベル、又は最大の圧縮レベル)がより高いほど(すなわち、より高圧縮であるほど)、より多い数のエントリを検索するように設定されうる。当該検索上限は、例えばプログラム内に予め設定されうる。当該検索上限は例えば、デフォルトの圧縮レベルの場合には128個のエントリとし、最大の圧縮レベルの場合には4096個のエントリとしうる。当該設定された検索上限が少ないほど検索時間が短く圧縮率は低くなり、一方、当該設定された検索上限が増えるほど検索時間が長いが圧縮率は高くなる。
ステップ505において、コンピュータ(101)は、ステップ504で取得した指標が所定の閾値を超えたかを判断する。コンピュータ(101)は、当該指標が所定の閾値を超えていることに応じて、処理をステップ506に進める。一方、コンピュータ(101)は、当該指標が所定の閾値を超えていないことに応じて、処理をステップ507に進める。
上記指標は、下記ステップ506に示すように、ハッシュテーブルのバケット・チェーンが長くなるにつれて生じる、バケット・チェーンのエントリを最後まで又は検索上限まで検索する時間を減らすことを目的として、乃至は、ハッシュ値の衝突を減少させることを目的として、ハッシュ関数の切り替えをする為に使用される。
ステップ506において、コンピュータ(101)は、上記指標が所定の閾値を超えていることに応じて、ハッシュテーブルを再構築することなしに、現在使用中のハッシュ関数を、文字列の選択された部分を広げる別のハッシュ関数に切り替える。文字列の選択された部分を広げることは、現在使用中のハッシュ関数が3バイトを使用するハッシュ関数の場合には、別のハッシュ関数として上記3バイトよりも広げた、例えば4バイトを使用するハッシュ関数としうる。従って、コンピュータ(101)は例えば、3バイトを使用するハッシュ関数を、4バイトを使用するハッシュ関数に切り替えうる。
文字列の選択された部分を広げることは、元のハッシュ関数により選択される文字列よりも多くの文字列を先読み(look ahead)することになる。従って、当該切り替えられたハッシュ関数によって求められるハッシュ値の衝突は、元のハッシュ関数によって求められるハッシュ値の衝突よりも減ることになる。
切り替えるハッシュ関数が使用する文字数を元のハッシュ関数が使用する文字数よりも広げる(すなわち、大きくする)ことによって、ハッシュテーブルに新たに登録されるバケット・チェーンのエントリの長さを短くすることが可能になる。
コンピュータ(101)は、上記ハッシュ関数の切り替えを、オン・ザ・フライで実行する。
コンピュータ(101)は、ハッシュ関数の切り替えが終了することに応じて、処理をステップ507に進める。
ステップ507において、コンピュータ(101)は、現在のバッファ(103)において処理すべき文字列データがあるかを判断する。コンピュータ(101)は、当該処理すべき文字列データがあることに応じて、処理をステップ503に戻す。コンピュータ(101)は、処理がステップ503に戻ることに応じて、上記バッファ(103)中の現在の処理中の文字列を1バイトずらし、次の入力バイトについて、上記ステップ503で説明した処理を上記切り替えられたハッシュ関数を使用して行う。一方、コンピュータ(101)は、当該処理すべき文字列データがないことに応じて、処理をステップ508に進める。
ステップ508において、コンピュータ(101)は、現在のバッファ(103)において処理すべき次の文字列が入力ストリーム中にあるかを判断する。コンピュータ(101)は、入力ストリーム中に上記次の文字列があることに応じて、当該次の文字列についてデータ圧縮をするために、処理をステップ509進めるか、又は、処理をステップ502に戻す。一方、コンピュータ(101)は、入力ストリーム中に上記次の文字列がないことに応じて、処理を終了ステップ511に進める。
ステップ509は、任意のステップである。ステップ509において、コンピュータ(101)は、切り替えられたハッシュ関数を元のハッシュ関数に戻すかを判断する。コンピュータ(101)は例えば、元のハッシュ関数に戻すことが設定されていることに応じて、処理をステップ510に進める。
ステップ510は、任意のステップである。コンピュータ(101)は、所定のタイミングで、ステップ506で切り替えられた別のハッシュ関数を元のハッシュ関数に戻す。上記所定のタイミングとは、例えば、ハッシュテーブルがクリアされるとき、又は、所定の長さの文字列が処理されるごとでありうる。
ハッシュテーブルがクリアされることは例えば、入力データから新規文字列を読み込むとき、又は、スライド・ウィンドウに新しい入力データが読み取られるときに行われうる。従って、ステップ506で切り替えられた別のハッシュ関数を元のハッシュ関数に戻すことは、新しい入力ストリームをバッファに読み込む直前に行われうる。
切り替えられたハッシュ関数は、元のハッシュ関数から計算されたハッシュ値を用いて検索可能であった短い文字列を見つけることができない。なぜならば、元のハッシュ関数のために選択される文字列(例えば、3バイトからなる文字列)は、選択される文字列(例えば、4バイトからなる文字列)を使用する切り替えられたハッシュ関数では一般に異なるハッシュ値になるため見つけられないからである。
そこで、上記所定のタイミングにおいて、ステップ506で切り替えられた別のハッシュ関数を元のハッシュ関数に戻すことで、元のハッシュ関数のために選択される文字列(例えば、3バイトからなる文字列)を再び見つけることが可能になる。
コンピュータ(101)は、ステップ506で切り替えられた別のハッシュ関数を元のハッシュ関数に戻すことに応じて、処理をステップ502に戻す。コンピュータ(101)は、処理がステップ502に戻ることに応じて、上記バッファ(103)をクリアし、入力ストリーム中の所定の数の次の文字列を当該バッファ(103)内に読み込む。そして、コンピュータ(101)は、次のステップ503において、上記ステップ503で説明した処理を上記元に戻された元のハッシュ関数を使用して行う。
ステップ511において、コンピュータ(101)は、データ圧縮アルゴリズムをメモリ(103)に読み込んで、データを圧縮する処理を終了する。
上記したとおり、ステップ509及びステップ510は任意のステップである。従って、ステップ506において、別のハッシュ関数に切り替えられた後に、ステップ509及びステップ510を経由せずに、処理がステップ502に戻る場合もありうる。このような場合には、コンピュータ(101)は、処理がステップ502に戻ることに応じて、上記バッファ(103)をクリアし、入力ストリーム中の所定の数の次の文字列を当該バッファ(103)内に読み込み、そして、コンピュータ(101)は、次のステップ503において、上記ステップ503で説明した処理を上記切り替えられた別のハッシュ関数をそのまま使用して行う。従って、処理がステップ506に更に進んだ場合には、コンピュータ(101)は、当該切り替えられた別のハッシュ関数を、当該別のハッシュ関数が使用する文字列の選択された部分をさらに広げる別のハッシュ関数に切り替えうる。
図5に示すフローチャートに従い圧縮されたデータは、ハッシュ関数の切り替えが行われたかどうかに関わらず、従来と同じ手法により復号することが可能である。すなわち、データ圧縮において、ハッシュ関数を切り替えることは、復号処理に何ら影響しない。
図6は、図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従いデータ圧縮をするコンピュータの機能ブロック図の一例を示した図である。
コンピュータ(601)は、本発明の実施態様に従い、上記最適化したバイナリー・モジュールをテストするためのコンピュータであり、例えば図1に示すコンピュータ(101)でありうる。
コンピュータ(601)は、圧縮手段(611)、ハッシュテーブル格納手段(612)、指標取得手段(613)、及びハッシュ関数切り替え手段(614)、並びに任意的に、回復手段(615)を備えている。
圧縮手段(611)は、辞書としてハッシュテーブルを適用可能であり、動的に辞書を作りながらデータを圧縮する任意のデータ圧縮アルゴリズムを実行する。
ハッシュテーブル格納手段(612)は、圧縮手段(611)によって作成されるハッシュテーブルを格納する。当該ハッシュテーブルは例えば、メモリ(103)又は記憶媒体(108)中に格納されうる。
指標取得手段(613)は、文字列の選択された部分にハッシュ関数を適用して計算されたハッシュ値であって、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得する。当該指標は例えば、上記(1)若しくは上記(2)で示す時間、又は、上記(3)若しくは上記(4)で示す頻度でありうる。
ハッシュ関数切り替え手段(614)は、指標取得手段(613)が取得した指標が所定の閾値を超えたときに、ハッシュテーブルを再構築することなしに、現在使用中のハッシュ関数を、文字列の選択された部分を広げる別のハッシュ関数に切り替える。
回復手段(615)は、任意的に、所定のタイミングで、前記別のハッシュ関数を、元のハッシュ関数に戻す。
(実施例1)
本発明の実施態様に従い、3バイトを使用するハッシュ関数を、4バイトを使用するハッシュ関数に動的に切り替えるようにし(但し、元のハッシュ関数に戻す処理はなし)、デフォルトの圧縮レベル及び最大圧縮レベルそれぞれで、同一のファイル(埋め込まれたフォントを有するPDFデータ)についてデータ圧縮を行った。
(比較例1)
実施例1と同一の環境下において、ハッシュ関数を切り替えること無しに、3バイトを使用するハッシュ関数をそのまま使用して、デフォルトの圧縮レベル及び最大圧縮レベルそれぞれで、実施例1と同一のファイルについてデータ圧縮を行った。
(実施例2)
本発明の実施態様に従い、3バイトを使用するハッシュ関数を、4バイトを使用するハッシュ関数に動的に切り替えるようにし、また、元のハッシュ関数に戻す処理をさらに行うようにして、デフォルトの圧縮レベル及び最大圧縮レベルそれぞれで、同一のファイルについてデータ圧縮を行った。
(比較例2)
実施例2と同一の環境下において、ハッシュ関数を切り替えること無しに、3バイトを使用するハッシュ関数をそのまま使用して、デフォルトの圧縮レベル及び最大圧縮レベルそれぞれで、実施例2と同一のファイルについてデータ圧縮を行った。
(実施例1:デフォルトの圧縮レベル)
デフォルトの圧縮レベルでは、比較例1と比べて、約20%のパフォーマンス向上(実行時間短縮)が見られた。また、ファイルの圧縮サイズについて、実施例1に従う圧縮後のファイルサイズが、比較例1に従う圧縮後のファイルサイズに比べて約2%改善されていた。
(実施例1:最大圧縮レベル)
最大圧縮レベルでは、比較例1と比べて、約73%のパフォーマンス向上が見られた。また、ファイルの圧縮サイズについて、実施例1に従う圧縮後のファイルサイズが、比較例1に従う圧縮後のファイルサイズに比べて約2%改善されていた。
(実施例2:デフォルトの圧縮レベル)
デフォルトの圧縮レベルでは、比較例2と比べて、約13%のパフォーマンス向上が見られた。また、ファイルの圧縮サイズについて、実施例2に従う圧縮後のファイルサイズが、比較例2に従う圧縮後のファイルサイズに比べて約1%改善されていた。
(実施例2:最大圧縮レベル)
最大圧縮レベルでは、比較例2と比べて、約61%のパフォーマンス向上が見られた。また、ファイルの圧縮サイズについて、実施例2に従う圧縮後のファイルサイズと比較例2に従う圧縮後のファイルサイズとはほぼ同じであった。
以上に示す実施例1及び2それぞれの結果から、本発明の実施態様に従うと、圧縮後のファイルサイズをほぼ保ちながら、大幅なパフォーマンス向上が図られた。

Claims (11)

  1. 文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をする方法であって、コンピュータが、
    前記各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得するステップと、
    前記指標が所定の閾値を超えたときに、前記ハッシュテーブルを再構築することなしに、前記ハッシュ関数を、前記文字列の選択された部分を広げる別のハッシュ関数に切り替えるステップと
    を実行することを含む、前記方法。
  2. 前記コンピュータが、
    所定のタイミングで、前記別のハッシュ関数を、元のハッシュ関数に戻すステップ
    をさらに実行することを含む、請求項1に記載の方法。
  3. 前記別のハッシュ関数を前記元のハッシュ関数に戻すステップが、
    前記ハッシュテーブルがクリアされるときに、又は、所定の長さの文字列が処理されるごとに行われる、
    請求項2に記載の方法。
  4. 前記指標が、前記ハッシュ値を持つ前記バケット・チェーンのエントリの最大長において、又は、前記ハッシュ値を持つ前記バケット・チェーンのエントリの検索上限において、検索中の文字列のエントリが見つからなかったときの検索に要した時間である、請求項1〜3のいずれか一項に記載の方法。
  5. 前記指標が、前記ハッシュ値を持つ前記バケット・チェーンのエントリの最大長まで、又は、前記ハッシュ値を持つ前記バケット・チェーンのエントリの検索上限まで検索しても検索中の文字列のエントリが見つからなかった頻度である、請求項1〜3のいずれか一項に記載の方法。
  6. 文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をするためのコンピュータであって、
    前記各エントリの検索において一致する最大文字列が見つからず、当該検索が無駄になったことを示す指標を取得する指標取得手段と、
    前記指標が所定の閾値を超えたときに、前記ハッシュテーブルを再構築することなしに、前記ハッシュ関数を、前記文字列の選択された部分を広げる別のハッシュ関数に切り替えるハッシュ関数切り替え手段と
    を備えている、前記コンピュータ。
  7. 所定のタイミングで、前記別のハッシュ関数を、元のハッシュ関数に戻す回復手段
    をさらに備えている、請求項6に記載のコンピュータ。
  8. 前記回復手段が、前記別のハッシュ関数を元のハッシュ関数に戻すことを、
    前記ハッシュテーブルがクリアされるときに、又は、所定の長さの文字列を処理するごとに行う、請求項7に記載のコンピュータ。
  9. 前記指標が、前記ハッシュ値を持つ前記バケット・チェーンのエントリの最大長において、又は、前記ハッシュ値を持つ前記バケット・チェーンのエントリの検索上限において、検索中の文字列のエントリが見つからなかったときの検索に要した時間である、請求項6〜8のいずれか一項に記載のコンピュータ。
  10. 前記指標が、前記ハッシュ値を持つ前記バケット・チェーンのエントリの最大長まで、又は、前記ハッシュ値を持つ前記バケット・チェーンのエントリの検索上限まで検索しても検索中の文字列のエントリが見つからなかった頻度である、請求項6〜8のいずれか一項に記載のコンピュータ。
  11. 文字列の選択された部分にハッシュ関数を適用してハッシュ値を計算し、当該ハッシュ値を用いて、ハッシュテーブルに過去に登録された当該ハッシュ値を持つバケット・チェーンの各エントリを検索して、一致する文字列の最大長を見つけることによりデータ圧縮をするためのコンピュータ・プログラムであて、コンピュータに、請求項1〜5のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
JP2014061524A 2014-03-25 2014-03-25 データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム Active JP6319740B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014061524A JP6319740B2 (ja) 2014-03-25 2014-03-25 データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム
US14/640,317 US9214954B2 (en) 2014-03-25 2015-03-06 Increasing speed of data compression
US14/748,310 US9325345B2 (en) 2014-03-25 2015-06-24 Increasing speed of data compression

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014061524A JP6319740B2 (ja) 2014-03-25 2014-03-25 データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2015186077A JP2015186077A (ja) 2015-10-22
JP6319740B2 true JP6319740B2 (ja) 2018-05-09

Family

ID=54191786

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014061524A Active JP6319740B2 (ja) 2014-03-25 2014-03-25 データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム

Country Status (2)

Country Link
US (2) US9214954B2 (ja)
JP (1) JP6319740B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11868615B2 (en) 2020-12-14 2024-01-09 Kioxia Corporation Compression device and control method

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6468098B2 (ja) * 2015-07-02 2019-02-13 富士通株式会社 情報処理プログラム、装置、及び方法
US9584155B1 (en) * 2015-09-24 2017-02-28 Intel Corporation Look-ahead hash chain matching for data compression
US9813079B2 (en) * 2016-02-29 2017-11-07 International Business Machines Corporation High-throughput compression of data
JP7210130B2 (ja) * 2017-04-07 2023-01-23 富士通株式会社 符号化プログラム、符号化方法および符号化装置
CN107180018B (zh) * 2017-05-17 2018-11-20 上海兆芯集成电路有限公司 基于散列的加速压缩方法以及使用此方法的装置
CN107168936B (zh) * 2017-05-17 2019-02-19 上海兆芯集成电路有限公司 基于散列的加速压缩方法以及使用此方法的装置
US10224957B1 (en) 2017-11-27 2019-03-05 Intel Corporation Hash-based data matching enhanced with backward matching for data compression
US10097201B1 (en) * 2017-11-30 2018-10-09 Intel Corporation LZ77 compression of data with data runs
CN110557124B (zh) * 2018-05-30 2021-06-22 华为技术有限公司 一种数据压缩方法及装置
US10897270B2 (en) * 2018-06-06 2021-01-19 Yingquan Wu Dynamic dictionary-based data symbol encoding
US10671306B2 (en) 2018-06-06 2020-06-02 Yingquan Wu Chunk-based data deduplication
US20190377804A1 (en) * 2018-06-06 2019-12-12 Yingquan Wu Data compression algorithm
KR102575359B1 (ko) 2019-01-09 2023-09-05 삼성전자주식회사 시계열 데이터 압축 및 복원 방법
US11387844B2 (en) * 2019-04-19 2022-07-12 Preferred Networks, Inc. Data compression method, data compression apparatus, data decompression method, data decompression apparatus and data storage system
EP3764233A1 (en) * 2019-07-08 2021-01-13 Continental Teves AG & Co. OHG Method of identifying errors in or manipulations of data or software stored in a device
CN113630123B (zh) * 2021-06-30 2023-08-18 山东云海国创云计算装备产业创新中心有限公司 一种数据压缩系统及方法

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS561910A (en) 1979-06-21 1981-01-10 Tokyo Optical Co Ltd High resolving power lens
JPH0683573B2 (ja) 1988-03-25 1994-10-19 オリジン電気株式会社 共振コンバータおよびその制御方法
US5371499A (en) * 1992-02-28 1994-12-06 Intersecting Concepts, Inc. Data compression using hashing
US5406279A (en) * 1992-09-02 1995-04-11 Cirrus Logic, Inc. General purpose, hash-based technique for single-pass lossless data compression
EP0594196B1 (en) * 1992-10-22 1999-03-31 Cabletron Systems, Inc. Address lookup in packet data communications link, using hashing and content-addressable memory
US5951623A (en) * 1996-08-06 1999-09-14 Reynar; Jeffrey C. Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
JPH1185771A (ja) 1997-09-01 1999-03-30 Fujitsu Ltd 文字列検索方式
JP3620968B2 (ja) 1998-08-05 2005-02-16 株式会社日立製作所 文書検索方法及びその実施装置並びにその処理プログラムを記録した媒体
US6359574B1 (en) * 2001-01-22 2002-03-19 Proxell Systems Ltd. Method for identifying longest common substrings
WO2004062110A1 (ja) * 2002-12-26 2004-07-22 Fujitsu Limited データ圧縮方法、プログラム及び装置
JP4014155B2 (ja) * 2003-01-27 2007-11-28 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理装置及び方法、プログラム、データ構造、並びにコンピュータ読取り可能な記録媒体
US20060106870A1 (en) * 2004-11-16 2006-05-18 International Business Machines Corporation Data compression using a nested hierarchy of fixed phrase length dictionaries
US7487169B2 (en) * 2004-11-24 2009-02-03 International Business Machines Corporation Method for finding the longest common subsequences between files with applications to differential compression
US7667630B2 (en) * 2004-12-07 2010-02-23 Nippon Telegraph And Telephone Corporation Information compression-encoding device, its decoding device, method thereof, program thereof, and recording medium storing the program
JP4768009B2 (ja) * 2005-03-11 2011-09-07 ロックソフト リミテッド データ・クラスタを使用する冗長性の少ないデータを格納する方法
US8214517B2 (en) 2006-12-01 2012-07-03 Nec Laboratories America, Inc. Methods and systems for quick and efficient data management and/or processing
US7809701B2 (en) * 2007-10-15 2010-10-05 Telefonaktiebolaget Lm Ericsson (Publ) Method and system for performing exact match searches using multiple hash tables
CN101593196B (zh) * 2008-05-30 2013-09-25 日电(中国)有限公司 用于快速密文检索的方法、装置和系统
JP5012674B2 (ja) * 2008-06-03 2012-08-29 日本電気株式会社 Ipパケット制御装置におけるソフトウェア検索方法
US8804950B1 (en) * 2008-09-30 2014-08-12 Juniper Networks, Inc. Methods and apparatus for producing a hash value based on a hash function
US8387003B2 (en) * 2009-10-27 2013-02-26 Oracle America, Inc. Pluperfect hashing
JP5418218B2 (ja) 2009-12-25 2014-02-19 富士通株式会社 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置
US8788543B2 (en) * 2010-05-13 2014-07-22 International Business Machines Corporation Scalable, concurrent resizing of hash tables
JP5848185B2 (ja) * 2012-04-20 2016-01-27 日本電信電話株式会社 フレーム検索処理装置および方法
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11868615B2 (en) 2020-12-14 2024-01-09 Kioxia Corporation Compression device and control method

Also Published As

Publication number Publication date
US9325345B2 (en) 2016-04-26
US9214954B2 (en) 2015-12-15
JP2015186077A (ja) 2015-10-22
US20150280736A1 (en) 2015-10-01
US20150295591A1 (en) 2015-10-15

Similar Documents

Publication Publication Date Title
JP6319740B2 (ja) データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム
US8988257B2 (en) Data compression utilizing variable and limited length codes
US9077368B2 (en) Efficient techniques for aligned fixed-length compression
JP3009727B2 (ja) 改良形データ圧縮装置
JP5831298B2 (ja) プログラム、情報処理装置およびインデックス生成方法
JP6425709B2 (ja) 復元中に予備拡張辞書を利用するデータ復元
CN111294053B (zh) 硬件友好的数据压缩方法、系统及装置
JP2012533921A (ja) データの圧縮方法
US10230392B2 (en) Techniques for parallel data decompression
GB2493103A (en) Compressing copy pointers to a history buffer using variable length code tables
Nandi et al. A compression technique based on optimality of LZW code (OLZW)
Barua et al. Bangla text compression based on modified Lempel-Ziv-Welch algorithm
US8018359B2 (en) Conversion of bit lengths into codes
JP2012098893A (ja) 圧縮命令処理装置及び圧縮命令生成装置
JP2016170750A (ja) データ管理プログラム、情報処理装置およびデータ管理方法
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
JP7006462B2 (ja) データ生成プログラム、データ生成方法および情報処理装置
Hoang et al. Dictionary selection using partial matching
JP6984321B2 (ja) データ生成プログラム、データ生成方法および情報処理装置
JP5808360B2 (ja) 文字列圧縮及び復元システム並びに方法
US11593311B2 (en) Compression system with longest match processing for generating compressed data
US20160210304A1 (en) Computer-readable recording medium, information processing apparatus, and conversion process method
US20170060934A1 (en) Modifying a compressed block of data
Skibiński PPM with the extended alphabet
WO2013132590A1 (ja) プログラム、情報処理装置およびデータ生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170228

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180226

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

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20180308

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20180308

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180327

R150 Certificate of patent or registration of utility model

Ref document number: 6319740

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150