(57)【特許請求の範囲】
【請求項１】
入力データの複数の要素をローテーションして複数の配列要素を生成し、該複数の配列要素を所定の順序で整列するデータ整列装置であって、
前記各配列要素を構成する複数のシンボルに対して、先頭のシンボルから順に注目し、その注目位置にある複数の配列要素のシンボルと、それらシンボルが出現する頻度とを含む頻度テーブルを作成するテーブル作成手段と、
前記頻度テーブルに従って前記複数の配列要素の順序を交換するマルチスワップ手段と、
前記マルチスワップ処理により配列された配列要素に対して、前記各配列要素の注目位置のシンボルに基づいて、前記配列要素を同一のシンボルを含むグループに分類するグループ分け手段と、
前記分類された各グループに対して前記テーブル作成手段、前記マルチスワップ手段及び前記グループ分け手段による各処理を含む第１の整列処理を、回帰的にかつ各グループについて並列的に実行する回帰実行手段と、
を備えていることを特徴とするデータ整列装置。
【請求項２】
請求項１に記載のデータ整列装置において、
前記配列要素の数に基づいて、要素の数が所定数よりも多い場合に前記第１の整列処理を選択し、前記要素の数が所定数よりも少ない場合に前記第１の整列処理とは異なる第２の整列処理を選択する選択手段を含むことを特徴とするデータ整列装置。
【請求項３】
請求項１又は２に記載のデータ整列装置において、
前記マルチスワップ手段は、
移動すべき配列要素を示すインデックスを初期化する初期化手段と、
前記インデックスにて示される配列要素を第１のバッファに格納する第１の格納手段と、
前記第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、前記配列要素の移動先を算出する移動先決定手段と、
前記決定手段の決定結果に基づいて、移動不要か否かを判断する移動判断手段と、
前記判断結果に基づいて、移動が必要な場合に、要素を移動させる移動手段と、
前記判断結果に基づいて、移動が不要な場合に、バッファの内容を元の配列要素の位置に格納する第２の格納手段と、
前記インデックスに基づいて、前記移動すべき配列要素が最終の要素か否かを判断する最終判断手段と、
前記最終判断結果に基づいて、最終の要素ではない場合に前記インデックスをインクリメントする加算手段と、
を備え、
前記第１の格納手段から前記最終判断手段までの各手段を繰り返し実施するようにしたことを特徴とするデータ整列装置。
【請求項４】
請求項３に記載のデータ整列装置において、
前記移動先決定手段は、
前記頻度テーブルに基づいて、第１のバッファに格納した配列要素のシンボルのうち、注目位置のシンボルの頻度と当該グループの先頭要素に対するインデックスに基づいて移動先を算出する算出手段と、
前記シンボルの頻度をディクリメントする減算手段と、
を備えることを特徴とするデータ整列装置。
【請求項５】
請求項３に記載のデータ整列装置において、
前記移送先決定手段にて算出した移動先の配列要素を第２バッファへ待避する待避手段と、
前記第１バッファの配列要素を前記移動先へ格納する格納手段と、
前記第２バッファへ待避した配列要素を第１バッファに転送して次に移動すべき要素とする転送手段と、
を更に備えることを特徴とするデータ整列装置。
【請求項６】
複数の符号化手段による符号化処理を直列的に実施して入力データのデータ量を圧縮する圧縮装置において、前記各符号化手段による符号化処理の間の少なくとも１つについて、請求項１に記載のデータ整列装置によるデータ整列処理を実施するようにしたことを特徴とする圧縮装置。
【請求項７】
請求項６に記載の圧縮装置において、前記符号化手段は、前記データ整列手段によるデータ整列処理の次に、同一データが近接して局所的に存在する冗長性の高いデータ列に対して有効な符号化処理を実施するようにしたことを特徴とする圧縮装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデータ整列方法、位置交換方法、圧縮方法、データ整列装置、位置交換装置、圧縮装置及び記録媒体に関するものである。
【０００２】
【従来の技術】
近年、通信網の発達と、インターネット技術や分散ソフトウェア技術の進歩により、システム間の通信情報量は増大の一途をたどっている。そのため、通信効率の改善（通信時間の短縮）や、記憶領域の削減等を目的としたデータ圧縮技術が注目されている。データ圧縮には、非可逆符号化と可逆符号化とがある。非可逆符号化は、若干の情報損失を許容して符号化を行うものであり、主に画像ファイルや音声ファイル等を符号化する場合に使用される。可逆符号化は、ディジタル情報を忠実に符号化するものであり、文章ファイルや実行形式ファイル等を符号化する場合に使用される。
【０００３】
データ圧縮は、データの冗長な部分を見つけ、それのうち数の多い冗長部分を簡素な表現に変換する。これにより、ファイル全体のサイズを小さくする。この冗長な部分を見つけるために、データの配列を並び替えるソートを用いるものがある。
【０００４】
ソートは、データを所定のキーにより並び替える。この並び替えられたデータには、同じコードのデータが連続する部分、すなわち、冗長な部分が多く含まれている。従って、この冗長な部分を少ないバイト数のデータで置き換えることにより、ファイル全体のサイズを小さくするわけである。
【０００５】
【発明が解決しようとする課題】
しかしながら、データの圧縮率と、それを行うために必要とする処理時間及び処理に必要なリソース（主としてメモリ容量）は、背反関係にある。換言すれば圧縮率を高めることにより、処理時間の長期化を招くとともに、大容量のメモリが必要となる。
【０００６】
特に、ソート処理の処理時間は、データ量に対して指数関数的に増加し、また、ソート処理においては、その処理の複雑さから大容量のメモリを必要とする。例えば、クイックソートやヒープソート等の従来からある整列法を用いた処理は、大容量のメモリを必要とするとともに、処理時間の長期化を招いている。従って、メモリ容量の小さなパーソナルコンピュータでは、圧縮率の高いデータを短時間で処理することができないという問題がある。
【０００７】
本発明は上記問題点を解決するためになされたものであって、その目的は、処理の高速化とメモリの使用量を低減することができるデータ整列方法、位置交換方法、圧縮方法、データ整列装置、位置交換装置、圧縮装置及び記録媒体を提供することにある。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、第１の発明では、入力データの複数の要素をローテーションして複数の配列要素を生成し、該複数の配列要素を所定の順序で整列するデータ整列方法であって、前記複数の配列要素のシンボルに対して各配列の先頭から順番に注目し、その注目位置のシンボルに基づいて前記複数の配列要素を複数のグループに分け、各グループの配列要素を整列する第１の整列処理を含み、その整列後の配列に対して前記第１の整列処理を回帰的に実施するようにしたことをその要旨としている。
【０００９】
また、第２の発明では、第１のデータ整列方法において、前記配列要素の数に基づいて、要素の数が所定数よりも多い場合に前記第１の整列方法を選択し、前記要素の数が所定数よりも少ない場合に前記第１の整列方法とは異なる第２の整列処理を選択する選択処理を含むことをその要旨としている。
【００１０】
さらに、第３の発明では、第１の発明のデータ整列方法において、前記第１の整列処理は、前記各配列要素を構成する複数のシンボルに対して、先頭のシンボルから順に着目し、その注目位置にある複数の配列要素のシンボルと、それらシンボルが出現する頻度を含む頻度テーブルを作成するテーブル作成処理と、前記頻度テーブルに従って前記複数の配列要素の順序を交換するマルチスワップ処理と、前記マルチスワップ処理により配列された配列要素に対して、前記各配列要素の注目位置のシンボルに基づいて、前記配列要素を同一のシンボルを含むグループに分類するグループ分け処理と、前記分類された各グループに対して、それぞれ前記第１の整列処理を回帰的に実行する回帰実行処理とを含むことをその要旨としている。
【００１１】
併せて、第４の発明では、第３の発明のデータ整列方法において、前記マルチスワップ処理は、移動すべき配列要素を示すインデックスを初期化する初期化処理と、前記インデックスにて示される配列要素を第１のバッファに格納する第１の格納処理と、前記第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、前記配列要素の移動先を算出する移動先決定処理と、前記決定処理の決定結果に基づいて、移動不要か否かを判断する移動判断処理と、前記判断結果に基づいて、移動が必要な場合に、要素を移動させる移動処理と、前記判断結果に基づいて、移動が不要な場合に、バッファの内容を元の配列要素の位置に格納する第２の格納処理と、前記インデックスに基づいて、前記移動すべき配列要素が最終の要素か否かを判断する最終判断処理と、前記最終判断結果に基づいて、最終の要素ではない場合に前記インデックスをインクリメントする加算処理とを含み、前記第１の格納処理から前記最終判断処理までの各処理を繰り返し実施するようにしたことをその要旨としている。
【００１２】
加えて、第５の発明では、第４の発明のデータ整列方法において、前記移動先決定処理は、前記頻度テーブルに基づいて、第１のバッファに格納した配列要素のシンボルのうち、注目位置のシンボルの頻度と当該グループの先頭要素に対するインデックスに基づいて移動先を算出する算出処理と、前記シンボルの頻度をディクリメントする減算処理とを含むことをその要旨としている。
【００１３】
また、第６の発明では、第４の発明のデータ整列方法において、前記移送先決定手段にて算出した移動先の配列要素を第２バッファへ待避する待避処理と、前記第１バッファの配列要素を前記移動先へ格納する格納処理と、前記第２バッファへ待避した配列要素を第１バッファに転送して次に移動すべき要素とする転送処理とを含むことをその要旨としている。
【００１４】
さらに、第７の発明では、前記複数の配列要素を所定の順序で並び替えるために前記複数の配列要素の位置を交換する位置交換方法であって、移動すべき配列要素を示すインデックスを初期化する初期化処理と、前記インデックスにて示される配列要素を第１のバッファに格納する第１の格納処理と、前記第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、前記配列要素の移動先を算出する移動先決定処理と、前記決定処理の決定結果に基づいて、移動不要か否かを判断する判断処理と、前記判断結果に基づいて、移動が必要な場合に、要素を移動させる移動処理と、前記判断結果に基づいて、移動が不要な場合に、バッファの内容を元の配列要素の位置に格納する第２の格納処理と、前記インデックスに基づいて、前記移動すべき配列要素が最終の要素か否かを判断する最終判断処理と、前記最終判断結果に基づいて、最終の要素ではない場合に前記インデックスをインクリメントする加算処理とを含み、前記第１の格納処理から前記最終判断処理までの各処理を繰り返し実施するようにしたことをその要旨としている。
【００１５】
併せて、第８の発明では、複数の符号化処理を直列的に実施して入力データのデータ量を圧縮する圧縮方法において、前記複数の符号化処理の間の少なくとも１つにおいて、第１の発明のデータ整列処理を実施するようにしたことをその要旨としている。
【００１６】
加えて、第９の発明では、第８の発明の圧縮方法において、前記データ整列処理の次に、同一データが近接して局所的に存在する冗長性の高いデータ列に対して有効な符号化処理を実施するようにしたことをその要旨としている。
【００１７】
また、第１０の発明では、入力データの複数の要素をローテーションして複数の配列要素を生成し、該複数の配列要素を所定の順序で整列するデータ整列装置であって、前記複数の配列要素のシンボルに対して各配列の先頭から順番に注目し、その注目位置のシンボルに基づいて前記複数の配列要素を複数のグループに分け、各グループの配列要素を整列する第１の整列手段を含み、その整列後の配列に対して前記第１の整列手段を回帰的に実施するようにしたことをその要旨としている。
【００１８】
さらに、第１１の発明では、第１０の発明のデータ整列装置において、前記配列要素の数に基づいて、要素の数が所定数よりも多い場合に前記第１の整列装置を選択し、前記要素の数が所定数よりも少ない場合に前記第１の整列装置とは異なる第２の整列手段を選択する選択手段を含むことをその要旨としている。
【００１９】
併せて、第１２の発明では、第１０の発明のデータ整列装置において、前記第１の整列手段は、前記各配列要素を構成する複数のシンボルに対して、先頭のシンボルから順に着目し、その注目位置にある複数の配列要素のシンボルと、それらシンボルが出現する頻度を含む頻度テーブルを作成するテーブル作成手段と、前記頻度テーブルに従って前記複数の配列要素の順序を交換するマルチスワップ手段と、前記マルチスワップ処理により配列された配列要素に対して、前記各配列要素の注目位置のシンボルに基づいて、前記配列要素を同一のシンボルを含むグループに分類するグループ分け手段と、前記分類された各グループに対して、それぞれ前記第１の整列手段を回帰的に実行する回帰実行手段とを含むことをその要旨としている。
【００２０】
加えて、第１３の発明では、第１２の発明のデータ整列装置において、前記マルチスワップ手段は、移動すべき配列要素を示すインデックスを初期化する初期化手段と、前記インデックスにて示される配列要素を第１のバッファに格納する第１の格納手段と、前記第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、前記配列要素の移動先を算出する移動先決定手段と、前記決定手段の決定結果に基づいて、移動不要か否かを判断する移動判断手段と、前記判断結果に基づいて、移動が必要な場合に、要素を移動させる移動手段と、前記判断結果に基づいて、移動が不要な場合に、バッファの内容を元の配列要素の位置に格納する第２の格納手段と、前記インデックスに基づいて、前記移動すべき配列要素が最終の要素か否かを判断する最終判断手段と、前記最終判断結果に基づいて、最終の要素ではない場合に前記インデックスをインクリメントする加算手段とを含み、前記第１の格納手段から前記最終判断手段までの各手段を繰り返し実施するようにしたことをその要旨としている。
【００２１】
また、第１４の発明では、第１３の発明のデータ整列装置において、前記移動先決定手段は、前記頻度テーブルに基づいて、第１のバッファに格納した配列要素のシンボルのうち、注目位置のシンボルの頻度と当該グループの先頭要素に対するインデックスに基づいて移動先を算出する算出手段と、前記シンボルの頻度をディクリメントする減算手段とを含むことをその要旨としている。
【００２２】
さらに、第１５の発明では、第１３の発明のデータ整列装置において、前記移送先決定手段にて算出した移動先の配列要素を第２バッファへ待避する待避手段と、前記第１バッファの配列要素を前記移動先へ格納する格納手段と、前記第２バッファへ待避した配列要素を第１バッファに転送して次に移動すべき要素とする転送手段とを含むことをその要旨としている。
【００２３】
併せて、第１６の発明では、前記複数の配列要素を所定の順序で並び替えるために前記複数の配列要素の位置を交換する位置交換装置であって、移動すべき配列要素を示すインデックスを初期化する初期化手段と、前記インデックスにて示される配列要素を第１のバッファに格納する第１の格納手段と、前記第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、前記配列要素の移動先を算出する移動先決定手段と、前記決定手段の決定結果に基づいて、移動不要か否かを判断する判断手段と、前記判断結果に基づいて、移動が必要な場合に、要素を移動させる移動手段と、前記判断結果に基づいて、移動が不要な場合に、バッファの内容を元の配列要素の位置に格納する第２の格納手段と、前記インデックスに基づいて、前記移動すべき配列要素が最終の要素か否かを判断する最終判断手段と、前記最終判断結果に基づいて、最終の要素ではない場合に前記インデックスをインクリメントする加算手段とを含み、前記第１の格納手段から前記最終判断手段までの各手段を繰り返し実施するようにしたことをその要旨としている。
【００２４】
加えて、第１７の発明では、複数の符号化手段を直列的に実施して入力データのデータ量を圧縮する圧縮装置において、前記複数の符号化手段の間の少なくとも１つにおいて、第１０の発明のデータ整列手段を実施するようにしたことをその要旨としている。
【００２５】
また、第１８の発明では、第１７の発明の圧縮装置において、前記データ整列手段の次に、同一データが近接して局所的に存在する冗長性の高いデータ列に対して有効な符号化手段を実施するようにしたことをその要旨としている。
【００２６】
さらに、第１９の発明では、第１から９のいずれかの発明の方法における処理を含むプログラムデータを記録した記録媒体をその要旨としている。
【００２７】
従って、第１，１０に記載の発明によれば、複数の配列要素のシンボルに対して各配列の先頭から順番に注目し、その注目位置のシンボルに基づいて複数の配列要素を複数のグループに分け、各グループの配列要素を整列する第１の整列処理を回帰的に実施することで、処理時間が短くなる。
【００２８】
また、第２，１１に記載の発明によれば、配列要素の数に基づいて、要素の数が所定数よりも多い場合に第１の整列処理（手段）、又は要素の数が所定数よりも少ない場合に第１の整列方法とは異なる第２の整列処理（手段）を選択することで、配列要素の数に応じた最適な処理により処理時間が短くなる。
【００２９】
さらに、第３，１２に記載の発明によれば、頻度テーブルを作成し、その頻度テーブルに基づいて複数の配列要素の順番を交換することで、処理時間が短くなる。
【００３０】
併せて、第４，１３に記載の発明によれば、第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、配列要素の移動先を算出し、その算出結果に基づいて配列要素を移動させることで、配列要素を比較することなく配列位置の交換を行うことができる。
【００３１】
加えて、第５，１４に記載の発明によれば、頻度テーブルに基づいて、第１のバッファに格納した配列要素のシンボルのうち、注目位置のシンボルの頻度と当そのグループの先頭要素に対するインデックスに基づいて容易に移動先が算出される。
【００３２】
また、第６，１５に記載の発明によれば、算出した移動先の配列要素を第２バッファへ待避した後、第１バッファの配列要素を移動先へ格納し、第２バッファへ待避した配列要素を第１バッファに転送して次に移動すべき要素とすることで、メモリの使用量が少なくなる。
【００３３】
さらに、第７，１６に記載の発明によれば、第１のバッファに格納した配列要素の注目位置のシンボルに基づいて、配列要素の移動先を算出し、その算出結果に基づいて配列要素を移動させることで、配列要素を比較することなく配列位置の交換を行うことができる。
【００３４】
併せて、第８，１７に記載の発明によれば、複数の符号化処理の間の少なくとも１つにおいて、第１の発明のデータ整列処理を実施することで、圧縮時間が短くなる。
【００３５】
加えて、第９，１８に記載の発明によれば、データ整列処理の次に、同一データが近接して局所的に存在する冗長性の高いデータ列に対して有効な符号化処理を実施することで、圧縮率が高くなる。
【００３６】
また、第１９に記載の発明によれば、第１から９の発明のいずれかに記載の方法における処理を含むプログラムデータが、記録媒体により容易に提供される。
【００３７】
【発明の実施の形態】
以下、本発明を具体化した一実施の形態を図１〜図１７に従って説明する。
【００３８】
図１（ａ）は圧縮ユニット１２等を示す。このユニット１２は、記憶媒体１１に記憶されたデータ（シンボル）Ｄ１を入力し、そのデータＤ１を後述する圧縮方式により符号化する。その符号化処理において、ユニット１２は、処理中に発生するデータＤ２（ソート中のデータ、変数等のデータを含む）を作業メモリ１３に格納する。ユニット１２は、符号データを圧縮データＤ３として記録再生装置、通信装置等の中間媒体１４に出力する。
【００３９】
図１（ｂ）は伸長ユニット１５等を示す。このユニット１５は、中間媒体１４から圧縮データＤ４の供給を受ける。ユニット１５は、圧縮データＤ４を圧縮ユニット１２とは逆の処理により復号化する。その復号化処理において、ユニット１５は、処理中に発生するデータＤ５（ソート中のデータ、変数等のデータを含む）を作業メモリ１３に格納する。ユニット１５は、復号データを伸長データＤ６として記憶媒体１１に出力する。
【００４０】
上記圧縮ユニット１２及び伸長ユニット１５は、データ処理装置によるソフトウェアの実行、又はハードウェアモジュールにより実現される。図２は、圧縮ユニット１２及び伸長ユニット１５を実現するためのデータ処理装置の構成を示すブロック図である。本実施の形態において、データ処理装置は、パーソナルコンピュータによって構成される。
【００４１】
データ処理装置２１は、中央処理装置（以下、ＣＰＵという）２２、メモリ２３、ハードディスク２４、表示器２５、キーボード／マウスを含む入力装置２６、及び補助記憶装置２７を備え、それらはバス２８によって相互に接続されている。ハードディスク２４、表示器２５、入力装置２６及び補助記憶装置２７は、それぞれインタフェース回路を含んでおり、そのインタフェース回路を介してデータの授受を行うようになっている。
【００４２】
ハードディスク２４には、図３に示すデータ圧縮処理のプログラムデータ、図４に示すデータ伸長処理のプログラムデータが予め記憶されている。データ処理装置２１は、ＣＤ−ＲＯＭ，ＤＶＤ−ＲＯＭ，ＭＯ，ＦＤ等のコンピュータ読み取り可能な記録媒体２９によりプログラムデータの提供を受ける。記録媒体２９は、補助記録装置２７にセットされ、プログラムデータはその補助記録装置２７により記録媒体２９から読み出され、バス２８を介してハードディスク２４に転送された後、そこに記憶される。図２中のＣＰＵ２２は、入力装置２６の操作に基づいて起動されると、図３、図４に示されるステップに従ってデータ圧縮処理／データ伸長処理を実行する。
【００４３】
次に、データ圧縮処理／データ伸長処理について詳述する。先ず、データ圧縮処理について、図３のフローチャートに従って説明する。
【００４４】
ステップＳ１はデータ指定処理（データ指定手段）であり、ＣＰＵ２２は、入力装置２６の操作により指定されたデータを確認する。具体的には、ＣＰＵ２２は、入力装置２６としてキーボードにより処理するデータのファイル名を直接入力する、マウスによるクリック（ダブルクリック）やドラッグ・アンド・ドロップにより指定されるファイル名を入力する。そのデータが指定されると、ＣＰＵ２２は、ステップＳ１からステップＳ２へ移行する。
【００４５】
ステップＳ２はデータ解析処理（データ解析手段）であり、ＣＰＵ２２は、ステップＳ１において指定されたデータの解析を行う。その結果、圧縮可能なデータと判定した場合、ＣＰＵ２２は、次のステップＳ３へ移行する。
【００４６】
ステップＳ３はデータの読込処理（読み込み手段）であり、ＣＰＵ２２は、指定されたファイルのデータを部分的に読み込む。このとき読み込むデータの量は、例えば１ブロック（＝５１２バイト）等であり、装置の構成、インタフェース等の回路の構成や、処理すべきデータ全体の長さやデータの文脈等の、処理すべきデータの属性によって設定される。尚、読み込むデータ量は、例えば１回目は１ブロック５１２バイト、２回目は１ブロック１０２４バイト、３回目は１ブロック２５６バイト、等のように動的に変化しうるものである。そして、データの部分的な読み込みを終了した後、ＣＰＵ２２は続くステップＳ４へ移行する。
【００４７】
ステップＳ４は一次符号化処理（一次符号化圧縮手段）であり、ＣＰＵ２２は、読み込んだデータを符号化する一次圧縮を行う。ことのき、ＣＰＵ２２は、ランレングス符号処理を一次符号化処理として実施する。ランレングス符号化は、符号化すべきデータ中で同じ文字が繰り返されるような長い連（ラン）の冗長性を除くことで圧縮する符号化理論であり、長い連が多く含まれている場合には圧縮効果が高い圧縮方法である。ＣＰＵ２２は、一次符号化処理を終了した後、ステップＳ５へ移行する。
【００４８】
ステップＳ５はブロックソート処理（ブロックソート手段）であり、ＣＰＵ２２は、次のステップＳ６におけるＭＴＦ(Move-to-Front)処理を効果的に働かせるために入力データをブロックソートし、入力データの配列に対する変換処理を行う。そして、ＣＰＵ２２は、ブロックソート処理を終了すると、ステップＳ５からステップＳ６へ移行する。
【００４９】
ここで、通常Ｎ個の要素のソート実行時間は、Ｏ(ＮlogＮ) のように対数的であるが、本実施の形態のブロックソート処理では、後述する特別な処理を施すことにより、Ｏ（Ｎ）のように線形な時間で、かつ、少ないメモリでソートできる。これは、従来のソート処理においてローテーションされた入力系列のソート処理を劇的に改善し、ブロックソーティングの原理上、極めて高価につくソート時間と作業領域の問題を解決する。尚、Ｏは、アルゴリズムの性能評価の記法を示す。
【００５０】
ステップＳ６は二次符号化処理（二次符号化手段）であり、ＣＰＵ２２は、ステップＳ５において変換したデータに対して、ＭＴＦ（Move-to-Front)処理を実施する。このＭＴＦ処理は「次のバイトデータは既出の文字順に出現確率が高いとみなして行う符号化であり、先のブロックソート処理で変換された「同一バイトデータが隣接して局在する」データの冗長性をさらに高めることができる符号化処理である。ＣＰＵ２２は、この符号化処理を終了した後、ステップＳ７へ移行する。
【００５１】
ステップＳ７は三次符号化処理（三次符号化手段）であり、ＣＰＵ２２は、ステップＳ６において符号化したデータに対して、ステップＳ４における処理と同様にランレングス符号処理を実施する。ＣＰＵ２２は、この符号化処理を終了すると、ステップＳ７からステップＳ８へと移行する。
【００５２】
ステップＳ８は四次符号化処理（四次符号化手段）であり、ＣＰＵ２２は、ステップＳ７において符号化したデータに対して、エントロピー符号処理を実施する。ここで、エントロピー符号化とは、圧縮すべきデータ長を無限大にしたとき、圧縮率がデータ圧縮の限界であるエントロピーに漸近する符号化方法の総称であり、具体的には「算術符号」、「Ｌｅｍｐｅｌ−Ｚｉｖ」、「ハフマン符号」をはじめとするアルゴリズムとその派生が存在する。それらのうち、速度と圧縮率とのバランスの観点から最適なアルゴリズムを採用する。このように、異なる手法の符号化を繰り返すことは、データの圧縮率を高めるために有効である。ＣＰＵ２２は、この符号化処理を終了すると、ステップＳ９へ移行する。
【００５３】
ステップＳ９は、圧縮データの書出処理であり、ＣＰＵ２２は、符号化した圧縮データＤ３をハードディスク２４上のファイルに書き込む。そして、ＣＰＵ２２は、圧縮データＤ３の書き込みを終了した後、ステップＳ１０へ移行する。
【００５４】
ステップＳ１０は圧縮終了判定処理（圧縮終了判定手段）であり、ＣＰＵ２２は、指定されたファイルの全てのデータに対する符号化処理を施したか否かを判断する。そして、未処理のデータが残っている場合、ＣＰＵ２２は、ステップＳ１０からステップＳ３に戻る。このようにして、ＣＰＵ２２は、ステップＳ３〜Ｓ１０の処理を繰り返し実行し、指定されたファイルの全データに対する圧縮処理を行う。そして、ＣＰＵ２２は、全データに対して圧縮処理を施すと、圧縮処理を終了する。
【００５５】
また、図４は、伸長処理のフローチャートを示している。この伸長処理は、図３の圧縮処理と逆にデータを処理する事により、符号化されたデータ（圧縮データ）を復号化する。すなわち、ステップＳ１１はデータ指定処理であり、ＣＰＵ２２は、入力装置２６を介して伸長すべきデータのファイル名を入力する。次に、ステップＳ１２において、ＣＰＵ２２は、伸長すべきデータの解析を行う。
【００５６】
続くステップＳ１３において、ＣＰＵ２２は、伸長すべきデータを部分的に読み込み、その読み込んだデータに対してステップＳ１４の一次復号処理（エントロピー復号処理）、ステップＳ１５の二次復号処理（ランレングス復号処理）、ステップＳ１６の逆ブロックソート処理、ステップＳ１７の三次復号処理（ＭＴＦ処理）、ステップＳ１８の四次復号処理（ランレングス復号処理）を順番に実施する。そして、ＣＰＵ２２は、ステップＳ１８における復号処理を終了した後、ステップＳ１９へ移行する。
【００５７】
ステップＳ１９は、伸長データの書出処理であり、ＣＰＵ２２は、復号化した伸長データＤ６ハードディスク２４上のファイルに書き込む。そして、ＣＰＵ２２は、伸長データＤ６の書き込みを終了すると、ステップＳ２０へ移行する。
【００５８】
ステップＳ２０は伸長終了判定処理（伸長終了判定手段）であり、ＣＰＵ２２は、指定されたファイルの全ての圧縮データに対する復号化処理を施したか否かを判断する。そして、未処理の圧縮データが残っている場合、ＣＰＵ２２は、ステップＳ２０からステップＳ１３に戻る。このようにして、ＣＰＵ２２は、ステップＳ１３〜Ｓ２０の処理を繰り返し実行し、指定されたファイルの全ての圧縮データに対する伸長処理を行う。そして、ＣＰＵ２２は、全圧縮データに対して伸長処理を施すと、伸長処理を終了する。
【００５９】
次に、図３のステップＳ５におけるブロックソート処理の詳細を、図５〜図１０のフローチャートに従って説明する。
【００６０】
図５は、ＭＬ（マルチレベル）ソート処理を示すフローチャートである。ステップＳ２１〜Ｓ２６は、図３のステップＳ５のサブステップである。すなわち、ステップＳ２１は初期化処理であり、図２のＣＰＵ２２は、ＭＬソート処理を行う上で必要となるメモリ領域のクリア及び変数の初期化を行う。ここで、ＣＰＵ２２は、変数iMax=１６,qMax=２５６とする。尚、各変数iMax,qMax に設定する値１６，２５６は、実験等により求められており、適宜変更されてもよい。
【００６１】
これらの変数iMax,qMax は、入力データに対して有効なソートの種別を判断するために用いられる。現在、様々な種類のソートが実施されているが、それらのうちの１つが全てのデータに対して完全に有効であるとは限らない。従って、入力データに応じてソートを使い分けることにより、よりメモリ容量が少なく短時間でソート処理を行うのである。
【００６２】
ＣＰＵ２２は、ステップＳ２１における初期化処理を終了すると、ステップＳ２１からステップＳ２２へ移行する。そのステップＳ２２は配列要素数算出処理（配列要素数算出手段）であり、ＣＰＵ２２は、入力データに基づいて生成される配列の要素数Ｎを算出する。入力データのデータ長が長いほど、その入力データに基づく配列の要素数Ｎも大きくなる。そして、配列の数が多いほど、ソート処理に時間がかかると共に、大容量のメモリを必要とする。
【００６３】
次なるステップＳ２３は選択処理（選択手段）であって、当該ステップＳ２３においてＣＰＵ２２は、要素数Ｎと変数iMax,qMax とを比較し、その比較結果に基づいて、使用するソートの種別を判断する。すなわち、ＣＰＵ２２は、要素数Ｎが変数iMax以下（Ｎ≦iMax）の場合、ステップＳ２３からステップＳ２４へ移行し、そのステップＳ２４において挿入ソートを実施する。
【００６４】
また、ＣＰＵ２２は、要素数Ｎが変数iMaxより大きく変数qMax以下（iMax＜Ｎ≦qMax）の場合、ステップＳ２３からステップＳ２５へ移行し、そのステップＳ２５においてクイックソートを実施する。さらに、ＣＰＵ２２は、要素数Ｎが変数qMaxよりも大きい（Ｎ＞qMax）の場合、ステップＳ２３からステップＳ２６へ移行し、そのステップＳ２６において、第１の整列処理としてのプログレッシブソートを実施する。
【００６５】
そのプログレッシブソートにおいて、ＣＰＵ２２は、このＭＬソート処理を再帰的読み出し（回帰的な実施）を行う。即ち、ＣＰＵ２２は、ＭＬソート処理中にこのＭＬソート処理をさらに実施するのである。これにより、入力データの全ての要素に対して処理を簡単に行うことができるとともに、そのＭＬソート処理のためのプログラムデータのデータ量を少なくすることができる。
【００６６】
そして、ＣＰＵ２２は、各ステップＳ２４，Ｓ２５，Ｓ２６におけるソート処理を終了した後、ＭＬソート処理を終了する。
【００６７】
次に、上記各ソート処理について説明する。但し、ここではステップＳ２４における挿入ソート、ステップＳ２５におけるクイックソートは、一般的であるため、それらの説明を省略し、ステップＳ２６におけるプログレッシブソートについてのみ詳述する。
【００６８】
図６は、プログレッシブソートを示すフローチャートである。ステップＳ３１，Ｓ３２は、図５のステップＳ２６のサブステップである。すなわち、ステップＳ３１は、変数初期化処理であり、ＣＰＵ２２は、次のステップＳ３２における処理に必要なメモリ領域、変数をクリアする。このとき、次の整列処理において注目する文字の位置を保持するための変数をクリアする。この文字の位置は、入力データにおいて、その入力データの先頭からの位置（オフセット）を示す。そして、ＣＰＵ２２は、初期化処理を終了した後、次のステップＳ３２へ移行する。
【００６９】
ステップＳ３２は整列処理（整列手段）であり、当該ステップＳ３２において、ＣＰＵ２２は、入力データに基づいて生成される配列の整列処理を実施する。このとき、ＣＰＵ２２は、変数Ｃが示す位置のシンボルに着目し、その着目したシンボルに基づいて整列処理を実施する。そして、ＣＰＵ２２は、整列処理を終了した後、本プログレッシブソートを終了する。
【００７０】
図７において、前記整列処理のフローチャートを示す。すなわち、ステップＳ４１〜Ｓ５０は、図６R>６のステップＳ３２のサブステップである。
【００７１】
ステップＳ４１はテーブル作成処理（テーブル作成手段）であり、ＣＰＵ２２は、入力データを繰り返しスキャンし、出現する要素の数を数え、入力データに出現する要素と各要素の出現数からなる頻度デーブルを作成する。このとき、ＣＰＵ２２は、各配列要素のうち、変数Ｃの値が示す位置のシンボルに着目して頻度テーブルを作成する。
【００７２】
ここで、図１１に示す「Ｙａｂａｄａｂａｄｏｏ」が入力データ３１として与えられているとする。この場合、ＣＰＵ２２は、シンボル「ａ」の出現回数をカウントする。そして、ＣＰＵ２２は、図１２に示す頻度テーブル３２を作成する。この頻度テーブル３２の領域には、シンボル「ａ」、そのシンボルの頻度「４」、そのシンボルのインデックス「０」が格納される。同様にしてＣＰＵ２２は、シンボル「ｂ」に対する頻度をカウントし、領域にシンボル「ｂ」、頻度「２」、インデックス「４」を格納する。この時、シンボル「ｂ」のインデックスは、シンボル「ａ」の開始をインデックス「０」とした場合に、そのインデックスにシンボル「ａ」の頻度の値を加算した値が、シンボル「ｂ」のインデックスの値となる。
【００７３】
同様にして、ＣＰＵ２２は、シンボル「ｄ」，「ｏ」，「Ｙ」に対する頻度及びインデックスを頻度テーブル３２に格納する。そして、頻度テーブル３２の作成を終了すると、ＣＰＵ２２はステップＳ４１からステップＳ４２へ移行する。
【００７４】
尚、図１１に示す入力データ３１は、要素の数Ｎが「１１」となる。従って、このような入力データ３１は、実際には図５のステップＳ２４における挿入ソートが用いられる。しかし、これは説明及び理解を簡単にするためになされたものであり、実際には要素数Ｎが前記した変数qMax(=２５６)よりも大きな入力データ３１が与えられるものである。
【００７５】
さらに、入力データ３１は、各要素が０から２５５の値で表されるため、実際に文字として表現される以上の要素を含む。しかし、ここでは入力データ３１に対する処理を判りやすくするために文字にて表現される要素のみを用いている。
【００７６】
さて、ステップＳ４２はマルチスワップ処理（マルチスワップ手段）であり、ＣＰＵ２２は、頻度テーブルに従って配列要素を整列する。その処理を終了した後、ＣＰＵ２２は次のステップＳ４３へ移行する。
【００７７】
ステップＳ４３は終了判定処理（終了判定手段）であり、ＣＰＵ２２は、配列要素のデータ長と、変数Ｃの値に「１」を加算した（＋１した値）、すなわち、現在着目するシンボルの次の位置を示す値とを比較する。データ長がＣ＋１以下（データ長≦Ｃ＋１）の場合、処理すべきシンボルがないことを示す。つまり、ステップＳ４３で肯定判定された場合、ＣＰＵ２２は、処理すべきシンボルがないとして、整列処理を終了する。
【００７８】
一方、データ長がＣ＋１よりも大きい場合、ＣＰＵ２２は処理すべきシンボルがあると判断し、ステップＳ４３からステップＳ４４へ移行する。そのステップＳ４４はグループ分け処理（グループ分け手段）であり、ＣＰＵ２２は、各配列要素の先頭から変数Ｃの値が示す位置のシンボルに基づいて、配列を複数のグループに分ける。このとき、各シンボルは通常１バイト（８ビット）で表されるため、ＣＰＵ２２は、８ビット（＝２５６）で表されるグループに配列の要素を分ける。
【００７９】
図１１の入力データ３１に対して、図１３に示すように、入力データの文字数−１回のローテーションを繰り返し行った１１個の要素からなる配列Ｓ[ｄ]が得られる。この配列Ｓ[ｄ]は、図１４（ａ）〜（ｅ）に示すように、データの先頭がシンボル「ａ」である４つの要素からなる第１グループ３３、シンボル「ｂ」の２つの要素からなる第２グループ３４、シンボル「ｄ」の２つの要素からなる第３グループ３５、シンボル「ｏ」の２つの要素からなる第４グループ３６、シンボル「Ｙ」の１つの要素からなる第５グループ３７に分けられる。このようにしてグループ分けを終了すると、ＣＰＵ２２は続くステップＳ４５へ移行する。
【００８０】
ステップＳ４５において、ＣＰＵ２２は、変数Ｃの値をインクリメント（＋１）する。さらに、ＣＰＵ２２は、分類された各グループを示すインデックスＧをクリア（Ｇ←０）する。そして、ＣＰＵ２２は、ステップＳ４６において、そのインデックスＧの値が８ビットで表される整数の最大値（＝２５５）以下か否かを判断する。すなわち、ＣＰＵ２２は、処理すべきグループが残っているか否かを判断するのである。処理すべきグループが残っていない場合、ＣＰＵ２２は整列処理を終了する。
【００８１】
一方、処理すべきグループが残っている場合、ＣＰＵ２２はステップＳ４７へ移行する。そのステップＳ４７において、ＣＰＵ２２は、インデックスＧの値で示されるグループの要素の数が０より多い（要素の数＞０）か否かを判断する。これは、ＣＰＵ２２がインデックスＧで示されるグループが存在するか否かを判断することである。
【００８２】
尚、一般に、整列処理は複数の要素に対して行われる。従って、ステップＳ４７において、ＣＰＵ２２は、インデックスＧの値で示されるグループの要素の数が２以上（要素の数≧２）か否かを判断するようにしてもよい。
【００８３】
すなわち、インデックスＧで示すグループが存在する場合、ＣＰＵ２２はステップＳ４７からステップＳ４８へ移行する。そのステップＳ４８は回帰実行処理（回帰実行手段）であり、インデックスＧの値で示すグループに対するマルチレベル（ＭＬ）ソート処理である。これは、図３のステップ５、つまり図５のＭＬソート処理を示す。ＣＰＵ２２は、ステップＳ４８において、ＭＬソート処理の再帰的呼び出し（回帰実行）を行う。そのＭＬソート処理を終了すると、ＣＰＵ２２は、ステップＳ４８からステップＳ４９へ移行する。そして、そのステップＳ４９において、ＣＰＵ２２は、次のグループに対する処理を行うため、グループを示すインデックスＧの値をインクリメント（＋１）する。そして、ＣＰＵ２２は、ステップＳ４９からステップＳ４６に移行する。
【００８４】
すなわち、ＣＰＵ２２は、ステップＳ４６からステップＳ４９の処理を繰り返し実行する。そして、再帰的に読み出されたＭＬソート処理におけるステップＳ４５において注目するシンボルの位置を示す変数Ｃをインクリメントすることにより、その再帰的呼び出しにより配列の全ての要素及び全てのグループを容易に処理することができる。
【００８５】
一方、ステップＳ４７においてインデックスＧで示すグループが存在しない場合、ＣＰＵ２２は、ステップＳ４９においてインデックスＧの値をインクリメント（＋１）する。そして、ＣＰＵ２２は、ステップＳ４６へ移り、次のグループに対する処理を行う。
【００８６】
さらに、図８は、マルチスワップ処理のフローチャートを示す。すなわち、ステップ５１〜Ｓ５９は、図７のステップ４２のサブステップである。
【００８７】
ステップＳ５１は初期化処理であって、ＣＰＵ２２は、移動すべき要素のインデックスＭを初期化（Ｍ←０）する。次に、ステップＳ５２は第１の格納処理（第１の格納手段）であり、当該ステップＳ５２においてＣＰＵ２２は、インデックスＭで指定される配列Ｓ[Ｍ]のデータを第１バッファoutBuff の領域に格納する。そして、ＣＰＵ２２は、ステップＳ５３において、第１バッファoutBuff の領域に格納したデータのうち、現在注目しているデータ（シンボル）を変数ｉの領域に格納する。
【００８８】
次に、ステップＳ５４は移動先決定処理（移動先決定手段）であり、当該ステップＳ５４においてＣＰＵ２２は、変数ｉの領域に格納したシンボルに基づいて、インデックスＭで示す配列Ｓ[Ｍ]の移動先を決定する。そして、ＣＰＵ２２は、決定した移動先を示すデータを変数ｄの領域に格納する。その格納を終了すると、ＣＰＵ２２は、ステップＳ５４からステップＳ５５へ移行する。
【００８９】
ステップＳ５５は移動判定処理（移動判定手段）であり、当該ステップＳ５５においてＣＰＵ２２は、インデックスＭの値と変数ｄに格納された値とを比較することにより、そのインデックスＭで示される配列の要素Ｓ[Ｍ]の移動が必要か否かを判断する。インデックスＭの値と変数ｄのそれが等しいことは、そのインデックスＭで示される配列の要素Ｓ[Ｍ]の位置がソート後も変わらない事を示す。
【００９０】
ＣＰＵ２２は、配列の移動が必要と判断した場合にはステップＳ５５からステップＳ５６へ移行し、そのステップＳ５６において移動処理を実施する。一方、移動が不要と判断した場合、ＣＰＵ２２は、ステップＳ５５からステップＳ５７へ移行する。
【００９１】
移動が必要と判断した場合について説明すると、ステップＳ５６は移動処理（移動手段）であり、ＣＰＵ２２は、現在注目している配列を格納する領域を空ける。具体的には、ＣＰＵ２２は、ステップＳ５４において決定した位置に格納された配列を別の位置の領域へ移動させる。これにより、現在注目している配列の要素Ｓ[Ｍ]を格納する領域が確保される。この移動処理を終了すると、ＣＰＵ２２はステップＳ５７へ移行する。
【００９２】
ステップＳ５７は第２の格納処理（第２の格納手段）であり、ＣＰＵ２２は、第１バッファoutBuff の内容、すなわち、そのとき注目している配列の要素Ｓ[Ｍ]を、変数ｄの値で示される位置の要素Ｓ(ｄ)として格納する。その格納を終了すると、ＣＰＵ２２はステップＳ５７からステップＳ５８へ移る。
【００９３】
ステップＳ５８は最終判断処理（最終判断手段）であり、ＣＰＵ２２は、インデックスＭで示される配列の要素Ｓ[Ｍ]がグループに含まれる最終の要素か否かを判断する。具体的には、ＣＰＵ２２は、インデックスＭの値と、頻度テーブル３２の領域に格納された要素数Ｎとを比較することにより判断する。最終の要素ではない場合、ＣＰＵ２２はステップＳ５８からステップＳ５９に移行する。そのステップＳ５９は加算処理（加算手段）であり、ＣＰＵ２２は、当該ステップＳ９においてインデックスＭをインクリメント（Ｍ←Ｍ＋１）する。そして、ＣＰＵ２２は、ステップＳ５９からステップＳ５２へ移行する。すなわち、ＣＰＵ２２は、インデックスＭが最終の要素を示すまでステップＳ５２からステップＳ５９を繰り返し実行する。
【００９４】
上記のマルチスワップ処理を図１４（ａ）の第１グループ３３を用いて説明すれば、上記のグループ分け処理により、各要素の先頭のシンボルに対する整列は完了している。この第１グループ３３に対して、グループ分け処理を再帰読み出しにて実行すると、先頭から２番目のシンボルに対するグループ分け処理を行う。その結果、第１グループ３３は、図１５（ａ）に示す第１サブグループ３３ａと、図１５（ｂ）に示す第２サブグループ３３ｂに分けられる。この第１，第２サブグループ３３ａ，３３ｂにより、先頭から２番目のシンボルまでソートが済んだことになる。
【００９５】
このようにして、各グループ３３〜３７に対してグループ分け処理を再帰読み出しにて実施する（回帰的に整列する）ことにより、図１３の配列の各要素を、図１６に示すように整列することができる。
【００９６】
図９は、移動先決定処理のフローチャートを示す。ステップＳ６１〜Ｓ６３は、図８のステップ５４のサブステップである。即ち、ステップＳ６１において、ＣＰＵ２２は、第１バッファoutBuff に格納されているデータのうち、着目するシンボルを変数ｉに格納する。次に、ステップＳ６２は算出処理（算出手段）であり、ＣＰＵ２２は、移動先の位置ｄを演算する。この演算において、変数ｉの値を示すシンボルをシンボルｉとすると、ＣＰＵ２２は、シンボルｉの頻度Ｆ[ｉ]、シンボルｉが属するグループの先頭要素のインデックスＡ[ｉ]に基づいて位置ｄ（＝Ｆ[ｉ]＋Ａ[ｉ]−１）を算出する。次に、ステップＳ６３は減算処理（減算手段）であり、ＣＰＵ２２は、後処理としてシンボルｉの頻度Ｆ[ｉ]を更新（Ｆ[ｉ]＝Ｆ[ｉ]−１）する。これは、次に同じシンボルに対する移動先が先のシンボルの移動先と重ならないようにするためである。
【００９７】
今、１つのシンボルに対する頻度Ｆ[ｉ]＝５、そのシンボルの先頭のインデックスＡ[ｉ]＝５である。これにより、そのシンボルの移動先ｄ＝９（＝５＋５−１）となる。次に同じシンボルに対する移動先を決定する場合、そのシンボルの頻度Ｆ[ｉ]＝４（＝５−１）であることから、そのシンボルの移動先ｄ＝８として決定される。
【００９８】
このようにして、シンボルを格納する位置が重ならないように移動先を決定する。１つのシンボルに対して移動先を決定すると、ＣＰＵ２２は、移動先決定処理を終了する。
【００９９】
図１０は、移動処理のフローチャートを示す。すなわち、ステップＳ７１〜Ｓ７３は、図８のステップＳ５６のサブステップである。
【０１００】
ステップＳ７１は待避処理（待避手段）であり、ＣＰＵ２２は、ステップＳ５４（図８）において決定した移動先の配列Ｓ［ｄ］のデータを第２バッファinBuffへ待避する。次に、ステップＳ７２は格納処理（格納手段）であり、ＣＰＵ２２は、現在注目している配列のデータ、つまり、出力バッファoutBuff の内容を、配列Ｓ［ｄ］の位置へ格納する。さらに次に、ステップＳ７３は転送処理（転送手段）としての後処理であり、ＣＰＵ２２は、当該ステップＳ７３において第２バッファinBuffへ待避したデータを第１バッファoutBuff へ格納する。これは、第２バッファinBuffへ待避した配列要素を次に移動すべき配列要素とするためである。そして、ＣＰＵ２２は、移動処理を終了する。上記のようにして入力データ３１（図１１参照）に基づく１１個の要素からなる配列をシンボルに従って整列した配列４１（図１６参照）を得ることができる。ここで注目すべき点は、以下の３点である。
（１）シンボルの大小比較を行っていない。
（２）各要素は、その位置における整列後に要素が属するグループを示す。
（３）各配列要素は、それぞれ１度だけ検査される。
【０１０１】
従って、一般的なソート処理のように、シンボル全てを比較する場合に比べて処理時間が極端に短くなる。そして、配列要素の並び替えにおいても、１つの配列要素を格納するための第２バッファinBuffを必要とするのみである。さらに、配列要素の各位置のシンボルの値、それらの頻度を格納するための領域のみをしようするため、動的に割り当てられるメモリ等のように、多くのメモリを必要としない。
【０１０２】
そして、この配列４１の各要素の最終のシンボルを、配列要素の順番に並べたデータ列４２（図１７R>７参照）と、入力データ３１を要素とする配列のインデックスの値「１１」が、図３のブロックソート処理の結果となる。
【０１０３】
図１７のデータ列４２は、シンボル「ｂ」，「ａ」，「ｏ」が局所的に連続している。この連続するシンボルを、図３のステップＳ６における符号化処理にて簡単なデータに置き換えることにより、データ列４２のデータ長を短くする、すなわち、データ圧縮を行うことができる。この要素の数Ｎ（＝１１）の入力データ３１において３つのシンボルが局所的に連続している。従って、実際の要素の数Ｎ（≧２５６）の入力データの場合には、さらに多くのシンボルが局所的に多くの数だけ連続することは容易に推測される。そのため、入力データの要素数が多いほどこのマルチレベルソートが他のソート方法に比べて有効であることは明らかである。以上詳述したように、本実施の形態によれば、以下の効果が奏される。
【０１０４】
（１）本実施の形態では、複数の配列要素のシンボルに対して各配列の先頭から順番に注目し、その注目位置のシンボルに基づいて複数の配列要素を複数のグループに分け、各グループの配列要素を整列する第１の整列処理を含み、その整列後の配列に対して第１の整列処理を回帰的に実施するようにした。その結果、各要素を比較することなく複数の配列要素をソートするため、複数の要素からなる複数の配列要素を、短時間でソートすることができる。これにより、入力データの圧縮時間を短縮することができる。
【０１０５】
（２）また、本実施の形態では、配列要素のインデックスに基づいてその配列要素の移動先を決定し、その配列要素に対して第１，第２のバッファoutBuff,inBuffを用いたマルチスワップ処理を実施するようにした。これにより、使用するバッファ量、すなわち、使用するメモリ２３の容量が少なくて済むため、大容量のメモリを必要とせず、ソート処理、圧縮処理にかかる費用を少なくすることができる。
【０１０６】
尚、本発明は上述した実施の形態の記載内容に限定されるものではなく、従って、発明の趣旨を逸脱しない範囲で、例えば次のように実施してもよい。
【０１０７】
（ａ）上記実施の形態の図１１に示す入力データ３１は、各要素が０から２５５の値で表されるため、ステップＳ４１のテーブル作成処理（テーブル作成手段）における図１２に示す頻度テーブル３２をＣＰＵ２２が作成する場合、頻度テーブル３２の要素の参照にシンボルそのものの値を利用することにより、一度のスキャンでテーブル作成を完了してもよい。具体的には、全てのシンボルが出現すると想定して、予めシンボル０からシンボル２５５の頻度数を格納する配列「Ｓ［ｉ］（ｉは０〜２５５までの値をとり、「Ｓ［ｉ］」とはシンボルｉの頻度を表現する）」を用意して、Ｓ［０］からＳ［２５５］の値を全て０に初期化した後、入力データ３１のスキャンを開始し、「Ｓ［現在のシンボルの値］←Ｓ［現在のシンボルの値］＋１」という処理を、入力データ３１のシンボルの総数回、現在のシンボルを１つずつずらしながら繰り返すことにより、入力データ３１を一度のスキャンを行うだけでテーブル作成を完了するのである。この方法によれば、繰り返し回数を減らすことができ、処理の高速化に貢献できる。
【０１０８】
（ｂ）上記実施の形態の図７に示すステップＳ４１のテーブル作成処理（テーブル作成手段）を実施した結果、図１２に示す頻度テーブル３２の頻度の合計が１である場合には、整列処理の必要がないため、ステップＳ４１の後に、整列処理の必要性を判定することによる終了判定処理（終了判定手段）を実施してもよい。この結果、図７に示すステップＳ４２のマルチスワップ処理（マルチスワップ手段）と、図７に示すステップＳ４３の終了判定処理（終了判定手段）とを省略できる可能性があるため、処理時間を短縮する機会があることが容易に推測される。
【０１０９】
（ｃ）図１６に示す配列４１の各要素の最終シンボルを、配列要素の順番に並べた図１７に示すデータ列４１と、図１１に示す入力データ３１の先頭のシンボルデータ列４１における位置「０」を、図３に示すブロックソート処理の結果としてもよい。
【０１１０】
（ｄ）図７に示すステップＳ４８の回帰実行処理（回帰実行手段）の呼び出しを行う場合、呼び出し先の処理は、別のＣＰＵが実施してもよい。これは、処理を並列的に実施することによる処理時間圧縮に大きく寄与することになる。
【０１１１】
【発明の効果】
以上詳述したように、本発明によれば、処理の高速化と、メモリの使用量の低減とを図ることができるという優れた効果を奏する。
【図面の簡単な説明】
【図１】（ａ）は圧縮ユニットのブロック図、（ｂ）は伸長ユニットのブロック図である。
【図２】一実施の形態におけるデータ処理装置を示す概略構成図である。
【図３】圧縮処理のフローチャートである。
【図４】伸長処理のフローチャートである。
【図５】マルチレベルソート処理のフローチャートである。
【図６】プログレッシブソートのフローチャートである。
【図７】整列処理のフローチャートである。
【図８】マルチスワップ処理のフローチャートである。
【図９】移動先決定処理のフローチャートである。
【図１０】移動処理のフローチャートである。
【図１１】入力データの説明図である。
【図１２】頻度テーブルの説明図である。
【図１３】配列の要素を示す説明図である。
【図１４】（ａ）〜（ｅ）は、１番目のシンボルによりグループ分けした配列要素を示す説明図である。
【図１５】（ａ），（ｂ）は、２番目のシンボルによりグループ分けした配列要素を示す説明図である。
【図１６】ブロックソート処理後の配列の各要素を示す説明図である。
【図１７】ブロックソート処理の結果を示す説明図である。
【符号の説明】
３１…入力データ、３２…頻度テーブル、Ｓ２６…第１の整列処理としてのプログレッシブソート、ｄ…要素、Ｓ[ｄ]…配列要素。
【図１】
0004152491.tif 000002
【図２】
0004152491.tif 000003
【図３】
0004152491.tif 000004
【図４】
0004152491.tif 000005
【図５】
0004152491.tif 000006
【図６】
0004152491.tif 000007
【図７】
0004152491.tif 000008
【図８】
0004152491.tif 000009
【図９】
0004152491.tif 000010
【図１０】
0004152491.tif 000011
【図１１】
0004152491.tif 000012
【図１２】
0004152491.tif 000013
【図１３】
0004152491.tif 000014
【図１４】
0004152491.tif 000015
【図１５】
0004152491.tif 000016
【図１６】
0004152491.tif 000017
【図１７】
0004152491.tif 000018