"対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータに、2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、を実行させることを特徴とする検索プログラム。前記抽出工程は、さらに、前記検索文字列を構成する文字に関連付けられた葉から圧縮符号を抽出し、前記作成工程は、さらに、前記検索文字列を構成する文字について前記抽出工程によって抽出された圧縮符号と、前記検索文字列を構成する文字を特徴付ける情報を埋め込んだ前記検索文字列を構成する文字情報の置換文字と、を関連付けて、前記テーブルに格納し、前記判定工程は、前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列を構成する文字の圧縮符号と一致するか否かを判定し、前記伸長工程は、前記判定工程によって前記検索文字列を構成する文字の圧縮符号と一致すると判定された場合、前記検索文字列を構成する文字の圧縮符号に関連付けられた前記置換文字を前記伸長先に書き出すことを特徴とする請求項1に記載の検索プログラム。前記抽出工程は、前記第1の検索工程によって前記検索文字列が前記データベースから検索された場合、前記検索文字列に一致する単語に関連付けられた葉から圧縮符号を抽出し、前記作成工程は、前記検索文字列に一致する単語について前記抽出工程によって抽出された圧縮符号と、前記検索文字列に一致する単語を特徴付ける情報を埋め込んだ前記検索文字列に一致する単語の置換文字列と、を関連付けて、前記テーブルに格納し、前記判定工程は、前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列に一致する単語の圧縮符号と一致するか否かを判定し、前記伸長工程は、前記判定工程によって前記検索文字列に一致する単語の圧縮符号と一致すると判定された場合、前記検索文字列に一致する単語の圧縮符号に関連付けられた前記置換文字を前記伸長先に書き出すことを特徴とする請求項1に記載の検索プログラム。前記伸長工程は、前記圧縮ファイル内の前記判定工程によって前記連結圧縮符号と不一致な圧縮符号については、当該不一致な圧縮符号を有する葉に関連付けされた文字を前記データベースから抽出して、前記伸長先に書き出すことを特徴とする請求項1~3のいずれか一つに記載の検索プログラム。前記対象ファイルに出現する前記文字および前記単語を含む文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計工程と、前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築し、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の葉を関連付けることで、前記データベースを構築して、前記2N分枝無節点ハフマン木および前記データベースを前記記憶装置に格納する構築工程と、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮することにより、前記圧縮ファイルを前記記憶装置に格納する圧縮工程と、を前記コンピュータに実行させることを特徴とする請求項1~4のいずれか一つに記載の検索プログラム。前記決定工程は、前記文字情報の総種類数が2K1個より大きく2K個以下である場合は、前記上限長NをKビットに決定することを特徴とする請求項5に記載の検索プログラム。前記決定工程は、前記文字情報の総種類数が210個より大きく211個以下である場合は、前記上限長Nを11ビットに決定することを特徴とする請求項6に記載の検索プログラム。前記決定工程は、前記文字情報の総種類数が211個より大きく212個以下である場合は、前記上限長Nを12ビットに決定することを特徴とする請求項6に記載の検索プログラム。前記決定工程は、前記文字情報の総種類数が212個より大きく213個以下である場合は、前記上限長Nを13ビットに決定することを特徴とする請求項6に記載の検索プログラム。前記補正工程による補正後の前記上限長Nまでの各圧縮符号長での前記文字情報の種類数に基づいて、前記上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する算出工程と、前記算出工程によって算出された総和がしきい値以上1以下であるか否かを判断する判断工程と、前記判断工程によって前記しきい値以上1以下であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成する生成工程と、前記上限長Nまでの圧縮符号長に基づいて、前記生成工程によって生成された葉の構造体1つ当たりの枝数を、前記上限長Nまでの圧縮符号長ごとに特定する特定工程と、を前記コンピュータに実行させ、前記構築工程は、前記葉の構造体内の圧縮符号に前記特定工程によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成することにより、前記各葉の構造体についての前記葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築することを特徴とする請求項5~9のいずれか一つに記載の検索プログラム。前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を、前記総和で割ることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、前記算出工程は、前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、前記判断工程は、前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、前記生成工程は、前記判断工程によって前記再算出された総和が前記最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする請求項10に記載の検索プログラム。前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長のうち第1の圧縮符号長の前記文字情報の種類数を所定数減少させ、当該第1の圧縮符号長よりも大きい第2の圧縮符号長の前記文字情報の種類数を前記所定数増加させることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、前記算出工程は、前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、前記判断工程は、前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、前記生成工程は、前記判断工程によって前記再算出された総和が1以下の最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする請求項10に記載の検索プログラム。前記再算出された総和が1以下の最大値となるまで、前記更新工程による更新、前記算出工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づく前記総和の再算出、および、前記判断工程による再算出された総和が1以下の最大値であるか否かの判断を、前記コンピュータに繰り返し実行させることを特徴とする請求項11または12に記載の検索プログラム。対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能な検索装置であって、2個以上の文字からなる検索文字列の入力を受け付ける入力手段と、前記入力手段によって入力された検索文字列を前記データベースから検索する第1の検索手段と、前記第1の検索手段によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索手段と、前記第2の検索手段によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出手段と、前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成手段と、前記圧縮ファイル内の圧縮符号列が前記作成手段によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定手段と、前記判定手段によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長手段と、を備えることを特徴とする検索装置。対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータが、2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、を実行することを特徴とする検索方法。しかしながら、たとえば、基礎単語である結婚と活動で構成される結婚活動に関し、その略語婚活といった未登録単語を検索文字列として入力して検索をおこなう場合、婚活では検索結果は得られず、婚、活というように、文字ごとに検索をかけることとなる。また、婚、活と別々に検索した結果、結婚生活なども検索結果として得られることとなり、検索精度が低いという問題があった。本発明は、上述した従来技術による問題点を解消するため、基礎単語として登録されていない未登録単語であっても高精度な検索をおこなうことができる検索プログラム、検索装置、および検索方法を提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一観点として、対象ファイルのテキストデータを構成する単一文字、基礎単語、および予約語以下、文字情報と呼ぶに出現する各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能であり、2個の文字からなる検索文字列の入力を受け付け、入力された検索文字列を前記データベースから検索する場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索し、前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出し、前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなり、かつ、前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成し、前記圧縮ファイル内の圧縮符号列がテーブル内の連結圧縮符号と一致するか否かを判定し、一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す検索プログラム、検索装置、および検索方法が提案される。本発明にかかる検索プログラム、検索装置、および検索方法によれば、未登録単語であっても高精度な検索をおこなうことができるという効果を奏する。以下に添付図面を参照して、本発明にかかる検索プログラム、検索装置、および検索方法の実施の形態を詳細に説明する。なお、本明細書において、文字情報とは、テキストデータを構成する、単一文字、基礎単語、予約語などである。単一文字とは1つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。たとえば、UTFUnicodeTransformationFormat16の場合は16ビットコード、ASCIIAmericanStandardCodeforInformationInterchangeコードの場合は8ビットコード、シフトJISJapaneseIndustrialStandardコードの場合は8ビットコードである。シフトJISコードで日本語の文字を表現する場合は、2個の8ビットコードを組み合わせることとなる。また、単一文字以外に、たとえば、特定の文字列で表現される単語や予約語が挙げられる。単語としては、児童や生徒が学校教育で学習すべき数百~数千の基礎単語が挙げられる。基礎単語は出現頻度が高い文字列である。予約語とは、予め決められた文字列であり、たとえば、HTMLのタグたとえば、<br>が挙げられる。基礎単語および予約語を特殊単語と称す。なお、本実施の形態では、文字コードとしてUTF16を例に挙げて説明する。<情報検索例>まず、本実施の形態にかかる情報検索例について説明する。本実施の形態では、対象ファイルを圧縮した圧縮ファイルを圧縮状態のまま、検索文字列の圧縮文字列に一致する圧縮符号列と照合する。そして、照合の結果、不一致となった圧縮符号列については、そのまま伸長する。一方、一致した圧縮符号列については、あらかじめ作成しておいた照合/置換テーブル内の置換文字列に置換する。すなわち、本実施の形態では、情報検索に先立って、照合/置換テーブルを作成する作成処理を実行する。そして、作成された照合/置換テーブルを用いて、対象ファイルを圧縮した圧縮ファイルを圧縮状態のまま、照合、置換不一致の場合は置換せずしながら伸長する伸長処理を実行する。特に、本実施の形態では、検索文字列の圧縮文字列が基礎単語の圧縮符号に一致しなかった場合であっても、検索文字列がヒットしたとして伸長後の対象ファイルで強調表示する。たとえば、4文字熟語結婚活動のうち結婚と活動が基礎単語として登録されており、結婚活動の略語婚活は基礎単語として登録されていないとする。ここで、基礎単語ではない検索文字列婚活が与えられた場合、結婚や活動ではヒットしないため、単一文字婚、活のAND検索でヒットさせることとなる。この場合、文字通り婚活という文字列のほか、婚および活が単独でそれぞれヒットすることとなる。すなわち、たまたま対象ファイル内で婚活と記述されていれば、婚活がヒットするが、それ以外では、婚および活は、単独でヒットすることとなる。したがって、本実施の形態では、検索文字列のいわゆる泣き別れを防止することで、伸長処理ひいては検索処理の効率化を図る。図1は、本実施の形態にかかる情報検索例を示す説明図である。図1では、上述した婚活が検索文字列として与えられた例を示している。A例として、検索文字列婚活が与えられると、まず、コンピュータは、特殊単語の構造体100を2分探索する。特殊単語の構造体100とは、特殊単語と当該特殊単語に対応する2N分枝無節点ハフマン木の葉へのポインタとを、特殊単語ごとに格納したデータ構造体である。特殊単語の構造体100の詳細については、図51および図52で後述する。検索文字列婚活は基礎単語ではないため、特殊単語の構造体100ではヒットしない。また、2N分枝無節点ハフマン木とは、根から分岐する枝が2N本あり、1または複数本の枝で葉を直接ポイントするハフマン木である。節点内部節点はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。これらの詳細については、後述する。B検索文字列婚活が特殊単語の構造体100でヒットしなかった場合、コンピュータは、検索文字列婚活の先頭文字婚を末尾文字とする基礎単語と、検索文字列婚活の末尾文字活を先頭文字とする基礎単語とを探索する。この場合、先頭文字婚を末尾文字とする基礎単語結婚と末尾文字活を先頭文字とする基礎単語活動がヒットしたとする。C基礎単語結婚および基礎単語活動がヒットした場合、特殊単語の構造体100内の基礎単語結婚の葉へのポインタにより、2N分枝無節点ハフマン木の葉結婚がポイントされる。同様に、特殊単語の構造体100内の基礎単語活動の葉へのポインタにより、2N分枝無節点ハフマン木の葉活動がポイントされる。そして、コンピュータは、ポイントされた葉のうち、先頭文字婚を末尾文字とする基礎単語結婚の葉の構造体内にある照合フラグをONにする。照合フラグとは、その葉がポイントされた場合に、照合/置換テーブルを用いて照合をおこなうか否かを識別するフラグである。そして、コンピュータは、連続単語結婚活動の圧縮符号列と、連続単語結婚活動の置換文字列と、を含む照合/置換テーブルTを作成する。連続単語とは、先行の基礎単語の末尾に後続の基礎単語の先頭を連結させた文字列である。本例では、基礎単語結婚に基礎単語活動を連結した文字列結婚活動となる。また、連続単語の圧縮符号列とは、先行の基礎単語の圧縮符号の末尾に後続の基礎単語の圧縮符号の先頭を連結させた圧縮符号列である。本例では、基礎単語結婚の圧縮符号に基礎単語活動の圧縮符号を連結した圧縮符号列となる。すなわち、連続単語結婚活動の圧縮符号となる。連続単語の置換文字列とは、連続単語であり、かつ、連続単語のうち検索文字列に一致する文字列に特定の置換指示情報を埋め込んだ文字列である。本例の場合、連続単語結婚活動のうち検索文字列婚活に特定の置換指示情報を埋め込んだこととなる。特定の置換指示情報とは、検索文字列以外の表示形式とは異なる表示形式に置換する情報である。たとえば、検索文字列に一致する文字列を他の文字列とは異なる色にしたり、検索文字列に一致する文字列の背景色を他の文字列の背景色とは異なる色にしたりするために埋め込まれるタグである。たとえば、連続単語結婚活動については、置換文字列結<color>婚活</color>動とする。照合/置換テーブルTの作成の詳細については図2~図12で後述する。Dまた、コンピュータは、対象ファイル群を2N分枝無節点ハフマン木で圧縮した圧縮ファイル群fsから、検索文字列婚活を構成する婚および活を含む圧縮ファイルfiを絞り込む。圧縮ファイルの絞込みの詳細については後述する。Eこのあと、コンピュータは、Dで絞り込まれた圧縮ファイルを2N分枝無節点ハフマン木を用いて伸長後の文字列を伸長バッファに書き込む。この伸長中に、コンピュータは、圧縮ファイルから取り出された圧縮符号についての葉の構造体で照合フラグがONである場合、照合/置換テーブルTを参照する。本例の場合、基礎単語結婚の圧縮符号が取り出された場合、葉の構造体で照合フラグがONであるため、照合/置換テーブルTを参照する。そして、後続の圧縮符号までの圧縮符号列と照合/置換テーブルT内の圧縮符号列とが一致した場合、置換文字列を伸長バッファに書き込む。本例の場合、基礎単語活動の圧縮符号が、基礎単語結婚の圧縮符号の後続圧縮符号であるとすると、圧縮ファイルから連続して取り出された基礎単語結婚の圧縮符号とその後続の基礎単語活動の圧縮符号からなる圧縮符号列が、照合/置換テーブルTにあるか否かを判断する。本例では、連続単語結婚活動の圧縮符号列が照合/置換テーブルTに存在するため、連続単語結婚活動の置換文字列結<color>婚活</color>動を伸長バッファに書き込むこととなる。そして、伸長が完了すると、検索結果として伸長バッファの内容を表示することで、検索文字列婚活が他の文字列に対し強調表示されることとなる。<照合/置換テーブルTの作成例>つぎに、図1A~Cでの照合/置換テーブルTの作成例について説明する。図2~図8では、基礎単語ではない検索文字列の例として婚活が与えられた場合の照合/置換テーブルTの作成例を示す。また、比較するために、図9~図12では、基礎単語の例として結婚が検索文字列として与えられた場合の照合/置換テーブルTの作成例を示す。なお、照合/置換テーブルTの符号の末尾には、照合/置換テーブルTの作成の時系列を示す番号を0から昇順に付すこととする。たとえば、初期状態はT0とし、T0から更新されたらT1、T1から更新されたらT2、...とする。図2は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その1を示す説明図である。図2のT0は、初期化された照合/置換テーブルTである。照合/置換テーブルT0では、ポインタのアドレスp1、p2、...ごとに、圧縮符号長項目、圧縮符号項目、置換文字列項目からなるレコードが設定されているが、初期状態なので各項目内にはまだ値が設定されていない。1まず、検索文字列婚活が与えられると、コンピュータは、特殊単語の構造体100を2分探索する。2検索文字列婚活は特殊単語の構造体100には登録されていないため、コンピュータは、つぎに、特殊単語の構造体100において、検索文字列婚活の先頭文字婚を末尾文字とする基礎単語を2分探索する。3そして、コンピュータは、特殊単語の構造体100から、検索文字列婚活の先頭文字婚を末尾文字とする基礎単語結婚を特定する。4つぎに、3の2分探索でヒットした基礎単語結婚の葉Lへのポインタにより、2N分枝無節点ハフマン木の葉L結婚の構造体が指定される。葉Lの構造体には、圧縮符号、圧縮符号長、対応する文字構造体へのポインタ、照合フラグデフォルトはOFFが格納されている。図2の葉L結婚の構造体には、あらかじめ、基礎単語結婚の圧縮符号0101001000000、その圧縮符号長13ビット、特殊単語の構造体100の結婚へのポインタが格納されている。ここで、3で2分探索されたことで、照合フラグがOFFからONになる。5また、コンピュータは、照合/置換テーブルTの空きポインタp1を、葉L結婚における照合/置換テーブルTへのポインタとして設定する。6そして、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号長項目に、葉L結婚の構造体の圧縮符号長13ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号項目に、葉L結婚の構造体の圧縮符号0101001000000を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの置換文字列項目に、結婚の置換文字列結<color>婚</color>を書き込む。ここでの置換文字列結<color>婚</color>は、検索文字列婚活の先頭文字、すなわち、3でヒットした基礎単語結婚の末尾文字婚に特定の置換指示情報が埋め込まれた文字列となる。これにより、照合/置換テーブルT0は照合/置換テーブルT1に更新される。図3は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その2を示す説明図である。7図2の6のあと、コンピュータは、特殊単語の構造体100において、検索文字列婚活の末尾文字活を先頭文字とする基礎単語を2分探索する。8そして、コンピュータは、特殊単語の構造体100から、検索文字列婚活の末尾文字活を先頭文字とする基礎単語活用を特定する。コンピュータは、基礎単語活用が特定されると、基礎単語活用についての葉L活用へのポインタにより、葉L活用の構造体をポイントする。9つぎに、コンピュータは、照合/置換テーブルTへのポインタp1で指定されるレコードの値圧縮符号長13ビット、圧縮符号0101001000000置換文字列結<color>婚</color>を、空きポインタp2のレコードにコピーする。これにより、照合/置換テーブルT1は照合/置換テーブルT2に更新される。10そして、コンピュータは、照合/置換テーブルTへのポインタp1で特定される圧縮符号長13ビットに、葉L活用の構造体に格納されている圧縮符号長13ビットを加算して26ビットとする。また、コンピュータは、照合/置換テーブルTへのポインタp1で特定される圧縮符号0101001000000の末尾に、葉L活用の構造体に格納されている圧縮符号0101001000001を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp1で特定される置換文字列結<color>婚</color>の末尾に、基礎単語活用の置換文字列<color>活</color>用を連結する。ここで、置換文字列<color>活</color>用は、検索文字列婚活の末尾文字、すなわち、8でヒットした基礎単語活用の先頭文字活に特定の置換指示情報が埋め込まれた文字列となる。連結後の置換文字列は、以下のようになる。結<color>婚</color><color>活</color>用この場合、冗長さを回避するため、婚と活との間の</color><color>を削除して、結<color>婚活</color>用を連結後の置換文字列とする。すなわち、終了タグと開始タグが連続した場合には削除する。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。図4は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その3を示す説明図である。11図3の8のあと、さらに、コンピュータは、検索文字列婚活の末尾文字活を先頭文字とする基礎単語について、特殊単語の構造体100の2分探索を続け、検索文字列婚活の末尾文字活を先頭文字とする基礎単語活動を特定する。コンピュータは、基礎単語活動が特定されると、基礎単語活動についての葉L活動へのポインタにより、葉L活動の構造体をポイントする。12つぎに、コンピュータは、図3の9でコピー対象となった照合/置換テーブルTへのポインタp2を、葉L結婚の構造体葉L活動の構造体ではなくに格納する。13これにより、葉L結婚の構造体は、照合/置換テーブルTにおけるポインタp1のレコードおよびp2のレコードに指定することができる。14このあと、コンピュータは、照合/置換テーブルTへのポインタp2で特定される圧縮符号長13ビットに、葉L活動の構造体に格納されている圧縮符号長13ビットを加算して26ビットとする。また、コンピュータは、照合/置換テーブルTへのポインタp2で特定される圧縮符号0101001000000の末尾に、葉L活動の構造体に格納されている圧縮符号0101001000010を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp2で特定される置換文字列結<color>婚</color>の末尾に、基礎単語活動の置換文字列<color>活</color>動を連結する。ここで、置換文字列<color>活</color>動は、検索文字列婚活の末尾文字、すなわち、11でヒットした基礎単語活動の先頭文字活に特定の置換指示情報が埋め込まれた文字列となる。連結後の置換文字列は、以下のようになる。結<color>婚</color><color>活</color>動この場合、冗長さを回避するため、婚と活との間の</color><color>を削除して、結<color>婚活</color>動を連結後の置換文字列とする。これにより、照合/置換テーブルT3は照合/置換テーブルT4に更新される。これにより、検索文字列婚活についての更新は完了し、図5~図8では、単一文字婚、活についての更新を説明する。図5は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その4を示す説明図である。15まず、コンピュータは、高位文字コードの構造体500において、検索文字列婚活のうち先頭文字婚を2分探索する。高位文字コードの構造体500は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。高位文字コードとは、対象ファイル群に記述されている文字の出現回数を集計した結果、上位所定番目たとえば、1024位までの文字群をいう。すなわち、高位文字コードの構造体500でヒットした文字は、上位所定番目に入る高出現頻度の文字である。本例の文字婚は、高位文字コードの構造体500でヒットしなかったものとする。16コンピュータは、高位文字コードの構造体500でヒットしなかった低出現頻度の文字婚の文字コード5A5Aを上位8ビット0x5Aと下位8ビット0x5Aとに分割する。UTF16ビットコードの文字は、8ビットコードの組み合わせで表現されるため、低出現頻度の文字については分割することで、低出現頻度の文字の総数を、たかだか256個に抑えることができる。図6は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その5を示す説明図である。17コンピュータは、分割文字コードの構造体において、図5の16で分割された上位分割文字コード0x5Aを2分探索する。分割文字コードの構造体は、分割文字コードとその葉L♯へのポインタを格納するデータ構造体である。分割文字コードの構造体600についての2分探索では、かならずヒットすることとなる。18そして、分割文字コード0x5Aがヒットするため、対応する葉L0x5Aへのポインタにより、2N分枝無節点ハフマン木の葉L0x5Aの構造体が指定される。図6の葉L0x5Aの構造体には、あらかじめ、分割文字コード0x5Aの圧縮符号010100110110、その圧縮符号長12ビット、分割文字コードの構造体600の0x5Aへのポインタが格納されている。19そして、コンピュータは、指定された葉L0x5Aの構造体の照合フラグをONにする。20また、コンピュータは、照合/置換テーブルTの空きポインタp3を、葉L0x5Aの構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp3で指定されるレコードにアクセスすることができる。21そして、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号長項目に、葉L0x5Aの構造体の圧縮符号長12ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号項目に、葉L0x5Aの構造体の圧縮符号010100110110を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの置換文字列項目に、0x5Aの置換文字列<color>0x5A</color>を書き込む。これにより、照合/置換テーブルT4は照合/置換テーブルT5に更新される。図7は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その6を示す説明図である。22コンピュータは、分割文字コードの構造体600において、図5の16で分割された下位分割文字コード0x5Aを2分探索する。23そして、分割文字コード0x5Aがヒットするため、対応する葉L0x5Aへのポインタにより、2N分枝無節点ハフマン木の葉L0x5Aの構造体が指定される。24そして、コンピュータは、上位分割文字コード0x5Aの構造体で設定された照合/置換テーブルTのポインタp3で特定される圧縮符号長12ビットに、葉L0x5Aの構造体に格納されている圧縮符号長12ビットを加算して24ビットとする。また、コンピュータは、照合/置換テーブルTへのポインタp3で特定される圧縮符号010100110110の末尾に、葉L0x5Aの構造体に格納されている圧縮符号010100110110を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp3で特定される置換文字列<color>0x5A</color>の末尾に、下位分割文字コード0x5Aの置換文字列<color>0x5A</color>を連結する。連結後の置換文字列は、以下のようになる。<color>0x5A</color><color>0x5A</color>この場合、冗長さを回避するため、上位分割文字コード0x5Aと下位分割文字コード0x5Aとの間の</color><color>を削除して、<color>婚</color>を連結後の置換文字列とする。これにより、照合/置換テーブルT5は照合/置換テーブルT6に更新される。これにより、単一文字婚についての更新は完了する。図8は、基礎単語ではない検索文字列婚活が与えられた場合の照合/置換テーブルTの作成例その7を示す説明図である。25まず、コンピュータは、高位文字コードの構造体500において、検索文字列婚活のうち末尾文字活を2分探索する。26そして、末尾文字活は高出現頻度の文字であるため、高位文字コードの構造体500でヒットすることとなる。27そして、対応する葉L活へのポインタにより、2N分枝無節点ハフマン木の葉L活の構造体が指定される。図8の葉L活の構造体には、あらかじめ、高位文字活の圧縮符号001110010、その圧縮符号長9ビット、高位文字コードの構造体500の活へのポインタが格納されている。そして、コンピュータは、指定された葉L活の構造体の照合フラグをONにする。28また、コンピュータは、照合/置換テーブルTの空きポインタp4を、葉L活の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp4で指定されるレコードにアクセスすることができる。29そして、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの圧縮符号長項目に、葉L活の構造体の圧縮符号長9ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの圧縮符号項目に、葉L活の構造体の圧縮符号001110010を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの置換文字列項目に、活の置換文字列<color>活</color>を書き込む。これにより、照合/置換テーブルT6は照合/置換テーブルT7に更新される。図9は、基礎単語結婚が検索文字列として与えられた場合の照合/置換テーブルTの作成例その1を示す説明図である。1まず、コンピュータは、特殊単語の構造体100において、検索文字列結婚を2分探索する。2検索文字列結婚は特殊単語の構造体100に登録されているため、ヒットする。そして、対応する葉L結婚へのポインタにより、2N分枝無節点ハフマン木の葉L結婚の構造体が指定される。図9の葉L結婚の構造体には、あらかじめ、基礎単語結婚の圧縮符号0101001000000、その圧縮符号長13ビット、特殊単語の構造体100の結婚へのポインタが格納されている。3そして、コンピュータは、指定された葉L結婚の構造体の照合フラグをONにする。4また、コンピュータは、照合/置換テーブルTの空きポインタp1を、葉L結婚の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp1で指定されるレコードにアクセスすることができる。5そして、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号長項目に、葉L結婚の構造体の圧縮符号長13ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号項目に、葉L結婚の構造体の圧縮符号0101001000000を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの置換文字列項目に、結婚の置換文字列<color>結婚</color>を書き込む。これにより、照合/置換テーブルT0は照合/置換テーブルT1に更新される。図10は、基礎単語結婚が検索文字列として与えられた場合の照合/置換テーブルTの作成例その2を示す説明図である。6つぎに、検索文字列結婚を単一文字結,婚に分割する。7そして、コンピュータは、高位文字コードの構造体500において、先頭の単一文字結を2分探索する。単一文字結は高出現頻度の文字であるため、高位文字コードの構造体500でヒットすることとなる。このあと、対応する葉L結へのポインタにより、2N分枝無節点ハフマン木の葉L結の構造体が指定される。図10の葉L結の構造体には、あらかじめ、高位文字結の圧縮符号0000100、その圧縮符号長7ビット、高位文字コードの構造体500の結へのポインタが格納されている。8そして、コンピュータは、指定された葉L結の構造体の照合フラグをONにする。9また、コンピュータは、照合/置換テーブルTの空きポインタp2を、葉L結婚の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp2で指定されるレコードにアクセスすることができる。10そして、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの圧縮符号長項目に、葉L結の構造体の圧縮符号長7ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの圧縮符号項目に、葉L結の構造体の圧縮符号0000100を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの置換文字列項目に、結の置換文字列<color>結</color>を書き込む。これにより、照合/置換テーブルT1は照合/置換テーブルT2に更新される。図11は、基礎単語結婚が検索文字列として与えられた場合の照合/置換テーブルTの作成例その3を示す説明図である。図10の10のあと、コンピュータは、高位文字コードの構造体500において、検索文字列結婚のうち末尾文字婚を2分探索するが、図5に示したように、単一文字婚は低出現頻度の文字であるため、高位文字コードの構造体500でヒットしない。11したがって、コンピュータは、高位文字コードの構造体500でヒットしなかった低出現頻度の文字婚の文字コード5A5Aを上位8ビット0x5Aと下位8ビット0x5Aとに分割する。UTF16ビットコードの文字は、8ビットコードの組み合わせで表現されるため、低出現頻度の文字については分割することで、低出現頻度の文字の総数を、たかだか256個に抑えることができる。12コンピュータは、分割文字コードの構造体600において、11で分割された上位分割文字コード0x5Aを2分探索する。この場合、分割文字コード0x5Aがヒットするため、対応する葉L0x5Aへのポインタにより、2N分枝無節点ハフマン木の葉L0x5Aの構造体が指定される。図11の葉L0x5Aの構造体には、あらかじめ、分割文字コード0x5Aの圧縮符号010100110110、その圧縮符号長12ビット、分割文字コードの構造体600の0x5Aへのポインタが格納されている。13そして、コンピュータは、指定された葉L0x5Aの構造体の照合フラグをONにする。14また、コンピュータは、照合/置換テーブルTの空きポインタp3を、葉L0x5Aの構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp3で指定されるレコードにアクセスすることができる。15そして、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号長項目に、葉L0x5Aの構造体の圧縮符号長12ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号項目に、葉L0x5Aの構造体の圧縮符号010100110110を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの置換文字列項目に、0x5Aの置換文字列<color>0x5A</color>を書き込む。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。下位分割文字コード0x5Aについても、図6および図7のように、12、14、15の処理をおこなう。具体的には、15において、コンピュータは、上位分割文字コード0x5Aの構造体で設定された照合/置換テーブルTのポインタp3で特定される圧縮符号長12ビットに、葉L0x5Aの構造体に格納されている圧縮符号長12ビットを加算して24ビットとする。また、コンピュータは、照合/置換テーブルTへのポインタp3で特定される圧縮符号010100110110の末尾に、葉L0x5Aの構造体に格納されている圧縮符号010100110110を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp3で特定される置換文字列<color>0x5A</color>の末尾に、下位分割文字コード0x5Aの置換文字列<color>0x5A</color>を連結する。連結後の置換文字列は、以下のようになる。<color>0x5A</color><color>0x5A</color>この場合、冗長さを回避するため、上位分割文字コード0x5Aと下位分割文字コード0x5Aとの間の</color><color>を削除して、<color>婚</color>を連結後の置換文字列とする。すなわち、終了タグと開始タグが連続した場合には削除する。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。これにより、単一文字婚についての更新は完了する。<2N分枝無節点ハフマン木のサイズ決定方法>図12は、2N分枝無節点ハフマン木のサイズ決定方法の一例を示す説明図である。文字情報群の総種類数Xが、どの範囲にあるかで、適用される2N分枝無節点ハフマン木のサイズが決定される。2N分枝無節点ハフマン木のサイズとは、最大枝数2Nである。べき数Nは、圧縮符号長の上限となる。したがって、2N分枝無節点ハフマン木のサイズを決定する場合は、べき数Nを文字情報群の総種類数Xに応じて決定すればよい。具体的には、文字情報群の総種類数Xが2x2<X≦2x1である場合、少なくとも最大枝数2Nが2x1本あればハフマン木が構築できる。サイズを最小限にするには、N=x-1とすればよい。また、文字情報群の総種類数Xが2x1<X≦2xである場合、少なくとも最大枝数2Nが2x本あればハフマン木が構築できる。サイズを最小限にするには、N=xとすればよい。また、文字情報群の総種類数Xが2x<X≦2x1である場合、少なくとも最大枝数2Nが2x1本あればハフマン木が構築できる。サイズを最小限にするには、N=x1とすればよい。たとえば、文字情報群の総種類数X=1305個である場合、210<X≦211となるため、最大枝数2Nのべき数Nは、N=11となる。したがって、211分枝無節点ハフマン木が生成され、最大でも11ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。また、文字情報群の総種類数X=3048個である場合、211<X≦212となるため、最大枝数2Nのべき数Nは、N=12となる。したがって、212分枝無節点ハフマン木が生成され、最大でも12ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。さらに、文字情報群の総種類数X=5401個である場合、212<X≦213となるため、最大枝数2Nのべき数Nは、N=13となる。したがって、213分枝無節点ハフマン木が生成され、最大でも13ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。<2N分枝無節点ハフマン木の生成までの流れ>図13は、2N分枝無節点ハフマン木の生成までの流れを示す説明図である。1出現回数の集計まず、コンピュータは、対象ファイル群に存在する文字情報の出現回数を計数する。計数対象となる対象ファイル群は、たとえば、文書ファイル、Webページなどの電子データであり、たとえば、テキスト形式、HTMLHyperTextMarkupLanguage形式、XMLExtensibleMarkupLanguage形式の電子データである。また、単一の対象ファイルを計数対象としてもよい。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として1305個<2048=211とする。2圧縮符号長算出つぎに、1で得られた集計結果を基にして、コンピュータは、文字情報ごとの圧縮符号長を算出する。具体的には、コンピュータは、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、コンピュータは、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。生起確率は、1/2xで表現される。xはべき数である。圧縮符号長は、生起確率のべき数xとなる。具体的には、出現率が生起確率の以下のどの範囲であるかで圧縮符号長が決定される。ARは出現率である。1/20>AR≧1/21圧縮符号長は1ビット。1/21>AR≧1/22圧縮符号長は2ビット。1/22>AR≧1/23圧縮符号長は3ビット。1/23>AR≧1/24圧縮符号長は4ビット。1/2N1>AR≧1/2N圧縮符号長はNビット。3葉数特定つぎに、コンピュータは、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。図13では、最大圧縮符号長は17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。4葉数補正つぎに、コンピュータは、葉数を補正する。具体的には、コンピュータは、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット~17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、コンピュータは、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26、27として葉当たりの枝数を決定する。たとえば、図13では、圧縮符号長11ビットの圧縮符号が割り当てられる文字情報の総数葉数は1215個であるが、その葉当たりの枝数は1である。圧縮符号長11ビットの圧縮符号が割り当てられる文字情報については、それぞれ1本の枝しか割り当てられないこととなる。一方、圧縮符号長6ビットの圧縮符号が割り当てられる文字情報の総数葉数は6個であるが、その葉当たりの枝数は32である。圧縮符号長6ビットの圧縮符号が割り当てられる文字情報については、それぞれ32本の枝が割り当てられることとなる。5葉の構造体生成つぎに、コンピュータは、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字0の圧縮符号長は6ビットであり、圧縮符号は000000となる。図13の例では、文字情報の種類数葉数は1305個であるため、葉L1の構造体~葉L1305の構造体が生成されることとなる。6葉へのポインタ生成つぎに、コンピュータは、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉L1である文字0に割り当てられた圧縮符号000000の圧縮符号長は6ビットであるため、葉L1当たりの枝数は32本である。したがって、葉L1へのポインタの先頭6ビットは、圧縮符号000000となる。後続ビット列は、葉L1当たりの枝数で表現される32=25種のビット列となる。すなわち、32種の5ビットのビット列が圧縮符号000000の後続ビット列となる。したがって、葉L1へのポインタは、先頭6ビットが000000で固定された32種の11ビットのビット列となる。なお、葉当たりの枝数が1本の場合は、葉へのポインタは1個であり、圧縮符号とその葉へのポインタは同一ビット列となる。72N分枝無節点ハフマン木の構築最後に、コンピュータは、2N分枝無節点ハフマン木を構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する2N分枝無節点ハフマン木が構築される。圧縮符号列が、先頭6ビットが000000の11ビットのビット列である場合、後続の5ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木により文字0の葉L1の構造体をポイントすることができる。<1出現回数の集計の詳細>図14は、図2の1出現回数の集計の詳細を示す説明図である。コンピュータは、対象ファイル群Fs内の文字コードについて出現回数を集計して降順にソートする。そして、高位たとえば、1~1024位までの文字コードと低位1025位以下の文字コードに分ける。高位の文字コードは出現頻度が高いため、16ビットコードとして圧縮符号を割り当てる。低位の文字コードは、上位8ビットと下位8ビットに分割する。16ビットコードでは最大で65536256×256種の文字を扱えるが、低位の文字コードを、8ビットで分割することにより、6万種以上ある低位の文字コードを256種の分割文字コードに抑えることができる。たとえば、漢字の兎の16ビットの文字コードは0x514Eであるため、上位8ビット0x51と下位8ビット0x4Eに分割する。同様に、漢字の兆の16ビットの文字コードは0x5146であるため、上位8ビット0x51と下位8ビット0x46に分割する。そして、分割された8ビットの分割文字コードの出現頻度を集計する。この兎および兆の例では、分割文字コード0x51の出現頻度は2回、分割文字コード0x4E,0x46は1回となる。また、<p>や<p/>といったタグなどを予約語とする。予約語は数十種例として25種決めておく。また、必要に応じて基礎単語も決めておく。基礎単語は例として4096種としておく。そして、高位文字コード群、分割文字コード群および予約語群、基礎単語群を混在させて出現頻度を再集計し、出現頻度の降順に再ソートする。再ソート結果が図13の集計結果となる。基礎単語群を集計しない場合、出現頻度の降順にソートされた1305種の文字情報が得られる。文字情報の種類数をこの程度の数に抑えることで、16ビットの文字コードを12ビット以下の圧縮符号に圧縮し、圧縮符号を16ビットの文字コードに伸長することが可能となる。また、基礎単語群を集計する場合、出現頻度の降順にソートされた5401種の文字情報が得られる。4096種の基礎単語を集計すると、16ビットの文字コードを13ビット以下の圧縮符号に圧縮することができ、圧縮符号を16ビットの文字コードに伸長することが可能となる。また、基礎単語は16ビットコードが複数連結された文字列であるため、文字数がn個である場合、n×16ビットコードをたかだか13ビット以下の圧縮符号に圧縮でき、その圧縮符号をn×16ビットコードの基礎単語に伸長することができる。つぎに、出現マップ群1501~1503について説明する。出現マップ群とは、出現マップの集合である。出現マップ群は、高位文字、分割文字コード、特殊単語ごとに用意される。各出現マップ群を構成する出現マップは、文字情報ごとに存在する対象ファイルの番号に対応するビットをONたとえば、1にし、存在しない対象ファイルの番号に対応するビットをOFFたとえば、0にしたビット列である。出現マップは、対象ファイル群Fsを対象ファイルごとに集計する際に生成される。図15は、文字情報が高位文字である場合の出現マップ群1501を示す説明図である。図15の出現マップ群1501では、高位文字ごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち1になっているファイル番号の対象ファイルに、その高位文字が少なくとも1回出現したことを示している。たとえば、高位文字結は、対象ファイルF1、F3に少なくとも1回出現し、対象ファイルF2,Fnには1回も出現しない。図16は、文字情報が分割文字コードである場合の出現マップ群1502を示す説明図である。図16の出現マップ群1502では、分割文字コードごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち1になっているファイル番号の対象ファイルに、その分割文字コードが少なくとも1回出現したことを示している。たとえば、分割文字コード0x5Aは、対象ファイルF1~F3に少なくとも1回出現し、対象ファイルFnには1回も出現しない。すなわち、分割文字コード0x5Aを上位ビットまたは下位ビットとする文字が対象ファイルF1~F3に存在する。図17は、文字情報が特殊単語である場合の出現マップ群1503を示す説明図である。図17の出現マップ群1503では、特殊単語ごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち1になっているファイル番号の対象ファイルに、その特殊単語が少なくとも1回出現したことを示している。たとえば、特殊単語結婚は、対象ファイルF3に少なくとも1回出現し、対象ファイルF1,F2,Fnには1回も出現しない。<2圧縮符号長算出の詳細N=11>図18は、図13の2圧縮符号長算出の詳細N=11を示す説明図である。図18の文字情報テーブルは、図14の集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目~総回数項目までが図3の再ソート結果で得られた情報である。ここで、順位項目には、文字情報の出現回数の降順に順位昇順が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。16は16ビットコードの単一文字を示している。8は8ビットの分割文字コードを示している。特は特殊単語基礎単語または予約語を示している。文字情報項目のうちコード項目には、高位文字コードまたは分割文字コードが書き込まれている。特殊単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や特殊単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Fsでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率1/2yのべき数yが圧縮符号長として書き込まれている。<3葉数特定~5葉の構造体生成の詳細N=11>図19は、図13の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図18の文字情報テーブルを圧縮符号長単位で葉数文字情報の総種類数を集計した結果が、図19における補正前の葉数となる。ここで、補正Aとは、圧縮符号長の上限長Nすなわち、2N分枝無節点ハフマン木の最大枝数2Nのべき数N以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Nに集約する補正である。この場合、補正前での最大圧縮符号長は17ビットであるが、文字情報の総種類数が1305種であるため、圧縮符号長の上限長Nは、N=11となる。したがって、補正Aでは、圧縮符号長11ビットの葉数が、圧縮符号長が11ビット~17ビットの葉数の総和1190個となる。そして、コンピュータは、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため5ビットなら1/25、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Aにおける圧縮符号長5ビットの葉数は2である。圧縮符号長5ビットの生起確率は、1/25である。したがって、補正Aにおける圧縮符号長5ビットの生起確率は、2×1/25=1/24となる。圧縮符号長6ビット以降も同様に補正Aにおける圧縮符号長生起確率を求める。そして、補正A後における各圧縮符号長の生起確率を合計することで、補正Aでの生起確率総和が得られる。そして、コンピュータは、生起確率総和が1以下であるか否かを判断する。しきい値tは0<t≦1である。しきい値tを設けたくない場合は、t=1とすればよい。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Bは、補正Aでの圧縮符号長群5ビット~12ビットは変えずに、葉数を更新する補正である。具体的には、補正Aでの生起確率総和が、しきい値t以上1以下でない場合におこなわれる補正である。より具体的には、補正Bは2種類ある。1つ目は、生起確率総和がしきい値t未満である場合、生起確率総和が1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を増加させる補正以下、補正Bである。もう1つは、生起確率総和が1より大きい場合、生起確率総和が1以下に割り込んでから1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を減少させる補正以下、補正Bである。図19に示した例では、補正Aでの生起確率総和が1.146であるため、補正Bをおこなうこととなる。なお、補正Bおよび補正Bのいずれの補正Bであっても、葉数を生起確率総和で割るという同じ補正をおこなう。まず、補正Bの1回目補正B1では、圧縮符号長ごとの補正Aでの葉数を、前回の補正この場合は補正Aの生起確率の総和1.146で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Aでの圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正Aの生起確率総和1.146で割ることはせず、葉の総数1305個から、補正B1での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1208個である。このあと、コンピュータは、補正Aの場合と同様の計算処理により、補正B1での生起確率総和を求める。そして、コンピュータは、補正B1での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B1での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの2回目補正B2に移行する。最大漸近値に収束した場合は、補正B2に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B1で更新された生起確率総和1.042は1より大きいため、最大漸近値に収束しておらず、補正B2に移行する。補正B2では、圧縮符号長ごとの補正B1での葉数を、前回の補正この場合は補正B1の生起確率総和1.042で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B1での圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正B1の生起確率総和1.042で割ることはせず、葉の総数1305個から、補正B2での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。このあと、コンピュータは、補正B1の場合と同様の計算処理により、補正B2での生起確率総和を求める。そして、コンピュータは、補正B2での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B2での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの3回目補正B3に移行する。最大漸近値に収束した場合は、補正B3に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B2で更新された生起確率総和0.982は1以下であるが、最大漸近値に収束しているかが不明であるため、補正B3に移行する。補正B3では、圧縮符号長ごとの補正B2での葉数を、前回の補正この場合は補正B2の生起確率総和0.982で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B2での圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正B2の生起確率総和0.982で割ることはせず、葉の総数1305個から、補正B3での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。このあと、コンピュータは、補正B2の場合と同様の計算処理により、補正B3での生起確率総和を求める。そして、コンピュータは、補正B3での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B3での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの4回目補正B4に移行する。最大漸近値に収束した場合は、補正B4に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B3で更新された生起確率総和0.982は、補正B2で更新された生起確率総和0.982と同じ値である。すなわち、補正B3での各圧縮符号長の葉数と補正B2での各圧縮符号長の葉数とは同じである。この場合、コンピュータは、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。このようにして、葉数が確定するまで補正Bを継続することとなる。図19の例では、補正B3で圧縮符号長ごとの葉数が確定したこととなる。このあと、コンピュータは、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=11ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。図20は、文字情報ごとの補正結果を示す説明図である。図20において、文字情報テーブルには、補正A、補正B1~補正B2までの補正結果が追加されている。図19に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の1位の文字情報から短い圧縮符号長が割り当てられることとなる。たとえば、補正B2で確定した場合、圧縮符号長6ビットでは葉数が6、圧縮符号長7ビットでは葉数が18、...、圧縮符号長11ビットでは葉数が1215となっている。したがって、順位が1位から6位までの文字情報葉数6個分については6ビットの圧縮符号長、順位が7位から24位までの文字情報葉数18個分については7ビットの圧縮符号長、...、順位が91位から1305位までの文字情報葉数1215個分については11ビットの圧縮符号長が割り当てられる。そして、コンピュータは、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率1位の高位文字0は5ビットの圧縮符号長が割り当てられているため、圧縮符号が000000となる。したがって、圧縮符号000000、圧縮符号長6、文字情報0を含む葉L1の構造体が生成されることとなる。<6葉へのポインタ生成の詳細N=11>図21は、葉へのポインタ生成の詳細N=11を示す説明図である。図21は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図21において、圧縮符号長が6ビットの葉数は6個であるため、圧縮符号は000000~000101が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、32=25個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。なお、図示はしないが、圧縮符号長が7ビットの葉数は18個であるため、圧縮符号0001100~0011111が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、16本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、16=24個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続4ビットが16種のビット列となる。したがって、圧縮符号長が7ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの葉数は23個であるため、圧縮符号01000000~01010110が割り当てられる。また、圧縮符号長が8ビットの葉当たりの枝数は、8本である。したがって、圧縮符号長が8ビットの圧縮符号についての葉へのポインタは、8=23個生成される。具体的には、葉へのポインタの先頭8ビットが圧縮符号で後続3ビットが8種のビット列となる。したがって、圧縮符号長が8ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの葉数は23個であるため、圧縮符号010101110~011000100が割り当てられる。また、圧縮符号長が9ビットの葉当たりの枝数は、4本である。したがって、圧縮符号長が9ビットの圧縮符号についての葉へのポインタは、4=22個生成される。具体的には、葉へのポインタの先頭9ビットが圧縮符号で後続2ビットが4種のビット列となる。したがって、圧縮符号長が9ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの葉数は20個であるため、圧縮符号0110000110~0110011101が割り当てられる。また、圧縮符号長が10ビットの葉当たりの枝数は、2本である。したがって、圧縮符号長が10ビットの圧縮符号についての葉へのポインタは、2=21個生成される。具体的には、葉へのポインタの先頭10ビットが圧縮符号で後続1ビットが2種のビット列となる。したがって、圧縮符号長が10ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの葉数は1215個であるため、圧縮符号01100111100~11111111010が割り当てられる。また、圧縮符号長が11ビットの葉当たりの枝数は、1本である。したがって、圧縮符号長が11ビットの圧縮符号についての葉へのポインタは、1=20個生成される。具体的には、圧縮符号がそのまま葉へのポインタとなる。したがって、圧縮符号長が11ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=11>図22は、図13の72N分枝無節点ハフマン木の構築の詳細N=11を示す説明図である。図22では、N=11とした場合の2048=211分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図21に示したように32個生成される。したがって、葉L1の構造体については、根の構造体に32個の葉L1へのポインタL1P1~L1P32が格納される。葉L2の構造体~葉L6の構造体についても同様である。葉L7以降の構造体については、図22のとおりである。<3葉数特定~5葉の構造体生成の詳細N=12>図23は、図13の3葉数特定~5葉の構造体生成の詳細N=12を示す説明図である。なお、N=12の場合は、図18の文字情報テーブルには、たとえば1024種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に1024種を追加した2329種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、2329種の文字情報の生起確率も図18に示した値とは異なることとなる。そして、コンピュータは、図19の場合と同様に、生起確率総和を求める。そして、コンピュータは、生起確率総和がしきい値t以上1以下であるか否かを判断する。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。図23の例では、補正Aでの生起確率総和0.823はしきい値t未満であるとして、補正Bをおこなうこととする。まず、補正Bの1回目補正B1では、圧縮符号長ごとの補正Aの葉数を、前回の補正この場合は補正Aの生起確率総和0.823で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Aでの圧縮符号長の上限長NN=12ビットについては、前回の補正この場合は補正Aの生起確率総和0.823で割ることはせず、葉の総数2329個から、補正B1での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、2192個である。このあと、コンピュータは、補正Aの場合と同様の計算処理により、補正B1での生起確率総和を求める。そして、コンピュータは、補正B1での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B1での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの2回目補正B2に移行する。1以下の最大漸近値に収束した場合は、補正B2に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B1で更新された生起確率総和0.861は1以下であるが、最大漸近値に収束しているかが不明であるため、補正B2に移行する。補正B2では、圧縮符号長ごとの補正B1での葉数を、前回の補正この場合は補正B1の生起確率総和0.861で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B2での圧縮符号長の上限長NN=12ビットについては、前回の補正この場合は補正B1の生起確率総和0.861で割ることはせず、葉の総数2329個から、補正B2での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、2173個である。このあと、コンピュータは、補正B1の場合と同様の計算処理により、補正B2での生起確率総和を求める。そして、コンピュータは、補正B2での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B2での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの3回目補正B3に移行する。1以下の最大漸近値に収束した場合は、補正B3に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B2で更新された生起確率総和0.897は1以下であるが、補正B1で更新された生起確率総和0.861よりも大きい。すなわち、補正B1での生起確率総和は最大漸近値ではなく、補正B2での生起確率総和は最大漸近値に収束しているかが不明であるため、補正B3に移行する。このようにして、葉数が確定するまで補正Bを継続することとなる。図23の例では、補正B10で更新された生起確率総和0.984は、補正B11で更新された生起確率総和0.984と同じ値である。すなわち、補正B10での各圧縮符号長の葉数と補正B11での各圧縮符号長の葉数とは同じである。この場合、コンピュータは、補正B10において、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。このあと、コンピュータは、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=12ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。<6葉へのポインタ生成の詳細N=12>図24は、葉へのポインタ生成の詳細N=12を示す説明図である。図24は、圧縮符号長の上限Nが12ビットの場合の葉へのポインタを示している。図24において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号000000,000001が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、64本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、64=26個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続6ビットが64種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。また、図示はしないが、圧縮符号長が7ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が12ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=12>図25は、72N分枝無節点ハフマン木の構築の詳細N=12を示す説明図である。図25では、N=12とした場合の4096=212分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、64個生成される。したがって、葉L1の構造体については、根の構造体に64個の葉L1へのポインタL1P1~L1P64が格納される。葉L2の構造体についても同様である。葉L3以降の構造体については、図25のとおりである。<3葉数特定~5葉の構造体生成の詳細N=13>図26は、図13の3葉数特定~5葉の構造体生成の詳細N=13を示す説明図である。なお、N=13の場合は、図18の文字情報テーブルには、たとえば4096種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に4096種を追加した5401種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、5401種の文字情報の生起確率も図19に示した値とは異なることとなる。図26に示した例では、補正Aでの生起確率総和が0.877であるため、補正Bが行われることとなる。<6葉へのポインタ生成の詳細N=13>図27は、葉へのポインタ生成の詳細N=13を示す説明図である。図27は、圧縮符号長の上限NがN=13ビットの場合の葉へのポインタを示している。図27において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号000000,000001が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、128本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、128=27個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続7ビットが128種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、128種の葉へのポインタが生成されることとなる。図示はしないが、圧縮符号長が7ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が12ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が13ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=13>図28は、図13の72N分枝無節点ハフマン木の構築の詳細N=13を示す説明図である。図28では、N=13とした場合の8192=213分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、128個生成される。したがって、葉L1の構造体については、根の構造体に128個の葉L1へのポインタL1P1~L1P128が格納される。葉L2の構造体についても同様である。葉L3以降の構造体については、図28のとおりである。<葉の構造体>図29は、葉の構造体を示す説明図である。葉の構造体は、第1領域~第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別図18参照が格納される。第3領域には、伸長種別に応じて高位文字である16ビットの高位文字、低位文字の文字コードが分割された8ビットの分割文字コード、または特殊単語へのポインタが格納される。特殊単語へのポインタにより特殊単語の構造体100内の特殊単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは0である。0の場合は、照合/置換テーブルTを参照せず、1の場合は、照合/置換テーブルTを参照する。第4領域には、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または特殊単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または特殊単語である場合、符号区分として1を割り当て、8ビットの分割文字コードの場合、符号区分として0を割り当てる。<文字コードの構造体>図30は、高位文字コードの構造体500を示す説明図である。高位文字コードの構造体500は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、高位文字コードの構造体500に高位文字コードe♯を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、高位文字コードの構造体500における高位文字コードe♯へのポインタを格納する。また、高位文字コードe♯へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各高位文字コードe♯に対応する葉へのポインタを、高位文字コードの構造体500内の対応する高位文字コードe♯に関連付けて格納する。これにより、高位文字コードの構造体500が生成される。図31は、分割文字コードの構造体600を示す説明図である。分割文字コードの構造体600は、分割文字コードとその葉L♯へのポインタを格納する。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、分割文字コードの構造体600に分割文字コードを格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体600における分割文字コードへのポインタを格納する。また、分割文字コードへのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体600内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体600が生成される。図32および図33は、特殊単語の構造体100を示す説明図である。図32では、特殊単語が予約語のみであり、図33では、特殊単語は予約語および基礎単語である。特殊単語の構造体100は、特殊単語とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、特殊単語の構造体100に特殊単語を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、特殊単語の構造体100における特殊単語へのポインタを格納する。また、特殊単語へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各特殊単語に対応する葉へのポインタを、特殊単語の構造体100内の対応する特殊単語に関連付けて格納する。これにより、特殊単語の構造体100が生成される。<コンピュータのハードウェア構成>図34は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。図34において、コンピュータは、CPUCentralProcessingUnit3401と、ROMReadOnlyMemory3402と、RAMRandomAccessMemory3403と、磁気ディスクドライブ3404と、磁気ディスク3405と、光ディスクドライブ3406と、光ディスク3407と、ディスプレイ3408と、I/FInterface3409と、キーボード3410と、マウス3411と、スキャナ3412と、プリンタ3413と、を備えている。また、各構成部はバス3400によってそれぞれ接続されている。ここで、CPU3401は、コンピュータの全体の制御を司る。ROM3402は、ブートプログラムなどのプログラムを記憶している。RAM3403は、CPU3401のワークエリアとして使用される。磁気ディスクドライブ3404は、CPU3401の制御にしたがって磁気ディスク3405に対するデータのリード/ライトを制御する。磁気ディスク3405は、磁気ディスクドライブ3404の制御で書き込まれたデータを記憶する。光ディスクドライブ3406は、CPU3401の制御にしたがって光ディスク3407に対するデータのリード/ライトを制御する。光ディスク3407は、光ディスクドライブ3406の制御で書き込まれたデータを記憶したり、光ディスク3407に記憶されたデータをコンピュータに読み取らせたりする。ディスプレイ3408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ3408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。インターフェース以下、I/Fと略する。3409は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク3414に接続され、このネットワーク3414を介して他の装置に接続される。そして、I/F3409は、ネットワーク3414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F3409には、たとえばモデムやLANアダプタなどを採用することができる。キーボード3410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス3411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。スキャナ3412は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ3412は、OCROpticalCharacterReader機能を持たせてもよい。また、プリンタ3413は、画像データや文書データを印刷する。プリンタ3413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。なお、本実施の形態にかかる生成プログラムや、上述した2N分枝無節点ハフマン木、高位文字コードの構造体500、分割文字コードの構造体600、特殊単語の構造体100は、上述したRAM3403や磁気ディスク3405などの記憶装置に記憶される。<コンピュータの機能的構成例>図35は、コンピュータの機能的構成例を示すブロック図その1である。コンピュータは、集計部3501と、決定部3502と、補正部3503と、算出部3504と、判断部3505と、更新部3506と、生成部3507と、特定部3508と、構築部3509と、を備える。集計部3501~構築部3509は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。集計部3501は、データを集計する機能を有する。具体的には、対象ファイル群Fsを読み込んで、単一文字の出現回数を集計する。たとえば、図13に示したように、集計部3501は、出現回数を降順にソートして、所定順位たとえば、1024位までを高位文字コードとする。所定順位よりも下位の単一文字は、上位8ビットと下位8ビットに分割して、それぞれ8ビットの分割文字コードとして再集計される。また、集計部3501は、最長一致検索処理をおこなうことにより、特殊単語を特定し、特殊単語についても出現回数を集計する。そして、集計部3501は、高位文字コード、分割文字コード、特殊単語を混在させて出現回数を再ソートする。これにより、図18に示した順位項目、伸長種別項目、コード項目、文字項目、出現回数項目が得られる。また、集計部3501は、文字情報ごとの出現回数が得られた場合、全文字情報の出現回数の総和を総回数として算出する。そして、集計部3501は、文字情報ごとに、出現回数を総回数で割ることで、出現率を算出する。集計部3501は、算出された出現率に応じた生起確率を、図13の2圧縮符号長算出の項で説明したように特定し、そのべき数を圧縮符号長とする。これにより、文字情報ごとに圧縮符号長が特定されたこととなる図18を参照。そして、集計部3501は、図18の文字情報テーブルを参照して、圧縮符号長ごとに文字情報の種類数図18に示した補正前の葉数を集計する。決定部3502は、対象ファイルに出現する文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、文字情報に割り当てられる圧縮符号長の上限長Nを決定する機能を有する。具体的には、たとえば、決定部3502は、文字情報の総種類数が2K1個より大きく2K個以下である場合は、上限長NをKビットに決定する。たとえば、文字情報の総種類数が210個より大きく211個以下である場合は、決定部3502は、上限長Nを11ビットに決定することとなる。また、文字情報の総種類数が211個より大きく212個以下である場合は、決定部3502は、上限長Nを12ビットに決定することとなる。また、文字情報の総種類数が212個より大きく213個以下である場合は、決定部3502は、上限長Nを13ビットに決定することとなる。ここで、文字コードの種別ごとの文字情報の分類について説明する。図36は、UTF16での文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大4096種の基礎単語が含まれている。基礎単語を入れない場合は、予約語のみの25種となる。UTF16において、基礎単語を含めない場合の文字情報の最大総数は、1305個である。したがって、210<1305≦211となるため、上限長NはN=11ビットに決定される。また、基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。また、基礎単語を4096個含める場合の文字情報の最大総数は、5401個である。したがって、212<5401≦213となるため、上限長NはN=13ビットに決定される。図37は、ASCIIコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大2048種の基礎単語が含まれている。基礎単語を1024個含める場合の文字情報の最大総数は、1305個である。したがって、210<1305≦211となるため、上限長NはN=11ビットに決定される。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。図38は、シフトJISコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大4096種の基礎単語が含まれている。また、シフトJISコードの場合、日本語の文字は2つの8ビットコードの組み合わせで表現されるため、偶数個の単語文字列とみなされる。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。また、基礎単語を4096個含める場合の文字情報の最大総数は、5401個である。したがって、212<5401≦213となるため、上限長NはN=13ビットに決定される。また、図35において、補正部3503は、集計部3501によって集計された圧縮符号長ごとの文字情報の種類数のうち、決定部3502によって決定された上限長Nを圧縮符号長とする文字情報の種類数を、上限長N以上の圧縮符号長での文字情報の種類数の総和に補正する機能を有する。具体的には、たとえば、補正部3503は、上述した補正Aによる補正処理を実行する。算出部3504は、補正部3503による補正後の上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する機能を有する。具体的には、たとえば、図19、図23、図26に示した生起確率総和を算出する。判断部3505は、算出部3504によって算出された生起確率総和がしきい値t以上1以下であるか否かを判断する機能を有する。しきい値tは、0<t≦1の値であり、あらかじめ設定される。しきい値tを1としてもよい。しきい値t以上1以下である場合は、補正部3503による補正後の圧縮符号長ごとの文字情報の種類数を、圧縮符号長ごとの葉数として確定させてもよい。一方、しきい値t未満である場合、まだ、生起確率総和を増加させることが可能であるため、上述した補正Bを実行することが可能となる。また、生起確率総和が1よりも大きくなった場合は、上述した補正Bを実行することが可能となる。更新部3506は、判断部3505によってしきい値t以上1以下でないと判断された場合、上限長Nまでの各圧縮符号長の文字情報の種類数を、生起確率総和で割ることにより、上限長Nまでの各圧縮符号長の文字情報の種類数を更新する機能を有する。具体的には、たとえば、更新部3506は、しきい値t未満と判断された場合は補正Bを開始し、1より大きいと判断された場合は補正Bを開始する。この場合、算出部3504は、更新後における上限長Nまでの各圧縮符号長の文字情報の種類数に基づいて、生起確率総和を再算出する。そして、判断部3505は、算出部3504によって再算出された生起確率総和については、1以下の最大値が得られたか、具体的には、たとえば、1以下の最大漸近値に収束したか否かを判断することとなる。生成部3507は、文字情報に圧縮符号を割り当てた葉の構造体を生成する機能を有する。具体的には、たとえば、生成部3507による生成の条件は、判断部3505によって補正Aによりしきい値t以上1以下であると判断された場合、または、補正Bにより1以下の最大値が得られたと判断された場合である。そして、当該条件を満たした場合、生成部3507は、具体的には、たとえば、上限長Nまでの圧縮符号長と、上限長Nまでの圧縮符号長ごとの文字情報の種類数と、文字情報の出現率と、に基づいて、文字情報ごとに圧縮符号を割り付ける。そして、生成部3507は、割り付けた圧縮符号、その圧縮符号長、文字情報を含む葉の構造体を生成する。より具体的には、まず、出現率により順位付けされた文字情報群のうち第1位から昇順に文字情報を選択する。そして、生成部3507は、その選択文字情報の圧縮符号長を特定して、その圧縮符号長となる固有の圧縮符号を割り当てる。たとえば、出現回数第1位の文字情報は、高位文字の0である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号000000が割り当てられることとなる。次に、出現回数第2位の文字情報は、高位文字の>である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号000001が割り当てられることとなる。このようにして、出現回数の順位の昇順で圧縮符号を割り当てる。圧縮符号が決まると、生成部3507は、文字情報ごとに、その文字情報や圧縮符号長、伸長種別などをまとめて葉の構造体を生成することとなる。特定部3508は、上限長Nまでの圧縮符号長に基づいて、生成部3507によって生成された葉の構造体1つ当たりの枝数を、上限長Nまでの圧縮符号長ごとに特定する機能を有する。具体的には、たとえば、特定部3508は、図19、図23、図26に示したように、葉当たりの枝数を、圧縮符号長ごとに特定する。構築部3509は、2N分枝無節点ハフマン木を構築する機能を有する。具体的には、たとえば、構築部3509は、葉の構造体内の圧縮符号に特定部3508によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成する。たとえば、N=11の場合は、図21に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=12の場合は、図24に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=13の場合は、図27に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、構築部3509は、各葉の構造体についての葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築する。具体的には、たとえば、N=11の場合は、図22に示したように、211分枝無節点ハフマン木を構築する。N=12の場合は、図25に示したように、212分枝無節点ハフマン木を構築する。N=13の場合は、図28に示したように、213分枝無節点ハフマン木を構築する。<2N分枝無節点ハフマン木の生成処理手順>図39は、2N分枝無節点ハフマン木の生成処理手順前半を示すフローチャートである。まず、図39において、コンピュータは、集計部3501により、第1集計処理ステップS3901と第2集計処理ステップS3902を実行する。第1集計処理ステップS3901では、各文字情報の出現回数を集計する。第2集計処理ステップS3902では、圧縮符号長ごとの文字情報の種類数を集計する。第1集計処理ステップS3901と第2集計処理ステップS3902の詳細については後述する。つぎに、コンピュータは、決定部3502により、圧縮符号長の上限長Nを決定するステップS3903。このNが後述する補正Aでの最大圧縮符号長となる。そして、コンピュータは、全文字情報の圧縮符号長がNビット以内であるか否かを判断するステップS3904。Nビット以内でない場合ステップS3904:No、コンピュータは、補正部3503により、補正A処理を実行するステップS3905。具体的には、コンピュータは、上限長Nが最大圧縮符号長となるように、Nビット以上の各圧縮符号長での文字情報の種類数葉数の総和を求め、この総和を、圧縮符号長Nビットでの文字情報の種類数に補正する。したがって、N1ビット以上の圧縮符号長での文字情報の種類数は0となり、最大圧縮符号長がNビットとなる。このあと、ステップS3906に移行する。一方、Nビット以内である場合ステップS3904:Yes、コンピュータは、補正A処理ステップS3905を実行せずに、ステップS3906に移行する。ステップS3906では、コンピュータは、算出部3504により、圧縮符号長ごとの生起確率を算出しステップS3906、算出された圧縮符号長ごとの生起確率の総和生起確率総和TOPを算出するステップS3907。そして、図40のステップS4001に移行する。図40は、2N分枝無節点ハフマン木の生成処理手順後半を示すフローチャートである。コンピュータは、判断部3505により、算出された生起確率総和TOPが、t≦TOP≦1であるか否かを判断するステップS4001。tは上述したしきい値である。t≦TOP≦1でない場合ステップS4001:No、コンピュータは、判断部3505により、t>TOPであるか否かを判断するステップS4002。t>TOPである場合ステップS4002:Yes、コンピュータは、更新部3506により、補正B処理を実行するステップS4003。補正B処理ステップS4003の詳細については後述する。補正B処理のあとは、ステップS4005に移行する。一方、ステップS4002において、t>TOPでない場合ステップS4002:No、コンピュータは、更新部3506により、補正B処理を実行するステップS4004。補正B処理ステップS4004の詳細については後述する。補正B処理のあとは、ステップS4005に移行する。また、ステップS4001において、t≦TOP≦1である場合ステップS4001:Yes、ステップS4005に移行する。また、ステップS4005において、コンピュータは、生成部3507により、文字情報ごとに葉の構造体を生成するステップS4005。そして、コンピュータは、特定部3508により、枝数特定処理を実行するステップS4006。枝数特定処理ステップS4006では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理ステップS4006の詳細については後述する。そして、コンピュータは、構築部3509により、構築処理を実行するステップS4007。枝数特定処理ステップS4006により葉の構造体ごとの枝数が特定されるため、まず、構築部3509は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、2N分枝無節点ハフマン木が生成されることとなる。なお、生成された2N分枝無節点ハフマン木は、コンピュータ内の記憶装置RAM3403や磁気ディスク3405などに格納される。<第1集計処理ステップS3901>図41は、図39に示した第1集計処理ステップS3901の詳細な処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定しステップS4101、対象ファイルFiを読み込むステップS4102。そして、コンピュータは、対象ファイルFiの集計処理を実行するステップS4103。このあと、コンピュータは、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS4104。i>nでない場合ステップS4104:No、コンピュータは、iをインクリメントしステップS4105、ステップS4102に戻る。一方、i>nである場合ステップS4104:Yes、コンピュータは、第2集計処理ステップS3902に移行して、第1集計処理ステップS3901を終了する。この第1集計処理ステップS3901によれば、対象ファイルFiごとに対象ファイルFiの集計処理ステップS4103を実行することができる。<対象ファイルFiの集計処理ステップS4103>図42は、図41に示した対象ファイルFiの集計処理ステップS4103の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字としステップS4201、特殊単語集計処理を実行するステップS4202。特殊単語集計処理ステップS4202では、対象文字を先頭文字とする特殊単語の出現回数を集計する。特殊単語集計処理ステップS4202の詳細については、図43で説明する。このあと、コンピュータは、対象文字の出現回数を1増加するステップS4203。つぎに、コンピュータは、対象文字の出現マップ生成処理を実行するステップS4204。対象文字の出現マップ生成処理ステップS4204では、対象ファイルFiでの対象文字の存否を示す出現マップを生成する。対象文字の出現マップ生成処理ステップS4204の詳細については、図46で説明する。そして、コンピュータは、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS4205。対象文字が対象ファイルFiの末尾文字でない場合ステップS4205:No、コンピュータは、対象文字を末尾方向へ1文字シフトしステップS4206、ステップS4202に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS4205:Yes、コンピュータは、ステップS4104に移行して、対象ファイルFiの集計処理ステップS4103を終了する。この対象ファイルFiの集計処理ステップS4103によれば、対象ファイル群Fsに存在する特殊単語および単一文字の出現頻度を集計することができる。<特殊単語集計処理ステップS4202>図43は、図42に示した特殊単語集計処理ステップS4202の詳細な処理手順を示すフローチャートである。まず、コンピュータは、最長一致検索処理を実行しステップS4301、最長一致した特殊単語があったか否かを判断するステップS4302。最長一致した特殊単語があった場合ステップS4302:Yes、コンピュータは、特殊単語出現頻度テーブルにおいて最長一致した特殊単語の出現回数を1増加しステップS4303、コンピュータは、特殊単語の出現マップ生成処理を実行するステップS4304。特殊単語の出現マップ生成処理ステップS4304では、対象ファイルFiでの対象文字を先頭文字とする特殊単語の存否を示す出現マップを生成する。特殊単語の出現マップ生成処理ステップS4304の詳細については、図45で説明する。このあと、ステップS4203に移行する。一方、最長一致した特殊単語がなかった場合ステップS4302:No、ステップS4203に移行する。これにより、特殊単語集計処理ステップS4202を終了する。この特殊単語集計処理ステップS4202によれば、最長一致検索処理ステップS4301により特殊単語を計数することができるため、文字列が長い特殊単語を優先的に計数することができる。<最長一致検索処理ステップS4301>図44は、図43に示した最長一致検索処理ステップS4301の詳細な処理手順を示すフローチャートである。まず、コンピュータは、c=1とするステップS4401。cは対象文字からの文字数対象文字含むである。c=1の場合は、対象文字だけである。つぎに、コンピュータは、対象文字からc文字目までの対象文字列と前方一致する特殊単語を2分探索するステップS4402。そして、コンピュータは、検索により特殊単語があるか否かを判断するステップS4403。2分探索により特殊単語がヒットしなかった場合ステップS4403:No、ステップS4406に移行する。一方、2分探索により特殊単語がヒットした場合ステップS4403:Yes、コンピュータは、ヒットした特殊単語と対象文字列とが完全一致するか否かを判断するステップS4404。そして、完全一致しない場合ステップS4404:No、ステップS4406に移行する。一方、完全一致する場合ステップS4404:Yes、コンピュータは、最長一致候補として記憶装置に保持しステップS4405、ステップS4406に移行する。ステップS4406では、コンピュータは、対象文字列について2分探索が終了したか否かを判断するステップS4406。具体的には、コンピュータは、末尾の特殊単語まで2分探索したか否かを判断する。2分探索が終了していない場合ステップS4406:No、コンピュータは、ステップS4402に移行して、2分探索が終了するまで継続する。一方、対象文字列について2分探索が終了した場合ステップS4406:Yes、コンピュータは、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断するステップS4407。c文字目の文字が対象ファイルFiの末尾文字である場合ステップS4407:Yes、ステップS4410に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合ステップS4407:No、コンピュータは、c>cmaxであるか否かを判断するステップS4408。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。c>cmaxでない場合ステップS4408:No、コンピュータは、cをインクリメントしてステップS4409、ステップS4402に戻る。一方、c>cmaxである場合ステップS4408:Yes、コンピュータは、最長一致候補があるか否かを判断するステップS4410。具体的には、コンピュータは、ステップS4405において1つでも最長一致候補がメモリに保持されているか否かを判断する。最長一致候補がある場合ステップS4410:Yes、コンピュータは、最長一致候補のうち最長文字列を、最長一致した特殊単語に決定するステップS4411。そして、ステップS4302に移行する。一方、ステップS4410において、最長一致候補が1つもない場合ステップS4410:No、ステップS4302に移行する。これにより、最長一致検索処理ステップS4301を終了する。この最長一致検索処理ステップS4301によれば、特殊単語構造体にある特殊単語の中から、完全一致した文字列の中でかつ最長の文字列を特殊単語として検索することができる。図45は、図43に示した特殊単語の出現マップ生成処理ステップS4304の詳細な処理手順を示すフローチャートである。まず、コンピュータは、最長一致した特殊単語について、特殊単語の出現マップがあるか否かを判断するステップS4501。すなわち、コンピュータは、すでに特殊単語の出現マップが生成済みであるか否かを判断する。最長一致した特殊単語について、特殊単語の出現マップがない場合ステップS4501:No、コンピュータは、当該特殊単語の出現マップを設定するステップS4502。具体的には、コンピュータは、特殊単語の出現マップ群の割り当て領域内でのオール0の空きビット列を、当該特殊単語の出現マップとして割り当てる。そして、コンピュータは、ステップS4502で設定された特殊単語の出現マップのうち、対象ファイルFiのビットをONにするステップS4503。そして、ステップS4203に移行する。一方、ステップS4501において、最長一致した特殊単語の出現マップがある場合ステップS4501:Yes、コンピュータは、その特殊単語の出現マップのうち、対象ファイルFiのビットがONであるか否かを判断するステップS4504。そして、OFFの場合ステップS4504:No、ステップS4503に移行し、ONの場合ステップS4504:Yes、ステップS4203に移行することで、特殊単語の出現マップ生成処理ステップS4304を終了する。これにより、特殊単語の出現マップが生成されることとなる。図46は、図42に示した対象文字の出現マップ生成処理ステップS4204の詳細な処理手順を示すフローチャートである。まず、コンピュータは、高位文字コードの構造体500において、対象文字を2分探索するステップS4601。そして、ヒットした場合ステップS4602:Yes、コンピュータは、対象文字の出現マップがあるか否かを判断するステップS4603。すなわち、コンピュータは、すでに生成済みであるか否かを判断する。対象文字の出現マップがない場合ステップS4603:No、コンピュータは、対象文字の出現マップを設定するステップS4604。具体的には、コンピュータは、対象文字の出現マップ群の割り当て領域内でのオール0の空きビット列を、当該対象文字の出現マップとして割り当てる。そして、コンピュータは、ステップS4604で設定された対象文字の出現マップのうち、対象ファイルFiのビットをONにするステップS4605。そして、ステップS4602に移行する。一方、ステップS4603において、対象文字の出現マップがある場合ステップS4603:Yes、コンピュータは、その対象文字の出現マップのうち、対象ファイルFiのビットがONであるか否かを判断するステップS4606。そして、OFFの場合ステップS4606:No、ステップS4605に移行し、ONの場合ステップS4606:Yes、ステップS4602に移行する。また、ステップS4602において、ヒットしなかった場合ステップS4602:No、コンピュータは、対象文字についての2分探索が終了したか否かを判断するステップS4607。2分探索が終了していない場合ステップS4607:No、ステップS4602に戻る。一方、2分探索が終了した場合ステップS4607:Yes、ステップS4205に移行することで、対象文字の出現マップ生成処理ステップS4204を終了する。これにより、対象文字の出現マップが生成されることとなる。<第2集計処理ステップS3902>図47は、図39に示した第2集計処理ステップS3902の詳細な処理手順を示すフローチャートである。まず、コンピュータは、文字情報ごとに出現率を算出するステップS4701。つぎに、コンピュータは、未選択文字情報があるか否かを判断するステップS4702。未選択文字情報がある場合ステップS4702:Yes、コンピュータは、出現率が最上位の未選択文字情報を選択するステップS4703。そして、コンピュータは、選択文字情報の出現率に応じて生起確率および圧縮符号長を特定しステップS4704、ステップS4702に戻る。そして、ステップS4702において、未選択文字情報がない場合ステップS4702:No、コンピュータは、圧縮符号長ごとに文字情報の種類数を計数するステップS4705。これにより、圧縮符号長ごとの葉数文字情報の種類数が特定されることとなる。<補正B処理ステップS4003>図48は、図40に示した補正B処理ステップS4003の詳細な処理手順を示すフローチャートである。まず、コンピュータは、更新処理を実行するステップS4801。更新処理ステップS4801の詳細については後述する。つぎに、コンピュータは、更新処理ステップS4801後において、更新前後で葉数の変動があるか否かを判断するステップS4802。変動がある場合ステップS4802:Yes、まだ、生起確率総和TOPが1以下の最大漸近値に収束していないため、更新処理ステップS4801に戻る。一方、変動がない場合ステップS4802:No、これ以上更新処理ステップS4801をしても葉数が変動しない。すなわち、前回の補正Bで最大漸近値に収束したこととなり、コンピュータは、今回の更新処理ステップS4801での圧縮符号長ごとの葉数で確定させステップS4803、ステップS4005に移行する。これにより、生起確率総和TOPを増加させて、1に漸近させることができ、圧縮効率の向上を図ることができる。<補正B処理ステップS4004>図49は、図40に示した補正B処理ステップS4004の詳細な処理手順を示すフローチャートである。補正B処理ステップS4004は、図48に示した補正B処理ステップS4003と同一内容であるため、同一処理には同一ステップ番号を付す。補正B処理ステップS4004は、補正B処理ステップS4003と同一内容であるが、扱う生起確率総和TOPは1より大きい値であり、更新処理ステップS4801を繰り返すことで、ある時点の補正Bで生起確率総和TOPが1を下回ることとなる。生起確率総和TOPが1未満となると、補正Bの場合と同様、1以下の最大漸近値に収束するまで、更新処理ステップS4801を繰り返すこととなる。これにより、1より大きい生起確率総和TOPを減少させて、1に漸近させることができ、圧縮効率の向上を図ることができる。<更新処理ステップS4801>図50は、図48および図49に示した更新処理ステップS4801の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の圧縮符号長があるか否かを判断するステップS5001。未選択の圧縮符号長がある場合ステップS5001:Yes、コンピュータは、未選択の中で最短の圧縮符号長を1つ選択するステップS5002。コンピュータは、選択圧縮符号長が上限長N補正Aでの最長圧縮符号長であるか否かを判断するステップS5003。選択圧縮符号長が上限長Nでない場合ステップS5003:No、コンピュータは、選択圧縮符号長の葉数文字情報の種類数を、生起確率総和TOPで割るステップS5004。生成部3507は、選択圧縮符号長の葉数をこの割り算結果の値に更新するステップS5005。割り算結果の値については、小数点以下は切り捨て、四捨五入、切り上げのいずれでもよい。そして、ステップS5001に戻る。また、ステップS5003において、選択圧縮符号長が上限長Nである場合ステップS5003:Yes、コンピュータは、葉数の総和から、ステップS5005で更新済みの葉数の総和を引くことにより、選択圧縮符号長この場合は、上限長Nの葉数を引き算結果の値に更新するステップS5006。そして、ステップS5001に戻る。ステップS5001において、未選択の圧縮符号長上限長N以下の圧縮符号長がない場合ステップS5001:No、コンピュータは、葉数の更新後における生起確率総和TOPを算出しステップS5007、図48および図49のステップS4802に移行する。<枝数特定処理ステップS4006>図51は、図40に示した枝数特定処理ステップS4006の詳細な処理手順を示すフローチャートである。まず、コンピュータは、特定部3508により、最大圧縮符号長CLmax=Nと最小圧縮符号長CLmin=Mとの差分D=N-Mを算出するステップS5101。たとえば、N=11の場合、図19を参照すると、M=6である。したがって、D=5である。つぎに、コンピュータは、2のべき数の変数jをj=0とし、圧縮符号長の変数CLをCL=NとするステップS5102。そして、コンピュータは、j>Dであるか否かを判断するステップS5103。j>Dでない場合ステップS5103:No、コンピュータは、圧縮符号長CLの葉当たりの枝数bCLを算出するステップS5104。圧縮符号長CLの葉当たりの枝数bCLは、bCL=2jで算出される。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの葉当たりの枝数b11は、b11=2j=20=1となる。つぎに、コンピュータは、圧縮符号長CLの総枝数BLを算出するステップS5105。圧縮符号長CLの総枝数BLは、BL=LCL×bCLで算出される。LCLは、圧縮符号長CLでの葉数文字情報の種類数である。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの総枝数BLは、1216×20=1216となる。このあと、コンピュータは、jをインクリメントし、圧縮符号長CLをデクリメントしてステップS5106、ステップS5103に戻り、インクリメント後のjがj>Dであるか否かが判断される。なお、N=11の場合は、j=Dになるとj=D=5となり、CL=M=6となる。したがって、ステップS5104では、圧縮符号長CL5ビット当たりの枝数b6は、b6=26=64となる。同様に、総枝数BLは、B6=0×26=0となる。そして、j>Dである場合ステップS5103:Yes、構築処理ステップS4007に移行する。<構築処理ステップS4007>図52は、図40に示した構築処理ステップS4007の詳細な処理手順を示すフローチャートである。まず、コンピュータは、圧縮符号長CLをCL=CLmin=MとするステップS5201。つぎに、コンピュータは、圧縮符号長CLでの未選択の葉があるか否かを判断するステップS5202。未選択の葉がある場合ステップS5202:Yes、コンピュータは、葉へのポインタ生成処理ステップS5203を実行して、ステップS5202に戻る。葉へのポインタ生成処理ステップS5203では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理ステップS5203の詳細については後述する。一方、ステップS5202において、未選択の葉がない場合ステップS5202:No、コンピュータは、CL>Nであるか否かを判断するステップS5204。CL>Nでない場合ステップS5204:No、コンピュータは、CLをインクリメントしてステップS5205、ステップS5202に戻る。一方、CL>Nである場合ステップS5204:Yes、2N分枝無節点ハフマン木が構築されたこととなり、一連処理が終了することとなる。<葉へのポインタ生成処理ステップS5203>図53は、図52に示した葉へのポインタ生成処理ステップS5203の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の葉Lを選択しステップS5301、選択葉へのポインタ数kをk=1に設定するステップS5302。そして、コンピュータは、選択葉へのポインタPLkの先行ビット列を、選択葉の圧縮符号に設定するステップS5303。たとえば、上限長N=11については、選択葉が、文字情報0の葉の構造体である場合、圧縮符号は000000である。したがって、選択葉へのポインタPLkの先行ビット列も、図21に示したように、000000となる。つぎに、コンピュータは、選択葉へのポインタPLkの後続ビット列のビット長を、最大圧縮符号長Nから選択葉の圧縮符号長CLを引いた差分とし、後続ビット列の初期値をオール0に設定するステップS5304。たとえば、選択葉が、文字情報0の葉の構造体である場合、圧縮符号長CLは6ビットであるため、後続ビット列のビット長は5ビット=11-6となる。k=1の場合は、後続ビット列はオール0となるため、後続ビット列は、5ビットの00000となる。そして、コンピュータは、選択葉へのポインタPLkを根の構造体に格納するステップS5305。このあと、コンピュータは、k>bCLであるか否かを判断するステップS5306。bCLは、選択葉の圧縮符号長CLの葉当たりの枝数である。k>bCLでない場合ステップS5306:No、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、コンピュータは、kをインクリメントするステップS5307。そして、コンピュータは、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタPLkを生成するステップS5308。そして、コンピュータは、選択葉へのポインタPLkを根の構造体に格納しステップS5309、ステップS5306に戻る。ステップS5306~ステップS5309を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップS5306において、k>bCLである場合ステップS5306:Yes、ステップS5202に移行する。このように、対象ファイル群Fsに出現する文字情報の種類数に応じて、2N分枝無節点ハフマン木の最大枝数2Nを最適な本数に設定することができるため、2N分枝無節点ハフマン木のサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Nが2~4の整数倍でない場合たとえば、上限長N=11,13であっても、圧縮効率のよい2N分枝無節点ハフマン木を生成することができる。このあと、コンピュータは、2N分枝無節点ハフマン木の各葉の構造体と、特殊単語の構造体100,高位文字コードの構造体500,分割文字コードの構造体600とを、図18の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する高位文字、分割文字コードおよびへのポインタや特殊単語へのポインタを格納する。また、コンピュータは、特殊単語の構造体100の特殊単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、高位文字コードの構造体500の高位文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、分割文字コードの構造体600の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。なお、分割文字コードの構造体600は、必ずしも生成する必要はなく、出現頻度が所定回数に満たない場合であっても、高位文字コードの構造体500として登録してもよい。<補正B処理の他の例>つぎに、補正B処理の他の例について説明する。上述した補正B処理および補正B処理では、圧縮符号長の葉数ごとに、各圧縮符号長の葉数を生起確率総和で割ることにより、各圧縮符号長の葉数を更新することとした。これに対し、本例では、最小圧縮符号長CLminから最大圧縮符号長CLmaxすなわち、上限長Nに向かって、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増減するように、葉数を移動させる。具体的には、本例の補正B処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも減少するように、葉数を補正する。一方、本例の補正B処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増加するように、葉数を移動させる。その後は、補正後の葉数を生起確率総和で割ることで、各圧縮符号長の葉数を更新する。なお、以下に説明する例では、ある圧縮符号長CLの葉数LCLを、圧縮符号長CL1の葉数LCL1よりも増加/減少するように補正をおこなう例について説明するが、圧縮符号長CLよりも大きい圧縮符号長CL2,CL3,...であってもよい。また、移動対象葉数の個数は、1個に限らず、2個以上でもよい。たとえば、移動元の圧縮符号長の葉数をすべて移動先に移動させてもよい。図54は、補正B処理ステップS4003の他の例の詳細な処理手順を示すフローチャートである。補正B処理ステップS4003において、最小圧縮符号長CLminをMとする。また、最大圧縮符号長CLmaxは上限長Nとなる。図54では、葉数を1個ずつ移動させる例を示している。まず、コンピュータは、圧縮符号長CLをCL=Mに設定するステップS5401。つぎに、コンピュータは、圧縮符号長CLがCL=Nであるか否かを判断するステップS5402。CL=Nでない場合ステップS5402:No、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、コンピュータは、葉数LCLがLCL=0であるか否かを判断するステップS5403。LCL=0の場合ステップS5403:Yes、移動させる葉数LCLがないため、コンピュータは、圧縮符号長CLをインクリメントしステップS5404、ステップS5402に戻る。そして、圧縮符号長CLがCL=Nとなった場合ステップS5402:Yes、ステップS5413に移行し、コンピュータは、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。また、ステップS5403において、葉数LCLがLCL=0でない場合ステップS5403:No、コンピュータは、現在対象となっている圧縮符号長CLの葉数LCLをデクリメントしステップS5405、移動先となる圧縮符号長CL1の葉数LCL1をインクリメントするステップS5406。そして、圧縮符号長CL,CL1については、ステップS5405,ステップS5406において葉数が増減したため、コンピュータは、圧縮符号長CLについての生起確率と圧縮符号長CL1についての生起確率とを再計算するステップS5407。このあと、コンピュータは、各圧縮符号長CLmin~CLmaxの最新の葉数での生起確率総和TOPを算出するステップS5408。そして、コンピュータは、算出されたTOPがt>TOPであるか否かを判断するステップS5409。t>TOPである場合ステップS5409:Yes、まだ改善の余地があるため、ステップS5403に戻る。一方、t>TOPでない場合ステップS5409:No、コンピュータは、t≦TOP≦1であるか否かを判断するステップS5410。t≦TOP≦1である場合ステップS5410:Yes、これ以上補正する必要がないため、ステップS5413に移行する。一方、t≦TOP≦1でない場合ステップS5410:No、コンピュータは、現在対象となっている圧縮符号長Lの葉数LCLをインクリメントしステップS5411、移動先の圧縮符号長CL1の葉数LCL1をデクリメントするステップS5412。すなわち、t≦TOP≦1でない場合ステップS5410:Noは、TOP>1であるため、今回の補正自体が失敗となる。したがって、ステップS5405およびステップS5406での葉数移動を、ステップS5411およびステップS5412で元に戻すこととなる。このあと、ステップS5404に戻る。ステップS5404では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の増加がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。また、ステップS5413になると、コンピュータは、そのときの圧縮符号長CLmin~CLmaxごとの葉数LCLmin~葉数LCLmaxで確定させることとなるステップS5413。その後、ステップS4005に移行することで、補正B処理ステップS4003を終了する。図55は、補正B処理ステップS4004の他の例の詳細な処理手順を示すフローチャートである。補正B処理ステップS4004は、図54に示した補正B処理ステップS4003とほぼ同一内容であるため、同一処理には同一ステップ番号を付す。異なる点は、ステップS5505,ステップS5506,ステップS5509,ステップS5511,ステップS5512である。まず、コンピュータは、圧縮符号長CLをCL=Mに設定するステップS5401。つぎに、コンピュータは、圧縮符号長CLがCL=Nであるか否かを判断するステップS5402。CL=Nでない場合ステップS5402:No、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、コンピュータは、葉数LCLがLCL=0であるか否かを判断するステップS5403。LCL=0の場合ステップS5403:Yes、移動させる葉数LCLがないため、コンピュータは、圧縮符号長CLをインクリメントしステップS5404、ステップS5402に戻る。そして、圧縮符号長CLがCL=Nとなった場合ステップS5402:Yes、ステップS5413に移行し、コンピュータは、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。また、ステップS5403において、葉数LCLがLCL=0でない場合ステップS5403:No、コンピュータは、現在対象となっている圧縮符号長CLの葉数LCLをインクリメントしステップS5505、移動先となる圧縮符号長CL1の葉数LCL1をデクリメントするステップS5506。そして、圧縮符号長CL,CL1については、ステップS5505,ステップS5506において葉数が増減したため、コンピュータは、圧縮符号長CLについての生起確率と圧縮符号長CL1についての生起確率とを再計算するステップS5407。このあと、コンピュータは、各圧縮符号長CLmin~CLmaxの最新の葉数での生起確率総和TOPを算出するステップS5408。そして、コンピュータは、算出されたTOPが1<TOPであるか否かを判断するステップS5509。1<TOPである場合ステップS5509:Yes、まだ改善の余地があるため、ステップS5403に戻る。一方、1<TOPでない場合ステップS5509:No、コンピュータは、t≦TOP≦1であるか否かを判断するステップS5410。t≦TOP≦1である場合ステップS5410:Yes、これ以上補正する必要がないため、ステップS5413に移行する。一方、t≦TOP≦1でない場合ステップS5410:No、コンピュータは、現在対象となっている圧縮符号長Lの葉数LCLをデクリメントしステップS5511、移動先の圧縮符号長CL1の葉数LCL1をインクリメントするステップS5512。すなわち、t≦TOP≦1でない場合ステップS5410:Noは、t>TOPであるため、今回の補正自体が失敗となる。したがって、ステップS5505およびステップS5506での葉数移動を、ステップS5511およびステップS5512で元に戻すこととなる。このあと、ステップS5404に戻る。ステップS5404では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の減少がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。また、ステップS5413になると、コンピュータは、そのときの圧縮符号長CLmin~CLmaxごとの葉数LCLmin~葉数LCLmaxで確定させることとなるステップS5413。その後、ステップS4005に移行することで、補正B処理ステップS4004を終了する。図56は、図54に示した補正B処理の他の例を適用した場合における、図13の3葉数特定~5葉の構造体生成の詳細N=12を示す説明図である。図56では、移動元の圧縮符号長の葉数を、1ビット小さい移動先の圧縮符号長の葉数に1個ずつシフトさせた例を示している。図56では、図53におけるしきい値tをt=1とする。図56では、補正Aでの生起確率総和TOPが0.823であるため、補正B処理が適用される。まず、移動先を最小圧縮符号長である6ビットとし、移動元を1ビット大きい7ビットとする。補正B1では、圧縮符号長7ビットの葉数9を1つずつ、最小圧縮符号長6ビットに移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B1では生起確率総和TOPが1を超えていない。そして、移動元の圧縮符号長7ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11=92となる。このときの補正B1での生起確率総和TOPは0.894であるため、さらに補正Bが必要である。補正B2についても同様な処理をおこなうことで、補正B2での生起確率総和TOPは0.979となり、さらに補正Bが必要である。つぎに、補正B3についても同様な処理をおこなうことで、補正B3での生起確率総和TOPは0.999となり、さらに補正Bが必要である。つぎに、補正B4についても同様な処理をおこなうことで、補正B4での生起確率総和TOPは1.000となり、さらに補正Bが可能である。つぎに、補正B5についても同様な処理をおこなうことで、補正B5での生起確率総和TOPは1.000となり、さらに補正Bが必要である。つぎに、補正B6では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を10ビットから11ビットとし、移動元の圧縮符号長を11ビットから12ビットとする。そして、移動元の圧縮符号長12ビットの葉数2214を1つずつ、補正B5で葉数が24になった移動先の圧縮符号長11ビットに移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長12ビットの葉数が2214から2213になり、移動先の圧縮符号長11ビットの葉数が24から25になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻すこととなる。戻した葉数は、補正B5終了時点での葉数となる。補正B5終了時点での生起確率総和TOPは1.000である。本例では、これ以上、移動元の圧縮符号長を大きくすることができないため、補正B5終了時点での葉数が確定することとなる。図57は、上述した補正B処理の他の例を適用した場合における、図13の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図57では、移動元の圧縮符号長の葉数をすべて、1ビット大きい移動先の圧縮符号長の葉数にシフトさせた例を示している。図57では、図55におけるしきい値tをt=1とする。図57では、補正Aでの生起確率総和TOPが1.146であるため、補正B処理が適用される。まず、移動元を最小圧縮符号長である5ビットとし、移動先を1ビット大きい6ビットとする。補正B1では、移動元の圧縮符号長5ビットの葉数2を1つずつ、圧縮符号長6ビットに移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B1では生起確率総和TOPが1以下にならない。そして、移動元の圧縮符号長5ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11=92となる。このときの補正B1での生起確率総和TOPは1.115であるため、さらに補正Bが必要である。つぎに、補正B2についても同様な処理をおこなうことで、補正B2での生起確率総和TOPは1.029となり、さらに補正Bが必要である。つぎに、補正B3では、移動元および移動先の圧縮符号長を1ビット大きくする。すなわち、移動元の圧縮符号長を6ビットから7ビットとし、移動先の圧縮符号長を7ビットから8ビットとする。そして、移動元の圧縮符号長7ビットの葉数33を1つずつ、移動先の圧縮符号長8ビットの葉数28に移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B3では、移動元である圧縮符号長7ビットの葉数が25、移動先である圧縮符号長8ビットの葉数が36に到達すると、生起確率総和TOPが1以下の0.998となる。これ以上葉数移動をしても、生起確率総和TOPが低下するため、このときの各圧縮符号長の葉数で確定させることとなる。<圧縮処理>つぎに、上述した2N分枝無節点ハフマン木を用いた対象ファイル群Fsの圧縮処理について説明する。圧縮処理は、コンピュータが実行してもよく、また、2N分枝無節点ハフマン木が格納された情報処理装置が実行してもよい。すなわち、少なくとも2N分枝無節点ハフマン木が格納されていればよい。以下、コンピュータおよび情報処理装置を総称してコンピュータとする。ここで、まず、圧縮対象文字列とその圧縮符号を例に挙げて説明する。図58は、圧縮対象文字列の一例を示す説明図である。図58では、婚活は結婚活動という文字列の16ビットコード16進と2進を示している。図59は、図58に示した圧縮対象文字列の圧縮符号を示す説明図である。図59に示した圧縮符号は、図28に示した2N分枝無節点ハフマン木N=13を用いて圧縮した例を示している。図59では、図58と比較すると、文字婚は、低出現頻度文字であるため、上位8ビットの分割文字コード0x5Aが12ビットの圧縮符号に圧縮されている。また、下位8ビットの分割文字コード0x5Aも12ビットの圧縮符号に圧縮されている。高位文字活は、16ビットから9ビットに圧縮されている。高位文字はは、16ビットから9ビットに圧縮されている。結婚は基礎単語に該当するため、32ビットから13ビットに圧縮されている。また、活動は、基礎単語に該当するため、32ビットから13ビットに圧縮されている。なお、分割文字コードについては、圧縮後のほうがビット長が長いが、婚のような単一文字はそもそも出現回数が少ないために分割されているため、対象ファイル群Fs全体で見れば問題ない。また、基礎単語は、そのビット列に比べて圧縮符号が非常に短くなるため最大でも13ビット、2文字高位文字以上であれば十分圧縮効率が向上することとなる。<圧縮処理の具体例>図60は、2N分枝無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。まず、コンピュータは、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイル上の位置を保持しておく。そして、コンピュータは、特殊単語の構造体100に対して2分木探索をおこなう。特殊単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する特殊単語raaは葉の番号が探索された場合、特殊単語の構造体100において対応付けされている葉Laへのポインタにより葉Laの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Laの構造体に格納されている特殊単語raの圧縮符号を探索して、圧縮バッファ6000に格納する。一方、不一致の圧縮文字コードが出現した場合、特殊単語の構造体100に対する2分木探索を終了するEOTEndOfTransmissionまで進む。そして、コンピュータは、1文字目の圧縮対象文字コードを再度レジスタにセットして、高位文字コードの構造体500に対する2分木探索をおこなう。一致する文字コードebbは葉の番号が探索された場合、コンピュータは、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lbの構造体に格納されている文字コードebの圧縮符号を探索して、圧縮バッファ6000に格納する。一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは高位文字コードではないため、コンピュータは、上位8ビットと下位8ビットに分割する。そして、コンピュータは、上位8ビットの分割文字コードについて、分割文字コードの構造体600に対する2分木探索をおこなう。一致する分割文字コードDc1c1は葉の番号が探索された場合、コンピュータは、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc1の構造体に格納されている分割文字コードDc1の圧縮符号を探索して、圧縮バッファ6000に格納する。引き続き、コンピュータは、下位8ビットの分割文字コードについて、分割文字コードの構造体600に対する2分木探索をおこなう。一致する分割文字コードDc2c2は葉の番号が探索された場合、コンピュータは、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc2の構造体に格納されている分割文字コードDc2の圧縮符号を探索して、圧縮バッファ6000に格納する。<ファイル圧縮処理>図61は、コンピュータが自動実行する2N分枝無節点ハフマン木を用いたファイル圧縮処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号:pをp=1としステップS6101、対象ファイルFpを読み込むステップS6102。つぎに、コンピュータは、圧縮処理を実行してステップS6103、ファイル番号:pをインクリメントするステップS6104。そして、コンピュータは、p>nであるか否かを判断するステップS6105。nは対象ファイル群Fsの総数である。p>nでない場合ステップS6105:No、ステップS6102に戻る。一方、p>nである場合ステップS6105:Yes、一連のファイル圧縮処理を終了する。図62は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその1である。図62において、まず、コンピュータは、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断するステップS6201。ある場合ステップS6201:Yes、コンピュータは、圧縮対象文字コードを取得してレジスタにセットするステップS6202。そして、コンピュータは、先頭の圧縮対象文字コードか否かを判断するステップS6203。ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合ステップS6203:Yes、コンピュータは、その圧縮対象文字コードの対象ファイル群Fs上の位置先頭位置となるポインタを取得しステップS6204、ステップS6205に移行する。一方、先頭でない場合ステップS6203:No、先頭位置を取得せずにステップS6205に移行する。そして、コンピュータは、特殊単語の構造体100に対して2分木探索をおこなうステップS6205。圧縮対象文字コードが一致した場合ステップS6206:Yes、コンピュータは、連続して一致した文字コード列が特殊単語の文字コード列に該当するか否かを判断するステップS6207。該当しない場合ステップS6207:No、コンピュータは、ステップS6202に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。一方、ステップS6207において、特殊単語に該当する場合ステップS6207:Yes、コンピュータは、該当する特殊単語の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6208。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている特殊単語の圧縮符号を抽出するステップS6209。この後、コンピュータは、抽出された圧縮符号を圧縮バッファ6000に格納してステップS6210、ステップS6201に戻る。このループが特殊単語の圧縮処理の流れとなる。ステップS6201において、圧縮対象文字コードがない場合ステップS6201:No、コンピュータは、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ6000からファイル出力して保存するステップS6211。そして、ステップS6104に移行する。一方、ステップS6206において不一致となった場合ステップS6206:No、16ビットの文字コードの圧縮処理のループに入る。図63は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその2である。図63において、コンピュータは、ステップS6204で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットするステップS6301。つぎに、コンピュータは、圧縮対象文字コードについて、高位文字コードの構造体500に対して2分木探索をおこなうステップS6302。一致した場合ステップS6303:Yes、コンピュータは、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6304。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出するステップS6305。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納してステップS6306、ステップS6201に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS6303において一致する文字コードが存在しなかった場合ステップS6303:No、分割文字コードの圧縮処理のループに入る。図64は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその3である。図64において、まず、コンピュータは、圧縮対象文字コードを上位8ビットと下位8ビットとに分割しステップS6401、上位8ビットの分割文字コードを抽出するステップS6402。そして、コンピュータは、分割文字コードの構造体600に対して2分木探索をおこなうステップS6403。そして、コンピュータは、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6404。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出するステップS6405。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納するステップS6406。つぎに、コンピュータは、下位8ビットが探索済みか否かを判断しステップS6407、探索済みでない場合ステップS6407:No、コンピュータは、下位8ビットの分割文字コードを抽出してステップS6408、ステップS6403~S6406を実行する。一方、下位8ビットが探索済みである場合ステップS6407:Yes、ステップS6201に戻り、特殊単語の圧縮処理のループに入る。このように、2N分枝無節点ハフマン木を用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字情報を抽出して、圧縮バッファ6000に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。また、圧縮対象文字コードが格納されている葉L♯の構造体を、特殊単語の構造体100、高位文字コードの構造体500および分割文字コードの構造体600により即座に特定することができる。したがって、2N分枝無節点ハフマン木の葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、6万種以上ある低位の文字コードをたかだか256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。<圧縮ファイルの絞込み例>つぎに、圧縮ファイルの絞り込み例について説明する。対象ファイル群Fsは、2N分枝無節点ハフマン木で圧縮されて、圧縮ファイル群Fsとなっている。コンピュータは、圧縮ファイル群Fsの中から、検索文字列を2N分枝無節点ハフマン木で圧縮した圧縮文字列の各圧縮文字をすべて含む圧縮ファイルを絞り込む。圧縮ファイルの絞込みは、検索文字列を構成する文字情報の出現マップ群をAND演算する。図65は、圧縮ファイルの絞込み例を示す説明図である。Aは、検索文字列が結婚の場合の出現マップ群のAND演算結果を示している。検索文字列結婚の場合、基礎単語結婚の出現マップのみ取得する。Aの例では、対象ファイルF3にのみ、検索文字列結婚が記述されていることがわかる。Bは、検索文字列が結婚活動の場合の出現マップ群のAND演算結果を示している。検索文字列結婚活動の場合、基礎単語結婚の出現マップと、基礎単語活動の出現マップと、のAND演算となる。Bの例では、対象ファイルF3にのみ、検索文字列結婚活動が記述されていることがわかる。Cは、検索文字列が婚活の場合の出現マップ群のAND演算結果を示している。検索文字列婚活の場合、高位文字活の出現マップと、分割文字コード0x5Aの出現マップと、のAND演算となる。Cの例では、対象ファイルF1~F3に、検索文字列婚活が記述されている可能性があることがわかる。このように、検索文字列が基礎単語に登録されていない場合は、基礎単語の出現マップが使えないため、圧縮ファイルの絞込みが甘くなる傾向があり、伸長対象となる圧縮ファイルが増加する。したがって、伸長速度の効率化を図る必要がある。<伸長処理例>つぎに、2N分枝無節点ハフマン木により圧縮された圧縮符号列を伸長する伸長処理例について説明する。図66~図71は、圧縮符号列の伸長処理例を示す説明図である。図66~図71では、圧縮ファイルを伸長する過程において、圧縮ファイル内の圧縮符号列と検索文字列婚活の圧縮符号列とを照合し、一致した場合には照合/置換テーブルTT6の置換文字列を伸長バッファに書き出す例を示す。なお、照合不一致の場合は、伸長された文字列を伸長バッファに書き出すこととなる。また、伸長処理では、コンピュータは、レジスタr1に圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。コンピュータは、抽出した圧縮符号を、1パス1枝分のアクセスで2N分枝無節点ハフマン木の根から探索する。そして、コンピュータは、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファ6600に格納する。圧縮符号を抽出するため、コンピュータは、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を0xFFF10000とする。このマスクパターンは先頭13ビットが1であり、後続の19ビットが0のビット列である。コンピュータは、ビットアドレスabiとバイトオフセットbyosとビットオフセットbiosとを算出する。ビットアドレスabiは、抽出された圧縮符号のビット位置を示す値であり、今回のビットアドレスabiは、前回のビットアドレスabiに前回抽出された圧縮符号の圧縮符号長legを加算した値となる。なお、初期状態では、ビットアドレスabiはabi=0とする。バイトオフセットbyosは、メモリに保持されている圧縮符号列のバイト境界を示す値であり、ビットアドレスabi/8の商で求められる。たとえば、バイトオフセットbyos=0のときは、メモリに記憶されている先頭からの圧縮符号列をレジスタにセットし、バイトオフセットbyos=1のときは、メモリに記憶されている先頭1バイト目からの圧縮符号列をレジスタにセットする。また、ビットオフセットbiosは、マスクパターンのマスク位置FFFをオフセットする値であり、ビットアドレスabi/8の余りである。たとえば、ビットオフセットbios=0のときは、マスク位置はシフトされないこととなり、マスクパターンは、0xFFF10000となる。一方、ビットオフセットbios=4のときは、マスク位置は末尾方向に4ビットシフトすることとなり、マスクパターンは、0x0FFF0000となる。レジスタシフト数rsは、マスクパターンとのAND演算後のレジスタr2内の圧縮符号列を末尾方向にシフトするビット数であり、rs=32-13-biosで求められる。このシフトにより、コンピュータは、シフト後のレジスタr2の末尾mビットのビット列を対象ビット列として抽出する。コンピュータは、対象ビット列の抽出後はレジスタr2をクリアする。なお、図66~図71において、メモリには図59に示した圧縮符号列が保持されているものとする。また、図66~図71のメモリ内のブロックは1バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図66は、初期状態Aの状態を示している。Aでは、ビットアドレスabi=0により、バイトオフセットbyos=0、ビットオフセットbios=0となる。バイトオフセットbyos=0により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭から4バイト分図中、網掛けの圧縮符号列をレジスタr1にセットする。また、ビットオフセットbios=0により、マスクパターンは、0xFFF80000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0xFFF80000を論理積AND演算することにより、レジスタr2においてAND結果が得られる。また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32-m―bios=32-13-0=19となる。したがって、レジスタr2内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタr2には、0101001101100が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0101001101100が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0101001101100と一致する葉L♯へのポインタを探索する。この場合、葉L0x5Aへのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L0x5Aへのポインタを読み出して、葉L0x5Aの構造体にアクセスする。葉L0x5Aの構造体には、分割文字コード0x5Aへのポインタが格納されているため、コンピュータは、分割文字コードの構造体600の中から、分割文字コード0x5Aへのポインタで分割文字コード0x5Aを指定して、読み出す。また、アクセス先となる葉L0x5Aの構造体においては、対象ビット列0101001101100のうち先頭12ビットの圧縮符号010100110110が格納されている。また、葉L0x5Aの構造体の照合フラグがONであるため、コンピュータは、葉L0x5Aの構造体の照合/置換テーブルTへのポインタp3により、当該ポインタp3のレコードと圧縮符号010100110110とを照合する。この場合、前方一致となるため、ポインタp3のレコードの指定中フラグをON0⇒1にする。また、葉L0x5Aの構造体には、圧縮符号長leg=12ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=012=12となる。図67は、図66に示したAの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Bの状態を示している。前回であるAのビットアドレスabiはabi=0、圧縮符号長legは12ビットであるため、Bのビットアドレスabiはabi=12ビットとなる。また、このビットアドレスabi=12により、バイトオフセットbyos=1、ビットオフセットbios=4となる。バイトオフセットbyos=1により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタr2にセットする。また、ビットオフセットbios=4により、マスクパターンは、0x0FFF8000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0x0FFF8000を論理積AND演算することにより、レジスタr2においてAND結果が得られる。また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32-m―bios=32-13-4=15となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に15ビット分シフトする。このシフトによりレジスタr2には、00000101001101100が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0101001101100が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0101001101100と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0101001101100が葉L0x5Aへのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L0x5Aへのポインタを読み出して、葉L0x5Aの構造体にアクセスする。葉L0x5Aの構造体には、分割文字コード0x5Aへのポインタが格納されているため、コンピュータは、分割文字コードの構造体600の中から、分割文字コード0x5Aへのポインタで分割文字コード0x5Aを指定して、読み出す。また、アクセス先となる葉L0x5Aの構造体においては、対象ビット列0101001101100のうち先頭12ビットの圧縮符号010100110110が格納されている。したがって、コンピュータは、照合/置換テーブルTのうち指定中フラグがONになっているレコード、ここでは、ポインタp3のレコードと圧縮符号010100110110とを照合する。この照合は、指定中フラグがONのため、後方一致照合をおこなう。そして、後方一致するため、ポインタp3のレコードの置換文字列<color>婚</color>を伸長バッファ6600に書き出す。このあと、コンピュータは指定中フラグを0に戻す。また、葉L0x5Aの構造体には、圧縮符号長leg=12ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=1212=24となる。図68は、図67に示したBの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Cの状態を示している。前回であるBのビットアドレスabiはabi=12、圧縮符号長legは12ビットであるため、Cのビットアドレスabiはabi=24ビットとなる。また、このビットアドレスabi=24により、バイトオフセットbyos=3、ビットオフセットbios=0となる。バイトオフセットbyos=3により、メモリに保持されている圧縮符号列のうち先頭3バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタr1にセットする。また、ビットオフセットbios=0により、マスクパターンは、0xFFF80000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0xFFF80000を論理積AND演算することにより、レジスタr2においてAND結果が得られる。また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32-m―bios=32-13-0=19となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタr2には、0011100100011が残されるため、末尾13ビットを対象ビット列として抽出する。この場合は、0011100100011が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体セルの中から、抽出された対象ビット列0011100100011と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0011100100011が葉L活へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L活へのポインタを読み出して、葉L活の構造体にアクセスする。葉L活の構造体には、高位文字活へのポインタが格納されているため、コンピュータは、高位文字コードの構造体500の中から、高位文字活へのポインタで高位文字活を指定して、読み出す。また、アクセス先となる葉L活の構造体においては、対象ビット列0011100100011のうち先頭9ビットの圧縮符号001110010が格納されている。また、葉L活の構造体の照合フラグがONであるため、コンピュータは、葉L活の構造体の照合/置換テーブルTへのポインタp4により、当該ポインタp4のレコードと圧縮符号001110010とを照合する。この場合、完全一致となるため、ポインタp4のレコードの置換文字列<color>活</color>を伸長バッファ6600に書き出す。また、葉L活の構造体には、圧縮符号長leg=9ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=249=33となる。図69は、図68に示したCの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Dの状態を示している。前回であるCのビットアドレスabiはabi=24、圧縮符号長legは9ビットであるため、Dのビットアドレスabiはabi=33ビットとなる。また、このビットアドレスabi=33により、バイトオフセットbyos=4、ビットオフセットbios=1となる。バイトオフセットbyos=4により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭4バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタr1にセットする。また、ビットオフセットbios=1により、マスクパターンは、0x07FFC000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0x07FFC000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=1により、レジスタシフト数rsは、rs=32-m―bios=32-13-1=18となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に18ビット分シフトする。このシフトによりレジスタr2には、00011100110101が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0011100110101が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0011100110101と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0011100110101が葉Lはへのポインタ群の中の一つと一致するため、葉Lはへのポインタを読み出して、葉Lはの構造体にアクセスする。葉Lはの構造体には、高位文字はへのポインタが格納されているため、コンピュータは、高位文字コードの構造体500の中から、高位文字はへのポインタで高位文字はを指定して、読み出す。また、アクセス先となる葉Lはの構造体においては、対象ビット列0011100110101のうち先頭9ビットの圧縮符号001110011が格納されている。また、葉Lはの構造体の照合フラグがOFFであるため、コンピュータは、照合/置換テーブルTを参照しない。したがって、コンピュータは、高位文字コードの構造体500から読み出された高位文字はを伸長バッファ6600に書き出す。また、葉Lはの構造体には、圧縮符号長leg=9ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=339=42となる。図70は、図69に示したDの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Eの状態を示している。前回であるDのビットアドレスabiはabi=33、圧縮符号長legは9ビットであるため、Eのビットアドレスabiはabi=42ビットとなる。また、このビットアドレスabi=42により、バイトオフセットbyos=5、ビットオフセットbios=2となる。バイトオフセットbyos=5により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭5バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタr1にセットする。また、ビットオフセットbios=2により、マスクパターンは、0x3FFE0000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0x3FFE0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=2により、レジスタシフト数rsは、rs=32-m―bios=32-13-2=17となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に17ビット分シフトする。このシフトによりレジスタr2には、000101001000000が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0101001000000が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0101001000000と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0101001000000が葉L結婚へのポインタと一致するため、コンピュータは、葉L結婚へのポインタを読み出して、葉L結婚の構造体にアクセスする。葉L結婚の構造体には、基礎単語結婚へのポインタが格納されているため、コンピュータは、特殊単語の構造体100の中から、基礎単語結婚へのポインタで基礎単語結婚を指定して、読み出す。また、アクセス先となる葉L結婚の構造体においては、対象ビット列0101001000000のうち先頭13ビットの圧縮符号0101001000000が格納されている。また、葉L結婚の構造体の照合フラグがONであるため、コンピュータは、葉L結婚の構造体の照合/置換テーブルTへのポインタp2により、当該ポインタp2のレコードと圧縮符号0101001000000とを照合する。この場合、前方一致となるため、ポインタp2のレコードの指定中フラグをON0⇒1にする。また、葉L結婚の構造体には、圧縮符号長leg=13ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=4213=55となる。図71は、図70に示したEの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Fの状態を示している。前回であるEのビットアドレスabiはabi=42、圧縮符号長legは13ビットであるため、Fのビットアドレスabiはabi=55ビットとなる。また、このビットアドレスabi=55により、バイトオフセットbyos=6、ビットオフセットbios=7となる。バイトオフセットbyos=6により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭6バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタr1にセットする。また、ビットオフセットbios=7により、マスクパターンは、0x01FFF000であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン0x01FFF000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=7により、レジスタシフト数rsは、rs=32-m―bios=32-13-7=12となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に12ビット分シフトする。このシフトによりレジスタr2には、00000000101001000010が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0101001000010が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0101001000010と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0101001000010が葉L活動へのポインタと一致するため、コンピュータは、葉L活動へのポインタを読み出して、葉L活動の構造体にアクセスする。葉L活動の構造体には、基礎単語活動へのポインタが格納されているため、コンピュータは、特殊単語の構造体100の中から、基礎単語活動へのポインタで基礎単語活動を指定して、読み出す。また、アクセス先となる葉L活動の構造体においては、対象ビット列0101001000010のうち先頭13ビットの圧縮符号0101001000010が格納されている。したがって、コンピュータは、照合/置換テーブルTのうち指定中フラグがONになっているレコード、ここでは、ポインタp2のレコードと圧縮符号0101001000010とを照合する。この照合は、指定中フラグがONのため、後方一致照合をおこなう。そして、後方一致するため、ポインタp2のレコードの置換文字列結<color>婚活</color>動を伸長バッファ6600に書き出す。このあと、コンピュータは指定中フラグを0に戻す。また、葉L活動の構造体には、圧縮符号長leg=13ビットも格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=5513=68となる。したがって、圧縮符号列がなくなるまで、伸長処理を継続することとなる。このように、葉へのポインタには圧縮符号が含まれているため、いずれの葉へのポインタが抽出された場合であっても、圧縮符号を特定するまでもなく、直接葉の構造体にアクセスすることができる。したがって、伸長処理の高速化を実現することができる。<機能的構成>図72は、本実施の形態にかかるコンピュータの機能的構成例その2を示すブロック図である。コンピュータは、入力部7200と、第1の検索部7201と、第2の検索部7202と、抽出部7203と、作成部7204と、判定部7205と、伸長部7206と、を備える。入力部7200~伸長部7206は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。なお、図72で機能的構成として示したコンピュータは、図35において機能的構成として示したコンピュータと同一コンピュータでもよく、異なるコンピュータでもよい。入力部7200は、2個以上の文字からなる検索文字列の入力を受け付ける。具体的には、出現頻度にかかわらず、たとえば、2連続文字の入力を受け付ける。たとえば、ユーザが入力装置キーボードやマウス、タッチパッドを操作することで、入力部7200は、2個の文字からなる検索文字列の入力を受け付ける。なお、2連続文字のほか、3連続以上の文字列でもよい。第1の検索部7201は、入力部7200によって入力された検索文字列をデータベース7210から検索する。データベース7210とは、上述した特殊単語の構造体100、高位文字コードの構造体500、分割文字コードの構造体600からなるデータ構造体である。第1の検索部7201は、具体的には、たとえば、特殊単語の構造体100から検索文字列を検索する。第2の検索部7202は、第1の検索部7201によって検索されなかった場合、検索文字列の先頭文字を末尾文字とする先行単語と、検索文字列の末尾文字を先頭文字とする後続単語と、をデータベース7210の単語の集合から検索する。データベース7210の単語の集合とは、特殊単語の構造体100である。第2の検索部7202は、検索文字列がたとえば婚活である場合、婚活の先頭文字婚を末尾文字とする単語、たとえば、結婚、離婚といった単語を先行単語として検索する。また、第2の検索部7202は、検索文字列婚活の末尾文字活を先頭文字とする単語、たとえば、活動、活用といった単語を後続単語として検索する。抽出部7203は、第2の検索部7202によって先行単語および後続単語が検索された場合、2N分枝無節点ハフマン木Hのうち先行単語の圧縮符号を先行単語に関連付けされた葉から抽出する。上記の例では、抽出部7203は、先行単語結婚の圧縮符号を、当該圧縮符号を格納する葉L結婚の構造体から抽出する。同様に、後続単語活動の圧縮符号を、当該圧縮符号を格納する葉L活動の構造体から抽出する。作成部7204は、先行単語の圧縮符号と後続単語の圧縮符号とを連結させた連結圧縮符号と、先行単語および後続単語からなりかつ先行単語の末尾文字と後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する。テーブルとは、照合/置換テーブルTである。上記の例では、作成部7204は、先行単語結婚の圧縮符号と後続単語活動の圧縮符号を連結した連結圧縮符号を生成する図4の照合/置換テーブルT4のポインタp2のレコードを参照。また、作成部7204は、先行単語および後続単語からなりかつ先行単語の末尾文字と後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列を生成する。上記の例では、先行単語結婚と後続単語活動からなり、先行単語の末尾文字婚と後続単語の先頭文字活とを特徴付ける情報を埋め込んだ置換文字列を生成する。特徴付ける情報とは、たとえば、先行単語の末尾文字と後続単語の先頭文字の色を変更したり、その背景を変更したり、フォントを変更したりするタグである。そして、作成部7204は、連結圧縮符号と置換文字列とを関連付けて照合/置換テーブルTに格納する図4の照合/置換テーブルT4のポインタp2のレコードを参照。判定部7205は、圧縮ファイルfi内の圧縮符号列が作成部7204によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する。具体的には、たとえば、判定部7205は、圧縮ファイルfi内の圧縮符号列が作成部7204によって作成された照合/置換テーブルT内の連結圧縮符号と一致するか否かを判定する。伸長部7206は、判定部7205によって一致すると判定された場合、連結圧縮符号に関連付けられた置換文字列を伸長先に書き出す。具体的には、伸長部7206は、判定部7205によって一致すると判定された場合、先行単語結婚と後続単語活動との連結圧縮符号に関連付けられた置換文字列結<color>婚活</color>動を伸長先となる伸長バッファに書き出すこととなる。<検索処理手順>図73は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、コンピュータは、検索文字列の入力を待ち受けステップS7301:No、検索文字列が入力された場合ステップS7301:Yes、ファイル絞込み処理ステップS7302、照合/置換テーブルT作成処理ステップS7303、伸長処理ステップS7304を実行する。ファイル絞込み処理ステップS7302は、圧縮ファイル群Fsの中から検索文字列を構成する文字情報が存在する対象ファイルの圧縮ファイルを絞り込む。ファイル絞込み処理ステップS7302の詳細については、図74および図75で後述する。照合/置換テーブルT作成処理ステップS7303は、図1~図11に示したように、照合/置換テーブルTを作成する。照合/置換テーブルT作成処理ステップS7303の詳細については、図76で後述する。伸長処理ステップS7304は、ファイル絞込み処理ステップS7302で絞り込まれた圧縮ファイルを伸長する過程で、照合/置換テーブルT作成処理ステップS7303で作成された照合/置換テーブルTを用いて、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理ステップS7304については、図82で後述する。図74は、図73に示したファイル絞込み処理ステップS7302の詳細な処理手順を示すフローチャートその1である。まず、コンピュータは、検索文字列を対象文字列に設定しステップS7401、最長一致検索処理を実行するステップS7402。最長一致検索処理ステップS7402は、図43に示した最長一致検索処理ステップS4301と同一処理であるため説明を省略する。そして、コンピュータは、特殊単語の構造体100において、最長一致検索処理ステップS7402で得られた最長一致検索結果を2分探索するステップS7403。最長一致検索結果が、特殊単語の構造体100で探索された場合ステップS7403:Yes、対象文字列である特殊単語について、その特殊単語の出現マップを特殊単語の出現マップ群から取得するステップS7404。そして、コンピュータは、対象文字列に後続があるか否かを判断するステップS7405。後続がある場合ステップS7405:Yes、コンピュータは、後続文字列を対象文字列に設定してステップS7406、最長一致検索処理ステップS7402に戻る。一方、後続がない場合ステップS7405:No、これまでに取得された出現マップ群のAND演算で対象ファイルを絞り込むステップS7407。これにより、ファイル絞込み処理ステップS7302は終了し、照合/置換テーブルT作成処理ステップS7303に移行する。また、ステップS7403において、最長一致検索結果が、特殊単語の構造体100で探索されなかった場合ステップS7403:No、図75のステップS7501に移行する。具体的には、最長一致検索結果が特殊単語の構造体100に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合ステップS4410:Noに、図75のステップS7501に移行する。図75は、図73に示したファイル絞込み処理ステップS7302の詳細な処理手順を示すフローチャートその2である。図75では、対象文字列を構成する文字ごとに、出現マップを取得する処理である。まず、コンピュータは、対象文字列の先頭文字を対象文字に設定するステップS7501。つぎに、コンピュータは、高位文字コードの構造体500において対象文字を2分探索するステップS7502。対象文字が探索された場合ステップS7503:Yes、コンピュータは、高位文字の出現マップ群から対象文字の出現マップを取得するステップS7504。そして、図74のステップS7405に戻る。一方、ステップS7503において、探索されなかった場合ステップS7503:No、コンピュータは、対象文字を上位8ビットと下位8ビットに分割するステップS7505。そして、コンピュータは、分割文字コードの出現マップ群の中から上位分割文字コードの出現マップを取得するステップS7506。また、コンピュータは、分割文字コードの出現マップ群の中から下位分割文字コードの出現マップを取得するステップS7507。そして、図74のステップS7405に戻る。このように、図75に示した処理手順により、対象文字についての出現マップを取得することができる。したがって、図74のステップS7407でのAND演算により圧縮ファイルの絞込みができることとなる。図76は、図73に示した照合/置換テーブルT作成処理ステップS7303の詳細な処理手順を示すフローチャートである。まず、コンピュータは、検索文字列を対象文字列に設定しステップS7601、対象文字列が1文字であるか否かを判断するステップS7602。1文字である場合ステップS7602:Yes、文字コード設定処理ステップS7608に移行する。一方、1文字でない場合ステップS7602:No、コンピュータは、特殊単語設定処理を実行するステップS7603。特殊単語設定処理ステップS7603では、たとえば、図9に示したような照合/置換テーブルT1を作成する処理である。特殊単語設定処理ステップS7603の詳細については図77で後述する。特殊単語設定処理ステップS7603では最長一致検索を実行するため、対象文字列の中に特殊単語が含まれているか否かが判別される。そして、コンピュータは、特殊単語設定処理ステップS7603において、特殊単語があったか否かを判断するステップS7604。特殊単語があった場合ステップS7604:Yes、コンピュータは、対象文字列に後続があるか否かを判断するステップS7605。後続がある場合ステップS7605:Yes、コンピュータは、後続文字列を対象文字列に設定しステップS7606、ステップS7602に戻る。一方、後続がない場合ステップS7605:No、照合/置換テーブルT作成処理ステップS7303を終了し、伸長処理ステップS7304に移行する。また、ステップS7604において、特殊単語設定処理ステップS7603で特殊単語がなかった場合ステップS7604:No、コンピュータは、非特殊単語設定処理を実行するステップS7607。非特殊単語設定処理ステップS7607は、たとえば、図2に示したように照合/置換テーブルT0から照合/置換テーブルT1を作成し、図3および図4に示したように、さらに照合/置換テーブルT1から照合/置換テーブルT4を作成する処理手順である。非特殊単語設定処理ステップS7607の詳細については図78および図79で後述する。そして、コンピュータは、文字コード設定処理を実行するステップS7608。文字コード設定処理ステップS7608は、たとえば、検索文字列に含まれている高位文字について、図8に示した照合/置換テーブルT6のポインタp4のレコードや、図10に示した照合/置換テーブルT2のポインタp2のレコードを作成する処理である。文字コード設定処理ステップS7608については図80で後述する。図77は、図76に示した特殊単語設定処理ステップS7603の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字列に対し最長一致検索処理を実行するステップS7701。最長一致検索処理ステップS7701は、最長一致検索処理ステップS4301、S7402と同一処理であるため、説明を省略する。つぎに、コンピュータは、特殊単語の構造体100において、最長一致検索された特殊単語を2分探索するステップS7702。探索されなかった場合ステップS7702:No、図76のステップS7604に移行する。最長一致検索処理ステップS7701で特殊単語が得られなかった場合も、図76のステップS7604に移行する。一方、探索された場合ステップS7702:Yes、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定するステップS7703。そして、コンピュータは、指定先である探索特殊単語の葉の構造体内の照合フラグをONにするステップS7704。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定するステップS7705。そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定された空きポインタのレコードに、探索特殊単語の圧縮符号長、圧縮符号、置換文字列を設定するステップS7706。このあと、図76のステップS7604に移行する。図77に示した特殊単語設定処理ステップS7603では、図9に示したような照合/置換テーブルT1を作成することができる。図78は、図76に示した非特殊単語設定処理ステップS7607の詳細な処理手順を示すフローチャートその1である。図78の処理手順は、図2に示したように、たとえば、照合/置換テーブルT1を作成する処理手順である。コンピュータは、特殊単語の構造体100において、対象文字列と末尾文字が一致する特殊単語を2分探索するステップS7801。探索された場合ステップS7802:Yes、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定するステップS7803。そして、コンピュータは、指定先である探索特殊単語の葉の構造体内の照合フラグをONにするステップS7804。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定するステップS7805。そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定された空きポインタのレコードに、探索特殊単語の圧縮符号長、圧縮符号、置換文字列を設定するステップS7806。このあと、ステップS7802に戻り、次に探索されたか否かを判断する。ステップS7802において、探索されなかった場合ステップS7802:No、コンピュータは、特殊単語の構造体100での探索が終了したか否かを判断するステップS7807。探索が終了していない場合ステップS7807:No、ステップS7802に戻る。一方、探索が終了した場合ステップS7807:Yes、コンピュータは、対象文字列と末尾文字が一致する特殊単語があったか否かを判断するステップS7808。すなわち、ステップS7803~S7806を実行したか否かを判断する。対象文字列と末尾文字が一致する特殊単語があった場合ステップS7808:Yes、図79のステップS7901に移行する。一方、対象文字列と末尾文字が一致する特殊単語がなかった場合ステップS7808:No、非特殊単語設定処理ステップS7607を終了し、図76のステップS7608に移行する。このように、図78の処理手順では、図2に示したように、照合/置換テーブルT1を作成することができる。図79は、図76に示した非特殊単語設定処理ステップS7607の詳細な処理手順を示すフローチャートその2である。図79の処理手順は、図3や図4に示したように、たとえば、照合/置換テーブルT3,T4を作成する処理手順である。コンピュータは、特殊単語の構造体100において、対象文字列と先頭文字が一致する特殊単語を2分探索するステップS7901。探索された場合ステップS7902:Yes、コンピュータは、照合/置換テーブルTの未完成レコードを空きポインタにコピーするステップS7903。未完成レコードとは、図78で設定されたレコードたとえば、図2に示したポインタp1のレコードのように、図79での設定が完了していないレコードである。たとえば、図3の9に示したように、コンピュータは、照合/置換テーブルT1を照合/置換テーブルT2に更新して、ポインタp2のレコードを生成する。未完成レコードをコピーするのは、さらなる探索ステップS7902で、対象文字列と先頭文字が一致する特殊単語が探索された場合に備えるためである。つぎに、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定するステップS7904。そして、コンピュータは、末尾文字が一致する特殊単語の未完成レコードごとに、先頭文字が一致する特殊単語の圧縮符号長を加算し、圧縮符号を連結し、置換文字列を更新するステップS7905。たとえば、コンピュータは、図3の照合/置換テーブルT2のポインタp1のレコードを、照合/置換テーブルT3のポインタp1のレコードのように更新する。また、コンピュータは、図4の照合/置換テーブルT3のポインタp2のレコードを、照合/置換テーブルT4のポインタp2のレコードのように更新する。また、ステップS7902において、探索されなかった場合ステップS7902:No、コンピュータは、特殊単語の構造体100の2分探索が終了したか否かを判断するステップS7906。探索が終了していない場合ステップS7906:No、ステップS7902に戻る。一方、探索が終了した場合ステップS7906:Yes、コンピュータは、照合/置換テーブルTにおいて残されている未完成レコードを消去するステップS7907。そして、図76の文字コード設定処理ステップS7608に移行する。このように、図79の処理手順では、図3や図4に示したように、照合/置換テーブルT3、T4を作成することができる。図80は、図76に示した文字コード設定処理ステップS7608の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字列の先頭文字を対象文字に設定しステップS8001、高位文字コードの構造体500において、対象文字を2分探索するステップS8002。探索された場合ステップS8003:Yes、コンピュータは、高位文字コードの構造体500の葉へのポインタにより、探索文字の葉の構造体を指定するステップS8004。そして、コンピュータは、指定先である探索文字の葉の構造体内の照合フラグをONにするステップS8005。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索文字の葉の構造体内に設定するステップS8006。そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索文字の葉の構造体内に設定された空きポインタのレコードに、探索文字の圧縮符号長、圧縮符号、置換文字列を設定するステップS8007。このあと、図76のステップS7605に移行する。一方、ステップS8003において、探索されなかった場合ステップS8003:No、分割文字コード設定処理を実行してステップS8008、図76のステップS7605に移行する。このように、図80に示した文字コード設定処理ステップS7608では、検索文字列に含まれている高位文字について、図8に示した照合/置換テーブルT6のポインタp4のレコードや、図10に示した照合/置換テーブルT2のポインタp2のレコードを作成することができる。図81は、図80に示した分割文字コード設定処理ステップS8008の詳細を示すフローチャートである。分割文字コード設定処理ステップS8008は、検索対象文字列に含まれている分割文字コードについて、図6に示した照合/置換テーブルT4のポインタp3のレコードや、図7に示した照合/置換テーブルT5のポインタp3のレコード、図10~図11に示した照合/置換テーブルT2~T4のポインタp3のレコードを作成する処理である。まず、コンピュータは、対象文字を上位8ビットと下位8ビットに分割しステップS8101、分割文字コードの構造体600において、上位分割文字コードを2分探索するステップS8102。そして、コンピュータは、分割文字コードの構造体600において、探索された上位分割文字コードの葉の構造体を指定するステップS8103。そして、コンピュータは、指定先となる葉の構造体内の照合フラグをONにするステップS8104。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、探索された上位分割文字コードの葉の構造体での照合/置換テーブルTへのポインタとして設定するステップS8105。このあと、コンピュータは、探索された上位分割文字コードの葉の構造体での照合/置換テーブルTへのポインタとして設定された空きポインタのレコードに、上位分割文字コードの圧縮符号長、圧縮符号、置換文字列を設定するステップS8106。たとえば、図6の照合/置換テーブルT4のポインタp3のレコードのように設定する。また、コンピュータは、分割文字コードの構造体600において、下位分割文字コードを2分探索するステップS8107。そして、コンピュータは、分割文字コードの構造体600において、探索された下位分割文字コードの葉の構造体を指定するステップS8108。このあと、コンピュータは、照合/置換テーブルTにおける上位分割文字コードについて設定されたレコードに、下位分割文字コードの圧縮符号長を加算し、圧縮符号を連結し、置換文字列を更新するステップS8109。たとえば、図7に示したように、照合/置換テーブルT4のポインタp3のレコードを、照合/置換テーブルT5のポインタp3のレコードのように更新する。このあと、図76のステップS7605に移行する。このように、分割文字コード設定処理ステップS8008によれば、分割文字コードで構成される低出現頻度の文字についても、置換文字列を生成することができる。図82は、2N分枝無節点ハフマン木を用いた伸長処理手順を示すフローチャートその1である。図82において、まず、コンピュータは、ビットアドレスabiをabi=0としステップS8201、バイトオフセットbyosを算出しステップS8202、ビットオフセットbiosを算出するステップS8203。そして、コンピュータは、バイトオフセットbyosの位置からの圧縮符号列をレジスタr1にセットするステップS8204。つぎに、コンピュータは、レジスタr2にセットされたマスクパターンをビットオフセットbios分、末尾方向にシフトしてステップS8205、レジスタr1にセットされた圧縮符号列とのAND演算をおこなうステップS8206。このあと、コンピュータは、レジスタシフト数rsを算出してステップS8207、AND演算後のレジスタr2をレジスタシフト数rs分、末尾にシフトするステップS8208。図83は、図73に示した2N分枝無節点ハフマン木を用いた伸長処理ステップS7304の詳細な処理手順を示すフローチャートその2である。ステップS8208のあと、図83において、コンピュータは、シフト後のレジスタr2から末尾Nビットを対象ビット列として抽出するステップS8301。つぎに、コンピュータは、2N分枝無節点ハフマン木の根の構造体から葉L♯へのポインタを特定しステップS8302、ポイント先となる葉L♯の構造体に1パスでアクセスするステップS8303。このあと、コンピュータは、照合置換処理を実行するステップS8304。照合置換処理ステップS8304の詳細は、図84で後述する。照合置換処理ステップS8304のあと、コンピュータは、葉L♯の構造体から圧縮符号長legを抽出しステップS8305、ビットアドレスabiを更新するステップS8306。このあと、コンピュータは、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断するステップS8307。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合ステップS8307:Yes、図82のステップS8202に戻る。一方、圧縮符号列がない場合ステップS8307:No、伸長処理ステップS7304を終了する。このような伸長処理により、圧縮符号列からNビット単位で圧縮符号を抽出することができ、さらに、2N分枝無節点ハフマン木の根の構造体にアクセスすることで、該当する枝番号となる葉L♯へのポインタを特定することができる。そして、アクセス先となる葉L♯の構造体から文字コードを抽出することで、圧縮符号を伸長する。このように、2N分枝無節点ハフマン木は、内部節点を有していないため、葉L♯へのポインタが特定されれば、1パスで葉L♯の構造体にアクセスすることができ、伸長速度の高速化を図ることができる。図84は、図83に示した照合置換処理ステップS8304の詳細な処理手順を示すフローチャートである。まず、コンピュータは、指定先となる葉の構造体内の照合フラグがONであるか否かを判断するステップS8401。照合フラグがONである場合ステップS8401:Yes、コンピュータが、指定先となる葉の構造体内の照合/置換テーブルTへのポインタにより、照合/置換テーブルTの該当レコードを指定するステップS8402。そして、コンピュータは、指定先となる葉の構造体内の圧縮符号長と、照合/置換テーブルTの指定先レコードでの圧縮符号長とが一致するか否かを判断するステップS8403。一致する場合ステップS8403:Yes、コンピュータは、照合/置換テーブルTの指定先レコードにある置換文字列を伸長バッファに書き出してステップS8404、ステップS8305に移行する。一方、不一致である場合ステップS8403:No、コンピュータは、指定先レコードの指定中フラグをONにしてステップS8405、ステップS8305に移行する。なお、不一致の場合でも、照合フラグがONであるため、指定先レコードの圧縮符号列と指定先となる葉の構造体内の圧縮符号とは前方一致する。また、ステップS8401において、照合フラグがOFFである場合ステップS8401:No、指定中フラグがONである指定先レコードが照合/置換テーブルTにあるか否かを判断するステップS8406。指定中フラグがONである指定先レコードがある場合ステップS8406:Yes、コンピュータは、指定中フラグがONである指定先レコードのうち、圧縮符号が後方一致する指定先レコードを特定するステップS8407。そして、コンピュータは、特定された指定先レコードの置換文字列を伸長バッファに書き出してステップS8408、特定された指定先レコードの指定中フラグをOFFにするステップS8409。これにより、図70および図71のように置換文字列を伸長バッファに書き出すことができる。このあと、ステップS8305に移行する。また、ステップS8406において、指定中フラグがONである指定先レコードがない場合ステップS8406:No、コンピュータは、該当する文字情報の構造体から文字情報を取得しステップS8410、取得した文字情報を伸長バッファに書き出すステップS8411。すなわち、コンピュータは、指定先となる葉の構造体において照合フラグがOFFであっても、また、葉の構造体で指定される文字情報が、高位文字、分割文字コード、特殊単語にかかわらず、伸長バッファに書き出すことができる。このあと、ステップS8305に移行する。以上説明したように、本実施の形態によれば、基礎単語として登録されていない未登録単語であっても高精度な検索をおこなうことができる。たとえば、上述したように、婚活について結婚活動の連結圧縮符号及び置換文字列結婚活動を登録しておき、圧縮符号列と連続圧縮符号が一致したら置換文字列を書出す。これにより、未登録単語婚活であるがゆえに婚と活に分離されてしまうといういわゆる泣き別れを防止することができ、未登録単語の検索精度の向上を図ることができる。また、このような処理により、伸長速度の向上も図ることができる。また、検索文字列を構成する高位文字について照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている高位文字の圧縮符号とを照合することができる。これにより、伸長しながら高位文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する高位文字として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。また、検索文字列を構成する低出現頻度の文字についても、分割文字コードについて照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている分割文字コードの圧縮符号とを照合することができる。これにより、伸長しながら低出現頻度の文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する低出現頻度の文字として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。また、検索文字列を構成する特殊単語について照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている特殊単語の圧縮符号とを照合することができる。これにより、伸長しながら低出現頻度の文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する特殊単語として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。また、検索文字列が基礎単語ではない場合であっても、先行する基礎単語の末尾文字と後続の基礎単語の先頭文字との2連続文字の場合においても、照合/置換テーブルTを作成することができる。これにより、たとえば、婚活といった基礎単語ではない検索文字列であっても、結<color>婚活</color>用、結<color>婚活</color>動のように、検索文字列婚活を含む置換文字列を伸長して書き出すことができる。置換文字列は、タグにより婚活として強調表示される。このように、基礎単語にはない略語のような文字列であっても、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。また、文字情報の総種類数に応じて2N分枝無節点ハフマン木での圧縮符号長の上限長Nを1ビット刻みで調節することができる。したがって、文字情報の総種類数に適したサイズで2N分枝無節点ハフマン木を生成することができ、省メモリ化を図ることができる。具体的には、文字情報の総種類数が2K1個より大きく2K個以下である場合は、上限長NをKビットに決定することで、上述の補正Aで示したように、上限長K以上の圧縮符号長の葉数は上限長Kの圧縮符号長の葉数に集約される。したがって、2K分枝無節点ハフマン木が生成されるため、上限符号長をK1以上とした場合の無節点ハフマン木よりもサイズを小さくすることができる。たとえば、文字情報の総種類数が210個より大きく211個以下である場合は、上限長Nを11ビットに決定することで、211分枝無節点ハフマン木を生成することができる。また、文字情報の総種類数が211個より大きく212個以下である場合は、上限長Nを12ビットに決定することで、212分枝無節点ハフマン木を生成することができる。さらに、文字情報の総種類数が212個より大きく213個以下である場合は、上限長Nを13ビットに決定することで、213分枝無節点ハフマン木を生成することができる。また、補正Aでの生起確率総和がしきい値t以上1以下であれば、十分な圧縮効率を見込める。したがって、補正Aでの各圧縮符号長の葉数で2N分枝無節点ハフマン木を生成することで、生成速度の高速化を図ることができる。また、補正Aでの生起確率総和がしきい値t以上1以下でなければ、補正Bを実行することで、圧縮効率の向上を図ることができる。たとえば、しきい値t未満であれば、補正処理を実行することで、生起確率総和を1に漸近させることができ、圧縮効率の向上を最大限までおこなうことができる。同様に、1より大きい場合でも、補正処理を実行することで、生起確率総和を1に漸近させることができ、圧縮効率の向上を最大限までおこなうことができる。また、圧縮符号長間で葉数のシフトをおこなうことでも、生起確率総和を1に近似させることが可能となる。いずれにしても、生起確率総和が1に近似するように各圧縮符号長の葉数を最適な葉数とすることで、圧縮効率の向上を図ることができる。上述した実施の形態では、2文字の婚活を検索文字列としたが、検索文字列は2文字のほか、3文字以上の場合も同じ処理によって検索結果を得ることができる。なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本プログラムは、インターネット等のネットワークを介して配布してもよい。"