(57)【要約】本発明はデータの圧縮方法に係り、さらに詳しくは、コンピュータデータを圧縮するに際して、文字列辞書を生成してインデックスを格納する方法と、文字列に対する圧縮コードを格納する方法とを併用することにより、圧縮率を向上させることのできるデータの圧縮方法に関する。本発明によれば、圧縮率が向上し、且つ、解凍時の速度が高くなるという効果がある。
2012533921.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータデータを圧縮する方法であって、
原データに含まれている文字列の中で２回以上現れる繰り返し文字列を取り出す第１ステップと、
前記取り出された繰り返し文字列のハッシュ値を計算して辞書テーブルに格納し、前記繰り返し文字列をエンコードして圧縮データに格納する第２ステップと、
前記原データに含まれている文字列の中で、前記繰り返し文字列を除く文字列をＬＺ７７（Ｌｅｍｐｅｌ−Ｚｉｖ）方式によりエンコードして前記圧縮データに格納する第３ステップと、
前記第３ステップのエンコード過程で、前文字の次に特定の文字がくる確率を計算して前記圧縮データに格納する第４ステップと、
を含み、
前記第４ステップは、
特定の１文字よりなる前文字の次に特定の文字がくる確率を計算して格納する第４−１ステップと、
各文字に与えられたＡＳＣＩＩ値を８で割った余りが同じ文字を束ねて文字群を形成し、前記文字群の次に特定の文字がくる確率を計算して格納する第４−２ステップと、からなることを特徴とする、請求項１に記載のデータの圧縮方法。
【請求項２】
前記第４ステップは、
前記第４−１ステップおよび前記第４−２ステップで計算された確率の中で、より高い値の確率のみを格納することを特徴とする、請求項１に記載のデータの圧縮方法。
【請求項３】
前記第２ステップまたは前記第３ステップのエンコード過程で、最近現れた複数の文字列に対する一覧を作成し、前記複数の文字列に対する一覧とインデックスを前記圧縮データに格納する第５ステップをさらに含む
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの圧縮方法に係り、さらに詳しくは、コンピュータデータを圧縮するに際して、文字列辞書を生成してインデックスを格納する方法と、文字列に対する圧縮コードを格納する方法とを併用することにより、圧縮率を向上させることのできるデータの圧縮方法に関する。
【背景技術】
【０００２】
一般に、データ圧縮は、所定のフォーマットで定義されたデータを元のフォーマットよりも少数のデータビットを含む他のフォーマットに変換することである。元のデータが必要になる場合、データを元のフォーマットに復元するために、圧縮されたデータは解凍される。
【０００３】
データ圧縮は、損失型圧縮及び無損失型圧縮に大別できるが、その用語から分かるように、データは、無損失型圧縮を採用する場合に、圧縮及び解凍中に原形がそのまま保存される。無損失型圧縮とは異なり、損失型圧縮は、解凍されたデータが元のデータと正確に一致しないこともある。無損失型のデータ圧縮アルゴリズムは、辞書（ｄｉｃｔｉｏｎａｒｙ）符号化及び統計符号化の類型に分類される。
【０００４】
最も汎用されている辞書符号化アルゴリズムは、レンペル−ジフ（Ｌｅｍｐｅｌ−Ｚｉｖ）アルゴリズム及びこれらの変形アルゴリズムである。特に、ＬＺ７７アルゴリズムは、ジフらによって１９７７年に発表された圧縮方式をいい、ＬＺ７８は、ジフらによって１９７８年に発表された圧縮方式をいう。
【０００５】
ＬＺ７７は、文字の繰り返されたシーケンスを、ポインターによるシーケンスの以前発生に対する参照で代替する原理に基づく。ＬＺ７８は、ストリングマッチングのために、ルックアップテーブル又は辞書のように、適応的に成長する参照源に基づいて入力データ文字のストリーム（ｓｔｒｅａｍ）を符号化された値でパース（ｐａｒｓｅ）する。
【０００６】
従来発表された圧縮アルゴリズムでは、文字列符号化（文字列エンコード）又は辞書符号化のうちのいずれか一方の方法のみを用いてデータを圧縮していた。圧縮に使われる方法が一つである場合には、データの性質に応じて、圧縮率及び速度が向上することもあるが、さらに悪化することもある。もし、２種類の方法を併用して圧縮及び解凍を行い、圧縮に際しては一層高い効率を示す方法によるエンコード結果を格納すれば、常に最高の速度及び効率を保証することが可能になると考えられる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の問題点を解消するための本発明は、原データに含まれている文字列の中で、繰り返し現れる文字列は辞書テーブルに格納してインデックスのみが格納されるようにし、繰り返し現れないか、あるいは、繰り返し現れる回数が少ない文字列は文字列エンコード方式によりデータを圧縮して格納することにより、効率よい圧縮が行われるデータの圧縮方法を提供することを目的とする。
【０００８】
また、本発明は、文字列をエンコードするに際して、前文字の次にくる文字の確率を計算して一緒に格納することにより、検索や解凍速度が向上するデータの圧縮方法を提供することを目的とする。
【０００９】
さらに、本発明は、エンコード過程で現れる文字列の中で、最近現れた複数の文字をテーブルに格納することにより、圧縮率が高くなるデータの圧縮方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述の問題点を解消するために、本発明に係るデータの圧縮方法は、コンピュータデータを圧縮する方法であって、原データに含まれている文字列の中で２回以上現れる繰り返し文字列を取り出す第１ステップと、前記取り出された繰り返し文字列のハッシュ値を計算して辞書テーブルに格納し、前記繰り返し文字列をエンコードして圧縮データに格納する第２ステップと、前記原データに含まれている文字列の中で、前記繰り返し文字列を除く文字列をＬＺ７７（Ｌｅｍｐｅｌ−Ｚｉｖ）方式によりエンコードして前記圧縮データに格納する第３ステップと、前記第３ステップのエンコード過程で、前文字の次に特定の文字がくる確率を計算して前記圧縮データに格納する第４ステップと、を含む。
【００１１】
本発明に係るデータの圧縮方法において、前記第４ステップは、特定の１文字よりなる前文字の次に特定の文字がくる確率を計算して格納する第４−１ステップと、各文字に与えられたＡＳＣＩＩ値を８で割った余りが同じ文字を束ねて文字群を形成し、前記文字群の次に特定の文字がくる確率を計算して格納する第４−２ステップと、からなることを特徴とする。
【００１２】
本発明に係るデータの圧縮方法において、前記第４ステップは、前記第４−１ステップ及び前記第４−２ステップで計算された確率の中で、より高い値の確率のみを格納することを特徴とする。
【００１３】
本発明に係るデータの圧縮方法は、前記第２ステップ又は前記第３ステップのエンコード過程で、最近現れた複数の文字列に対する一覧を作成し、前記複数の文字列に対する一覧とインデックスを前記圧縮データに格納する第５ステップをさらに含む。
【発明の効果】
【００１４】
本発明によれば、圧縮率が向上し、且つ、解凍時の速度が高くなるという効果がある。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態による圧縮方法の過程を示す概念図である。
【図２】辞書テーブルに格納されている文字列をハッシュ値を用いて検索する方法を示す概念図である。
【図３】前文字の次に特定の文字がくる確率を計算する方法を示す概念図である。
【図４】特定の文字群の次に特定の文字がくる確率を計算する方法を示す概念図である。
【発明を実施するための形態】
【００１６】
以下、添付図面に基づき、本発明の実施形態によるデータの圧縮方法（以下、「圧縮方法」と称する。）を説明する。
【００１７】
図１は、本発明の実施形態による圧縮方法の過程を示す概念図である。
【００１８】
本発明の圧縮方法によって圧縮可能なデータの種類は、文書やテキストに限定されず、イメージや音楽、その他のマルチメディアデータがいずれも含まれ得る。
【００１９】
圧縮対象となる原データ１０２は、文字列格納方式及び辞書格納方式によって圧縮データ１０６に変換される。
【００２０】
エンコード時に現れた文字列につき、いくつかの長さ単位でハッシュテーブルを作成する。そして、繰り返し文字列に対しては、辞書テーブル１０４に格納しておく。
【００２１】
データの圧縮は、所定のブロック単位で行われる。ブロックのサイズは、圧縮の速度とは無関係であるが、圧縮率には影響を及ぼす。一般に、ブロックのサイズが大きくなるにつれて、圧縮率は良くなるものの、メモリ使用量は増える。圧縮の単位となるブロックのサイズは、圧縮率やファイルのサイズなどを考慮してユーザーが自由に設定することができる。
【００２２】
圧縮時及び解凍時におけるメモリ使用量は、次式で表わされる。
メモリ使用量（圧縮時）＝ブロックのサイズ×２＋ハッシュテーブルのサイズ
メモリ使用量（解凍時）＝ブロックのサイズ×２
【００２３】
図２は、辞書テーブルに格納されている文字列をハッシュ値を用いて検索する方法を示す概念図であり、辞書テーブル１０４に格納されるハッシュテーブル１０４ｂの構造を示している。
【００２４】
ハッシュテーブル１０４ｂを生成する方法は、以下の通りである。
【００２５】
まず、原データ１０２において、各文字で始まる長さが２Ｎ（２、４、８、１６、３２、…）に相当する文字列１０４ａのハッシュ値（Ｈａｓｈ）を計算して、ハッシュテーブル１０４ｂに格納する。計算されたハッシュ値に相当する文字列１０４ａを対応付けて格納することが好ましく、文字列の長さ及びハッシュ値のサイズは、圧縮時に指定することができる。
【００２６】
文字列の長さが長いほど長い文字列がマッチングできるので圧縮率が高くなり、ハッシュ値のサイズが大きくなるほどハッシュの衝突が回避できるので圧縮率が高くなる。しかしながら、両値が大きくなるほどメモリ使用量は増え、特に、文字列の長さが長くなると計算量が増えるため、速度が遅くなる。
【００２７】
格納は、ＬＺ７７のように、（文字列間の間隔、文字列の長さ）の形で行う。ハッシュテーブル１０４ｂのインデックスを格納するような方式により格納を行うと、圧縮率を高めることはできるとはいえ、デコード時にもハッシュテーブル１０４ｂを作成することを余儀なくされるため、速度が圧縮時と同じ位に遅くなるという問題点がある。このため、本発明においては、通常の圧縮アルゴリズムでのように、（ｄｉｓｔａｎｃｅ、ｌｅｎｇｔｈ）方式により格納を行う。
【００２８】
原データ１０２に対するエンコード過程で生成されたハッシュ値と同じハッシュ値がハッシュテーブル１０４ｂにあるか否かを判断する。ハッシュテーブル１０４ｂに格納される文字列は、最大１２８の長さを有することができる。
【００２９】
辞書テーブル１０４の内部のハッシュテーブル１０４ｂを検索して同じハッシュ値が格納されている場合、同じ文字列が存在すると判断することができ、同じハッシュ値を有する文字列のインデックスを圧縮データ１０６に格納する。
【００３０】
辞書テーブル１０４に格納される文字列の数が多いほど圧縮率は良くなるが、その分多くの文字列又はハッシュ値を検索せねばならないため、速度に影響を及ぼしてしまう。また、むやみに辞書数を増やしてしまうと、格納すべきインデックスの種類が増えるため、圧縮率はそれ以上良くなくなるという状況に陥る。
【００３１】
圧縮データ１０６に文字を格納するとき、前文字の次にくる文字の確率（頻度）を計算して一緒に格納する。文字がくる確率を一緒に格納することにより、文字列に対するインデックスのビット数を減らして圧縮効率を向上させることができる。
【００３２】
文字がくる確率を求める方法は、２通りである。一つは、特定の１文字よりなる前文字の次に特定の文字がくる確率を計算することである。
【００３３】
図３は、前文字の次に特定の文字がくる確率を計算する方法を示す概念図であり、前文字が一つの文字である場合を示す。
【００３４】
例えば、エンコード過程で特定の文字「Ｃ」の次に「Ａ」がくる確率がいくらであるかを計算して圧縮データ１０６に一緒に格納する。特定の文字がくる確率は、以前のステップで行われるエンコード過程で発生したケースを累積して計算する。もし、前文字の次に特定の文字がくる確率をあらかじめ計算して格納しておけば、解凍過程で辞書や文字列に対する検索範囲を絞ることができて、デコード時間が短縮されるという効果が得られる。
【００３５】
また、図４は、特定の文字群の次に特定の文字がくる確率を計算する方法を示す概念図である。
【００３６】
文字群とは、原データ１０２に含まれている文字列の次に特定の文字がくる確率を計算するために、文字列を所定の規則に即して分類したものを意味する。まず、それぞれの文字列を示すＡＳＣＩＩ値を求め、ＡＳＣＩＩ値を所定の数で割った余りが同じ文字列同士を束ねて同じ群を形成する。
【００３７】
もし、ＡＳＣＩＩ値を８で割った余りが同じ文字列同士で群を作るとしたとき、合計８個の文字群が作られる。本発明においては、８個の文字群が作られることを想定しているが、一層多くの文字群を作って使用してもよい。
【００３８】
図４に示すように、ＡＳＣＩＩ値を８で割った余りが同じ文字「Ａ」、「Ｂ」、「Ｃ」の次に特定の文字「Ａ」がくる確率を計算する。例えば、「Ａ」、「Ｂ」、「Ｃ」のＡＳＣＩＩ値がそれぞれ「６５」、「７３」、「８１」であるとしたとき、３文字のＡＳＣＩＩ値を８で割った余りはいずれも１となる。このため、「Ａ」、「Ｂ」、「Ｃ」は余りが１である文字群に分類することができる。文字群ごとに計算された確率は、圧縮データ１０６に一緒に格納する。
【００３９】
最終的に圧縮を行うときには、２通りの方式の中で圧縮率がより高い方式を選択して圧縮を行う。すなわち、特定の前文字の次にくる文字の確率を求める方式と、特定の文字群の次にくる文字の確率を求める方式の中で、圧縮率がより高い方式を選択して圧縮を行い、圧縮データ１０６を解凍するときには、確率がより高かった方法を選択して解凍を行う。
【００４０】
しかしながら、圧縮データ１０６を格納するとき、２通りの方式の中で、どのような方式を選択して圧縮を行ったかを一緒に格納しないこともある。もし、特定の方式に対する選択有無を一緒に格納すれば、デコード速度は向上させることができるとはいえ、それに関する情報を一緒に格納せねばならないため、圧縮率が落ちてしまうという問題点がある。
【００４１】
圧縮方式に関する情報を格納しない場合には、デコード過程で２通りの方式の解凍を同時に行い、これらの中で圧縮率がより高い方式を選択して原データ１０２を再生する。
【００４２】
一方、本発明においては、圧縮時又は解凍時に最近現れたいくつかの値に関する情報を別途に格納して管理する。データのエンコード及びデコードの過程で同じ文字列は隣り合う位置で再び登場する可能性が高い。この場合に、新たに文字を検索したりエンコードをしたりすれば効率が落ちるため、あらかじめ設定された数に見合う分だけの文字列の履歴を格納して高速検索が行えるようにする。
【００４３】
エンコード過程で最近現れた複数の文字列に対して一覧を作成し、一覧に含まれている文字列に対するインデックスを生成する。そして、一覧とインデックスを圧縮データ１０６に一緒に格納する。
【００４４】
好ましくは、約１０個〜約２０個の文字列を格納するが、過去履歴に格納される文字列の数は当業者によって変更可能である。
【００４５】
以上、添付図面に基づき、本発明の好適な実施形態を説明したが、上述の本発明の技術的構成は、本発明が属する技術分野における当業者が本発明の技術的思想や必須的特徴を変更することなく他の具体的な形態で実施可能であるということが理解できるであろう。よって、上述の実施形態はあらゆる面で例示的なものであり、限定的なものではないということが理解できる筈であり、本発明の範囲は上記の詳細な説明の欄よりは、後述する特許請求の範囲によって開示され、特許請求の範囲の意味及び範囲ならびにその等価概念から導き出されるあらゆる変更又は変形された形態が本発明の範囲に含まれるものと解釈されるべきである。
【図１】
2012533921.tif 000003
【図２】
2012533921.tif 000004
【図３】
2012533921.tif 000005
【図４】
2012533921.tif 000006
【国際調査報告】
2012533921.tif 000007
2012533921.tif 000008
2012533921.tif 000009
2012533921.tif 000010