以下に、本願の開示する圧縮装置、圧縮方法、圧縮プログラムおよび復元装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
本実施例にかかるデータ圧縮復元装置の構成の一例について説明する。図1は、本実施例にかかるデータ圧縮復元装置の構成を示す図である。図1に示すように、このデータ圧縮復元装置100は、入力部110、出力部120、入出力制御部130、記憶部140、圧縮部150、復元部160を有する。
入力部110は、各種情報の入力を受け付ける入力装置である。例えば、入力部110は、キーボードやマウスなどに対応する。出力部120は、各種情報を出力する出力装置である。例えば、出力部120は、ディスプレイやモニタなどに対応する。入出力制御部130は、入力部110、出力部120、記憶部140、圧縮部150、復元部160の間における各種情報の入出力を制御する処理部である。例えば、入出力制御部130は、各種情報の入出力を制御するASIC(Application Specific Integrated Circuit)等に対応する。
記憶部140は、入力ファイル141と、戻り距離閾値表142と、置換履歴表143と、出力ファイル144とを有する。記憶部140は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、ハードディスクや光ディスクなどの記憶装置に対応する。
入力ファイル141は、複数の入力文字列を含むファイルである。例えば、入力文字列Sは、下記の式(7)に示される文字列である。
S=aacabaaabcaaaababaaa・・・(7)
戻り距離閾値表142は、各文字の戻り距離閾値を保持するテーブルである。この戻り距離閾値は、各文字が入力文字列Sに出現する出現頻度に応じて設定される閾値である。戻り距離閾値は、該当文字の出現頻度が高いほど小さい値が設定され、出現頻度が低いほど大きい値が設定される。例えば、戻り距離閾値表142は、入力文字列Sに含まれる各文字に対応付けて、出現数と、戻り距離閾値とを保持する。
図2は、戻り距離閾値表のデータ構造の一例を示す図である。図2に示すように、戻り距離閾値表142は、文字「a」に対応付けて、出現数「14」と、戻り距離閾値「0」とを保持する。また、戻り距離閾値表142は、文字「b」に対応付けて、出現数「4」と、戻り距離閾値「4」とを保持する。また、戻り距離閾値表142は、文字「c」に対応付けて、出現数「2」と、戻り距離閾値「9」とを保持する。
置換履歴表143は、RLEの圧縮に都合の良い文字列に変換した文字列Tを、変換前の入力文字列Sに戻す場合に利用するデータを保持するテーブルである。この置換履歴表143は、例えば、オフセットと、戻り距離とを対応付けて保持する。置換履歴表143に関する説明の詳細は後述する。
図3は、置換履歴表のデータ構造の一例を示す図である。図3に示すように、置換履歴表143は、オフセット「5」と、戻り距離「3」とを対応付けて保持する。また、置換履歴表143は、オフセット「4」と、戻り距離「7」とを対応付けて保持する。また、置換履歴表143は、オフセット「8」と、戻り距離「3」とを対応付けて保持する。
出力ファイル144は、圧縮部150により圧縮された文字列を含むファイルである。例えば、圧縮部150により圧縮された文字列は、下記の式(8)に示される出力文字列RLE(T)である。
RLE(T)=(a,2)(c,2)(b,2)(a,8)(b,2)(a,4)・・・(8)
図1の説明に戻る。圧縮部150は、入力ファイル141に含まれる入力文字列を圧縮する処理部である。この圧縮部150は、閾値表生成部151と、文字列変換部152と、RLE符号化部153とを有する。
閾値表生成部151は、入力文字列に含まれる文字ごとに戻り距離閾値を算出し、図2に示した戻り距離閾値表142を生成する処理部である。以下において、閾値表生成部151の処理について具体的に説明する。
例えば、閾値表生成部151は、入力ファイル141から入力文字列を取得し、取得した入力文字列を先頭から末尾まで1文字ずつ読み込む。閾値表生成部151は、文字ごとに出現数をカウントし、カウントした文字ごとの出現数を戻り距離閾値表142に記録する。閾値表生成部151は、出現数をソートキーとして、戻り距離閾値表142を降順にソートする。そして、閾値表生成部151は、文字ごとに、該当文字より出現数が多い文字の出現数の和を該当文字の出現数で除算し、除算した値の小数点以下第一位を四捨五入した値を各文字の戻り距離閾値として戻り距離閾値表142に記録する。
例えば、閾値表生成部151が式(7)に示した入力文字列Sを読み込んだ場合には、閾値表生成部151は、文字「a」の出現数として「14」を戻り距離閾値表142に記録する。同様に、閾値表生成部151は、文字「b」の出現数として「4」を記録し、文字「c」の出現数として「2」を記録する。ここで、文字「a」より出現数が多い文字は存在しないので、文字「a」より出現数が多い文字の出現数の和は「0」となる。このため、閾値表生成部151は、この「0」を文字「a」の出現数「14」で除算し、文字「a」の戻り距離閾値として「0」を算出する。また、文字「b」より出現数が多い文字は文字「a」であるので、文字「b」より出現数が多い文字の出現数の和は「14」となる。このため、閾値表生成部151は、この「14」を文字「b」の出現数「4」で除算し、文字「b」の戻り距離閾値として「4」を算出する。また、文字「c」より出現数が多い文字は文字「a」と文字「b」であるので、文字「c」より出現数が多い文字の出現数の和は「18」となる。このため、閾値表生成部151は、この「18」を文字「c」の出現数「2」で除算し、文字「c」の戻り距離閾値として「9」を算出する。
文字列変換部152は、RLEの圧縮方式にとって都合のよい並び順となるように、入力ファイル141の文字の順序を変換する処理部である。すなわち、文字列変換部152は、同一の文字が連続するように各文字を移動させ、文字列を変換する。なお、文字の移動距離は、戻り距離閾値により制限される。
ここで、文字列変換部152の処理を説明する前に、この処理を説明する場合に利用する用語について説明する。図4は、各種用語を説明するための図である。スライドバッファは、入力文字列Sの一部を格納するバッファである。文字列変換部152は、スライドバッファ内の入力文字列Sの変換が終了するたびに、未変換の入力文字列Sをスライドバッファに順次格納する。
原点oは、基準となる文字の位置を示すものである。注目位置pは、置換元の文字を検出する際に基準となる位置を示すものであり、原点oから末尾に向かって移動する。オフセットmは、原点oから置換元の文字までの相対距離である。戻り距離nは、文字を置換した場合に、置換元の文字から置換先の文字までの移動距離に対応するものである。例えば、図4に示す太文字「a」と「b」とを置換する場合には、オフセットmが「6」となり、戻り距離nが「1」となる。
文字列変換部152が文字列を変換する処理について説明する。文字列変換部152は、注目位置pが指す文字xとは異なる文字yを検出するまで、入力文字列Sを末尾に向かって1文字ずつ読み進める。文字列変換部152は、文字yを検出すると、文字yよりも先頭側に存在し、かつ、文字yと同一の文字y’を検出するまで、入力文字列Sを先頭に向かって1文字ずつ読み進める。
文字yの戻り距離閾値以内でy’を検出した場合には、文字列変換部152は、文字y’の次の文字zと、文字yとを置換する。文字列変換部152は、原点o、オフセットm、戻り距離nを対応付けて置換履歴表143に記録する。そして、文字列変換部152は、原点o、注目位置pをオフセットmの位置に設定し同様の処理を繰り返し実行する。一方、文字yの戻り距離閾値以内でy’を検出しなかった場合には、文字列変換部152は、注目位置pを文字yに設定し、同様の処理を繰り返し実行する。
次に、文字列変換部152の処理を詳細に説明する。図5〜11は、文字列変換部の処理を詳細に説明するための図である。また、図12〜14は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図である。ここでは説明の便宜上、入力文字列Sが、全てのスライドバッファ内に格納できるものとする。また、入力文字列SをS=aacabaaabcaaaababaaaとする。
図5について説明する。文字列変換部152は、入力文字列Sをスライドバッファに格納する。また、文字列変換部152は、原点oおよび注目位置pを入力文字列Sの先頭の文字「a」に設定する。この場合には、原点o=0となる(ステップS10)。また、文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=2となる位置で、文字「c」を検出する(ステップS11)。文字列変換部152は、この文字「c」から先頭に向かって1文字ずつ読み進めるが、文字「c」の戻り距離閾値「9」以内で文字「c」を検出しないため、注目位置pをオフセットm=2の位置に設定する。
図6の説明に移行する。文字列変換部152は、注目位置pが指す文字「c」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=3となる位置で、文字「a」を検出する(ステップS12)。文字列変換部152は、この文字「a」から先頭に向かって1文字ずつ読み進めるが、文字「a」の戻り距離閾値「0」以内で文字「a」を検出しないため、注目位置pをオフセットm=3の位置に設定する。
文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=4となる位置で、文字「b」を検出する(ステップS13)。文字列変換部152は、この文字「b」から先頭に向かって1文字ずつ読み進めるが、文字「b」の戻り距離閾値「4」以内で文字「c」を検出しないため、注目位置pをオフセットm=4の位置に設定する。
文字列変換部152は、注目位置pが指す文字「b」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=5となる位置で、文字「a」を検出する(ステップS14)。文字列変換部152は、この文字「a」から先頭に向かって1文字ずつ読み進めるが、文字「a」の戻り距離閾値「0」以内で文字「a」を検出しないため、注目位置pをオフセットm=5の位置に設定する。
図7の説明に移行する。文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=8となる位置で、文字「b」を検出する(ステップS15)。文字列変換部152は、この文字「b」から先頭に向かって1文字ずつ読み進め、文字「b」の戻り距離閾値「4」以内である戻り距離n=4の位置に文字「b」を検出する。文字列変換部152は、この文字「b」の次の文字「a」と、オフセットm=8の位置に存在する文字「b」とを置換する(ステップS16)。文字列変換部152は、原点oおよび注目位置pをオフセットm=8の位置に設定する。
文字列変換部152は、ステップS16の処理が終了した時点で、原点o「0」、オフセットm「8」、戻り距離n「4」を対応付けて、置換履歴表143に格納する。図12に、ステップS16が終了した時点での置換履歴表のデータの内容を示す。
図8の説明に移行する。文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=1となる位置で、文字「c」を検出する(ステップS17)。文字列変換部152は、この文字「c」から先頭に向かって1文字ずつ読み進め、文字「c」の戻り距離閾値「7」以内である戻り距離n=7の位置に文字「c」を検出する。文字列変換部152は、この文字「c」の次の文字「a」と、オフセットm=1の位置に存在する文字「c」とを置換する(ステップS18)。文字列変換部152は、原点oおよび注目位置pをオフセットm=1の位置に設定する。
文字列変換部152は、ステップS18の処理が終了した時点で、原点o「8」、オフセットm「1」、戻り距離n「7」を対応付けて、置換履歴表143に格納する。図13に、ステップS18が終了した時点での置換履歴表のデータの内容を示す。
図9の説明に移行する。文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=5となる位置で、文字「b」を検出する(ステップS19)。文字列変換部152は、この文字「b」から先頭に向かって1文字ずつ読み進めるが、文字「b」の戻り距離閾値「4」以内で文字「b」を検出しないため、注目位置pをオフセットm=5の位置に設定する。
文字列変換部152は、注目位置pが指す文字「b」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=6となる位置で、文字「a」を検出する(ステップS20)。文字列変換部152は、この文字「a」から先頭に向かって1文字ずつ読み進めるが、文字「a」の戻り距離閾値「0」以内で文字「a」を検出しないため、注目位置pをオフセットm=6の位置に設定する。
図10の説明に移行する。文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進め、オフセットm=7となる位置で、文字「b」を検出する(ステップS21)。文字列変換部152は、この文字「b」から先頭に向かって1文字ずつ読み進め、文字「b」の戻り距離閾値「4」以内である戻り距離n=2の位置に文字「b」を検出する。文字列変換部152は、この文字「b」の次の文字「a」と、オフセットm=7の位置に存在する文字「b」とを置換する(ステップS22)。文字列変換部152は、原点oおよび注目位置pをオフセットm=7の位置に設定する。
文字列変換部152は、ステップS22の処理が終了した時点で、原点o「9」、オフセットm「7」、戻り距離n「2」を対応付けて、置換履歴表143に格納する。図14に、ステップS22が終了した時点での置換履歴表のデータの内容を示す。
図11の説明に移行する。文字列変換部152は、注目位置pが指す文字「a」とは異なる文字を検出するまで末尾に向かって1文字ずつ読み進める。しかし、該当文字を検出する前にスライドバッファの末尾に到達する(ステップS23)。文字列変換部152は、スライドバッファに格納された文字列を文字列Tとする。また、文字列変換部152は、図14に示した置換履歴表の原点oの情報を取り除いたものを、置換履歴表143に格納する(ステップS24)。
上記のように、文字列変換部152がステップS10〜S24の処理を実行することで、入力文字列Sは、文字列Tに変換される。文字列変換部152は、文字列T=aaccbbaaaaaaaabbaaaaをRLE符号化部153に出力する。
また、ステップS24に示したように、文字列変換部152は、置換履歴表をそのままの状態で記憶部140に記憶することはない。置換履歴表の原点の情報は、オフセットと戻り距離との関係から一意に導くことができる。このため、文字列変換部152は、原点の情報を取り除いた置換履歴表143を記憶部140に記憶することで、記憶部140が記憶すべきデータ量を削減する。
また、文字列変換部152は、置換履歴表143のオフセットと戻り距離とのペアを1バイトのデータ量で格納する。図15は、置換履歴表のデータ構造の一例を示す図(2)である。図15に示す例では、文字列変換部152は、置換履歴表143の1行目のオフセット「8」を4ビットに格納し、戻り距離「4」を4ビットに格納することで、(8,4)を1バイトに格納する。同様に、文字列変換部152は、2行目のオフセット「1」を4ビットに格納し、戻り距離「7」を4ビットに格納することで、(1,7)を1バイトに格納する。また、文字列変換部152は、3行目のオフセット「7」を4ビットに格納し、戻り距離「2」を4ビットに格納することで、(7,2)を1バイトに格納する。つまり、文字列変換部152は、図15に示す置換履歴表143を3バイトのデータ量で記憶部140に格納する。
図1の説明に戻る。RLE符号化部153は、RLEの圧縮方式に基づいて、文字列を圧縮する処理部である。RLE符号化部153が行うRLEの圧縮方式は、従来のものと同一である。RLE符号化部153は、圧縮した文字列を出力文字列として、出力ファイル144に格納する。
例えば、RLE符号化部153は、文字列変換部152により入力された文字列T=aaccbbaaaaaaaabbaaaaを、出力文字列RLE(T)=(a,2)(c,2)(b,2)(a,8)(b,2)(a,4)に符号化する。
復元部160は、出力ファイル144から入力ファイル141を復元する処理部である。復元部160は、RLE復号化部161と、文字列逆変換部162とを有する。
RLE復号化部161は、RLEの復号方式に基づいて、出力文字列を復号する処理部である。RLE復号化部161が行うRLEの復号方式は、従来のものと同一である。例えば、RLE復号化部161は、出力文字列を先頭の文字から辿っていき、連続する文字の種別と文字が連続する長さとに基づいて、符号化前の文字列に復号化する。RLE復号化部161は、復号した文字列を文字列逆変換部162に出力する。
例えば、RLE復号化部161は、出力ファイル144に格納された出力文字列RLE(T)=(a,2)(c,2)(b,2)(a,8)(b,2)(a,4)を、文字列T=aaccbbaaaaaaaabbaaaaに復号する。
文字列逆変換部162は、RLEの圧縮方式にとって都合のよい並び順となるように変換された文字列を元の文字列に逆変換する処理部である。以下において、文字列逆変換部162の処理を具体的に説明する。文字列逆変換部162は、置換履歴表143を記憶部140から読み込み、置換履歴表143の原点の情報を復元した後に、文字列を逆変換する。なお、ここでは、逆変換対象となる文字列TをT=aaccbbaaaaaaaabbaaaaとする。また、置換履歴表143のデータ構造を図15に示すものとする。
文字列逆変換部162が原点の情報を復元する処理について説明する。図16は、原点の情報を復元する処理を説明するための図である。ここでは、図15に示した置換履歴表の原点を復元する場合を説明する。文字列逆変換部162は、n−1行目の原点に、n−1行目のオフセットの値を加算することで、n行目の原点の値を求める。ただし、1行目の原点の値を0とする。図16に示す例では、1行目の原点の値は0となる。2行目の原点の値は8となる。1行目の原点の値は9となる。
文字列逆変換部162が文字列を逆変換する処理について説明する。文字列逆変換部162は、原点を復元した置換履歴表を最後の行から一行ずつ読み出し、置換する2つの文字を判定する。置換する一方の文字は、文字列の先頭から「原点o+オフセットm」の位置に対応する文字となる。置換するもう一方の文字は、文字列の先頭から「原点o+オフセットm−戻り距離n+1」の位置に対応する文字となる。文字列逆変換部162は、置換する2つの文字を特定した後に、各文字を置換する。文字列逆変換部162は、上記処理を繰り返し実行することで、文字列を逆変換する。文字列逆変換部162は、逆変換した文字列を出力部120に出力しても良いし、記憶部140に記憶しても良い。
次に、文字列逆変換部162の処理を詳細に説明する。図17、図18は、文字列逆変換部の処理を詳細に説明するための図である。また、原点を復元した置換履歴表は、図16の右側に示すものとする。
図17について説明する。文字列逆変換部162は、変換対象となる文字列T=aaccbbaaaaaaaabbaaaaをバッファに読み込む(ステップS25)。文字列逆変換部162は、置換履歴表の3行目のデータを読み込み、置換する2つの文字を判定する。置換履歴表の3行目のデータは、原点o=9、オフセットm=7、戻り距離n=2となる。このため、置換する文字は、先頭から16番目の文字「a」と15番目の文字「b」となる。文字列逆変換部162は、先頭から16番目の文字「a」と15番目の文字「b」とを置換する(ステップS26)。
図18の説明に移行する。文字列逆変換部162は、置換履歴表の2行目のデータを読み込み、置換する2つの文字を判定する。置換履歴表の2行目のデータは、原点o=8、オフセットm=1、戻り距離n=7となる。このため、置換する文字は、先頭から9番目の文字「c」と3番目の文字「a」となる。文字列逆変換部162は、先頭から9番目の文字「c」と3番目の文字「a」とを置換する(ステップS27)。
文字列逆変換部162は、置換履歴表の1行目のデータを読み込み、置換する2つの文字を判定する。置換履歴表の1行目のデータは、原点o=0、オフセットm=8、戻り距離n=4となる。このため、置換する文字は、先頭から8番目の文字「b」と5番目の文字「a」となる。文字列逆変換部162は、先頭から8番目の文字「b」と5番目の文字「a」とを置換する(ステップS28)。ステップS28が終了した時点で、置換履歴表に対応する置換が全て終了する。
上記のように、文字列逆変換部162がステップS25〜S28の処理を実行することで、文字列T=aaccbbaaaaaaaabbaaaaは、文字列T=aacabaaabcaaaababaaaに逆変換される。この逆変換された文字列は、RLEの圧縮方式にあわせて変換される前の文字列に一致する。
ところで、図1に示した圧縮部150および復元部160は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積装置に対応する。または、圧縮部150および復元部160は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路に対応する。
次に、本実施例にかかるデータ圧縮復元装置100の処理手順について説明する。図19は、圧縮部の処理手順を示すフローチャートである。図19に示す処理は、例えば、記憶部140に入力ファイル141が格納されたことを契機として実行される。
図19に示すように、圧縮部150は、閾値表生成処理を実行し(ステップS101)、文字列変換処理を実行する(ステップS102)。そして、圧縮部150は、RLEの圧縮方式に基づいて、文字列を圧縮する(ステップS103)。
次に、図19のステップS101に示した閾値表生成処理について説明する。図20は、閾値表生成処理の処理手順を示すフローチャートである。図20に示すように、閾値表生成部151は、入力ファイル141から入力文字列を取得し、取得した入力文字列を先頭から末尾まで1文字ずつ読み込む(ステップS201)。閾値表生成部151は、文字ごとに出現数をカウントし、カウントした文字ごとの出現数を戻り距離閾値表142に記録する(ステップS202)。
閾値表生成部151は、出現数をソートキーとして、戻り距離閾値表142を降順にソートする(ステップS203)。閾値表生成部151は、文字ごとに、該当文字より出現数が多い文字の出現数の和を該当文字の出現数で除算し、除算した値の小数点以下第一位を四捨五入した値を各文字の戻り距離閾値として戻り距離閾値表142に記録する(ステップS204)。
次に、図19のステップS102に示した文字列変換処理について説明する。図21は、文字列変換処理の処理手順を示すフローチャートである。図21に示すように、文字列変換部152は、入力ファイル141から入力文字列をスライドバッファに読み込み(ステップS301)、初期化処理を行う(ステップS302)。ステップS302の初期化処理において、文字列変換部152は、原点o、注目位置pをスライドバッファの先頭にセットする。
文字列変換部152は、注目位置pが指す文字xとは異なる文字yを検出するまで、入力文字列Sを末尾に向かって1文字ずつ読み進める(ステップS303)。文字列変換部152は、スライドバッファの末尾に到達する前に文字yを検出した場合には(ステップS304,No)、文字yよりも先頭側に存在し、かつ、文字yと同一の文字y’を検出するまで、先頭側に1文字ずつ読み進める(ステップS305)。
文字列変換部152は、文字yの戻り距離閾値以内でy’を検出した場合には(ステップS306,Yes)、文字y’の次の文字zと、文字yとを置換する(ステップS307)。文字列変換部152は、原点o、オフセットm、戻り距離nを対応付けて置換履歴表に記録する(ステップS308)。文字列変換部152は、原点o、注目位置pをオフセットmの位置に設定し(ステップS309)、ステップS303に移行する。
一方、文字列変換部152は、文字yの戻り距離閾値以内でy’を検出しなかった場合には(ステップS306,No)、注目位置pをオフセットmの位置に設定し(ステップS310)、ステップS303に移行する。
ところで、ステップS304において、文字列変換部152は、文字yを検出する前にスライドバッファの末尾に到達した場合には(ステップS304,Yes)、スライドバッファ内の文字列を更新する(ステップS311)。つまり、文字列変換部152は、入力ファイル141から文字列を読み出し、読み出した文字列をスライドバッファに格納する。
文字列変換部152は、入力ファイルの末尾に到達していない場合には(ステップS312,No)、ステップS303に移行する。一方、文字列変換部152は、入力ファイルの末尾に到達した場合には(ステップS312,Yes)、スライドバッファ内の文字列をRLE符号化部153に出力し(ステップS313)、処理を終了する。
次に、図1に示した文字列逆変換部162の処理手順について説明する。図22は、本実施例にかかる文字列逆変換部の処理手順を示すフローチャートである。図22に示す処理は、例えば、記憶部140に置換履歴表143と出力ファイル144が格納されたことを契機として実行される。
図22に示すように、文字列逆変換部162は、置換履歴表143を読み込み(ステップS401)、置換履歴表143の原点を復元する(ステップS402)。文字列逆変換部162は、出力文字列Tをバッファに読み込み(ステップS403)、置換履歴表の末尾から、未選択の行を選択する(ステップS404)。
文字列逆変換部162は、置換履歴表の行を全て選択した場合には(ステップS405,Yes)、文字列Tを出力し(ステップS406)、処理を終了する。一方、文字列逆変換部162は置換履歴表の行を全て選択していない場合には(ステップS405,No)、出力文字列TにおいてT[o+m]とT[o+m−n+1]とを置換し(ステップS407)、ステップS404に移行する。ここで、oは原点、mはオフセット、nは戻り距離とする。
次に、入力文字列SをそのままRLEの圧縮方式により圧縮した場合のバイト数と、圧縮部150が、入力文字列Sを文字列Tに変換した後に圧縮した場合のバイト数との比較結果を示す。なお、入力文字列Sを文字列Tに変換した後に圧縮した場合のバイト数には、文字列Tから入力文字列Sに逆変換する場合に必要となる置換履歴表のバイト数を含める。また、1文字を1バイト、置換履歴表の各数値を1バイトとする。
入力文字列SをS=aacabaaabcaaaababaaaとする。従来のように、この入力文字列SをRLEで圧縮すると、RLE(S)=(a,2)(c,1)(a,1)(b,1)(a,3)(b,1)(c,1)(a,4)(b,1)(a,1)(b,1)(a,3)となる。このため、RLE(S)のデータ量は「24」バイトとなる。
入力文字列SをRLEの圧縮方式にとって都合の良い並び順に変換した文字列を、文字列T=aaccbbaaaaaaaabbaaaaとする。また、文字列Tを入力文字列Sに逆変換するための置換履歴表を図23に示す。図23は、置換履歴表のデータ構造の一例を示す図(3)である。文字列TをRLEで圧縮すると、RLE(T)=(a,2)(c,2)(b,2)(a,8)(b,2)(a,4)となる。このため、RLE(T)のデータ量は「12」バイトとなる。また、図23に示した置換履歴表のデータ量は、原点の情報を省き、オフセットと戻り距離とのペアを1バイトに格納すると、3バイトとなる。このため、RLE(T)のデータ量と置換履歴表のデータ量とを加算すると、「15」バイトとなる。
したがって、圧縮部150は、置換履歴表のデータ量を合わせた場合であっても、従来技術の圧縮方法により圧縮された文字列のデータ量とを比較して、データ量を削減することができる。上記に示した例では、圧縮部150は、従来技術と比較して、9バイト削減することができる。
次に、本実施例にかかるデータ圧縮復元装置100の効果について説明する。従来技術では、図25に示したように、文字列に含まれる全ての文字について、移動前と移動後の位置関係を記憶していた。これに対して、データ圧縮復元装置100は、文字列に含まれる文字のうち、置換していない文字については位置関係を記憶せず、置換した文字についてのみの位置関係を記憶する。このため、データ圧縮復元装置100は、記憶部140が記憶すべきデータ量を削減することができる。
また、従来技術では、移動前と移動後の位置関係を記憶する際に、文字の位置を示す番号をそのままの形式で記憶していたため、圧縮対象の文字列が長いほど、大きな整数、つまり、長いビット長で記憶していた。例えば、従来技術では、1516177番目の文字と1516179番目の文字が置換された場合には、(1516177,1516179)を記憶していた。これに対して、データ圧縮復元装置100は、オフセットおよび戻り距離を記憶する。オフセットおよび戻り距離は、いずれも文字の位置関係を差分で表したものであるため、データ圧縮復元装置100は、圧縮対象の文字列が長くても、小さな整数、つまり、短いビット長で記憶することができる。このため、データ圧縮復元装置100は、記憶部140が記憶すべきデータ量を削減することができる。
また、従来技術では、文字列の長さがnの場合には、メモリコストはO(n)であった。これに対して、データ圧縮復元装置100は、スライドバッファを用いるのでメモリコストはO(1)となり、従来技術と比較してメモリコストを削減することができる。
また、データ圧縮復元装置100は、入力文字列Sを変換する場合に、原点以降の文字を置換対象とし、置換元となる文字の領域を制限している。このため、原点は、置換を行うたびに置換元となった文字の位置に再設定されるので、一度置換対象となった文字が再度置換されることを防止することができる。さらに、データ圧縮復元装置100は、置換先となる文字を検出する場合に、置換元の文字の出現頻度が高いほど小さい値となる戻り距離閾値を設定する。このため、出現頻度が高い文字ほど置換対象になり難くなるので、置換の頻度を抑えることができる。このようなことから、データ圧縮復元装置100は、圧縮にかかる処理負荷を削減することができる。具体的に文字列の長さがnの場合には、従来技術の計算コストはO(nlogn)である。これに対して、本発明の計算コストはO(n)となり、従来技術と比較して計算コストを削減することができる。
また、データ圧縮復元装置100は、圧縮された文字列を復元する場合に、置換履歴表の原点を復元し、復元した原点と、オフセットと、戻り距離とに基づいて、圧縮された文字列を復号化し、逆変換する。このため、置換履歴表にオフセットと戻り距離のみが記憶されている場合でも、正確に文字列を復元することができる。
ところで、図1に示したデータ圧縮復元装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、データ圧縮復元装置100の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図1に示した圧縮部150および復元部160を同一の装置が有している必要は無い。別々の装置が、圧縮部150、復元部160をそれぞれ備えていても構わない。
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。例えば、圧縮部150の処理は、記憶部140に入力ファイル141が格納されたことを契機として自動的に実行されるものと説明したが、これに限定されるものではない。圧縮部150の処理は、記憶部140に入力ファイル141が格納された後に、手動的に開始されるようにしても良い。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、戻り距離閾値表142は、入力文字列Sに含まれる各文字に対応付けて、出現数と、戻り距離閾値とを保持するものと説明したが、これに限定されるものではない。戻り距離閾値表142は、入力文字列Sに含まれる各文字に対応付けて、戻り距離閾値のみを保持しても良い。
また、本実施例では、データ圧縮復元装置100が文字データを処理対象する場合を説明したが、これに限定されるものではない。例えば、データ圧縮復元装置は、画像データを処理対象としても良い。
また、本実施例では、文字列変換部152が置換履歴表143のオフセットと戻り距離とのペアを1バイトに格納することで、置換履歴表143を記憶部140に格納する場合を説明したが、これに限定されるものではない。例えば、文字列変換部152は、可変長符号を用いて、置換履歴表143を記憶部140に格納するようにしても良い。
例えば、文字列変換部152は、可変長符号であるワイル符号を用いて、置換履歴表143を記憶部140に格納する。ワイル符号は、任意の整数を、数値の大きさに応じたビット長で表現する可変長符号である。例えば、整数「1〜4」は、ワイル符号を用いると「0xx」と3バイトで表現される。また、整数「5〜8」は、ワイル符号を用いると「10xxx」と5バイトで表現される。また、整数「9〜16」は、ワイル符号を用いると「110xxxx」と7バイトで表現される。また、整数「17〜32」は、ワイル符号を用いると「1110xxxxx」と9バイトで表現される。なお、「x」は、0または1である。
図15に示した例では、文字列変換部152は、置換履歴表143の1行目のオフセット「8」を5ビットに格納し、戻り距離「4」を3ビットに格納する。また、文字列変換部152は、2行目のオフセット「1」を3ビットに格納し、戻り距離「7」を5ビットに格納する。また、文字列変換部152は、3行目のオフセット「7」を5ビットに格納し、戻り距離「2」を3ビットに格納する。つまり、文字列変換部152は、図15に示す置換履歴表143を24ビット(3バイト)のデータ量で格納する。
オフセットと戻り距離とのペアを1バイトに格納する場合には、文字列変換部152が記憶部140に格納可能なオフセットの数値や戻り距離の数値には、自ら制限があった。例えば、オフセットを4ビットに格納する場合には、文字列変換部152が格納可能なオフセットの数値は、「0〜15」に限られていた。これに対して、可変長符号を用いる場合には、数値の大きさに応じたビット長で記憶部140に格納する。このため、データ圧縮復元装置100は、オフセットや戻り距離の数値の大きさに関わらず、置換履歴表143を記憶部140に記憶することができる。
また、上述の実施例で説明したデータ圧縮復元装置100等の処理は、予め用意されたプログラムを各種のコンピュータで実行することによって実現することもできる。ここで、図24を用いて、上記の実施例で説明したデータ圧縮復元装置100による処理と同様の機能を実現する圧縮復元プログラムを実行するコンピュータの一例を説明する。図24は、圧縮復元プログラムを実行するコンピュータの一例を示す図である。
図24に示すように、データ圧縮復元装置100として機能するコンピュータ200は、各種演算処理を実行するCPU(Central Processing Unit)201と、ユーザからのデータの入力を受け付ける入力装置202と、モニタ203を有する。また、コンピュータ200は、記憶媒体からプログラム等を読み取る媒体読み取り装置204と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置205を有する。また、コンピュータ200は、各種情報を一時記憶するRAM(Random Access Memory)206と、ハードディスク装置207を有する。各装置201〜207は、バス208に接続される。
ハードディスク装置207は、上述したデータ圧縮復元装置100の機能と同様の機能を発揮する圧縮プログラム207aと、復元プログラム207bと、各種データ207cとを記憶する。各種データ207cは、図1に示した入力ファイル141、戻り距離閾値表142、置換履歴表143、出力ファイル144等に対応する。なお、圧縮プログラム207aと、復元プログラム207bと、各種データ207cとを適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
そして、CPU201が圧縮プログラム207aをハードディスク装置207から読み出してRAM206に展開することにより、圧縮プログラム207aは、圧縮プロセス206aとして機能する。この圧縮プロセス206aは、図1に示した圧縮部150に対応する。
CPU201が復元プログラム207bをハードディスク装置207から読み出してRAM206に展開することにより、復元プログラム207bは、復元プロセス206bとして機能する。この復元プロセス206bは、図1に示した復元部160に対応する。また、CPU201は、ハードディスク装置207から各種データ207cを読み出して、RAM206に格納する。
圧縮プロセス206aは、各種データ206cに含まれる入力ファイルに対して圧縮処理を実行する。復元プロセス206bは、各種データ206cに含まれる圧縮済みの文字列を、置換履歴表に基づいて復元する。
なお、圧縮プログラム207aおよび復元プログラム207bについては、必ずしも最初からハードディスク装置207に記憶させておく必要はない。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の記憶媒体」に各プログラムを記憶させておく。そして、コンピュータ200がこれらから各プログラムを読み出して実行するようにしても良い。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルと、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定部と、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理部と
を備えたことを特徴とする圧縮装置。
(付記2)データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持する圧縮装置が、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定ステップと、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理ステップと
を実行することを特徴とする圧縮方法。
(付記3)データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持するコンピュータに、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定手順と、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理手順と
を実行させることを特徴とする圧縮プログラム。
(付記4)付記1に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出部と、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定部と、
前記データ判定部によって判定された同一の組のデータを入れ替えることでデータ列を復元する復元部と
を備えたことを特徴とする復元装置。
(付記5)復元装置が、
付記1に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出ステップと、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定ステップと、
前記データ判定ステップによって判定された同一の組のデータを入れ替えることでデータ列を復元する復元ステップと
を実行することを特徴とする復元方法。
(付記6)コンピュータに、
付記1に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出手順と、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定手順と、
前記データ判定手順によって判定された同一の組のデータを入れ替えることでデータ列を復元する復元手順と
を実行させることを特徴とする復元プログラム。