(57)【要約】【課題】プロセッサのレジスタ幅を効率的に活用することにより、データ復元の高速化を図ること。【解決手段】圧縮データｃｄＡは、圧縮元データと同一のデータであって、圧縮元データの復元に使用される参照先データの位置を示す。加えて、圧縮データｃｄＡは、参照先データのうち、レジスタ幅で分割して取得すべきデータの個数と、レジスタ幅で分割して取得せずに１バイト単位で順次取得すべき端数データ長と、を示す。情報処理装置１００は、圧縮データｃｄＡが示す位置から始まる参照先データを、圧縮データｃｄＡが示す個数分のレジスタ幅単位のデータと、圧縮データｃｄＡが示す端数データ長分の１バイト単位のデータと、に分割して、取得する。次に、情報処理装置１００は、取得した参照先データを、圧縮元データとして保存する。【選択図】図１
2014017629.tif 000002
【特許請求の範囲】
【請求項１】
所定長のレジスタを有するプロセッサに、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データのうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データから前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得し、
前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を前記所定の記憶領域に書き込む、
処理を実行させることを特徴とする復元プログラム。
【請求項２】
所定長のレジスタを有するプロセッサに、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得し、
前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む、
処理を実行させることを特徴とする復元プログラム。
【請求項３】
プロセッサに、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行させることを特徴とする圧縮プログラム。
【請求項４】
プロセッサに、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行させることを特徴とする圧縮プログラム。
【請求項５】
所定長のレジスタを有するプロセッサにより実行する復元装置であって、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部と、
前記圧縮データを前記圧縮データ列の中から検出する検出部と、
前記検出部によって検出された圧縮データに含まれている参照位置から始まる参照先データ列のうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データ列から前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得する取得部と、
前記取得部によって前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、前記取得部によって取得された第２のデータ列を前記所定の記憶領域に書き込む格納部と、
を有することを特徴とする復元装置。
【請求項６】
所定長のレジスタを有するプロセッサにより実行する復元装置であって、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定する特定部と、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部と、
前記圧縮データ列の中から、前記圧縮データを検出する検出部と、
前記検出部によって検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得する取得部と、
前記取得部によって取得された前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む格納部と、
を有することを特徴とする復元装置。
【請求項７】
プロセッサにより実行する圧縮装置であって、
データ列を記憶する記憶部と、
前記データ列の中から、先行データと、前記先行データと同一のデータである後続データと、を検出する検出部と、
前記検出部によって検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成する生成部と、
前記後続データを、前記生成部によって生成された圧縮データに置換した前記データ列を保存する保存部と、
を有することを特徴とする圧縮装置。
【請求項８】
プロセッサにより実行する圧縮装置であって、
データ列を記憶する記憶部と、
前記データ列の中から、先行データと、前記先行データと同一のデータである後続データと、を検出する検出部と、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定する特定部と、
前記検出部によって検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成する生成部と、
前記後続データを、前記生成部によって生成された圧縮データに置換した前記データ列を保存する保存部と、
を有することを特徴とする圧縮装置。
【請求項９】
所定長のレジスタを有するプロセッサが、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データ列のうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データ列から前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得し、
前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を前記所定の記憶領域に書き込む、
処理を実行することを特徴とする復元方法。
【請求項１０】
所定長のレジスタを有するプロセッサが、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得し、
前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む、
処理を実行することを特徴とする復元方法。
【請求項１１】
プロセッサが、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行することを特徴とする圧縮方法。
【請求項１２】
プロセッサが、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行することを特徴とする圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、復元プログラム、圧縮プログラム、復元装置、圧縮装置、復元方法、および圧縮方法に関する。
【背景技術】
【０００２】
従来、データ列を圧縮してデータ列のサイズを低減する圧縮技術がある。圧縮技術には、例えば、圧縮されたデータ列を圧縮元のデータ列に復元することができる可逆圧縮（ロスレス圧縮）技術がある。可逆圧縮技術には、例えば、「ＬＺ７７」という圧縮アルゴリズムを使用する圧縮技術や、「ＬＺＳＳ」という圧縮アルゴリズムを使用する圧縮技術がある。
【０００３】
上述した圧縮技術によるデータ列の圧縮においては、プロセッサは、データ列の中に同一のデータが出現する場合、後に出現するデータ（以下、後続データ）を、先に出現するデータ（以下、先行データ）の開始位置とデータ長とを示すデータに圧縮する。一方、上述した圧縮技術によるデータ列への復元においては、プロセッサは、圧縮データの中の圧縮データが示す位置にある先行データを１バイト単位で順次取得することにより、圧縮データを、先行データと同一データである後続データに復元する。
【０００４】
また、圧縮データ列の中から、同一データである先行データおよび後続データを探索する技術がある。また、他の圧縮技術として、音声・画像などのロスレス圧縮に使用されるエントロピー符号化を実行するゴロム・ライス（Ｇｏｌｏｍｂ−Ｒｉｃｅ）符号化技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−０９２７２５号公報
【特許文献２】特開２００９−１０５８３８号公報
【非特許文献】
【０００６】
【非特許文献１】井谷  宣子，吉田  茂，「Ｃ  ＭＡＧＡＺＩＮＥ」，ソフトバンククリエイティブ，２００４年，１０月号，１０６−１１０ページ
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術の圧縮データは、先行データの位置やデータ長を示しており、先行データをレジスタ幅単位で取得できるか否かについては示していない。そのため、プロセッサは、先行データを１バイト単位で順次取得することになる。従って、プロセッサは、レジスタ幅を有効活用できず、圧縮データの復元処理においてレジスタの使用効率が低減するという問題がある。
【０００８】
一方、プロセッサに、先行データをレジスタ幅単位で取得させて、レジスタ幅を活用させるには、プロセッサに、先行データのうち、レジスタ幅単位で処理できるデータの個数を算出させる必要がある。また、プロセッサに、算出させた個数を記憶装置に書き込んだり読み出したりする処理を実行させる必要がある。そのため、データ復元にかかる処理量や処理時間が増大するという問題がある。
【０００９】
本発明は、プロセッサのレジスタ幅を効率的に活用することにより、データ復元の高速化を図ることを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一側面によれば、所定長のレジスタを有するプロセッサによって、参照先となる非圧縮データの参照位置、所定長以上である非圧縮データの長さを所定長で除した商および剰余を有する圧縮データと、非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、圧縮データを検出し、検出された圧縮データに含まれている参照位置から始まる参照先データのうち、所定長に商を乗じた長さとなる第１のデータ列を所定長単位で取得するとともに、参照先データから第１のデータ列を除いた剰余分の長さとなる第２のデータ列を取得し、所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を所定の記憶領域に書き込む復元プログラム、復元装置、および復元方法が提案される。
【００１１】
また、本発明の一側面によれば、所定長のレジスタを有するプロセッサによって、所定の記憶領域での書込先の位置と、所定の記憶領域の先頭から所定長単位で区切られた複数の位置のうち、書込先より末尾側にあり、かつ、書込先の位置から所定長分の範囲内にある位置と、の区間長を特定し、参照先となる非圧縮データの参照位置、所定長以上である非圧縮データの長さから区間長を減じた長さを所定長で除した商および剰余を有する圧縮データと、非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、圧縮データを検出し、検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、区間長となる第１のデータ列と、所定長に商を乗じた長さとなる所定長単位の第２のデータ列と、剰余分の長さとなる第３のデータ列と、を取得し、第１のデータ列、第２のデータ列、および第３のデータ列を所定の記憶領域における書込先の位置から取得順に書き込む復元プログラム、復元装置、および復元方法が提案される。
【００１２】
また、本発明の一側面によれば、プロセッサによって、データ列を記憶する記憶部の中から、先行データと、先行データと同一のデータである後続データと、を検出し、検出された先行データの位置、所定長以上である先行データの長さを所定長で除した商および剰余を有する圧縮データを生成し、後続データを生成された圧縮データに置換したデータ列を保存する圧縮プログラム、圧縮装置、および圧縮方法が提案される。
【００１３】
また、本発明の一側面によれば、プロセッサによって、データ列を記憶する記憶部の中から、先行データと、先行データと同一のデータである後続データと、を検出し、データ列での後続データの位置と、データ列の先頭から所定長単位で区切られた複数の位置のうち、後続データの位置より末尾側にあり、かつ、後続データの位置から所定長分の範囲内にある位置と、の区間長を特定し、検出された先行データの位置、所定長以上である先行データの長さから区間長を減じた長さを所定長で除した商および剰余を有する圧縮データを生成し、後続データを生成された圧縮データに置換したデータ列を保存する圧縮プログラム、圧縮装置、および圧縮方法が提案される。
【発明の効果】
【００１４】
本発明の一側面によれば、プロセッサのレジスタ幅を効率的に活用することにより、データ復元の高速化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、圧縮データ列の復元処理の内容を示す説明図である。
【図２】図２は、実施の形態にかかる情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、実施例１にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例を示すブロック図である。
【図４】図４は、圧縮元データ列の一例を示す説明図である。
【図５】図５は、参照先データの探索方法の一例を示す説明図である。
【図６】図６は、実施例１にかかる圧縮ルールを示す説明図である。
【図７】図７は、圧縮されなかった非圧縮データの一例、および、図６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図（その１）である。
【図８】図８は、圧縮されなかった非圧縮データの一例、および、図６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図（その２）である。
【図９】図９は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その１）である。
【図１０】図１０は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その２）である。
【図１１】図１１は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その３）である。
【図１２】図１２は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その４）である。
【図１３】図１３は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その５）である。
【図１４】図１４は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その６）である。
【図１５】図１５は、図７〜図１４に示した判別ビット列および圧縮データ列の保存例を示す説明図である。
【図１６】図１６は、図７〜図１４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順を示すフローチャートである。
【図１７】図１７は、実施例１にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例を示すブロック図である。
【図１８】図１８は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その１）である。
【図１９】図１９は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その２）である。
【図２０】図２０は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その３）である。
【図２１】図２１は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その４）である。
【図２２】図２２は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その５）である。
【図２３】図２３は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その６）である。
【図２４】図２４は、図１８〜図２３に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順を示すフローチャートである。
【図２５】図２５は、実施例２にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例を示すブロック図である。
【図２６】図２６は、実施例２にかかる圧縮ルールを示す説明図である。
【図２７】図２７は、圧縮されなかった非圧縮データの一例、および、図２６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図（その１）である。
【図２８】図２８は、圧縮されなかった非圧縮データの一例、および、図２６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図（その２）である。
【図２９】図２９は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その１）である。
【図３０】図３０は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その２）である。
【図３１】図３１は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その３）である。
【図３２】図３２は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その４）である。
【図３３】図３３は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その５）である。
【図３４】図３４は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図（その６）である。
【図３５】図３５は、図２９〜図３４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順を示すフローチャートである。
【図３６】図３６は、実施例２にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例を示すブロック図である。
【図３７】図３７は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その１）である。
【図３８】図３８は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その２）である。
【図３９】図３９は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その３）である。
【図４０】図４０は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その４）である。
【図４１】図４１は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その５）である。
【図４２】図４２は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図（その６）である。
【図４３】図４３は、図３７〜図４２に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、この発明にかかる復元プログラム、圧縮プログラム、復元装置、圧縮装置、復元方法、および圧縮方法の実施の形態を詳細に説明する。以降では、圧縮装置の機能および復元装置の機能を有する情報処理装置を例に挙げる。
【００１７】
（圧縮データ列の復元処理の内容）
図１は、圧縮データ列の復元処理の内容を示す説明図である。
【００１８】
情報処理装置は、復元プログラムを保持するコンピュータである。図１において、情報処理装置１００は、復元プログラムにより、圧縮されたデータ列から圧縮元のデータ列を復元する。
【００１９】
また、情報処理装置１００のプロセッサは、データレジスタ（以下では、単に「レジスタ」という）を有する。ここでは、一例として、レジスタのレジスタ幅は「８バイト」とする。レジスタは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や、磁気ディスクドライブ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの他の記憶装置と比べて、情報処理装置１００のプロセッサから高速にアクセスできる記憶装置である。ここでは、１バイトは、いわゆるオクテットであり、８ビットである。
【００２０】
ここで、情報処理装置１００のプロセッサは、レジスタ幅が「８バイト」であるレジスタを有するため、８バイト単位のデータをまとめて処理することができる。そのため、情報処理装置１００のプロセッサは、８バイト分のデータを処理する場合には、１バイト単位で順次処理するよりも、８バイト単位でまとめて処理する方が、短時間で処理を終了することができる。
【００２１】
以降、圧縮されたデータ列を「圧縮データ列」という。また、圧縮データ列ｃｄｓＡから復元される圧縮元のデータ列を、「圧縮元データ列」という。圧縮データ列ｃｄｓＡは、復元に使用するデータが圧縮元データ列内に存在したために圧縮することができた圧縮データと、復元に使用するデータが圧縮元データ列内に存在しなかったために圧縮することができなかった非圧縮データと、を含む。
【００２２】
また、圧縮データ列ｃｄｓＡには、判別ビット列ｂｓＡが付与されている。判別ビット列ｂｓＡは、圧縮データ列ｃｄｓＡにおける圧縮データが始まる位置を特定するために使用される情報である。以降、圧縮データが始まる位置を、「圧縮データの位置」という。
【００２３】
図１の例では、復元対象になる圧縮データ列ｃｄｓＡは、「ｉｎｔｅｒｎａｔｉｏｎａｌｉｚａｔｉｏｎ…３０，２，４…」である。圧縮データ列ｃｄｓＡ内の非圧縮データである各アルファベットは１バイトのデータである。圧縮データ列ｃｄｓＡ内の圧縮データである「３０，２，４」は３バイトのデータである。
【００２４】
判別ビット列ｂｓＡは、「００００００００００００００００００００…１…」である。判別ビット列ｂｓＡ内の各判別ビットは１ビットのデータである。判別ビット列ｂｓＡ内の各判別ビットは、当該判別ビットに対応する位置にあるデータが圧縮データか否かを示す。判別ビットは、例えば、「０」である場合、圧縮データ列ｃｄｓＡ内の当該判別ビットに対応するデータが非圧縮データであることを示す。また、判別ビットは、例えば、「１」である場合、圧縮データ列ｃｄｓＡ内の当該判別ビットに対応するデータが圧縮データであることを示す。
【００２５】
図１において、情報処理装置１００は、判別ビット列ｂｓＡの先頭から、順次、判別ビットを参照し、圧縮データ列ｃｄｓＡ内の先頭から始まる「ｉｎｔｅｒｎａｔｉｏｎａｌｉｚａｔｉｏｎ  …  」の各アルファベットが非圧縮データであると特定する。そして、情報処理装置１００は、非圧縮データをそのまま、復元バッファに格納しているとする。
【００２６】
（１）次に、情報処理装置１００は、判別ビット列ｂｓＡの判別ビットｂＡを参照すると、参照した判別ビットｂＡが「１」であるため、判別ビットｂＡに対応する位置にあるデータ「３０，２，４」が圧縮データｃｄＡであると特定する。
【００２７】
（２）次に、情報処理装置１００は、特定した圧縮データｃｄＡ「３０，２，４」を参照して、特定した圧縮データｃｄＡより先頭側にあり、圧縮データｃｄＡから圧縮元のデータを復元するために参照されるデータが始まる位置を示す「３０」を抽出する。
【００２８】
以降、圧縮元のデータを「圧縮元データ」という。また、圧縮元データを復元するために参照されるデータを「参照先データ」という。参照先データが始まる位置を、「参照先データの位置」という。ここで、抽出された「３０」は、参照先データの位置が、圧縮データｃｄＡの位置から「３０バイト前」であることを示している。
【００２９】
（３）そして、情報処理装置１００は、特定した圧縮データｃｄＡ（「３０，２，４」）を参照して、参照先データのうち、レジスタ幅である「８バイト」単位で分割して処理できるデータの個数を示す「２」を抽出する。また、情報処理装置１００は、参照先データのうち、「８バイト」単位でまとめて処理できずに残ったデータのデータ長であり、１バイト単位で処理すべきデータ長である端数データ長を示す「４」を抽出する。
【００３０】
（４）次に、情報処理装置１００は、圧縮データｃｄＡの位置から、「３０」バイト分、先頭側にある参照先データの位置を特定して、参照先データの取得を開始する。情報処理装置１００は、具体的には、例えば、特定した参照先データの位置から、順に、抽出した個数分、「８バイト」単位のデータを取得する。
【００３１】
（５）ここでは、まず、情報処理装置１００は、特定した参照先データの位置から、「１」個目の８バイト単位のデータ「ｉｎｔｅｒｎａｔ」をまとめて取得して、復元バッファに格納する。（６）次に、情報処理装置１００は、取得した「１」個目のデータの後続に存在する「２」個目の８バイト単位のデータ「ｉｏｎａｌｉｚａ」をまとめて取得して、復元バッファに格納する。
【００３２】
（７）そして、情報処理装置１００は、取得した「２」個目のデータの後続に存在し、端数データ長である「４」バイト分のデータ「ｔｉｏｎ」を、１バイト単位で、順次取得して、復元バッファに格納する。
【００３３】
これにより、情報処理装置１００は、圧縮データ列ｃｄｓＡ内の圧縮データ「３０，２，４」が圧縮元データ「ｉｎｔｅｒｎａｔｉｏｎａｌｉｚａｔｉｏｎ」に置換されたデータ列を、復元バッファに格納することができる。そして、情報処理装置１００は、復元バッファに格納されたデータ列「ｉｎｔｅｒｎａｔｉｏｎａｌｉｚａｔｉｏｎ…ｉｎｔｅｒｎａｔｉｏｎａｌｉｚａｔｉｏｎ…」を、圧縮元データ列ｄｓＡとして、出力することができる。
【００３４】
また、このように、情報処理装置１００は、圧縮データｃｄＡを参照して、参照先データを、８バイト単位のデータに分割してまとめて取得して、復元バッファに格納することができる。これにより、情報処理装置１００は、レジスタ幅を効率的に活用することができ、データ復元の高速化を図ることができる。
【００３５】
ここでは、圧縮データが示す参照先データの位置は、圧縮データの位置から何バイト分前が参照先データの位置であるかにより示されていたが、これに限らない。例えば、圧縮データが示す参照先データの位置は、圧縮データ列ｃｄｓＡの位置から何バイト目が参照先データの位置であるかにより示されてもよい。
【００３６】
ここでは、圧縮データは、参照先データの位置を示すデータ、参照先データのうち８バイト単位で分割して処理できるデータの個数を示すデータ、および１バイト単位で処理すべき端数データ長を示すデータ、の順に含んでいたが、これに限らない。例えば、圧縮データは、参照先データのうち８バイト単位で分割して処理できるデータの個数を示すデータ、１バイト単位で処理すべき端数データ長を示すデータ、および参照先データの位置を示すデータ、の順に含んでもよい。
【００３７】
ここでは、判別ビット列ｂｓＡは、圧縮データ列ｃｄｓＡとは別のデータとして保存されていたが、これに限らない。例えば、判別ビット列ｂｓＡ内の各判別ビットは、各々、当該判別ビットに対応する圧縮データ列ｃｄｓＡ内の圧縮データまたは非圧縮データの直前に付与されていてもよい。判別ビット列ｂｓＡと圧縮データ列ｃｄｓＡとの保存例については、図１５に後述する。
【００３８】
ここでは、情報処理装置１００は、圧縮データ列ｃｄｓＡから圧縮元データ列ｄｓＡを復元する機能のみを有していたが、これに限らない。例えば、情報処理装置１００は、圧縮データ列ｃｄｓＡから圧縮元データ列ｄｓＡを復元する機能の他、データ列を圧縮して圧縮データ列ｃｄｓＡを生成する機能をさらに有してもよい。
【００３９】
（情報処理装置１００のハードウェア構成例）
図２は、実施の形態にかかる情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、プロセッサ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部は、バス２２０によってそれぞれ接続されている。
【００４０】
ここで、プロセッサ２０１は、情報処理装置１００の全体の制御を司る。また、プロセッサ２０１は、処理対象のデータを格納するレジスタを有する。プロセッサ２０１は、レジスタへのアクセスを、ＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、および光ディスク２０７へのアクセスよりも、高速に実行することができる。ＲＯＭ２０２は、ブートプログラム、圧縮プログラム、および復元プログラムなどのプログラムを記憶している。ＲＡＭ２０３は、プロセッサ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、プロセッサ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００４１】
光ディスクドライブ２０６は、プロセッサ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００４２】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、例えば、液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４３】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００４４】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４５】
スキャナ２１２は、画像を光学的に読み取り、情報処理装置１００内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。なお、光ディスクドライブ２０６、光ディスク２０７、ディスプレイ２０８、キーボード２１０、マウス２１１、スキャナ２１２、およびプリンタ２１３の少なくともいずれか１つは、なくてもよい。
【００４６】
・実施例１
次に、実施例１について説明する。実施例１では、圧縮データは、参照先データのうち、圧縮元データを復元するプロセッサ２０１により８バイト単位で分割して取得されるべきデータの個数と、１バイト単位で取得されるべき端数データ長と、を示すデータである。また、圧縮データは、参照先データの位置も示す。
【００４７】
＜実施例１にかかる情報処理装置１００によるデータの圧縮＞
以降では、まず、実施例１にかかる情報処理装置１００によるデータ列の圧縮について、図３〜図１６に示す。また、実施例１にかかる情報処理装置１００による圧縮元データ列の復元については、後述する図１７〜図２４に示す。
【００４８】
（実施例１にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例）
まず、図３を用いて、実施例１にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例について説明する。図３は、実施例１にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例を示すブロック図である。情報処理装置１００は、記憶部３０１と、検出部３０２と、生成部３０３と、保存部３０４と、を含む構成である。
【００４９】
ここで、情報処理装置１００は、所定長のレジスタを有する。所定長とは、２の冪乗になるレジスタ幅であり、例えば、上述した８バイトである。１バイトとは、複数ビットの集合であり、例えば、いわゆるオクテットであり、８ビットである。レジスタとは、例えば、上述したデータレジスタである。データレジスタは、アキュムレータともいう。
【００５０】
情報処理装置１００は、例えば、圧縮データを自装置で復元する場合、自装置のプロセッサ２０１のレジスタ幅に合わせてデータを圧縮する。また、情報処理装置１００は、圧縮データを他装置で復元する場合、他装置のプロセッサのレジスタ幅に合わせてデータを圧縮してもよい。
【００５１】
記憶部３０１は、データ列を記憶する。ここで、データ列とは、圧縮対象になるデータ列である。記憶部３０１は、具体的には、例えば、情報処理装置１００の利用者によるキーボード２１０やマウス２１１などの入力装置の操作によって入力された圧縮元データ列を記憶する。
【００５２】
記憶部３０１は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置により、その機能を実現する。これにより、検出部３０２は、圧縮対象になる圧縮元データ列を参照することができる。ここで、図４を用いて、記憶部３０１によって記憶される圧縮元データ列の一例について説明する。
【００５３】
図４は、圧縮元データ列の一例を示す説明図である。図４の例では、圧縮元データ列ｄｓＢは、「ｃｏｍｐｒｅｓｓｉｏｎ  ｄｅｃｏｍｐｒｅｓｓ  ｃｏｍｐｒｅｓｓｉｏｎ．」である。圧縮元データ列ｄｓＢに含まれるアルファベットなどの各文字は、１バイトのデータである。
【００５４】
各文字は、具体的には、例えば、「ＩＳＯ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｏｒｇａｎｉｚａｔｉｏｎ  ｆｏｒ  Ｓｔａｎｄａｒｄｉｚａｔｉｏｎ）／ＩＥＣ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｅｌｅｃｔｒｏｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｓｓｉｏｎ）  ８８５９」や「ＡＳＣＩＩ（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ）」などの文字コードである。
【００５５】
また、図４の例では、記憶部３０１の記憶領域のアドレス幅が「８バイト」であり、記憶部３０１の記憶領域は、「８バイト」でアラインされているとする。そして、圧縮元データ列ｄｓＢは、記憶領域の先頭から格納されており、「８バイト」ごとに区切られているとする。
【００５６】
ここで、情報処理装置１００は、データ列にアクセスする場合、アラインされて区切られた区間のデータごとにアクセスするという性質がある。従って、情報処理装置１００は、例えば、８バイトのデータが、アラインされて区切られた区間内に格納されている場合は、１回のアクセスにより８バイトのデータを取得することができる。一方、情報処理装置１００は、８バイトのデータが、アラインされて区切られた位置を跨いで格納されている場合は、２回のアクセスによりデータを取得することになる。情報処理装置１００は、具体的には、８バイトのデータのうち先頭部分を格納している区間にアクセスした後、８バイトのデータのうち末尾部分を格納している区間にアクセスすることにより、８バイトのデータを取得することになる。
【００５７】
図３に戻り、検出部３０２は、データ列を記憶する記憶部３０１の中から、先行データと、先行データと同一のデータである後続データと、を検出する。後続データとは、例えば、上述した圧縮元データである。先行データとは、例えば、圧縮元データの復元に使用する参照先データである。
【００５８】
検出部３０２は、具体的には、例えば、圧縮元データ列ｄｓＢの中から、圧縮元データ列ｄｓＢの２４バイト目から３４バイト目までにある圧縮元データ「ｃｏｍｐｒｅｓｓｉｏｎ」を特定する。次に、検出部３０２は、圧縮元データ列ｄｓＢの中から、圧縮元データと同一データになる参照先データを探索する。
【００５９】
そして、検出部３０２は、圧縮元データと同一データになる圧縮元データ列ｄｓＢの１バイト目から１１バイト目までにある参照先データ「ｃｏｍｐｒｅｓｓｉｏｎ」を特定する。特定されたデータは、例えば、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００６０】
検出部３０２は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、検出部３０２は、生成部３０３に圧縮対象になる圧縮元データと、圧縮元データの圧縮のために使用する参照先データと、を送ることができる。ここで、図５を用いて、検出部３０２による圧縮元データおよび参照先データの特定について説明する。
【００６１】
図５は、参照先データの探索方法の一例を示す説明図である。図５の例では、（１１）検出部３０２は、圧縮元データ列ｄｓＢの中から、３バイト分のデータと、３バイト分のデータが始まる位置と、の組み合わせを抽出する。検出部３０２は、具体的には、例えば、３バイト分のデータ「ｃｏｍ」と、「ｃｏｍ」が始まる位置である圧縮元データ列ｄｓＢの「１」バイト目と、の組み合わせを抽出する。
【００６２】
次に、検出部３０２は、抽出した組み合わせを、３バイト分のデータがアルファベット順になるように、並べ替える。検出部３０２は、具体的には、例えば、抽出した組み合わせを、基数ソート（ラディックスソート：Ｒａｄｉｘ  ｓｏｒｔ）を使用して並べ替える。基数ソートは、並べ替えアルゴリズムの一つである。基数ソートは、従来技術のため、ここでは、説明を省略する。
【００６３】
（１２）そして、検出部３０２は、並べ替えた組み合わせの中で、同一データになる先行データと後続データとを特定して、後続データの何バイト前に先行データが開始しているかを、特定する。次に、検出部３０２は、後続データの位置と、後続データに対する先行データの相対位置と、を対応付けて、探索テーブル５００を生成する。
【００６４】
検出部３０２は、具体的には、例えば、「ｃｏｍ」の位置が、「１」バイト目、「１５」バイト目、および「２４」バイト目にあることを検出する。次に、検出部３０２は、「ｃｏｍ」が「１」バイト目および「１５」バイト目にあるため、先行データの位置が後続データの位置から「１４（１５−１）」バイト前にあることを特定する。そして、検出部３０２は、後続データの位置「１５」バイト目と、先行データの位置が後続データの位置から「１４（１５−１）」バイト前にあることと、を対応付けて、探索テーブル５００を生成する。
【００６５】
（１３）次に、検出部３０２は、圧縮元データ列ｄｓＢの２４バイト目から３１バイト目までにある後続データ「ｃｏｍｐｒｅｓｓ」と同一データになる先行データが「９」バイト前にあることを特定する。また、検出部３０２は、特定した１個目の先行データと同一のデータになる２個目の先行データが「２３（９＋１４）」バイト前にあることを特定する。また、検出部３０２は、圧縮元データ列ｄｓＢの３０バイト目から３４バイト目までにある後続データ「ｓｓｉｏｎ」と同一データになる先行データが「２３」バイト前にあることを特定する。
【００６６】
これにより、検出部３０２は、後続データ「ｃｏｍｐｒｅｓｓ」と後続データ「ｓｓｉｏｎ」とは、両方とも、「２３」バイト前に同一データになる先行データがあることを特定する。そして、検出部３０２は、各々の後続データを組み合わせたデータ「ｃｏｍｐｒｅｓｓｉｏｎ」を圧縮元データとして採用し、圧縮元データと同一データになる参照先データ「ｃｏｍｐｒｅｓｓｉｏｎ」が圧縮元データから「２３」バイト前にあることを特定する。
【００６７】
ここでは、検出部３０２は、圧縮元データとして、各々の後続データを組み合わせたデータを採用したが、これに限らない。例えば、検出部３０２は、各々の後続データを、別個の圧縮元データとして採用してもよい。
【００６８】
より具体的には、例えば、検出部３０２は、後続データ「ｃｏｍｐｒｅｓｓ」を１個目の圧縮元データとして採用し、圧縮元データと同一データになる参照先データ「ｃｏｍｐｒｅｓｓ」が圧縮元データから「９」バイト前にあることを特定してもよい。さらに、検出部３０２は、圧縮されずに残った後続データ「ｉｏｎ」を２個目の圧縮元データとして採用し、圧縮元データと同一データになる参照先データ「ｉｏｎ」が圧縮元データから「２３」バイト前にあることを特定してもよい。
【００６９】
従って、検出部３０２によって圧縮元データとして採用されるデータは、単語を示すデータに限らない。例えば、検出部３０２によって圧縮元データとして採用されるデータは、複数の単語を含む文章を示すデータであってもよい。また、検出部３０２によって圧縮元データとして採用されるデータは、単語の一部を示すデータであってもよい。
【００７０】
ここでは、検出部３０２は、抽出した組み合わせを並べ替える際に、ラディックスソートを使用したが、これに限らない。例えば、検出部３０２は、マージソートを使用してもよい。また、検出部３０２は、図５に示した探索方法を使用したが、これに限らない。例えば、検出部３０２は、ハッシュ表による探索方法を使用してもよいし、木構造による探索方法を使用してもよい。ハッシュ表による探索方法や木構造による探索方法は、従来技術のため、ここでは、説明を省略する。
【００７１】
図３に戻り、生成部３０３は、検出された先行データの位置、所定長以上である先行データの長さを所定長で除した商および剰余を有する圧縮データを生成する。ここで、一般には、先行データの長さから区間長を減じた長さを所定長で除した剰余は、所定長未満になるが、これに限らない。例えば、剰余は所定長以上であってもよい。
【００７２】
より具体的には、例えば、「２０バイト」を「８バイト」で除した場合に、商として「２」を採用し、剰余として「４バイト」を採用してもよい。また、例えば、「２０バイト」を「８バイト」で除した場合に、商として「１」を採用し、剰余として「１２バイト」を採用してもよい。
【００７３】
生成部３０３は、具体的には、例えば、検出部３０２によって特定された参照先データの相対位置を示すデータを生成する。次に、生成部３０３は、参照先データのデータ長を８バイトで除した商と剰余とを算出する。そして、生成部３０３は、参照先データのうち、８バイト単位で分割して処理できるデータの個数として、上述のように算出した商を採用し、採用した商を示すデータを生成する。
【００７４】
次に、生成部３０３は、参照先データを８バイト単位でまとめて処理した後に、１バイト単位で処理すべき端数データ長として、上述のように算出した剰余を採用し、採用した剰余を示すデータを生成する。そして、生成部３０３は、生成したデータを連結した圧縮データを生成する。次に、生成部３０３は、圧縮元データを圧縮したことを示す判別ビットを生成する。また、生成部３０３は、圧縮元データが圧縮できなかった場合、圧縮元データを圧縮しなかったことを示す判別ビットを生成してもよい。
【００７５】
また、復元を実行する他のプロセッサのレジスタ幅が、情報処理装置１００の有するレジスタ幅の倍数である場合がある。この場合、生成部３０３は、検出された先行データの位置、所定長以上である先行データの長さを所定長の倍数で除した商および剰余を有する圧縮データを生成してもよい。これにより、復元を実行する他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合であっても、データ圧縮が可能になる。生成されたデータは、例えば、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００７６】
生成部３０３は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、生成部３０３は、圧縮元データと置換すべき圧縮データを保存部３０４に送ることができる。
【００７７】
ここで、図６〜図８を用いて、実施例１にかかる生成部３０３によって生成される圧縮データの内容について説明する。具体的には、図６を用いて実施例１にかかる圧縮ルールについて説明し、図７および図８を用いて図６に示した圧縮ルールにより圧縮された圧縮データの一例について説明する。
【００７８】
図６は、実施例１にかかる圧縮ルールを示す説明図である。図６に示すように、実施例１にかかる圧縮ルールでは、圧縮データは、参照先データの位置を示す「１３ビット」の固定長データ６０１と、参照先データのデータ長を示す「３ビット＋８ビットの倍数のデータ長」の可変長データと、を含む。３ビット＋８ビットの倍数のデータ長とは、例えば、３ビット、１１ビット、または１９ビットである。
【００７９】
参照先データの位置を示す固定長データ６０１は、圧縮データの位置から参照先データの位置までの間のデータ長を示す。固定長データ６０１は、「１３ビット」であるため、圧縮データの位置から参照先データの位置までの間のデータ長を「０バイト〜８１９１バイト」の範囲で示す。
【００８０】
参照先データのデータ長を示す可変長データは、参照先データのデータ長が「１０」バイト未満である場合、「３ビット」のデータ６０２である。可変長データ６０１は、データ長が「３ビット」であるため、参照先データのデータ長を「３バイト〜９バイト」の範囲で示す。ここでは、可変長データ６０２は、例えば、可変長データ６０２が「０００」である場合、２進数「０００」に対応する１０進数「０」ではなく、１０進数「３」を示している。
【００８１】
実施例１の圧縮ルールでは、圧縮データのデータ長は２バイト以上になる。そのため、情報処理装置１００は、圧縮元データのデータ長が「１バイトまたは２バイト」である場合には、圧縮してもデータサイズが低減しないことになるから、圧縮元データを圧縮しなくてもよい。従って、参照先データのデータ長として「０バイト〜２バイト」を示す必要がないため、可変長データ６０２は、データ「０００〜１１０」の各々に、各々の２進数を１０進数に変換した「０〜７」ではなく、「３〜９」を対応付けている。
【００８２】
また、参照先データのデータ長を示す可変長データは、参照先データのデータ長が「１０」バイト以上「２５６バイト」未満である場合、「３ビット」のデータ６０２と「５ビット」のデータ６０３と「３ビット」のデータ６０４とを連結したデータである。
【００８３】
可変長データ６０２〜６０４のうち、データ６０２は「１１１」となり、参照先データのデータ長が「１０バイト」以上であることを示すとともに、後続の「８ビット」のデータ６０３，６０４が参照先データのデータ長を示すデータであることを示す。
【００８４】
可変長データ６０２〜６０４のうち、データ６０３は、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数を示す。データ６０３は、データ長が「５ビット」であるため、個数を「１〜３１」の範囲で示す。換言すれば、データ６０３は、「８バイト〜２４８バイト」の範囲内の８の倍数のデータ長のいずれかを示す。実施例１の圧縮ルールでは、「８バイト」単位で分割して取得できるデータの個数として「０」を示す必要がないため、データ６０３は、データ「０００００〜１１１１０」の各々に、各々の２進数を１０進数に変換した「０〜３０」ではなく、「１〜３１」を対応付けている。
【００８５】
また、データ６０４は、参照先データのデータ長から、データ６０３が示す個数分の「８バイト」を減じた端数データ長を示す。ここで、データ６０４は、データ長が「３ビット」であるため、端数データ長を「０バイト〜７バイト」の範囲で示す。
【００８６】
また、参照先データのデータ長が「２５６バイト」以上である場合がある。この場合、参照先データのデータ長を示す可変長データは、「３ビット」のデータ６０２と「５ビット」のデータ６０３と「３ビット」のデータ６０４と「８ビット」のデータ６０５とを連結したデータである。データ６０２，６０４については、参照先データのデータ長が「１０バイト」以上「２５６バイト」未満である場合と同様のため、ここでは、説明を省略する。
【００８７】
可変長データ６０２〜６０５のうち、データ６０３は、「１１１１１」となり、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数が「３１」以上であることを示す。また、データ６０３は、後続の「８ビット」のデータ６０５が、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数を示すデータであることを示す。
【００８８】
可変長データ６０２〜６０５のうち、データ６０５は、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数が、「３１」より何個多いかを示すことにより、間接的にデータの個数を示す。データ６０５は、データ長が「８ビット」であるため、個数「３１」より何個多いかを「１〜２５５」の範囲で示す。
【００８９】
これにより、データ６０５は、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数を、「３２〜２８６（３１＋１〜３１＋２５５）」の範囲で示す。換言すれば、データ６０５は、「２５６バイト〜２０４０バイト」の範囲内の８の倍数のデータ長のいずれかを示す。
【００９０】
以降、参照先データのデータ長を示す可変長データは、上述した「８バイト」単位で分割して取得できるデータの個数が、当該個数を示すために使用中のデータ長で示せなくなる都度、新たに当該個数を示すための８ビットのデータを追加する。そして、追加した８ビットのデータを使用して、「８バイト」単位で分割して取得できるデータの個数を示すことになる。
【００９１】
図７および図８は、圧縮されなかった非圧縮データの一例、および、図６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図である。
【００９２】
図７（Ａ）は、圧縮されなかった非圧縮データの一例を示す。図７（Ｂ）は、９バイト以下のデータ長の圧縮元データを圧縮した場合の圧縮データの一例を示す。図７（Ｃ）は、９バイトより長いデータ長の圧縮元データを圧縮した場合の圧縮データの一例（その１）を示す。図８（Ｄ）は、９バイトより長いデータ長の圧縮元データを圧縮した場合の圧縮データの一例（その２）を示す。
【００９３】
図７（Ａ）に示すように、圧縮元データ列ｄｓＣに含まれるデータが圧縮できないデータｄＣである場合がある。この場合、生成部３０３は、圧縮できないデータｄＣを、非圧縮データｎｄＣとして、そのまま保存部３０４に送る。また、生成部３０３は、圧縮していないことを示す判別ビットｂＣ「０」を生成する。
【００９４】
図７（Ｂ）に示すように、圧縮元データ列ｄｓＤに、同一データになる圧縮元データｔｄＤと参照先データｒｄＤとがあり、圧縮元データｔｄＤが「９バイト」以下である場合がある。この場合、生成部３０３は、「１３ビット」で、参照先データｒｄＤの相対位置「１０」を示す「０００００００００１０１０（１０）」を生成する。
【００９５】
次に、生成部３０３は、「３ビット」で、参照先データｒｄＤのデータ長「４バイト」を示す「００１（４）」を生成する。そして、生成部３０３は、生成したデータを連結した圧縮データｃｄＤ「０００００００００１０１０（１０）００１（４）」を生成する。また、生成部３０３は、圧縮したことを示す判別ビットｂＤ「１」を生成する。
【００９６】
図７（Ｃ）に示すように、圧縮元データ列ｄｓＥに、同一データになる圧縮元データｔｄＥと参照先データｒｄＥとがあり、圧縮元データｔｄＥが「９バイト」より大きい場合がある。ここでは、圧縮元データｔｄＥの位置から２バイト目が、圧縮元データ列ｄｓＥの先頭からアラインされて区切られた位置とする。
【００９７】
この場合、生成部３０３は、「１３ビット」で、参照先データｒｄＥの相対位置「２０」を示す「００００００００１０１００（２０）」を生成する。次に、生成部３０３は、「３ビット」で、参照先データｒｄＥのデータ長が「９バイト」より大きいことを示す「１１１（１０）」を生成する。
【００９８】
そして、生成部３０３は、参照先データｒｄＥ「ｃｏｍｐｒｅｓｓｉｏｎ」のデータ長「１１バイト」を「８バイト」で除することにより、８バイト単位で分割して処理できるデータの個数「１」を算出する。次に、生成部３０３は、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「０００００（１）」を生成する。
【００９９】
そして、生成部３０３は、参照先データｒｄＥ「ｃｏｍｐｒｅｓｓｉｏｎ」のデータ長から、算出した個数分の「８バイト」を減じて、端数データ長「３バイト」を算出する。次に、生成部３０３は、１バイト単位で処理すべき端数データ長「３」を示すデータ「０１１（３）」を生成する。そして、生成部３０３は、生成したデータを連結した圧縮データｃｄＥ「００００００００１０１００（２０）１１１（１０）０００００（１）０１１（３）」を生成する。また、生成部３０３は、圧縮したことを示す判別ビットｂＥ「１」を生成する。
【０１００】
図８（Ｄ）に示すように、圧縮元データ列ｄｓＦに、同一データになる圧縮元データｔｄＦと参照先データｒｄＦとがあり、圧縮元データｔｄＦが「９バイト」より大きい場合がある。ここでは、圧縮元データｔｄＦの位置から２バイト目が、圧縮元データ列ｄｓＦの先頭からアラインされて区切られた位置とする。
【０１０１】
この場合、生成部３０３は、「１３ビット」で、参照先データｒｄＦの相対位置「１１２０」を示す「００１０００１１０００００（１１２０）」を生成する。次に、生成部３０３は、「３ビット」で、参照先データｒｄＦのデータ長が「９バイト」より大きいことを示す「１１１（１０）」を生成する。
【０１０２】
そして、生成部３０３は、参照先データｒｄＦのデータ長「３０３バイト」を「８バイト」で除することにより、８バイト単位で分割して処理できるデータの個数「３７」を算出する。次に、生成部３０３は、８バイト単位で分割して処理できるデータの個数「３７」を示すために、５ビットで個数が「３１」より多いことを示すデータ「１１１１１（３２）」を生成する。そして、生成部３０３は、８ビットで「３１」から「３７」までの不足分である「６」を示すことにより、個数「３７」を示すデータ「０００００１０１（３１＋６＝３７）」を生成する。
【０１０３】
次に、生成部３０３は、参照先データｒｄＦ「ｃｏｍｐｒｅｓｓｉｏｎ」のデータ長から、算出した個数分の「８バイト」を減じて、端数データ長「７」を算出する。次に、生成部３０３は、１バイト単位で処理すべき端数データ長「７」を示すデータ「１１１（７）」を生成する。そして、生成部３０３は、生成したデータを連結した圧縮データｃｄＦ「００１０００１１０００００（１１２０）１１１（１０）１１１１１（３２）１１１（７）０００００１０１（３７）」を生成する。また、生成部３０３は、圧縮したことを示す判別ビットｂＦ「１」を生成する。
【０１０４】
図３に戻り、保存部３０４は、後続データを生成された圧縮データに置換したデータ列を保存する。保存部３０４は、具体的には、例えば、圧縮元データ列ｄｓＢのうち圧縮元データを圧縮データに置換した圧縮データ列を生成する。次に、保存部３０４は、判別ビット列と圧縮データ列とを保存する。判別ビット列と圧縮データ列との保存例については、図１５に後述する。
【０１０５】
保存部３０４は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、保存部３０４は、データ列のメモリサイズを小さくすることができる。結果として、情報処理装置１００は、データ列を保存する場合に、圧縮せずに保存する場合と比べて、使用する記憶領域のサイズを低減することができる。また、情報処理装置１００は、データ列を他のコンピュータに送信する場合に、データ列を圧縮してから送信することにより、送信時間を短縮することができる。
【０１０６】
（データ列の圧縮の流れ）
次に、図９〜図１４を用いて、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れについて説明する。
【０１０７】
図９〜図１４は、実施例１にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図である。図９において、まず、情報処理装置１００は、情報処理装置１００の利用者によるキーボード２１０やマウス２１１などの入力装置の操作により、圧縮元データ列ｄｓＢを入力する。次に、情報処理装置１００は、入力された圧縮元データ列ｄｓＢを、入力バッファに格納する。
【０１０８】
そして、情報処理装置１００は、入力バッファに格納された圧縮元データ列ｄｓＢの先頭に圧縮ポインタ９００を設定する。次に、情報処理装置１００は、判別ビット列を格納する判別バッファ９１０と、圧縮データ列を格納する圧縮バッファ９２０と、を設定する。そして、情報処理装置１００は、圧縮元データ列ｄｓＢの圧縮を開始する。
【０１０９】
図９において、（２１）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０１１０】
ここで、情報処理装置１００は、具体的には、例えば、図５に示した探索テーブル５００を参照して、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「０」を取得する。次に、情報処理装置１００は、位置情報が「０」であるため、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍ」と同一データになる先行データがなく、データ「ｃｏｍ」が圧縮できないと判定する。
【０１１１】
（２２）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（２３）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０１１２】
次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図１０の処理に移行する。
【０１１３】
図１０において、（２４）情報処理装置１００は、図９と同様にして、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｏｍｐ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｏｍｐ」と同一データになる先行データを探索する。そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｏｍｐ」と同一データになる先行データがないため、データ「ｏｍｐ」が圧縮できないと判定する。
【０１１４】
（２５）次に、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｏ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（２６）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｏ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０１１５】
次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図１１の処理に移行する。
【０１１６】
図１１において、（２７）情報処理装置１００は、図９と同様にして、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｍｐｒ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｍｐｒ」と同一データになる先行データを探索する。そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｍｐｒ」と同一データになる先行データがないため、データ「ｍｐｒ」が圧縮できないと判定する。
【０１１７】
（２８）次に、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｍ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（２９）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｍ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０１１８】
以降、情報処理装置１００は、図９〜図１１と同様にして、圧縮元データの「４バイト目」〜「１４バイト目」の各々の位置にあるデータを圧縮せずに圧縮バッファ９２０に格納したとする。次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図１２の処理に移行する。
【０１１９】
図１２において、（３０）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０１２０】
ここで、情報処理装置１００は、具体的には、例えば、図５に示した探索テーブル５００を参照して、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「１４」を取得する。次に、情報処理装置１００は、位置情報が「１４」であるため、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍ」と同一データになる先行データが「１４バイト前」にあると判定する。そのため、情報処理装置１００は、「ｃｏｍ」を圧縮できると判定する。
【０１２１】
ここで、情報処理装置１００は、「ｃｏｍ」より末尾側のデータも、「ｃｏｍ」とまとめて圧縮できるか否かを判定する。情報処理装置１００は、具体的には、例えば、圧縮ポインタ９００が示す位置より「１バイト分」末尾側の位置に対応する先行データの位置情報「１４」を取得する。
【０１２２】
ここで、取得した先行データの位置情報「１４」は、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「１４」と同一である。そのため、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃｏｍ」とまとめて、圧縮ポインタ９００が示す位置より「１バイト分」末尾側の位置にある「ｏｍｐ」を圧縮できると判定する。
【０１２３】
換言すれば、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「４バイト」のデータ「ｃｏｍｐ」を、「１４バイト前」にある先行データ「ｃｏｍｐ」を使用して、圧縮できると判定する。
【０１２４】
そして、情報処理装置１００は、同様にして、圧縮ポインタ９００が示す位置から始まる「８バイト」のデータ「ｃｏｍｐｒｅｓｓ」を、「１４バイト前」にある先行データ「ｃｏｍｐｒｅｓｓ」を使用して、圧縮できると判定する。
【０１２５】
次に、情報処理装置１００は、参照先データの相対位置を示す「１３ビット」のデータ「０００００００００１１１０（１４）」を生成する。また、情報処理装置１００は、参照先データのデータ長を示す「３ビット」のデータ「１０１（８）」を生成する。次に、情報処理装置１００は、生成したデータを連結した圧縮データ「０００００００００１１１０（１４）１０１（８）」を生成する。以降、圧縮データ「０００００００００１１１０（１４）１０１（８）」を、圧縮データ「１４，８」と表す。
【０１２６】
（３１）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓ」の代わりに、圧縮データ「１４，８」を圧縮バッファ９２０に格納する。（３２）また、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓ」を圧縮したことを示す判別ビット「１」を判別バッファ９１０に格納する。
【０１２７】
次に、情報処理装置１００は、圧縮ポインタ９００を、圧縮したデータのデータ長である「８バイト分」、末尾側にシフトして、図９〜図１１と同様にして、圧縮元データの「２３バイト目」の位置にあるデータ「  （空白）」を圧縮せずに圧縮バッファ９２０に格納したとする。そして、情報処理装置１００は、圧縮ポインタ９００を「１バイト分」、末尾側にシフトしたとして、図１３の処理に移行する。
【０１２８】
図１３において、（３３）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０１２９】
ここで、情報処理装置１００は、図１２と同様にして、圧縮ポインタ９００が示す位置から始まる「１１バイト」のデータ「ｃｏｍｐｒｅｓｓｉｏｎ」を、「２３バイト前」にある先行データ「ｃｏｍｐｒｅｓｓｉｏｎ」を使用して、圧縮できると判定する。
【０１３０】
次に、情報処理装置１００は、参照先データの相対位置を示す「１３ビット」のデータ「００００００００１０１１１（２３）」を生成する。そして、情報処理装置１００は、参照先データのデータ長が９バイトより長いことを示す「３ビット」のデータ「１１１（１０）」を生成する。
【０１３１】
次に、情報処理装置１００は、参照先データのデータ長が「１１バイト」であるため、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「０００００（１）」を生成する。そして、情報処理装置１００は、参照先データを８バイト単位でまとめて処理した後に、１バイト単位で処理すべき端数データ長「３バイト」を示すデータ「０１１（３）」を生成する。次に、情報処理装置１００は、生成したデータを連結した圧縮データ「００００００００１０１１１（２３）１１１（１０）０００００（１）０１１（３）」を生成する。以降、圧縮データ「００００００００１０１１１（２３）１１１（１０）０００００（１）０１１（３）」を、圧縮データ「２３，１，３」と表す。
【０１３２】
（３４）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓｉｏｎ」の代わりに、圧縮データ「２３，１，３」を圧縮バッファ９２０に格納する。（３５）また、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓｉｏｎ」を圧縮したことを示す判別ビット「１」を判別バッファ９１０に格納する。
【０１３３】
次に、情報処理装置１００は、圧縮ポインタ９００を、圧縮したデータのデータ長である「１１バイト分」、末尾側にシフトして、図９〜図１１と同様にして、圧縮元データの「３４バイト目」の位置にあるデータ「．」を圧縮せずに圧縮バッファ９２０に格納したとする。
【０１３４】
図９〜図１３を用いて説明した処理により圧縮された圧縮データ列を図１４に示す。図１４に示すように、判別バッファ９１０に格納されていた判別ビット列ｂｓＧは「１８ビット」である。また、圧縮バッファ９２０に格納されていた圧縮データ列ｃｄｓＧは「２１バイト」である。
【０１３５】
従って、情報処理装置１００は、「３５バイト」の圧縮元データ列ｄｓＢを、「１８ビット」の判別ビット列ｂｓＧと、「２１バイト」の圧縮データ列ｃｄｓＧと、に変換したことになる。換言すれば、情報処理装置１００は、データ列のデータ長を、「（３５バイト）−（２１バイト＋１８ビット）＝（１１バイト＋６ビット）」のデータ長分、低減することができる。
【０１３６】
このように、情報処理装置１００は、データ列のサイズを低減することができる。結果として、情報処理装置１００は、データ列を保存する場合に、圧縮せずに保存する場合と比べて、使用する記憶領域のサイズを低減することができる。また、情報処理装置１００は、データ列を他のコンピュータに送信する場合に、データ列を圧縮してから送信することにより、送信時間を短縮することができる。
【０１３７】
（判別ビット列および圧縮データ列の保存例）
次に、図１５を用いて、図１４に示した判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧを記憶装置に保存する場合の保存例について説明する。ここで、記憶装置とは、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などである。
【０１３８】
図１５は、図７〜図１４に示した判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧの保存例を示す説明図である。図１５（Ａ）は、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧの保存例１を示す。図１５（Ｂ）は、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧの保存例２を示す。図１５（Ｃ）は、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧの保存例３を示す。
【０１３９】
図１５（Ａ）に示すように、情報処理装置１００は、例えば、記憶装置の先頭にあるアドレス幅の区間に、判別ビット列ｂｓＧをまとめて保存し、後続のアドレス幅の区間に圧縮データ列ｃｄｓＧをまとめて保存することができる。また、情報処理装置１００は、例えば、保存した判別ビット列ｂｓＧの末尾にパディングを格納して、アドレス幅単位のデータ列に調整してもよいし、保存した圧縮データ列ｃｄｓＧの末尾にパディングを格納して、アドレス幅単位のデータ列に調整してもよい。
【０１４０】
具体的には、例えば、記憶装置には、「判別ビット列ｂｓＧ→パディング→圧縮データ列ｃｄｓＧ→パディング」のような順に、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧが保存される。情報処理装置１００は、図１５（Ａ）のように保存することにより、判別ビット列ｂｓＧをまとめて書き込んだり読み出したりすることができる。
【０１４１】
図１５（Ｂ）に示すように、情報処理装置１００は、例えば、記憶装置の先頭から順に、各々の判別ビットを、各々の判別ビットに対応する非圧縮データまたは圧縮データの先頭に付与して、保存することができる。また、情報処理装置１００は、例えば、保存したデータ列の末尾にパディングを格納して、保存したデータ列をバイト単位のデータに調整してもよい。
【０１４２】
具体的には、例えば、記憶装置には、「判別ビット→非圧縮データ→判別ビット→非圧縮データ→…→判別ビット→圧縮データ→…→パディング」のような順に、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧが保存される。情報処理装置１００は、図１５（Ｂ）のように保存することにより、復元に使用する順に判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧが並ぶため、復元において記憶装置の先頭アドレスから順にアクセスすればよく、ランダムアクセスを抑制することができる。
【０１４３】
図１５（Ｃ）に示すように、情報処理装置１００は、例えば、記憶装置の先頭から順に、「１バイト分」の判別ビット群を保存し、保存した判別ビット群の各々の判別ビットに対応する非圧縮データまたは圧縮データを判別ビット群の後続に保存することができる。また、情報処理装置１００は、判別ビット群が「１バイト分」に足らない場合、判別ビット群の末尾にパディングを格納して、判別ビット群を「１バイト」に調整してもよい。
【０１４４】
具体的には、例えば、記憶装置には、「１バイト分の判別ビット→８バイト分の非圧縮データや圧縮データ→…→２ビット分の判別ビットと６ビット分のパディング→２バイト分の非圧縮データや圧縮データ→…」のような順に、判別ビット列ｂｓＧおよび圧縮データ列ｃｄｓＧが保存される。情報処理装置１００は、図１５（Ｃ）のように保存することにより、判別ビット、圧縮データ、および非圧縮データが格納されるアドレスを、バイト単位で区切られたアドレスにすることができる。そのため、情報処理装置１００は、各データにアクセスする際、ビットシフトしなくてもよくなり、各データへのアクセスにかかる時間を低減することができる。
【０１４５】
（データ列圧縮処理）
次に、図１６を用いて、図７〜図１４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順について説明する。
【０１４６】
図１６は、図７〜図１４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順を示すフローチャートである。図１６に示すように、情報処理装置１００は、まず、入力バッファにある圧縮元データの中から、圧縮ポインタ９００が示す位置にある後続データと同一データになる先行データを検出する（ステップＳ１６０１）。
【０１４７】
次に、情報処理装置１００は、先行データが検出されたか否かを判定する（ステップＳ１６０２）。ここで、先行データが検出されなかった場合（ステップＳ１６０２：Ｎｏ）、情報処理装置１００は、圧縮しないことを示す判別ビット「０」を生成して、判別バッファ９１０に格納する（ステップＳ１６０３）。
【０１４８】
次に、情報処理装置１００は、後続データの先頭１バイト分のデータを、そのまま、圧縮バッファ９２０に格納する（ステップＳ１６０４）。そして、情報処理装置１００は、圧縮ポインタ９００を「１バイト分」末尾側にシフトする（ステップＳ１６０５）。
【０１４９】
次に、情報処理装置１００は、圧縮が終了したか否かを判定する（ステップＳ１６０６）。ここで、圧縮が終了した場合（ステップＳ１６０６：Ｙｅｓ）、情報処理装置１００は、データ列圧縮処理を終了する。
【０１５０】
一方、圧縮が終了していない場合（ステップＳ１６０６：Ｎｏ）、情報処理装置１００は、ステップＳ１６０１に戻る。以上のステップＳ１６０１〜ステップＳ１６０６を経由する処理により、情報処理装置１００は、圧縮できないデータを処理する。
【０１５１】
一方、ステップＳ１６０２において、先行データが検出された場合（ステップＳ１６０２：Ｙｅｓ）、情報処理装置１００は、圧縮することを示す判別ビット「１」を生成して、判別バッファ９１０に格納する（ステップＳ１６０７）。
【０１５２】
次に、情報処理装置１００は、先行データのデータ長が９バイトより長いか否かを判定する（ステップＳ１６０８）。ここで、先行データのデータ長が９バイト以下の場合（ステップＳ１６０８：Ｎｏ）、情報処理装置１００は、先行データの位置を示すデータと、先行データのデータ長を示すデータと、を生成して、圧縮バッファ９２０に格納する（ステップＳ１６０９）。
【０１５３】
次に、情報処理装置１００は、圧縮ポインタ９００を「先行データのデータ長分」末尾側にシフトする（ステップＳ１６１０）。そして、情報処理装置１００は、ステップＳ１６０６に移行する。以上のステップＳ１６０１，Ｓ１６０２，Ｓ１６０７〜Ｓ１６１０，Ｓ１６０６を経由する処理により、情報処理装置１００は、９バイト以下のデータ長であって圧縮可能なデータを圧縮する。
【０１５４】
一方、ステップＳ１６０８において、先行データのデータ長が９バイトより長い場合（ステップＳ１６０８：Ｙｅｓ）、情報処理装置１００は、先行データの位置を示すデータと、先行データのデータ長が９バイトより長いことを示すデータと、を生成する。次に、情報処理装置１００は、生成したデータを、圧縮バッファ９２０に格納する（ステップＳ１６１１）。
【０１５５】
そして、情報処理装置１００は、先行データのデータ長をレジスタ幅で除した商と剰余とを算出し、算出した商を示すデータと、算出した剰余を示すデータと、を生成して、圧縮バッファ９２０に格納する（ステップＳ１６１２）。
【０１５６】
次に、情報処理装置１００は、ステップＳ１６１０に移行する。以上のステップＳ１６０１，Ｓ１６０２，Ｓ１６０７，Ｓ１６０８，Ｓ１６１１，Ｓ１６１２，Ｓ１６１０，Ｓ１６０６を経由する処理により、情報処理装置１００は、９バイトより長いデータ長であって圧縮可能なデータを圧縮する。
【０１５７】
これにより、情報処理装置１００は、圧縮元データの復元において、参照先データをレジスタ幅単位で分割して処理できるデータの個数と、１バイト単位で処理すべき端数バイトと、が特定できるように圧縮データを生成することができる。
【０１５８】
（実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元）
次に、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元について、図１７〜図２３に示す。
【０１５９】
（実施例１にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例）
まず、図１７を用いて、実施例１にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例について説明する。図１７は、実施例１にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例を示すブロック図である。情報処理装置１００は、記憶部１７０１と、検出部１７０２と、取得部１７０３と、格納部１７０４と、を含む構成である。
【０１６０】
記憶部１７０１は、参照先となる非圧縮データの参照位置、所定長以上である非圧縮データの長さを所定長で除した商および剰余を有する圧縮データと、非圧縮データとを含む圧縮データ列を記憶する。参照先となる非圧縮データとは、例えば、上述した参照先データである。所定長とは、２の冪乗になるレジスタ幅であり、例えば、上述した８バイトである。
【０１６１】
圧縮データは、例えば、参照先データの相対位置「１４」を示すデータ「０００００００００１１１０（１４）」を有する。また、圧縮データは、例えば、参照先データが１０バイト以上であることを示すデータ「１１１（１０）」を有する。また、圧縮データは、例えば、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「０００００（１）」、および１バイト単位で処理すべき端数データ長「３」を示すデータ「０１１（３）」を有する。
【０１６２】
記憶部１７０１は、具体的には、例えば、圧縮データと非圧縮データとを含む圧縮データ列、および判別ビット列を記憶する。記憶部１７０１は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置により、その機能を実現する。これにより、検出部１７０２は、記憶部１７０１に記憶された圧縮データ列および判別ビット列を取得することができる。
【０１６３】
検出部１７０２は、記憶部１７０１の中から、圧縮データを検出する。検出部１７０２は、具体的には、例えば、判別ビット列の中から判別ビットを取得し、取得した判別ビットに対応するデータが非圧縮データか圧縮データかを判定する。
【０１６４】
次に、検出部１７０２は、圧縮データと判定された場合、判別ビットに対応する「１バイト分」のデータ「０００００００００１１１０（１４）１１１（１０）」を検出する。ここで、検出部１７０２は、検出したデータの末尾「３ビット」が参照先データのデータ長が「９バイト」より長いことを示す「１１１（１０）」であるため、後続の「１バイト分」のデータ「０００００（１）０１１（３）」をさらに検出する。
【０１６５】
このように、検出部１７０２は、圧縮データ「０００００００００１１１０（１４）１１１（１０）０００００（１）０１１（３）」を検出する。検出部１７０２は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、取得部１７０３は、検出部１７０２によって検出された圧縮データを使用して、参照先データを取得することができる。
【０１６６】
取得部１７０３は、検出された圧縮データに含まれている参照位置から始まる参照先データのうち、所定長に商を乗じた長さとなる第１のデータ列を所定長単位で取得する。また、取得部１７０３は、参照先データから第１のデータ列を除いた剰余分の長さとなる第２のデータ列を取得する。
【０１６７】
取得部１７０３は、具体的には、例えば、圧縮データ内の「０００００００００１１１０（１４）」から、参照先データの位置が圧縮データの位置より「１４バイト分」先頭側の位置であることを特定する。
【０１６８】
次に、取得部１７０３は、特定した位置から始まる参照先データのうち、「８バイト」に圧縮データ内の「０００００（１）」が示す商を乗じた「８バイト分」のデータを、「８バイト単位」でまとめて取得する。また、取得部１７０３は、圧縮データ内の「０１１（３）」が示す剰余分の「３バイト分」のデータを、「１バイト」ごとに取得する。
【０１６９】
また、圧縮を実行した他のプロセッサのレジスタ幅が、情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、取得部１７０３は、検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、第１のデータ列と、所定長の倍数に商を乗じた長さとなる所定長単位の第２のデータ列と、第３のデータ列と、を取得してもよい。
【０１７０】
取得部１７０３は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、取得部１７０３は、圧縮データと置換すべき参照先データを格納部１７０４に送ることができる。
【０１７１】
格納部１７０４は、所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を所定の記憶領域に書き込む。格納部１７０４は、具体的には、例えば、参照先データ「ｃｏｍｐｒｅｓｓｉｏｎ」のうち、「８バイト単位」で取得した「ｃｏｍｐｒｅｓｓ」を復元バッファに格納し、取得した「３バイト分」の「ｉｏｎ」を復元バッファに格納する。
【０１７２】
格納部１７０４は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、格納部１７０４は、圧縮データを参照先データの複製データと置換することができ、圧縮元データを復元することができる。
【０１７３】
また、格納部１７０４は、検出部１７０２によって非圧縮データと判定されたデータを、そのまま、復元バッファに格納する。これにより、格納部１７０４は、参照先データになる可能性がある非圧縮データを復元バッファに格納しておくことができる。
【０１７４】
（圧縮元データ列ｄｓＢの復元の流れ）
次に、図１８〜図２３を用いて、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れについて説明する。
【０１７５】
図１８〜図２３は、実施例１にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図である。図１８において、まず、情報処理装置１００は、判別ビット列の先頭に判別ポインタ１８１０を設定する。次に、情報処理装置１００は、圧縮データ列の先頭に復元ポインタ１８２０を設定する。そして、情報処理装置１００は、復元した圧縮元データ列ｄｓＢを格納する復元バッファ１８００を設定する。
【０１７６】
図１８において、（４１）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（４２）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｃ」を取得する。
【０１７７】
（４３）そして、情報処理装置１００は、取得した非圧縮データ「ｃ」を、そのまま、復元バッファ１８００に格納する。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図１９の処理に移行する。
【０１７８】
図１９において、（４４）情報処理装置１００は、図１８と同様にして、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（４５）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｏ」を取得する。
【０１７９】
（４６）そして、情報処理装置１００は、取得した非圧縮データ「ｏ」を、そのまま、復元バッファ１８００に格納する。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図２０の処理に移行する。
【０１８０】
図２０において、（４７）情報処理装置１００は、図１８と同様にして、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（４８）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｍ」を取得する。
【０１８１】
（４９）そして、情報処理装置１００は、取得した非圧縮データ「ｍ」を、そのまま、復元バッファ１８００に格納する。以降、情報処理装置１００は、図１８〜図２０と同様にして、圧縮データの「１バイト目」〜「１４バイト目」の各々の位置にあるデータを、そのまま、復元バッファ１８００に格納したとする。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図２１の処理に移行する。
【０１８２】
図２１において、（５０）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（５１）次に、情報処理装置１００は、検出した判別ビットが「１」であるため、復元ポインタ１８２０が示す位置にあるデータが圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「１４，８」を取得する。
【０１８３】
（５２）そして、情報処理装置１００は、取得した圧縮データ「１４，８」を参照して、参照先データが圧縮データより「１４バイト前」にあると判定する。次に、情報処理装置１００は、取得した圧縮データ「１４，８」を参照して、「８バイト分」の参照先データを、１バイト単位で取得して、復元バッファ１８００に格納する。
【０１８４】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトして、復元ポインタ１８２０を圧縮データのデータ長である「２バイト分」末尾側にシフトしたとする。そして、情報処理装置１００は、図１８〜図２０と同様にして、復元ポインタ１８２０が示す位置にある非圧縮データ「  （空白）」を復元バッファ１８００に格納したとする。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図２２の処理に移行する。
【０１８５】
図２２において、（５３）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（５４）次に、情報処理装置１００は、検出した判別ビットが「１」であるため、復元ポインタ１８２０が示す位置にあるデータが圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「２３，１，３」を取得する。
【０１８６】
（５５）そして、情報処理装置１００は、取得した圧縮データ「２３，１，３」を参照して、参照先データが圧縮データより「２３バイト前」にあると判定する。次に、情報処理装置１００は、取得した圧縮データ「２３，１，３」を参照して、参照先データを、「８バイト単位」で分割して処理できるデータの個数が「１回」であると特定する。そして、情報処理装置１００は、参照先データを先頭から、１回目の「８バイト分」のデータ「ｃｏｍｐｒｅｓｓ」を取得して、復元バッファ１８００に格納する。
【０１８７】
次に、情報処理装置１００は、取得した圧縮データ「２３，１，３」を参照して、参照先データを、「１バイト単位」で処理すべき端数データ長が「３バイト」であると特定する。そして、情報処理装置１００は、参照先データからデータ「ｃｏｍｐｒｅｓｓ」を取得して残ったデータ「ｉｏｎ」を、１バイト単位で取得して、復元バッファ１８００に格納する。
【０１８８】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトして、復元ポインタ１８２０を圧縮データのデータ長である「３バイト分」末尾側にシフトしたとする。そして、情報処理装置１００は、図１８〜図２０と同様にして、復元ポインタ１８２０が示す位置にある非圧縮データ「．」を復元バッファ１８００に格納したとする。
【０１８９】
図１８〜図２２を用いて説明した処理により復元された圧縮元データ列ｄｓＢを図２３に示す。図２３に示すように、情報処理装置１００は、圧縮元データ列ｄｓＢを、損失なく、復元バッファ１８００に復元することができる。
【０１９０】
このように、情報処理装置１００は、圧縮元データ列ｄｓＢの復元において、８バイト単位で取得可能な参照先データがあれば、８バイト単位で取得して復元バッファ１８００に格納する。これにより、情報処理装置１００は、レジスタ幅を有効活用して、圧縮元データ列ｄｓＢの復元にかかる時間を短縮することができる。
【０１９１】
（圧縮元データ列復元処理）
次に、図２４を用いて、図１８〜図２３に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順について説明する。
【０１９２】
図２４は、図１８〜図２３に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順を示すフローチャートである。図２４に示すように、情報処理装置１００は、まず、判別ポインタ１８１０が示す位置にある判別ビットを取得する（ステップＳ２４０１）。
【０１９３】
次に、情報処理装置１００は、取得した判別ビットを参照して、復元ポインタ１８２０が示す位置にあるデータが圧縮データか否かを判定する（ステップＳ２４０２）。ここで、非圧縮データである場合（ステップＳ２４０２：Ｎｏ）、情報処理装置１００は、復元ポインタ１８２０が示す位置にある１バイトのデータを取得して、復元バッファ１８００に格納する（ステップＳ２４０３）。
【０１９４】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「１バイト分」末尾側にシフトする（ステップＳ２４０４）。そして、情報処理装置１００は、復元が終了したか否かを判定する（ステップＳ２４０５）。ここで、復元が終了した場合（ステップＳ２４０５：Ｙｅｓ）、情報処理装置１００は、圧縮元データ列復元処理を終了する。
【０１９５】
一方、復元が終了していない場合（ステップＳ２４０５：Ｎｏ）、情報処理装置１００は、ステップＳ２４０１に戻る。以上のステップＳ２４０１〜Ｓ２４０５を経由する処理により、情報処理装置１００は、非圧縮データを処理する。
【０１９６】
一方、ステップＳ２４０２において、圧縮データである場合（ステップＳ２４０２：Ｙｅｓ）、情報処理装置１００は、圧縮データを参照して、参照先データの位置と、参照先データのデータ長と、を取得する（ステップＳ２４０６）。
【０１９７】
次に、情報処理装置１００は、取得した参照先データのデータ長が９バイトより長いか否かを判定する（ステップＳ２４０７）。ここで、参照先データのデータ長が９バイト以下の場合（ステップＳ２４０７：Ｎｏ）、情報処理装置１００は、参照先データの位置から、参照先データのデータ長分のデータを、１バイト単位で取得して、復元バッファ１８００に格納する（ステップＳ２４０８）。
【０１９８】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「圧縮データのデータ長分」末尾側にシフトする（ステップＳ２４０９）。そして、情報処理装置１００は、ステップＳ２４０５に移行する。
【０１９９】
以上のステップＳ２４０１，Ｓ２４０２，Ｓ２４０６〜Ｓ２４０９，Ｓ２４０５を経由する処理により、情報処理装置１００は、９バイト以下のデータ長である圧縮元データを復元する。
【０２００】
一方、参照先データのデータ長が９バイトより長い場合（ステップＳ２４０７：Ｙｅｓ）、情報処理装置１００は、取得した圧縮データを参照して、参照先データを、「８バイト単位」で分割して処理できるデータの個数を特定する。次に、情報処理装置１００は、参照先データを、先頭から、特定した個数分の「８バイト分」のデータを取得して、復元バッファ１８００に格納する（ステップＳ２４１０）。
【０２０１】
次に、情報処理装置１００は、取得した圧縮データを参照して、参照先データを、「１バイト単位」で処理すべき端数データ長を特定する。そして、情報処理装置１００は、参照先データから個数分の「８バイト分」のデータを取得して残ったデータを、先頭から、１バイト単位で取得して、復元バッファ１８００に格納する（ステップＳ２４１１）。
【０２０２】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「圧縮データのデータ長分」末尾側にシフトする（ステップＳ２４１２）。そして、情報処理装置１００は、ステップＳ２４０５に移行する。
【０２０３】
以上のステップＳ２４０１，Ｓ２４０２，Ｓ２４０６，Ｓ２４０７，Ｓ２４１０〜Ｓ２４１２，Ｓ２４０５を経由する処理により、情報処理装置１００は、９バイトより長いデータ長である圧縮元データを復元する。
【０２０４】
以上説明したように、情報処理装置１００は、圧縮データに対応する参照先データを、圧縮データを参照して、レジスタ幅単位で分割して取得し、レジスタ幅単位で分割して取得しきれなかったデータを１バイト単位で分割して取得する。このように、情報処理装置１００は、プロセッサ２０１によりレジスタ幅分の非圧縮な参照先データをまとめて処理することにより、レジスタ幅分のデータを１バイトずつ順次処理するよりも、短時間で処理を終了することができる。これにより、情報処理装置１００は、レジスタ幅を効率的に活用して参照先データを処理することができ、データ復元の高速化を図ることができる。
【０２０５】
また、圧縮を実行した他のプロセッサのレジスタ幅が、情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、情報処理装置１００は、圧縮データが示すレジスタ幅単位で分割して取得できるデータの個数に、情報処理装置１００のプロセッサ２０１のレジスタ幅に対する圧縮を実行した他のプロセッサのレジスタ幅の割合を乗じた個数を算出してもよい。そして、情報処理装置１００は、参照先データのうち、算出した個数分にレジスタ幅単位で分割したデータを取得し、レジスタ幅単位で分割して取得しきれなかったデータを１バイト単位で分割して取得する。これにより、圧縮を実行した他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合でもデータ復元が可能になる。
【０２０６】
また、情報処理装置１００は、圧縮元データと同一のデータになる参照先データを検出し、圧縮元データを参照先データの位置と参照先データのうちレジスタ幅単位で分割して取得できるデータの個数と端数データ長とを示す圧縮データに圧縮する。これにより、圧縮データを復元するプロセッサ２０１が、圧縮データを参照して、データを復元することが可能になる。具体的には、例えば、プロセッサ２０１は、参照先データのうち、レジスタ幅単位で分割したデータを取得し、レジスタ幅単位で分割して取得しきれなかった残りのデータを１バイト単位で分割して取得することにより、データを復元することができる。また、情報処理装置１００は、参照先データのデータ長を８の倍数で表すことにより、参照先データのデータ長をそのまま表した場合に比べて、２４８バイト以上の参照先データに関しての圧縮効率を向上させることができる。
【０２０７】
また、復元を実行する他のプロセッサのレジスタ幅が情報処理装置１００のレジスタ幅の倍数である場合がある。この場合、情報処理装置１００は、圧縮元データを、参照先データの位置と、参照先データのうち当該レジスタ幅の倍数単位で分割して取得できるデータの個数と端数データ長とを示す圧縮データに圧縮する。これにより、復元を実行する他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合でもデータ圧縮が可能になる。
【０２０８】
・実施例２
次に、実施例２について説明する。実施例１では、情報処理装置１００は、参照先データから取得したレジスタ幅のデータを格納する復号バッファ内の領域が、アラインされて区切られた区間か否かに関わらず格納している。これに対し、実施例２では、情報処理装置１００は、参照先データから取得したレジスタ幅のデータを格納する復号バッファ内の領域が、アラインされて区切られた区間になるようにする。
【０２０９】
そのため、実施例２では、圧縮データは、参照先データから、圧縮元データを復元するプロセッサ２０１により取得される先頭側のデータを除いた残りのデータのうち、８バイト単位で分割して取得されるべきデータの個数を示すデータである。ここで、参照先データのうち、先頭側のデータとは、復元バッファ内の書込先位置からアラインされて区切られた区間の末尾の位置までの空き領域を埋めるために使用されるデータである。
【０２１０】
これにより、情報処理装置１００は、復元バッファ内の書込先位置がアラインされた区間の先頭の位置になるまでは、参照先データの先頭から１バイト単位で取得して復元バッファに格納していく。そして、情報処理装置１００は、復元バッファ内の書込先位置がアラインされた区間の先頭の位置になると、レジスタ幅単位のデータを取得して、レジスタ幅分のデータ長であるアラインされた区間に、過不足なく格納することができる。
【０２１１】
換言すれば、情報処理装置１００は、レジスタ幅単位のデータを格納する際に、アラインされた位置を跨いで格納することがなくなる。そのため、情報処理装置１００は、レジスタ幅単位のデータを格納する際の復元バッファへのアクセス回数を低減することができ、データ復元の高速化を図ることができる。
【０２１２】
＜実施例２にかかる情報処理装置１００によるデータ列の圧縮＞
以降では、まず、実施例２にかかる情報処理装置１００によるデータ列の圧縮について、図２５〜図３５に示す。また、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元については、後述する図３６〜図４３に示す。
【０２１３】
（実施例２にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例）
まず、図２５を用いて、実施例２にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例について説明する。図２５は、実施例２にかかる情報処理装置１００のデータ列の圧縮に関する機能的構成例を示すブロック図である。情報処理装置１００は、記憶部２５０２と、検出部２５０３と、特定部２５０１と、生成部２５０４と、保存部２５０５と、を含む構成である。
【０２１４】
ここで、情報処理装置１００は、所定長のレジスタを有する。レジスタについては、図３を用いて説明したレジスタと同様のため、説明を省略する。情報処理装置１００は、例えば、圧縮データを自装置で復元する場合、自装置のプロセッサ２０１のレジスタ幅に合わせてデータを圧縮する。また、情報処理装置１００は、圧縮データを他装置で復元する場合、他装置のプロセッサのレジスタ幅に合わせてデータを圧縮してもよい。
【０２１５】
特定部２５０１は、データ列での後続データの位置と、データ列の先頭から所定長単位で区切られた複数の位置のうち、後続データの位置より末尾側にあり、かつ、後続データの位置から所定長分の範囲内にある位置と、の区間長を特定する。
【０２１６】
特定部２５０１は、具体的には、例えば、圧縮元データの位置「２４バイト目」と、データ列の先頭から８バイトごとに区切られた区間のうちで圧縮元データの位置を含む区間の末尾の位置「２５バイト目」と、を特定する。次に、特定部２５０１は、特定した「２４バイト目」と「２５バイト目」との間にある部分区間のデータ長「１バイト」を特定する。
【０２１７】
特定部２５０１は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、生成部２５０４は、部分区間のデータ長を参照して、圧縮データを生成することができる。
【０２１８】
記憶部２５０２は、データ列を記憶する。記憶部２５０２によって記憶されるデータ列については、図３および図４を用いて説明したデータ列と同様であるため、説明を省略する。検出部２５０３は、データ列を記憶する記憶部２５０２の中から、先行データと、先行データと同一のデータである後続データと、を検出する。検出部２５０３は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。検出部２５０３による検出処理については、図３および図５を用いて説明した処理と同様のため、説明を省略する。
【０２１９】
生成部２５０４は、検出された先行データの位置、所定長以上である先行データの長さから区間長を減じた長さを所定長で除した商および剰余を有する圧縮データを生成する。ここで、一般には、先行データの長さから区間長を減じた長さを所定長で除した剰余は、所定長未満になるが、これに限らない。例えば、剰余は所定長以上であってもよい。
【０２２０】
より具体的には、例えば、「２０バイト」を「８バイト」で除した場合に、商として「２」を採用し、剰余として「４バイト」を採用してもよい。また、例えば、「２０バイト」を「８バイト」で除した場合に、商として「１」を採用し、剰余として「１２バイト」を採用してもよい。
【０２２１】
生成部２５０４は、具体的には、例えば、検出部２５０３によって特定された参照先データの相対位置を示すデータを生成する。次に、生成部２５０４は、参照先データのデータ長から、特定した部分区間のデータ長を減算し、減算したデータ長を８バイトで除した商と剰余とを算出する。そして、情報処理装置１００は、減算したデータ長分のデータのうち、８バイト単位で分割して処理できるデータの個数として、上述のように算出した商を採用し、採用した商を示すデータを生成する。
【０２２２】
次に、生成部２５０４は、減算したデータ長分のデータを８バイト単位でまとめて処理した後に、１バイト単位で処理すべき端数データ長として、上述のように算出した剰余を採用し、採用した剰余を示すデータを生成する。そして、生成部２５０４は、生成したデータを連結した圧縮データを生成する。次に、生成部２５０４は、圧縮元データを圧縮したことを示す判別ビットを生成する。また、生成部２５０４は、圧縮元データが圧縮できなかった場合、圧縮元データを圧縮しなかったことを示す判別ビットを生成してもよい。
【０２２３】
また、復元を実行する他のプロセッサのレジスタ幅が、情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、生成部２５０４は、検出された先行データの位置、所定長以上である先行データの長さから区間長を減じた長さを所定長の倍数で除した商および剰余を有する圧縮データを生成してもよい。これにより、復元を実行する他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合であっても、データ圧縮が可能になる。生成されたデータは、例えば、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【０２２４】
生成部２５０４は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、生成部２５０４は、圧縮元データと置換すべき圧縮データを保存部２５０５に送ることができる。
【０２２５】
ここで、図２６〜図２８を用いて、実施例２にかかる生成部２５０４によって生成される圧縮データの内容について説明する。具体的には、図２６を用いて実施例２にかかる圧縮ルールについて説明し、図２７および図２８を用いて図２６に示した圧縮ルールにより圧縮された圧縮データの一例について説明する。
【０２２６】
図２６は、実施例２にかかる圧縮ルールを示す説明図である。図２６に示すように、実施例２にかかる圧縮ルールでは、圧縮データは、参照先データの位置を示す「１３ビット」の固定長データ２６０１と、参照先データのデータ長を示す「３ビット＋８ビットの倍数のデータ長」の可変長データと、を含む。３ビット＋８ビットの倍数のデータ長とは、例えば、３ビット、１１ビット、または１９ビットである。
【０２２７】
参照先データの位置を示す固定長データ２６０１は、圧縮データの位置から参照先データの位置までの間のデータ長を示す。固定長データ２６０１は、「１３ビット」であるため、圧縮データの位置から参照先データの位置までの間のデータ長を「０バイト〜８１９１バイト」の範囲で示す。
【０２２８】
参照先データのデータ長を示す可変長データは、参照先データのデータ長が「１０」バイト未満である場合、「３ビット」のデータ２６０２である。可変長データ２６０２は、データ長が「３ビット」であるため、参照先データのデータ長を「３バイト〜９バイト」の範囲で示す。ここでは、可変長データ２６０２は、例えば、可変長データ２６０２が「０００」である場合、２進数「０００」に対応する１０進数「０」ではなく、１０進数「３」を示している。
【０２２９】
実施例２の圧縮ルールでは、圧縮データのデータ長は２バイト以上になる。そのため、情報処理装置１００は、圧縮元データのデータ長が「１バイトまたは２バイト」である場合には、圧縮してもデータサイズが低減しないことになるから、圧縮元データを圧縮しなくてもよい。従って、参照先データのデータ長として「０バイト〜２バイト」を示す必要がないため、可変長データ２６０２は、データ「０００〜１１０」の各々に、各々の２進数を１０進数に変換した「０〜７」ではなく、「３〜９」を対応付けている。
【０２３０】
また、参照先データのデータ長を示す可変長データは、参照先データのデータ長が「１０」バイト以上「２４８バイト」未満である場合、「３ビット」のデータ２６０２と「５ビット」のデータ２６０３と「３ビット」のデータ２６０４とを連結したデータである。      
【０２３１】
可変長データ２６０２〜２６０４のうち、データ２６０２は「１１１」となり、参照先データのデータ長が「１０バイト」以上であることを示すとともに、後続の「８ビット」のデータ２６０３，２６０４が参照先データのデータ長を示すデータであることを示す。
【０２３２】
可変長データ２６０２〜２６０４のうち、データ２６０３は、参照先データのデータ長から圧縮元データの位置からアラインされて区切られた位置までの区間長を減じたデータ長分のデータのうち、「８バイト」単位で分割して取得できるデータの個数を示す。ここで、データ２６０３は、データ長が「５ビット」であるため、個数を「０〜３０」の範囲で示す。換言すれば、データ２６０３は、「０バイト〜２４０バイト」の範囲内の８の倍数のデータ長のいずれかを示す。
【０２３３】
また、データ２６０４は、参照先データのデータ長から、圧縮元データの位置からアラインされて区切られた位置までの区間長を減じ、データ２６０３が示す個数分の「８バイト」を減じた端数データ長を示す。ここで、データ２６０４は、データ長が「３ビット」であるため、端数データ長を「０バイト〜７バイト」の範囲で示す。
【０２３４】
また、参照先データのデータ長が「２４８バイト」以上である場合がある。この場合、参照先データのデータ長を示す可変長データは、「３ビット」のデータ２６０２と「５ビット」のデータ２６０３と「３ビット」のデータ２６０４と「８ビット」のデータ２６０５とを連結したデータである。データ２６０２，２６０４については、参照先データのデータ長が「１０」バイト以上「２４８バイト」未満である場合と同様のため、ここでは、説明を省略する。
【０２３５】
可変長データ２６０２〜２６０５のうち、データ２６０３は、「１１１１１」となり、上述した「８バイト」単位で分割して取得できるデータの個数が「３０」以上であることを示す。また、データ２６０３は、後続の「８ビット」のデータ２６０５が、参照先データのうち、「８バイト」単位で分割して取得できるデータの個数を示すデータであることを示す。
【０２３６】
可変長データ２６０２〜２６０５のうち、データ２６０５は、上述した「８バイト」単位で分割して取得できるデータの個数が、「３０」より何個多いかを示すことにより、間接的にデータの個数を示す。データ２６０５は、データ長が「８ビット」であるため、個数「３０」より何個多いかを「１〜２５５」の範囲で示す。
【０２３７】
これにより、データ２６０５は、上述した「８バイト」単位で分割して取得できるデータの個数を、「３１〜２８５（３０＋１〜３０＋２５５）」の範囲で示す。換言すれば、データ２６０５は、「２４８バイト〜２０３２バイト」の範囲内の８の倍数のデータ長のいずれかを示す。
【０２３８】
以降、参照先データのデータ長を示す可変長データは、上述した「８バイト」単位で分割して取得できるデータの個数が、当該個数を示すために使用中のデータでは示せなくなる都度、新たに当該個数を示すための８ビットのデータを追加する。そして、追加した８ビットのデータを使用して、「８バイト」単位で分割して取得できるデータの個数を示すことになる。
【０２３９】
図２７および図２８は、圧縮されなかった非圧縮データの一例、および、図２６に示した圧縮ルールによって圧縮された圧縮データの一例を示す説明図である。
【０２４０】
図２７（Ａ）は、圧縮されなかった非圧縮データの一例を示す。図２７（Ｂ）は、９バイト以下のデータ長の圧縮元データを圧縮した場合の圧縮データの一例を示す。図２７（Ｃ）は、９バイトより長いデータ長の圧縮元データを圧縮した場合の圧縮データの一例（その１）を示す。図２８（Ｄ）は、９バイトより長いデータ長の圧縮元データを圧縮した場合の圧縮データの一例（その２）を示す。
【０２４１】
図２７（Ａ）に示すように、圧縮元データ列ｄｓＨに含まれるデータが圧縮できないデータｄＨである場合がある。この場合、生成部２５０４は、圧縮できないデータｄＨを、非圧縮データｎｄＨとして、そのまま保存部２５０５に送る。また、生成部２５０４は、圧縮していないことを示す判別ビットｂＨ「０」を生成する。
【０２４２】
図２７（Ｂ）に示すように、圧縮元データ列ｄｓＩに、同一データになる圧縮元データｔｄＩと参照先データｒｄＩとがあり、圧縮元データｔｄＩが「９バイト」以下である場合がある。この場合、生成部２５０４は、「１３ビット」で、参照先データｒｄＩの相対位置「１０」を示す「０００００００００１０１０（１０）」を生成する。
【０２４３】
次に、生成部２５０４は、「３ビット」で、参照先データｒｄＩのデータ長「４バイト」を示す「００１（４）」を生成する。そして、生成部２５０４は、生成したデータを連結した圧縮データｃｄＩ「０００００００００１０１０（１０）００１（４）」を生成する。また、生成部２５０４は、圧縮したことを示す判別ビットｂＩ「１」を生成する。
【０２４４】
図２７（Ｃ）に示すように、圧縮元データ列ｄｓＪに、同一データになる圧縮元データｔｄＪと参照先データｒｄＪとがあり、圧縮元データｔｄＪが「９バイト」より大きい場合がある。ここでは、圧縮元データｔｄＪの位置から２バイト目が、圧縮元データ列ｄｓＪの先頭からアラインされて区切られた位置とする。
【０２４５】
この場合、生成部２５０４は、「１３ビット」で、参照先データｒｄＪの相対位置「２０」を示す「００００００００１０１００（２０）」を生成する。次に、生成部２５０４は、「３ビット」で、参照先データｒｄＪのデータ長が「９バイト」より大きいことを示す「１１１（１０）」を生成する。
【０２４６】
そして、生成部２５０４は、参照先データｒｄＪ「ｃｏｍｐｒｅｓｓｉｏｎ」のデータ長「１１バイト」から、圧縮元データｔｄＪの位置とアラインされて区切られた位置との区間長「２バイト」を減算する。次に、生成部２５０４は、減算結果の「９バイト」を、「８バイト」で除することにより、８バイト単位で分割して処理できる個数「１」を算出する。そして、生成部２５０４は、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「００００１（１）」を生成する。
【０２４７】
次に、生成部２５０４は、減算結果の「９バイト」から、算出した個数分の「８バイト」を減じて、端数データ長「１バイト」を算出する。そして、生成部２５０４は、１バイト単位で処理すべき端数データ長「１」を示すデータ「００１（１）」を生成する。次に、生成部２５０４は、生成したデータを連結した圧縮データｃｄＪ「００００００００１０１００（２０）１１１（１０）００００１（１）００１（１）」を生成する。また、生成部２５０４は、圧縮したことを示す判別ビットｂＪ「１」を生成する。
【０２４８】
図２８（Ｄ）に示すように、圧縮元データ列ｄｓＫに、同一データになる圧縮元データｔｄＫと参照先データｒｄＫとがあり、圧縮元データｔｄＫが「９バイト」より大きい場合がある。ここでは、圧縮元データｔｄＫの位置から２バイト目が、圧縮元データ列ｄｓＫの先頭からアラインされて区切られた位置とする。
【０２４９】
この場合、生成部２５０４は、「１３ビット」で、参照先データｒｄＫの相対位置「１１２０」を示す「００１０００１１０００００（１１２０）」を生成する。次に、生成部２５０４は、「３ビット」で、参照先データｒｄＫのデータ長が「９バイト」より大きいことを示す「１１１（１０）」を生成する。
【０２５０】
そして、生成部２５０４は、参照先データｒｄＫのデータ長「３０３バイト」から、圧縮元データｔｄＫの位置とアラインされて区切られた位置との区間長「２バイト」を減算する。次に、生成部２５０４は、減算結果の「３０１バイト」を、「８バイト」で除することにより、８バイト単位で分割して処理できる個数「３７」を算出する。そして、生成部２５０４は、８バイト単位で分割して処理できるデータの個数「３７」を示すために、５ビットで個数が「３０」より多いことを示すデータ「１１１１１（３１）」を生成する。そして、生成部２５０４は、８ビットで「３０」から「３７」までの不足分である「７」を示すことにより、個数「３７」を示すデータ「０００００１１０（３０＋７＝３７）」を生成する。
【０２５１】
次に、生成部２５０４は、減算結果の「３０１バイト」から、算出した個数分の「８バイト」を減じて、端数データ長「５バイト」を算出する。そして、生成部２５０４は、１バイト単位で処理すべき端数データ長「５」を示すデータ「１０１（５）」を生成する。そして、生成部２５０４は、生成したデータを連結した圧縮データｃｄＫ「００１０００１１０００００（１１２０）１１１（１０）１１１１１（３１）１０１（５）０００００１１０（３７）」を生成する。また、生成部２５０４は、圧縮したことを示す判別ビットｂＫ「１」を生成する。
【０２５２】
図２５に戻り、保存部２５０５は、後続データを生成された圧縮データに置換したデータ列を保存する。保存部２５０５による保存処理については、図３を用いて説明した処理と同様のため、説明を省略する。
【０２５３】
（データ列の圧縮の流れ）
次に、図２９〜図３４を用いて、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れについて説明する。
【０２５４】
図２９〜図３４は、実施例２にかかる情報処理装置１００によるデータ列の圧縮の流れを示す説明図である。図２９において、まず、情報処理装置１００は、情報処理装置１００の利用者によるキーボード２１０やマウス２１１などの入力装置の操作により、圧縮元データ列ｄｓＢを入力する。次に、情報処理装置１００は、入力された圧縮元データ列ｄｓＢを、入力バッファに格納する。
【０２５５】
そして、情報処理装置１００は、入力バッファに格納された圧縮元データ列ｄｓＢの先頭に圧縮ポインタ９００を設定する。次に、情報処理装置１００は、判別ビット列を格納する判別バッファ９１０と、圧縮データ列を格納する圧縮バッファ９２０と、を設定する。そして、情報処理装置１００は、圧縮元データ列ｄｓＢの圧縮を開始する。
【０２５６】
図２９において、（６１）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０２５７】
ここで、情報処理装置１００は、具体的には、例えば、図５に示した探索テーブル５００を参照して、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「０」を取得する。次に、情報処理装置１００は、位置情報が「０」であるため、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍ」と同一データになる先行データがなく、データ「ｃｏｍ」が圧縮できないと判定する。
【０２５８】
（６２）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（６３）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０２５９】
次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図３０の処理に移行する。
【０２６０】
図３０において、（６４）情報処理装置１００は、図２９と同様にして、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｏｍｐ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｏｍｐ」と同一データになる先行データを探索する。そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｏｍｐ」と同一データになる先行データがないため、データ「ｏｍｐ」が圧縮できないと判定する。
【０２６１】
（６５）次に、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｏ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（６６）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｏ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０２６２】
次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図３１の処理に移行する。
【０２６３】
図３１において、（６７）情報処理装置１００は、図２９と同様にして、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｍｐｒ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｍｐｒ」と同一データになる先行データを探索する。そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｍｐｒ」と同一データになる先行データがないため、データ「ｍｐｒ」が圧縮できないと判定する。
【０２６４】
（６８）次に、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｍ」を圧縮できなかったデータとして、そのまま、圧縮バッファ９２０に格納する。（６９）また、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｍ」を圧縮できなかったことを示す判別ビット「０」を判別バッファ９１０に格納する。
【０２６５】
以降、情報処理装置１００は、図２９〜図３１と同様にして、圧縮元データの「４バイト目」〜「１４バイト目」の各々の位置にあるデータを圧縮せずに圧縮バッファ９２０に格納したとする。次に、情報処理装置１００は、圧縮ポインタ９００を「１バイト」分、末尾側にシフトして、図３２の処理に移行する。
【０２６６】
図３２において、（７０）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０２６７】
ここで、情報処理装置１００は、具体的には、例えば、図５に示した探索テーブル５００を参照して、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「１４」を取得する。次に、情報処理装置１００は、位置情報が「１４」であるため、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍ」と同一データになる先行データが「１４バイト前」にあると判定する。そのため、情報処理装置１００は、「ｃｏｍ」を圧縮できると判定する。
【０２６８】
ここで、情報処理装置１００は、「ｃｏｍ」より末尾側のデータも、「ｃｏｍ」とまとめて圧縮できるか否かを判定する。情報処理装置１００は、具体的には、例えば、圧縮ポインタ９００が示す位置より「１バイト分」末尾側の位置に対応する先行データの位置情報「１４」を取得する。
【０２６９】
ここで、取得した先行データの位置情報「１４」は、圧縮ポインタ９００が示す位置に対応する先行データの位置情報「１４」と同一である。そのため、情報処理装置１００は、圧縮ポインタ９００が示す位置にあるデータ「ｃｏｍ」とまとめて、圧縮ポインタ９００が示す位置より「１バイト分」末尾側の位置にある「ｏｍｐ」を圧縮できると判定する。
【０２７０】
換言すれば、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「４バイト」のデータ「ｃｏｍｐ」を、「１４バイト前」にある先行データ「ｃｏｍｐ」を使用して、圧縮できると判定する。
【０２７１】
そして、情報処理装置１００は、同様にして、圧縮ポインタ９００が示す位置から始まる「８バイト」のデータ「ｃｏｍｐｒｅｓｓ」を、「１４バイト前」にある先行データ「ｃｏｍｐｒｅｓｓ」を使用して、圧縮できると判定する。
【０２７２】
次に、情報処理装置１００は、参照先データの相対位置を示す「１３ビット」のデータ「０００００００００１１１０（１４）」を生成する。また、情報処理装置１００は、参照先データのデータ長を示す「３ビット」のデータ「１０１（８）」を生成する。次に、情報処理装置１００は、生成したデータを連結した圧縮データ「０００００００００１１１０（１４）１０１（８）」を生成する。以降、圧縮データ「０００００００００１１１０（１４）１０１（８）」を、圧縮データ「１４，８」と表す。
【０２７３】
（７１）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓ」の代わりに、圧縮データ「１４，８」を圧縮バッファ９２０に格納する。（７２）また、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓ」を圧縮したことを示す判別ビット「１」を判別バッファ９１０に格納する。
【０２７４】
次に、情報処理装置１００は、圧縮ポインタ９００を、圧縮したデータのデータ長である「８バイト分」、末尾側にシフトして、図２９〜図３１と同様にして、圧縮元データの「２３バイト目」の位置にあるデータ「  （空白）」を圧縮せずに圧縮バッファ９２０に格納したとする。そして、情報処理装置１００は、圧縮ポインタ９００を「１バイト分」、末尾側にシフトしたとして、図３３の処理に移行する。
【０２７５】
図３３において、（７３）情報処理装置１００は、圧縮ポインタ９００が示す位置から始まる「３バイト」のデータ「ｃｏｍ」を取得する。次に、情報処理装置１００は、圧縮ポインタ９００が示す位置よりも先頭側から、取得したデータ「ｃｏｍ」と同一データになる先行データを探索する。
【０２７６】
ここで、情報処理装置１００は、図３２と同様にして、圧縮ポインタ９００が示す位置から始まる「１１バイト」のデータ「ｃｏｍｐｒｅｓｓｉｏｎ」を、「２３バイト前」にある先行データ「ｃｏｍｐｒｅｓｓｉｏｎ」を使用して、圧縮できると判定する。
【０２７７】
次に、情報処理装置１００は、参照先データの相対位置を示す「１３ビット」のデータ「００００００００１０１１１（２３）」を生成する。そして、情報処理装置１００は、参照先データのデータ長が９バイトより長いことを示す「３ビット」のデータ「１１１（１０）」を生成する。
【０２７８】
次に、情報処理装置１００は、圧縮ポインタ９００の示す位置から、圧縮ポインタ９００の直後に出現するアラインされて区切られた位置までの区間長「１バイト」を算出する。そして、情報処理装置１００は、参照先データのデータ長「１１バイト」から、区間長「１バイト」を減じて、「１０バイト」を算出する。
【０２７９】
次に、情報処理装置１００は、減算結果が「１０バイト」であるため、「１０バイト」のデータのうち、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「００００１（１）」を生成する。
【０２８０】
そして、情報処理装置１００は、参照先データから区間長分のデータを除いた「１０バイト」のデータのうち、個数分の８バイト単位のデータを処理した後に、１バイト単位で処理すべき端数データ長「２バイト」を示すデータ「０１０（２）」を生成する。次に、情報処理装置１００は、生成したデータを連結した圧縮データ「００００００００１０１１１（２３）１１１（１０）００００１（１）０１０（２）」を生成する。以降、圧縮データ「００００００００１０１１１（２３）１１１（１０）００００１（１）０１０（２）」を、圧縮データ「２３，１，２」と表す。
【０２８１】
（７４）そして、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓｉｏｎ」の代わりに、圧縮データ「２３，１，２」を圧縮バッファ９２０に格納する。（７５）また、情報処理装置１００は、圧縮ポインタ９００が示す位置から始まるデータ「ｃｏｍｐｒｅｓｓｉｏｎ」を圧縮したことを示す判別ビット「１」を判別バッファ９１０に格納する。
【０２８２】
次に、情報処理装置１００は、圧縮ポインタ９００を、圧縮したデータのデータ長である「１１バイト分」、末尾側にシフトして、図２９〜図３１と同様にして、圧縮元データの「３４バイト目」の位置にあるデータ「．」を圧縮せずに圧縮バッファ９２０に格納したとする。
【０２８３】
図２９〜図３３を用いて説明した処理により圧縮された圧縮データ列を図３４に示す。図３４に示すように、情報処理装置１００は、「３５バイト」の圧縮元データ列ｄｓＢを、「１８ビット」の判別ビット列ｂｓＬと、「２１バイト」の圧縮データ列ｃｄｓＬと、に変換している。従って、情報処理装置１００は、「３５バイト」の圧縮元データ列ｄｓＢを、「１８ビット」の判別ビット列ｂｓＬと、「２１バイト」の圧縮データ列ｃｄｓＬと、に変換したことになる。換言すれば、情報処理装置１００は、データ列のデータ長を、「（３５バイト）−（２１バイト＋１８ビット）＝（１１バイト＋６ビット）」のデータ長分、低減することができる。
【０２８４】
このように、情報処理装置１００は、データ列のサイズを低減することができる。結果として、情報処理装置１００は、データ列を保存する場合に、圧縮せずに保存する場合と比べて、使用する記憶領域のサイズを低減することができる。また、情報処理装置１００は、データ列を他のコンピュータに送信する場合に、データ列を圧縮してから送信することにより、送信時間を短縮することができる。
【０２８５】
（圧縮データ列および判別ビット列の保存例）
次に、図２９〜図３４に示した圧縮データ列ｃｄｓＬおよび判別ビット列ｂｓＬを記憶装置に保存する場合の保存例について説明する。ここで、圧縮データ列ｃｄｓＬおよび判別ビット列ｂｓＬの保存例は、図１５に示した圧縮データ列ｃｄｓＬおよび判別ビット列ｂｓＬの保存例と同様のため、説明を省略する。
【０２８６】
（データ列圧縮処理）
次に、図３５を用いて、図２９〜図３４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順について説明する。
【０２８７】
図３５は、図２９〜図３４に示したデータ列の圧縮を実現するデータ列圧縮処理の詳細な処理手順を示すフローチャートである。図３５に示すように、情報処理装置１００は、まず、入力バッファにある圧縮元データの中から、圧縮ポインタ９００が示す位置にある後続データと同一データになる先行データを検出する（ステップＳ３５０１）。
【０２８８】
次に、情報処理装置１００は、先行データが検出されたか否かを判定する（ステップＳ３５０２）。ここで、先行データが検出されなかった場合（ステップＳ３５０２：Ｎｏ）、情報処理装置１００は、圧縮しないことを示す判別ビット「０」を生成して、判別バッファ９１０に格納する（ステップＳ３５０３）。
【０２８９】
次に、情報処理装置１００は、後続データの先頭１バイト分のデータを、そのまま、圧縮バッファ９２０に格納する（ステップＳ３５０４）。そして、情報処理装置１００は、圧縮ポインタ９００を「１バイト分」末尾側にシフトする（ステップＳ３５０５）。
【０２９０】
次に、情報処理装置１００は、圧縮が終了したか否かを判定する（ステップＳ３５０６）。ここで、圧縮が終了した場合（ステップＳ３５０６：Ｙｅｓ）、情報処理装置１００は、データ列圧縮処理を終了する。
【０２９１】
一方、圧縮が終了していない場合（ステップＳ３５０６：Ｎｏ）、情報処理装置１００は、ステップＳ３５０１に戻る。以上のステップＳ３５０１〜ステップＳ３５０６を経由する処理により、情報処理装置１００は、圧縮できないデータを処理する。
【０２９２】
一方、ステップＳ３５０２において、先行データが検出された場合（ステップＳ３５０２：Ｙｅｓ）、情報処理装置１００は、圧縮することを示す判別ビット「１」を生成して、判別バッファ９１０に格納する（ステップＳ３５０７）。
【０２９３】
次に、情報処理装置１００は、先行データのデータ長が９バイトより長いか否かを判定する（ステップＳ３５０８）。ここで、先行データのデータ長が９バイト以下の場合（ステップＳ３５０８：Ｎｏ）、情報処理装置１００は、先行データの位置を示すデータと、先行データのデータ長を示すデータと、を生成して、圧縮バッファ９２０に格納する（ステップＳ３５０９）。
【０２９４】
次に、情報処理装置１００は、圧縮ポインタ９００を「先行データのデータ長分」末尾側にシフトする（ステップＳ３５１０）。そして、情報処理装置１００は、ステップＳ３５０６に移行する。以上のステップＳ３５０１，Ｓ３５０２，Ｓ３５０７〜Ｓ３５１０，Ｓ３５０６を経由する処理により、情報処理装置１００は、９バイト以下のデータ長であって圧縮可能なデータを圧縮する。
【０２９５】
一方、ステップＳ３５０８において、先行データのデータ長が９バイトより長い場合（ステップＳ３５０８：Ｙｅｓ）、情報処理装置１００は、先行データの位置を示すデータと、先行データのデータ長が９バイトより長いことを示すデータと、を生成する。次に、情報処理装置１００は、生成したデータを、圧縮バッファ９２０に格納する（ステップＳ３５１１）。
【０２９６】
次に、情報処理装置１００は、圧縮ポインタ９００が示す位置と、入力バッファの先頭からレジスタ幅ごとに区切られた区間のうちで圧縮ポインタ９００が示す位置を含む区間の末尾の位置と、の部分区間のデータ長を特定する。そして、情報処理装置１００は、先行データのデータ長から特定した部分区間のデータ長を減じてレジスタ幅で除した場合の商と剰余とを算出する。次に、情報処理装置１００は、算出した商を示すデータと、算出した剰余を示すデータと、を生成して、圧縮バッファ９２０に格納する（ステップＳ３５１２）。
【０２９７】
そして、情報処理装置１００は、ステップＳ３５１０に移行する。以上のステップＳ３５０１，Ｓ３５０２，Ｓ３５０７，Ｓ３５０８，Ｓ３５１１，Ｓ３５１２，Ｓ３５１０，Ｓ３５０６を経由する処理により、情報処理装置１００は、９バイトより長いデータ長であって圧縮可能なデータを圧縮する。
【０２９８】
（実施例２にかかる情報処理装置１００による圧縮データ列から圧縮元データ列ｄｓＢの復元）
次に、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元について、図３６〜図４２に示す。
【０２９９】
（実施例２にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例）
次に、図３６を用いて、実施例２にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例について説明する。図３６は、実施例２にかかる情報処理装置１００の圧縮元データ列ｄｓＢの復元に関する機能的構成例を示すブロック図である。情報処理装置１００は、特定部３６０１と、記憶部３６０２と、検出部３６０３と、取得部３６０４と、格納部３６０５と、を含む構成である。
【０３００】
特定部３６０１は、所定の記憶領域での書込先の位置と、所定の記憶領域の先頭から所定長単位で区切られた複数の位置のうち、書込先より末尾側にあり、かつ、書込先の位置から所定長分の範囲内にある位置と、の区間長を特定する。
【０３０１】
特定部３６０１は、具体的には、例えば、圧縮元データの位置と、データ列の先頭から８バイトごとにアラインされて区切られた区間のうちで圧縮元データの位置を含む区間の末尾の位置と、の間にある部分区間のデータ長を特定する。
【０３０２】
特定部３６０１は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、取得部３６０４は、部分区間のデータ長を参照して、参照先データを取得することができる。
【０３０３】
記憶部３６０２は、参照先となる非圧縮データの参照位置、所定長以上である非圧縮データの長さから区間長を減じた長さを所定長で除した商および剰余を有する圧縮データと、非圧縮データとを含む圧縮データ列を記憶する。参照先となる非圧縮データとは、例えば、上述した参照先データである。所定長とは、２の冪乗になるレジスタ幅であり、例えば、上述した８バイトである。
【０３０４】
圧縮データは、例えば、参照先データの相対位置「１４」を示すデータ「０００００００００１１１０（１４）」を有する。また、圧縮データは、例えば、参照先データが１０バイト以上であることを示すデータ「１１１（１０）」を有する。また、圧縮データは、例えば、参照先データから特定された区間長分のデータを除いたデータのうち、８バイト単位で分割して処理できるデータの個数「１」を示すデータ「００００１（１）」を有する。また、圧縮データは、１バイト単位で処理すべき端数データ長「３」を示すデータ「０１１（３）」を有する。
【０３０５】
記憶部３６０２は、具体的には、例えば、圧縮データと非圧縮データとを含む圧縮データ列、および判別ビット列を記憶する。記憶部３６０２は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置により、その機能を実現する。これにより、検出部３６０３は、記憶部３６０２に記憶された圧縮データ列および判別ビット列を取得することができる。
【０３０６】
検出部３６０３は、記憶部３６０２の中から、圧縮データを検出する。検出部３６０３は、具体的には、例えば、判別ビット列の中から判別ビットを取得し、取得した判別ビットに対応するデータが非圧縮データか圧縮データかを判定する。
【０３０７】
次に、検出部３６０３は、圧縮データと判定された場合、「１バイト分」のデータ「０００００００００１１１０（１４）１１１（１０）」を検出する。検出部３６０３は、検出したデータの末尾「３ビット」が参照先データのデータ長が「９バイト」より長いことを示す「１１１（１０）」であるため、後続の「１バイト分」のデータ「００００１（１）０１０（２）」をさらに検出する。
【０３０８】
このように、検出部３６０３は、圧縮データ「０００００００００１１１０（１４）１１１（１０）００００１（１）０１０（２）」を検出する。検出部３６０３は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、取得部３６０４は、検出部３６０３によって検出された圧縮データを使用して、参照先データを取得することができる。
【０３０９】
取得部３６０４は、検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、区間長となる第１のデータ列と、所定長に商を乗じた長さとなる所定長単位の第２のデータ列と、剰余分の長さとなる第３のデータ列と、を取得する。
【０３１０】
取得部３６０４は、具体的には、例えば、圧縮データ内の「０００００００００１１１０（１４）」から、参照先データの位置が圧縮データの位置より「１４バイト分」先頭側の位置であることを特定する。
【０３１１】
次に、取得部３６０４は、特定した位置から始まる参照先データのうち、区間長分のデータを取得する。そして、取得部３６０４は、「８バイト」に圧縮データ内の「００００１（１）」が示す商を乗じた「８バイト分」のデータを、「８バイト単位」でまとめて取得する。また、取得部３６０４は、圧縮データ内の「０１０（２）」が示す剰余分の「２バイト分」のデータを、「１バイト」ごとに取得する。
【０３１２】
また、圧縮を実行した他のプロセッサのレジスタ幅が、情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、取得部３６０４は、検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、第１のデータ列と、所定長の倍数に商を乗じた長さとなる所定長単位の第２のデータ列と、第３のデータ列と、を取得してもよい。
【０３１３】
取得部３６０４は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、取得部３６０４は、圧縮データと置換すべき参照先データを格納部３６０５に送ることができる。
【０３１４】
格納部３６０５は、第１のデータ列、第２のデータ列、および第３のデータ列を所定の記憶領域における書込先の位置から取得順に書き込む。格納部３６０５は、具体的には、例えば、参照先データ「ｃｏｍｐｒｅｓｓｉｏｎ」のうち、取得した区間長分のデータ「ｃ」を復元バッファ１８００に格納する。次に、格納部３６０５は、参照先データ「ｃｏｍｐｒｅｓｓｉｏｎ」のうち、「８バイト単位」で取得した「ｏｍｐｒｅｓｓｉ」を復元バッファ１８００に格納し、取得した「２バイト分」の「ｏｎ」を復元バッファ１８００に格納する。
【０３１５】
格納部３６０５は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、その機能を実現する。これにより、格納部３６０５は、圧縮データを参照先データの複製データと置換することができ、圧縮元データを復元することができる。
【０３１６】
また、格納部３６０５は、検出部３６０３によって非圧縮データと判定されたデータを、そのまま、復元バッファ１８００に格納する。これにより、格納部３６０５は、参照先データになる可能性がある非圧縮データを復元バッファ１８００に格納しておくことができる。
【０３１７】
（圧縮元データ列ｄｓＢの復元の流れ）
次に、図３７〜図４２を用いて、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れについて説明する。
【０３１８】
図３７〜図４２は、実施例２にかかる情報処理装置１００による圧縮元データ列ｄｓＢの復元の流れを示す説明図である。図３７において、まず、情報処理装置１００は、判別ビット列ｂｓＬの先頭に判別ポインタ１８１０を設定する。次に、情報処理装置１００は、圧縮データ列ｃｄｓＬの先頭に復元ポインタ１８２０を設定する。そして、情報処理装置１００は、復元した圧縮元データ列ｄｓＢを格納する復元バッファ１８００を設定する。
【０３１９】
図３７において、（８１）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（８２）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｃ」を取得する。
【０３２０】
（８３）そして、情報処理装置１００は、取得した非圧縮データ「ｃ」を、そのまま、復元バッファ１８００に格納する。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図３８の処理に移行する。
【０３２１】
図３８において、（８４）情報処理装置１００は、図３７と同様にして、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（８５）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｏ」を取得する。
【０３２２】
（８６）そして、情報処理装置１００は、取得した非圧縮データ「ｏ」を、そのまま、復元バッファ１８００に格納する。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図３９の処理に移行する。
【０３２３】
図３９において、（８７）情報処理装置１００は、図３７と同様にして、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（８８）次に、情報処理装置１００は、検出した判別ビットが「０」であるため、復元ポインタ１８２０が示す位置にあるデータが非圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「ｍ」を取得する。
【０３２４】
（８９）そして、情報処理装置１００は、取得した非圧縮データ「ｍ」を、そのまま、復元バッファ１８００に格納する。以降、情報処理装置１００は、図３７〜図３９と同様にして、圧縮データの「１バイト目」〜「１４バイト目」の各々の位置にあるデータを、そのまま、復元バッファ１８００に格納したとする。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図４０の処理に移行する。
【０３２５】
図４０において、（９０）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（９１）次に、情報処理装置１００は、検出した判別ビットが「１」であるため、復元ポインタ１８２０が示す位置にあるデータが圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「１４，８」を取得する。
【０３２６】
（９２）そして、情報処理装置１００は、取得した圧縮データ「１４，８」を参照して、参照先データが圧縮データより「１４バイト前」にあると判定する。次に、情報処理装置１００は、取得した圧縮データ「１４，８」を参照して、「８バイト分」の参照先データを、１バイト単位で取得して、復元バッファ１８００に格納する。
【０３２７】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトして、復元ポインタ１８２０を圧縮データのデータ長である「２バイト分」末尾側にシフトしたとする。そして、情報処理装置１００は、図３７〜図３９と同様にして、復元ポインタ１８２０が示す位置にある非圧縮データ「  （空白）」を復元バッファ１８００に格納したとする。次に、情報処理装置１００は、判別ポインタ１８１０を「１ビット分」末尾側にシフトして、復元ポインタ１８２０を「１バイト分」末尾側にシフトして、図４１の処理に移行する。
【０３２８】
図４１において、（９３）情報処理装置１００は、判別ポインタ１８１０が示す位置にある判別ビットを検出する。（９４）次に、情報処理装置１００は、検出した判別ビットが「１」であるため、復元ポインタ１８２０が示す位置にあるデータが圧縮データであると判定して、復元ポインタ１８２０が示す位置にあるデータ「２３，１，２」を取得する。
【０３２９】
（９５）そして、情報処理装置１００は、取得した圧縮データ「２３，１，２」を参照して、参照先データが圧縮データより「２３バイト前」にあると判定する。次に、情報処理装置１００は、復元バッファ１８００の現在の格納先位置から、格納先位置の直後に出現する復元バッファ１８００の先頭からアラインされて区切られた位置までの区間長「１バイト」を算出する。そして、情報処理装置１００は、算出した区間長「１バイト」のデータ「ｃ」を取得して、復元バッファ１８００に格納する。
【０３３０】
次に、情報処理装置１００は、取得した圧縮データ「２３，１，２」を参照して、参照先データからデータ「ｃ」を取得して残ったデータ「ｏｍｐｒｅｓｓｉｏｎ」のうち、「８バイト単位」で分割して処理できるデータの個数が「１」であると特定する。そして、情報処理装置１００は、残ったデータ「ｏｍｐｒｅｓｓｉｏｎ」のうち、１個目の「８バイト分」のデータ「ｏｍｐｒｅｓｓｉ」を取得して、復元バッファ１８００に格納する。
【０３３１】
次に、情報処理装置１００は、取得した圧縮データ「２３，１，２」を参照して、「１バイト単位」で処理すべき端数データ長が「３バイト」であると特定する。そして、情報処理装置１００は、参照先データからデータ「ｃ」とデータ「ｏｍｐｒｅｓｓｉ」を取得して残ったデータ「ｏｎ」を、１バイト単位で取得して、復元バッファ１８００に格納する。
【０３３２】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトして、復元ポインタ１８２０を圧縮データのデータ長である「３バイト分」末尾側にシフトしたとする。そして、情報処理装置１００は、図３７〜図３９と同様にして、復元ポインタ１８２０が示す位置にある非圧縮データ「．」を復元バッファ１８００に格納したとする。
【０３３３】
図３７〜図４１を用いて説明した処理により復元された圧縮元データ列ｄｓＢを図４２に示す。図４２に示すように、情報処理装置１００は、圧縮元データ列ｄｓＢを、損失なく復元することができる。また、情報処理装置１００は、圧縮元データ列ｄｓＢの復元において、８バイト単位で取得可能な参照先データがあれば、８バイト単位で取得して復元バッファ１８００に格納する。これにより、情報処理装置１００は、レジスタ幅を有効活用して、圧縮元データ列ｄｓＢの復元にかかる時間を短縮することができる。
【０３３４】
（圧縮元データ列復元処理）
次に、図４３を用いて、図３７〜図４２に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順について説明する。
【０３３５】
図４３は、図３７〜図４２に示した圧縮元データ列ｄｓＢの復元を実現する圧縮元データ列復元処理の詳細な処理手順を示すフローチャートである。図４３に示すように、情報処理装置１００は、まず、判別ポインタ１８１０が示す位置にある判別ビットを取得する（ステップＳ４３０１）。
【０３３６】
次に、情報処理装置１００は、取得した判別ビットを参照して、復元ポインタ１８２０が示す位置にあるデータが圧縮データか否かを判定する（ステップＳ４３０２）。ここで、非圧縮データである場合（ステップＳ４３０２：Ｎｏ）、情報処理装置１００は、復元ポインタ１８２０が示す位置にある１バイトのデータを取得して、復元バッファ１８００に格納する（ステップＳ４３０３）。
【０３３７】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「１バイト分」末尾側にシフトする（ステップＳ４３０４）。そして、情報処理装置１００は、復元が終了したか否かを判定する（ステップＳ４３０５）。ここで、復元が終了した場合（ステップＳ４３０５：Ｙｅｓ）、情報処理装置１００は、圧縮元データ列復元処理を終了する。
【０３３８】
一方、復元が終了していない場合（ステップＳ４３０５：Ｎｏ）、情報処理装置１００は、ステップＳ４３０１に戻る。以上のステップＳ４３０１〜Ｓ４３０５を経由する処理により、情報処理装置１００は、非圧縮データを処理する。
【０３３９】
一方、ステップＳ４３０２において、圧縮データである場合（ステップＳ４３０２：Ｙｅｓ）、情報処理装置１００は、圧縮データを参照して、参照先データの位置と、参照先データのデータ長と、を取得する（ステップＳ４３０６）。
【０３４０】
次に、情報処理装置１００は、取得した参照先データのデータ長が９バイトより長いか否かを判定する（ステップＳ４３０７）。ここで、参照先データのデータ長が９バイト以下の場合（ステップＳ４３０７：Ｎｏ）、情報処理装置１００は、参照先データの位置から、参照先データのデータ長分のデータを、１バイト単位で取得して、復元バッファ１８００に格納する（ステップＳ４３０８）。
【０３４１】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「圧縮データのデータ長分」末尾側にシフトする（ステップＳ４３０９）。そして、情報処理装置１００は、ステップＳ４３０５に移行する。
【０３４２】
以上のステップＳ４３０１，Ｓ４３０２，Ｓ４３０６〜Ｓ４３０９，Ｓ４３０５を経由する処理により、情報処理装置１００は、９バイト以下のデータ長である圧縮元データを復元する。
【０３４３】
一方、参照先データのデータ長が９バイトより長い場合（ステップＳ４３０７：Ｙｅｓ）、以降の処理を実行する。情報処理装置１００は、復元バッファ１８００の格納済データの末尾の位置と、復元バッファ１８００の先頭からレジスタ幅ごとに区切られた区間のうちで格納済データの末尾の位置を含む区間の末尾の位置と、の部分区間のデータ長を特定する。そして、情報処理装置１００は、参照先データを先頭から、特定した部分区間のデータ長分のデータを、１バイト単位で取得して、復元バッファ１８００に格納する（ステップＳ４３１０）。
【０３４４】
次に、情報処理装置１００は、取得した圧縮データを参照して、参照先データを、「８バイト単位」で分割して処理できるデータの個数を特定する。そして、情報処理装置１００は、参照先データから部分区間のデータ長分のデータを取得して残ったデータを、先頭から、特定した個数分の「８バイト分」のデータを取得して、復元バッファ１８００に格納する（ステップＳ４３１１）。
【０３４５】
次に、情報処理装置１００は、取得した圧縮データを参照して、参照先データを、「１バイト単位」で処理すべき端数データ長を特定する。そして、情報処理装置１００は、参照先データから個数分の「８バイト分」のデータを取得して残ったデータを、先頭から、１バイト単位で取得して、復元バッファ１８００に格納する（ステップＳ４３１２）。
【０３４６】
次に、情報処理装置１００は、判別ポインタ１８１０を「１バイト分」末尾側にシフトし、復元ポインタ１８２０を「圧縮データのデータ長分」末尾側にシフトする（ステップＳ４３１３）。そして、情報処理装置１００は、ステップＳ４３０５に移行する。
【０３４７】
以上のステップＳ４３０１，Ｓ４３０２，Ｓ４３０６，Ｓ４３０７，Ｓ４３１０〜Ｓ４３１３，Ｓ４３０５を経由する処理により、情報処理装置１００は、９バイトより長いデータ長である圧縮元データを復元する。
【０３４８】
以上説明したように、情報処理装置１００は、参照先データの先頭から、順に、復元バッファの書込先位置と書込先位置の次に出現するアラインされた位置との区間長分のデータを取得する。情報処理装置１００は、その後、圧縮データを参照して、残りのデータのうち、レジスタ幅単位で圧縮データが示す個数分のデータに分割して取得し、レジスタ単位で分割して取得しきれなかったデータを１バイト単位で分割して取得する。このように、情報処理装置１００は、プロセッサ２０１によりレジスタ幅分の非圧縮な参照先データをまとめて処理することにより、レジスタ幅分のデータを１バイトずつ順次処理するよりも、短時間で処理を終了することができる。
【０３４９】
これにより、情報処理装置１００は、レジスタ幅を効率的に活用して参照先データを処理することができ、データ復元の高速化を図ることができる。また、情報処理装置１００は、復元した圧縮元データを復元バッファに格納する際に、復元バッファ内のアラインされて区切られた区間内に、レジスタ幅単位で分割して取得したデータを格納することができる。これにより、情報処理装置１００は、格納するデータがアラインされて区切られた位置を跨がないようにして、データの格納にかかるアクセス回数の増大を抑制し、データ復元の高速化を図ることができる。
【０３５０】
また、圧縮を実行した他のプロセッサのレジスタ幅が、情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、情報処理装置１００は、圧縮データが示すレジスタ幅単位で分割して取得できるデータの個数に、プロセッサ２０１のレジスタ幅に対する圧縮を実行した他のプロセッサのレジスタ幅の割合を乗じた個数を算出してもよい。また、情報処理装置１００は、復元バッファの書込先位置と書込先位置の次に出現するアラインされた位置との区間長分を特定する。そして、情報処理装置１００は、参照先データの先頭から、順に、区間長分のデータを取得した後、算出した個数分にレジスタ幅単位で分割したデータを取得し、端数データ長分のデータを取得する。これにより、圧縮を実行した他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合であっても、データ復元が可能になる。
【０３５１】
また、情報処理装置１００は、復元を実行するプロセッサにおける復元バッファの書込先位置と書込先位置の次に出現するアラインされた位置との区間長を特定し、参照先データから特定した区間長分のデータを除いたデータ長を特定する。そして、情報処理装置１００は、圧縮元データを、参照先データの位置と、上述の除いたデータ長分のデータのうち、レジスタ幅単位で分割して取得できるデータの個数と端数データ長とを示す圧縮データに圧縮する。
【０３５２】
これにより、圧縮データを復元するプロセッサ２０１が、圧縮データを参照して、データを復元することが可能になる。具体的には、例えば、プロセッサ２０１は、参照先データのうち、先頭から順に、特定した区間長分のデータを取得する。情報処理装置１００は、その後、圧縮データを参照して、レジスタ幅単位で分割したデータを取得し、レジスタ幅単位で分割して取得しきれなかったデータを１バイト単位で分割して取得することにより、データを復元することができる。また、情報処理装置１００は、参照先データのデータ長を８の倍数で表すことにより、参照先データのデータ長をそのまま表した場合に比べて、２５６バイト以上の参照先データに関しての圧縮効率を向上させることができる。
【０３５３】
また、復元を実行する他のプロセッサのレジスタ幅が情報処理装置１００のプロセッサ２０１のレジスタ幅の倍数である場合がある。この場合、情報処理装置１００は、圧縮元データを、参照先データの位置と、上述の除いたデータ長分のデータのうち、当該レジスタ幅の倍数単位で分割して取得できるデータの個数と端数データ長とを示す圧縮データに圧縮する。これにより、復元を実行する他のプロセッサのレジスタ幅と、情報処理装置１００のプロセッサ２０１のレジスタ幅と、が異なる場合であっても、データ圧縮が可能になる。
【０３５４】
なお、本実施の形態で説明した圧縮方法または復元方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本圧縮プログラムまたは本復元プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本圧縮プログラムまたは本復元プログラムは、インターネット等のネットワークを介して配布してもよい。
【０３５５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０３５６】
（付記１）所定長のレジスタを有するプロセッサに、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データのうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データから前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得し、
前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を前記所定の記憶領域に書き込む、
処理を実行させることを特徴とする復元プログラム。
【０３５７】
（付記２）前記取得する処理は、
検出された圧縮データに含まれている参照位置から始まる参照先データのうち、前記所定長の倍数に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データから前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得する、
ことを特徴とする付記１に記載の復元プログラム。
【０３５８】
（付記３）所定長のレジスタを有するプロセッサに、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得し、
前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む、
処理を実行させることを特徴とする復元プログラム。
【０３５９】
（付記４）前記取得する処理は、
検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長の倍数に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得する、
ことを特徴とする付記３に記載の復元プログラム。
【０３６０】
（付記５）プロセッサに、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行させることを特徴とする圧縮プログラム。
【０３６１】
（付記６）前記生成する処理は、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さを前記所定長の倍数で除した商および剰余を有する圧縮データを生成する、
ことを特徴とする付記５に記載の圧縮プログラム。
【０３６２】
（付記７）プロセッサに、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行させることを特徴とする圧縮プログラム。
【０３６３】
（付記８）前記生成する処理は、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長の倍数で除した商および剰余を有する圧縮データを生成する、
ことを特徴とする付記７に記載の圧縮プログラム。
【０３６４】
（付記９）所定長のレジスタを有するプロセッサにより実行する復元装置であって、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部と、
前記圧縮データを前記圧縮データ列の中から検出する検出部と、
前記検出部によって検出された圧縮データに含まれている参照位置から始まる参照先データ列のうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データ列から前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得する取得部と、
前記取得部によって前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、前記取得部によって取得された第２のデータ列を前記所定の記憶領域に書き込む格納部と、
を有することを特徴とする復元装置。
【０３６５】
（付記１０）所定長のレジスタを有するプロセッサにより実行する復元装置であって、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定する特定部と、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部と、
前記圧縮データ列の中から、前記圧縮データを検出する検出部と、
前記検出部によって検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得する取得部と、
前記取得部によって取得された前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む格納部と、
を有することを特徴とする復元装置。
【０３６６】
（付記１１）プロセッサにより実行する圧縮装置であって、
データ列を記憶する記憶部と、
前記データ列の中から、先行データと、前記先行データと同一のデータである後続データと、を検出する検出部と、
前記検出部によって検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成する生成部と、
前記後続データを、前記生成部によって生成された圧縮データに置換した前記データ列を保存する保存部と、
を有することを特徴とする圧縮装置。
【０３６７】
（付記１２）プロセッサにより実行する圧縮装置であって、
データ列を記憶する記憶部と、
前記データ列の中から、先行データと、前記先行データと同一のデータである後続データと、を検出する検出部と、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定する特定部と、
前記検出部によって検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成する生成部と、
前記後続データを、前記生成部によって生成された圧縮データに置換した前記データ列を保存する保存部と、
を有することを特徴とする圧縮装置。
【０３６８】
（付記１３）所定長のレジスタを有するプロセッサが、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データ列のうち、前記所定長に前記商を乗じた長さとなる第１のデータ列を前記所定長単位で取得するとともに、前記参照先データ列から前記第１のデータ列を除いた前記剰余分の長さとなる第２のデータ列を取得し、
前記所定長単位で取得された第１のデータ列を所定の記憶領域に書き込むとともに、取得された第２のデータ列を前記所定の記憶領域に書き込む、
処理を実行することを特徴とする復元方法。
【０３６９】
（付記１４）所定長のレジスタを有するプロセッサが、
所定の記憶領域での書込先の位置と、前記所定の記憶領域の先頭から前記所定長単位で区切られた複数の位置のうち、前記書込先より末尾側にあり、かつ、前記書込先の位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
参照先となる非圧縮データの参照位置、前記所定長以上である前記非圧縮データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データと、前記非圧縮データとを含む圧縮データ列を記憶する記憶部の中から、前記圧縮データを検出し、
検出された圧縮データに含まれている参照位置から始まる参照先データの先頭から順に、前記区間長となる第１のデータ列と、前記所定長に前記商を乗じた長さとなる前記所定長単位の第２のデータ列と、前記剰余分の長さとなる第３のデータ列と、を取得し、
前記第１のデータ列、前記第２のデータ列、および前記第３のデータ列を前記所定の記憶領域における前記書込先の位置から取得順に書き込む、
処理を実行することを特徴とする復元方法。
【０３７０】
（付記１５）プロセッサが、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
検出された前記先行データの位置、所定長以上である前記先行データの長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行することを特徴とする圧縮方法。
【０３７１】
（付記１６）プロセッサが、
データ列を記憶する記憶部の中から、先行データと、前記先行データと同一のデータである後続データと、を検出し、
前記データ列での前記後続データの位置と、前記データ列の先頭から所定長単位で区切られた複数の位置のうち、前記後続データの位置より末尾側にあり、かつ、前記後続データの位置から前記所定長分の範囲内にある位置と、の区間長を特定し、
検出された前記先行データの位置、前記所定長以上である前記先行データの長さから前記区間長を減じた長さを前記所定長で除した商および剰余を有する圧縮データを生成し、
前記後続データを生成された圧縮データに置換した前記データ列を保存する、
処理を実行することを特徴とする圧縮方法。
【符号の説明】
【０３７２】
１００  情報処理装置
２５０１，３６０１  特定部
３０１，１７０１，２５０２，３６０２  記憶部
３０２，１７０２，２５０３，３６０３  検出部
３０３，２５０４  生成部
３０４，２５０５  保存部
１７０３，３６０４  取得部
１７０４，３６０５  格納部
【図１】
2014017629.tif 000003
【図２】
2014017629.tif 000004
【図３】
2014017629.tif 000005
【図４】
2014017629.tif 000006
【図５】
2014017629.tif 000007
【図６】
2014017629.tif 000008
【図７】
2014017629.tif 000009
【図８】
2014017629.tif 000010
【図９】
2014017629.tif 000011
【図１０】
2014017629.tif 000012
【図１１】
2014017629.tif 000013
【図１２】
2014017629.tif 000014
【図１３】
2014017629.tif 000015
【図１４】
2014017629.tif 000016
【図１５】
2014017629.tif 000017
【図１６】
2014017629.tif 000018
【図１７】
2014017629.tif 000019
【図１８】
2014017629.tif 000020
【図１９】
2014017629.tif 000021
【図２０】
2014017629.tif 000022
【図２１】
2014017629.tif 000023
【図２２】
2014017629.tif 000024
【図２３】
2014017629.tif 000025
【図２４】
2014017629.tif 000026
【図２５】
2014017629.tif 000027
【図２６】
2014017629.tif 000028
【図２７】
2014017629.tif 000029
【図２８】
2014017629.tif 000030
【図２９】
2014017629.tif 000031
【図３０】
2014017629.tif 000032
【図３１】
2014017629.tif 000033
【図３２】
2014017629.tif 000034
【図３３】
2014017629.tif 000035
【図３４】
2014017629.tif 000036
【図３５】
2014017629.tif 000037
【図３６】
2014017629.tif 000038
【図３７】
2014017629.tif 000039
【図３８】
2014017629.tif 000040
【図３９】
2014017629.tif 000041
【図４０】
2014017629.tif 000042
【図４１】
2014017629.tif 000043
【図４２】
2014017629.tif 000044
【図４３】
2014017629.tif 000045