"対象ファイルに出現する文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計工程と、前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築する構築工程と、をコンピュータに実行させることを特徴とする生成プログラム。前記決定工程は、前記文字情報の総種類数が2K1個より大きく2K個以下である場合は、前記上限長NをKビットに決定することを特徴とする請求項1に記載の生成プログラム。前記決定工程は、前記文字情報の総種類数が210個より大きく211個以下である場合は、前記上限長Nを11ビットに決定することを特徴とする請求項2に記載の生成プログラム。前記決定工程は、前記文字情報の総種類数が211個より大きく212個以下である場合は、前記上限長Nを12ビットに決定することを特徴とする請求項2に記載の生成プログラム。前記決定工程は、前記文字情報の総種類数が212個より大きく213個以下である場合は、前記上限長Nを13ビットに決定することを特徴とする請求項2に記載の生成プログラム。前記補正工程による補正後の前記上限長Nまでの各圧縮符号長での前記文字情報の種類数に基づいて、前記上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する算出工程と、前記算出工程によって算出された総和がしきい値以上1以下であるか否かを判断する判断工程と、前記判断工程によって前記しきい値以上1以下であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成する生成工程と、前記上限長Nまでの圧縮符号長に基づいて、前記生成工程によって生成された葉の構造体1つ当たりの枝数を、前記上限長Nまでの圧縮符号長ごとに特定する特定工程と、を前記コンピュータに実行させ、前記構築工程は、前記葉の構造体内の圧縮符号に前記特定工程によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成することにより、前記各葉の構造体についての前記葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築することを特徴とする請求項1~5のいずれか一つに記載の生成プログラム。前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を、前記総和で割ることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、前記算出工程は、前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、前記判断工程は、前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、前記生成工程は、前記判断工程によって前記再算出された総和が前記最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする請求項6に記載の生成プログラム。前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長のうち第1の圧縮符号長の前記文字情報の種類数を所定数減少させ、当該第1の圧縮符号長よりも大きい第2の圧縮符号長の前記文字情報の種類数を前記所定数増加させることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、前記算出工程は、前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、前記判断工程は、前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、前記生成工程は、前記判断工程によって前記再算出された総和が1以下の最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする請求項6に記載の生成プログラム。前記再算出された総和が1以下の最大値となるまで、前記更新工程による更新、前記算出工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づく前記総和の再算出、および、前記判断工程による再算出された総和が1以下の最大値であるか否かの判断を、前記コンピュータに繰り返し実行させることを特徴とする請求項7または8に記載の生成プログラム。対象ファイルに出現する文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計手段と、前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定手段と、前記集計手段によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定手段によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正手段と、前記補正手段によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築する構築手段と、を備えることを特徴とする生成装置。対象ファイルを記憶する記憶装置を有するコンピュータが、集計手段により、前記対象ファイルに出現する文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計工程と、決定手段により、前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、補正手段により、前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、構築手段により、前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築する構築工程と、を実行することを特徴とする生成方法。しかしながら、2N分枝無節点ハフマン木では、圧縮符号長が2,3,4の整数倍でしか規定できなかったため、必然的に最大枝数2Nのべき数Nが2,3,4の整数倍でしか規定できなかった。このため、最大枝数2Nは4=22、8=23、16=24、64=26、256=28、512=29、1024=210、4096=212、16384=214となる。このため、最大枝数2Nとして、2048=211や8192=213といった2,3,4の整数倍以外は規定できない。一方、テキストデータを構成する、単一文字、基礎単語、および予約語以下、文字情報と呼ぶの種類数が2m個ただし、mは2,3,4の整数倍より大きく2m1個ただし、m1は2,3,4の整数倍ではない以下である場合、最大枝数2NをN≧m2としなければならない。たとえば、文字情報の種類数が210個より大きく211個以下である場合、最大枝数2Nを212としなければならない。また、文字情報の種類数が212個より大きく213個以下である場合、最大枝数2Nを214としなければならない。このため、2N分枝無節点ハフマン木のサイズが大きくなり、さらなる改善の余地がある。本発明は、上述した従来技術による問題点を解消するため、文字情報の総種類数に最適なサイズで2N分枝無節点ハフマン木を構築することができる生成プログラム、生成装置、および生成方法を提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一観点として、対象ファイルに出現する文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計し、前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定し、集計された圧縮符号長ごとの前記文字情報の種類数のうち、決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正し、補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、決定された上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築する生成プログラム、生成装置、および生成方法が提案される。本発明にかかる生成プログラム、生成装置、および生成方法によれば、文字情報の総種類数に最適なサイズで2N分枝無節点ハフマン木を構築することができるという効果を奏する。以下に添付図面を参照して、本発明にかかる生成プログラム、生成装置、および生成方法の実施の形態を詳細に説明する。なお、本明細書において、文字情報とは、テキストデータを構成する単一文字、基礎単語、予約語などの情報である。単一文字とは1つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。たとえば、UTFUnicodeTransformationFormat16の場合は16ビットコード、ASCIIAmericanStandardCodeforInformationInterchangeコードの場合は8ビットコード、シフトJISJapaneseIndustrialStandardコードの場合は8ビットコードである。シフトJISコードで日本語の文字を表現する場合は、2個の8ビットコードを組み合わせることとなる。また、単一文字以外に、たとえば、特定の文字列で表現される単語や予約語が挙げられる。単語としては、たとえば、児童や生徒が学校教育で学習すべき数百~数千の基礎単語が挙げられる。基礎単語は出現頻度が高い文字列である。予約語とは、予め決められた文字列であり、たとえば、HTMLのタグたとえば、<br>が挙げられる。基礎単語および予約語を特殊単語と称す。なお、本実施の形態では、文字コードとしてUTF16を例に挙げて説明する。<2N分枝無節点ハフマン木のサイズ決定方法>図1は、2N分枝無節点ハフマン木のサイズ決定方法の一例を示す説明図である。2N分枝無節点ハフマン木とは、根から分岐する枝が2N本あり、1または複数本の枝で葉を直接ポイントするハフマン木である。節点内部節点はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。これらの詳細については、後述する。文字情報群の総種類数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分枝無節点ハフマン木の生成までの流れ>図2は、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葉数特定つぎに、生成装置は、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。図2では、最大圧縮符号長が17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。4葉数補正つぎに、生成装置は、葉数を補正する。具体的には、生成装置は、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット~17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、生成装置は、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26、27として葉当たりの枝数を決定する。たとえば、図2では、圧縮符号長11ビットの圧縮符号が割り当てられる文字情報の総数葉数は1215個であるが、その葉当たりの枝数は1である。圧縮符号長11ビットの圧縮符号が割り当てられる文字情報については、それぞれ1本の枝しか割り当てられないこととなる。一方、圧縮符号長6ビットの圧縮符号が割り当てられる文字情報の総数葉数は6個であるが、その葉当たりの枝数は32である。圧縮符号長6ビットの圧縮符号が割り当てられる文字情報については、それぞれ32本の枝が割り当てられることとなる。5葉の構造体生成つぎに、生成装置は、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字0の圧縮符号長は6ビットであり、圧縮符号は000000となる。図2の例では、文字情報の種類数葉数は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ビットのビット列である場合、後続の3ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木により文字0の葉L1の構造体をポイントすることができる。<1出現回数の集計の詳細>図3は、図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種としておく。そして、高位文字コード群、分割文字コード群および予約語群、基礎単語群を混在させて出現頻度を再集計し、出現頻度の降順に再ソートする。再ソート結果が図1の集計結果となる。基礎単語群を集計しない場合、出現頻度の降順にソートされた1305種の文字情報が得られる。文字情報の種類数をこの程度の数に抑えることで、16ビットの文字コードを12ビット以下の圧縮符号に圧縮し、圧縮符号を16ビットの文字コードに伸長することが可能となる。また、基礎単語群を集計する場合、出現頻度の降順にソートされた5401種の文字情報が得られる。4096種の基礎単語を集計すると、16ビットの文字コードを13ビット以下の圧縮符号に圧縮することができ、圧縮符号を16ビットの文字コードに伸長することが可能となる。また、基礎単語は16ビットコードが複数連結された文字列であるため、文字数がn個である場合、n×16ビットコードを13ビット以下の圧縮符号に圧縮でき、圧縮率の向上を図ることができる。また、その圧縮符号をn×16ビットコードの基礎単語に伸長でき、伸長速度を高速化することができる。<2圧縮符号長算出の詳細N=11>図4は、図2の2圧縮符号長算出の詳細N=11を示す説明図である。図4の文字情報テーブルは、図3の集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目~総回数項目までが図3の再ソート結果で得られた情報である。ここで、順位項目には、文字情報の出現回数の降順に順位昇順が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。16は16ビットコードの単一文字を示している。8は8ビットの分割文字コードを示している。特は特殊単語基礎単語または予約語を示している。文字情報項目のうちコード項目には、文字コードまたは分割文字コードが書き込まれている。特殊単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や特殊単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群での文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率1/2yのべき数yが圧縮符号長として書き込まれている。<3葉数特定~5葉の構造体生成の詳細N=11>図5は、図2の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図4の文字情報テーブルを圧縮符号長単位で葉数文字情報の総種類数を集計した結果が、図5における補正前の葉数となる。ここで、補正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である。図5に示した例では、補正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を継続することとなる。図5の例では、補正B3で圧縮符号長ごとの葉数が確定したこととなる。このあと、生成装置は、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=11ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。図6は、文字情報ごとの補正結果を示す説明図である。図6において、文字情報テーブルには、補正A、補正B1~補正B2までの補正結果が追加されている。図5に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の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>図7~図12は、葉へのポインタ生成の詳細N=11を示す説明図である。図7~図12は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図7において、圧縮符号長が6ビットの葉数は6個であるため、圧縮符号は000000~00101が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、32=25個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。図8において、圧縮符号長が7ビットの葉数は18個であるため、圧縮符号0001100~0011111が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、16本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、16=24個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続4ビットが16種のビット列となる。したがって、圧縮符号長が7ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。以下同様、図9において、圧縮符号長が8ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。図10において、圧縮符号長が9ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。図11において、したがって、圧縮符号長が10ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。図12において、圧縮符号長が11ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=11>図13は、図2の72N分枝無節点ハフマン木の構築の詳細N=11を示す説明図である。図13では、N=11とした場合の2048=211分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図7に示したように32個生成される。したがって、葉L1の構造体については、根の構造体に32個の葉L1へのポインタL1P1~L1P32が格納される。葉L2の構造体~葉L6の構造体についても同様である。また、圧縮符号長が7ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図8に示したように16個生成される。したがって、葉L7の構造体については、根の構造体に16個の葉L7へのポインタL7P1~L7P16が格納される。葉L8の構造体~葉L24の構造体についても同様である。また、圧縮符号長が8ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図9に示したように8個生成される。したがって、葉L25の構造体については、根の構造体に8個の葉L25へのポインタL25P1~L25P8が格納される。葉L26の構造体~葉L46の構造体についても同様である。また、圧縮符号長が9ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図10に示したように4個生成される。したがって、葉L47の構造体については、根の構造体に4個の葉L47へのポインタL47P1~L47P4が格納される。葉L48の構造体~葉L69の構造体についても同様である。また、圧縮符号長が10ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図11に示したように2個生成される。したがって、葉L70の構造体については、根の構造体に2個の葉L70へのポインタL70P1~L70P2が格納される。葉L71の構造体~葉L89の構造体についても同様である。また、圧縮符号長が11ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図12に示したように1個生成される。したがって、葉L90の構造体については、根の構造体に1個の葉L90へのポインタL90Pが格納される。葉L91の構造体~葉L1305の構造体についても同様である。<3葉数特定~5葉の構造体生成の詳細N=12>図14は、図2の3葉数特定~5葉の構造体生成の詳細N=12を示す説明図である。なお、N=12の場合は、図3の文字情報テーブルには、たとえば1024種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に1024種を追加した2329種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図4の総回数がかわるため、2329種の文字情報の生起確率も図4に示した値とは異なることとなる。そして、生成装置は、図5の場合と同様に、生起確率総和を求める。そして、生成装置は、生起確率総和がしきい値t以上1以下であるか否かを判断する。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。図14の例では、補正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を継続することとなる。図14の例では、補正B10で更新された生起確率総和0.984は、補正B11で更新された生起確率総和0.984と同じ値である。すなわち、補正B10での各圧縮符号長の葉数と補正B11での各圧縮符号長の葉数とは同じである。この場合、生成装置は、補正B10において、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。このあと、生成装置は、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=12ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。<6葉へのポインタ生成の詳細N=12>図15~図21は、葉へのポインタ生成の詳細N=12を示す説明図である。図15~図21は、圧縮符号長の上限Nが12ビットの場合の葉へのポインタを示している。図15において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号000000,000001が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、64本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、64=26個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続6ビットが64種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。図16において、圧縮符号長が7ビットの葉数は12個であるため、圧縮符号0000100~0001111が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、32=25個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。以下同様、図17において、圧縮符号長が8ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。図18において、圧縮符号長が9ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。図19において、圧縮符号長が10ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。図20において、圧縮符号長が11ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。図21において、圧縮符号長が12ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=12>図22は、72N分枝無節点ハフマン木の構築の詳細N=12を示す説明図である。図22では、N=12とした場合の4096=212分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図15に示したように64個生成される。したがって、葉L1の構造体については、根の構造体に64個の葉L1へのポインタL1P1~L1P64が格納される。葉L2の構造体についても同様である。また、圧縮符号長が7ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図16に示したように32個生成される。したがって、葉L3の構造体については、根の構造体に32個の葉L3へのポインタL3P1~L3P32が格納される。葉L4の構造体~葉L14の構造体についても同様である。また、圧縮符号長が8ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図17に示したように16個生成される。したがって、葉L15の構造体については、根の構造体に16個の葉L15へのポインタL15P1~L15P16が格納される。葉L16の構造体~葉L55の構造体についても同様である。また、圧縮符号長が9ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図18に示したように8個生成される。したがって、葉L56の構造体については、根の構造体に8個の葉L56へのポインタL56P1~L56P8が格納される。葉L57の構造体~葉L107の構造体についても同様である。また、圧縮符号長が10ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図19に示したように4個生成される。したがって、葉L108の構造体については、根の構造体に4個の葉L108へのポインタL108P1~L108P4が格納される。葉L109の構造体~葉L165の構造体についても同様である。また、圧縮符号長が11ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図20に示したように2個生成される。したがって、葉L166の構造体については、根の構造体に2個の葉L166へのポインタL166P1~L166P2が格納される。葉L167の構造体~葉L213の構造体についても同様である。また、圧縮符号長が12ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図21に示したように1個生成される。したがって、葉L214の構造体については、根の構造体に1個の葉L214へのポインタL214Pが格納される。葉L215の構造体~葉L2329の構造体についても同様である。<3葉数特定~5葉の構造体生成の詳細N=13>図23は、図1の3葉数特定~5葉の構造体生成の詳細N=13を示す説明図である。なお、N=13の場合は、図3の文字情報テーブルには、たとえば4096種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に4096種を追加した5401種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図4の総回数がかわるため、5401種の文字情報の生起確率も図4に示した値とは異なることとなる。図23に示した例では、補正Aでの生起確率総和が0.877であるため、補正Bが行われることとなる。<6葉へのポインタ生成の詳細N=13>図24~図31は、葉へのポインタ生成の詳細N=13を示す説明図である。図24~図31は、圧縮符号長の上限NがN=13ビットの場合の葉へのポインタを示している。図24において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号000000,000001が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、128本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、128=27個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続7ビットが128種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、128種の葉へのポインタが生成されることとなる。図25において、圧縮符号長が7ビットの葉数は11個であるため、圧縮符号0000100~0001110が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、64本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、64=26個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続6ビットが64種のビット列となる。したがって、圧縮符号長が7ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。以下同様、図26において、圧縮符号長が8ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。図27において、圧縮符号長が9ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。図28において、圧縮符号長が10ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。図29において、圧縮符号長が11ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。図30において、圧縮符号長が12ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。図31において、圧縮符号長が13ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。<72N分枝無節点ハフマン木の構築の詳細N=13>図32は、図2の72N分枝無節点ハフマン木の構築の詳細N=13を示す説明図である。図32では、N=13とした場合の8192=213分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図24に示したように128個生成される。したがって、葉L1の構造体については、根の構造体に128個の葉L1へのポインタL1P1~L1P128が格納される。葉L2の構造体についても同様である。また、圧縮符号長が7ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図25に示したように64個生成される。したがって、葉L3の構造体については、根の構造体に64個の葉L3へのポインタL3P1~L3P64が格納される。葉L4の構造体~葉L13の構造体についても同様である。また、圧縮符号長が8ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図26に示したように32個生成される。したがって、葉L14の構造体については、根の構造体に32個の葉L14へのポインタL14P1~L14P32が格納される。葉L15の構造体~葉L40の構造体についても同様である。また、圧縮符号長が9ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図27に示したように16個生成される。したがって、葉L41の構造体については、根の構造体に16個の葉L41へのポインタL41P1~L41P16が格納される。葉L42の構造体~葉L75の構造体についても同様である。また、圧縮符号長が10ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図28に示したように8個生成される。したがって、葉L76の構造体については、根の構造体に8個の葉L76へのポインタL76P1~L76P8が格納される。葉L77の構造体~葉L111の構造体についても同様である。また、圧縮符号長が11ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図29に示したように4個生成される。したがって、葉L112の構造体については、根の構造体に4個の葉L112へのポインタL112P1~L112P4が格納される。葉L113の構造体~葉L142の構造体についても同様である。また、圧縮符号長が12ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図30に示したように2個生成される。したがって、葉L143の構造体については、根の構造体に2個の葉L143へのポインタL143P1~L143P2が格納される。葉L144の構造体~葉L248の構造体についても同様である。また、圧縮符号長が13ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図31に示したように1個生成される。したがって、葉L249の構造体については、根の構造体に1個の葉L249へのポインタL249Pが格納される。葉L250の構造体~葉L5401の構造体についても同様である。<葉の構造体>図33は、葉の構造体を示す説明図である。葉の構造体は、第1領域~第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別図3参照が格納される。第3領域には、伸長種別に応じて高位16ビット文字コード、低位の分割8ビット文字コード、または特殊単語へのポインタが格納される。第4領域には、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または特殊単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または予約語である場合、符号区分として1を割り当て、8ビットの分割文字コードの場合、符号区分として0を割り当てる。<文字コードの構造体>図34は、高位文字コードの構造体を示す説明図である。高位文字コードの構造体3400は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、生成装置は、葉の構造体から伸長種別や符号区分を参照して文字コードe♯を抽出し、抽出した文字コードe♯をポイントする葉L♯のポインタを根の構造体から抽出する。葉L♯へのポインタが複数ある場合は、いずれのポインタでもよい。これにより、高位文字コードの構造体3400が生成される。図35は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体3500は、分割文字コードとその葉L♯へのポインタを格納する。具体的には、たとえば、生成装置は、葉の構造体から伸長種別や符号区分を参照して分割文字コードを抽出し、抽出した分割文字コードをポイントする葉Lのポインタを根の構造体から抽出する。葉Lへのポインタが複数ある場合は、いずれのポインタでもよい。これにより、分割文字コードの構造体3500が生成される。図36および図37は、特殊単語の構造体を示す説明図である。図36では、特殊単語が予約語のみであり、図37では、特殊単語は予約語および基礎単語である。特殊単語の構造体3600は、特殊単語とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、生成装置は、葉の構造体から伸長種別や符号区分を参照して特殊単語を抽出し、抽出した特殊単語をポイントする葉L♯のポインタを根の構造体から抽出する。葉L♯へのポインタが複数ある場合は、いずれのポインタでもよい。これにより、特殊単語の構造体3600が生成される。<生成装置のハードウェア構成>図38は、実施の形態にかかる生成装置のハードウェア構成例を示すブロック図である。図38において、生成装置は、CPUCentralProcessingUnit3801と、ROMReadOnlyMemory3802と、RAMRandomAccessMemory3803と、磁気ディスクドライブ3804と、磁気ディスク3805と、光ディスクドライブ3806と、光ディスク3807と、ディスプレイ3808と、I/FInterface3809と、キーボード3810と、マウス3811と、スキャナ3812と、プリンタ3813と、を備えている。また、各構成部はバス3800によってそれぞれ接続されている。ここで、CPU3801は、生成装置の全体の制御を司る。ROM3802は、ブートプログラムなどのプログラムを記憶している。RAM3803は、CPU3801のワークエリアとして使用される。磁気ディスクドライブ3804は、CPU3801の制御にしたがって磁気ディスク3805に対するデータのリード/ライトを制御する。磁気ディスク3805は、磁気ディスクドライブ3804の制御で書き込まれたデータを記憶する。光ディスクドライブ3806は、CPU3801の制御にしたがって光ディスク3807に対するデータのリード/ライトを制御する。光ディスク3807は、光ディスクドライブ3806の制御で書き込まれたデータを記憶したり、光ディスク3807に記憶されたデータをコンピュータに読み取らせたりする。ディスプレイ3808は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ3808は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。インターフェース以下、I/Fと略する。3809は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク3814に接続され、このネットワーク3814を介して他の装置に接続される。そして、I/F3809は、ネットワーク3814と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F3809には、たとえばモデムやLANアダプタなどを採用することができる。キーボード3810は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス3811は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。スキャナ3812は、画像を光学的に読み取り、生成装置内に画像データを取り込む。なお、スキャナ3812は、OCROpticalCharacterReader機能を持たせてもよい。また、プリンタ3813は、画像データや文書データを印刷する。プリンタ3813には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。なお、本実施の形態にかかる生成プログラムや、上述した2N分枝無節点ハフマン木、高位文字コードの構造体3400、分割文字コードの構造体3500、特殊単語の構造体3600は、上述したRAM3803や磁気ディスク3805などの記憶装置に記憶される。<生成装置の機能的構成例>図39は、生成装置の機能的構成例を示すブロック図である。生成装置3900は、集計部3901と、決定部3902と、補正部3903と、算出部3904と、判断部3905と、更新部3906と、生成部3907と、特定部3908と、構築部3909と、を備える。集計部3901~構築部3909は、具体的には、たとえば、図38に示したROM3802、RAM3803、磁気ディスク3805、光ディスク3807などの記憶装置に記憶されたプログラムをCPU3801に実行させることにより、その機能を実現する。集計部3901は、データを集計する機能を有する。具体的には、対象ファイル群を読み込んで、単一文字の出現回数を集計する。たとえば、図2に示したように、集計部3901は、出現回数を降順にソートして、所定順位たとえば、1024位までを高位文字コードとする。所定順位よりも下位の単一文字は、上位8ビットと下位8ビットに分割して、それぞれ8ビットの分割文字コードとして再集計される。また、集計部3901は、最長一致検索処理をおこなうことにより、特殊単語を特定し、特殊単語についても出現回数を集計する。そして、集計部3901は、高位文字コード、分割文字コード、特殊単語を混在させて出現回数を再ソートする。これにより、図4に示した順位項目、伸長種別項目、コード項目、文字項目、出現回数項目が得られる。また、集計部3901は、文字情報ごとの出現回数が得られた場合、全文字情報の出現回数の総和を総回数として算出する。そして、集計部3901は、文字情報ごとに、出現回数を総回数で割ることで、出現率を算出する。集計部3901は、算出された出現率に応じた生起確率を、図2の2圧縮符号長算出の項で説明したように特定し、そのべき数を圧縮符号長とする。これにより、文字情報ごとに圧縮符号長が特定されたこととなる図3を参照。。そして、集計部3901は、図3の文字情報テーブルを参照して、圧縮符号長ごとに文字情報の種類数図4に示した補正前の葉数を集計する。決定部3902は、対象ファイルに出現する文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、文字情報に割り当てられる圧縮符号長の上限長Nを決定する機能を有する。具体的には、たとえば、決定部3902は、文字情報の総種類数が2K1個より大きく2K個以下である場合は、上限長NをKビットに決定する。たとえば、文字情報の総種類数が210個より大きく211個以下である場合は、決定部3902は、上限長Nを11ビットに決定することとなる。また、文字情報の総種類数が211個より大きく212個以下である場合は、決定部3902は、上限長Nを12ビットに決定することとなる。また、文字情報の総種類数が212個より大きく213個以下である場合は、決定部3902は、上限長Nを13ビットに決定することとなる。ここで、文字コードの種別ごとの文字情報の分類について説明する。図40は、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ビットに決定される。図41は、ASCIIコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大2048種の基礎単語が含まれている。基礎単語を1024個含める場合の文字情報の最大総数は、1305個である。したがって、210<1305≦211となるため、上限長NはN=11ビットに決定される。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。図42は、シフトJISコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大4096種の基礎単語が含まれている。また、シフトJISコードの場合、日本語の文字は2つの8ビットコードの組み合わせで表現されるため、偶数個の単語文字列とみなされる。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。また、基礎単語を4096個含める場合の文字情報の最大総数は、5401個である。したがって、212<5401≦213となるため、上限長NはN=13ビットに決定される。また、図39において、補正部3903は、集計部3901によって集計された圧縮符号長ごとの文字情報の種類数のうち、決定部3902によって決定された上限長Nを圧縮符号長とする文字情報の種類数を、上限長N以上の圧縮符号長での文字情報の種類数の総和に補正する機能を有する。具体的には、たとえば、補正部3903は、上述した補正Aによる補正処理を実行する。算出部3904は、補正部3903による補正後の上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する機能を有する。具体的には、たとえば、図5、図14、図23に示した生起確率総和を算出する。判断部3905は、算出部3904によって算出された生起確率総和がしきい値t以上1以下であるか否かを判断する機能を有する。しきい値tは、0<t≦1の値であり、あらかじめ設定される。しきい値tを1としてもよい。しきい値t以上1以下である場合は、補正部3903による補正後の圧縮符号長ごとの文字情報の種類数が、圧縮符号長ごとの葉数として確定させてもよい。一方、しきい値t未満である場合、まだ、生起確率総和を増加させることが可能であるため、上述した補正Bを実行することが可能となる。また、生起確率総和が1よりも大きくなった場合は、上述した補正Bを実行することが可能となる。更新部3906は、判断部3905によってしきい値t以上1以下でないと判断された場合、上限長Nまでの各圧縮符号長の文字情報の種類数を、生起確率総和で割ることにより、上限長Nまでの各圧縮符号長の文字情報の種類数を更新する機能を有する。具体的には、たとえば、更新部3906は、しきい値t未満と判断された場合は補正Bを開始し、1より大きいと判断された場合は補正Bを開始する。この場合、算出部3904は、更新後における上限長Nまでの各圧縮符号長の文字情報の種類数に基づいて、生起確率総和を再算出する。そして、判断部3905は、算出部3904によって再算出された生起確率総和については、1以下の最大値が得られたか、具体的には、たとえば、1以下の最大漸近値に収束したか否かを判断することとなる。生成部3907は、文字情報に圧縮符号を割り当てた葉の構造体を生成する機能を有する。具体的には、たとえば、生成部3907による生成の条件は、判断部3905によって補正Aによりしきい値t以上1以下であると判断された場合、または、補正Bにより1以下の最大値が得られたと判断された場合である。そして、当該条件を満たした場合、生成部3907は、具体的には、たとえば、上限長Nまでの圧縮符号長と、上限長Nまでの圧縮符号長ごとの文字情報の種類数と、文字情報の出現率と、に基づいて、文字情報ごとに圧縮符号を割り付ける。そして、生成部3907は、割り付けた圧縮符号、その圧縮符号長、文字情報を含む葉の構造体を生成する。より具体的には、まず、出現率により順位付けされた文字情報群のうち第1位から昇順に文字情報を選択する。そして、生成部3907は、その選択文字情報の圧縮符号長を特定して、その圧縮符号長となる固有の圧縮符号を割り当てる。たとえば、出現回数第1位の文字情報は、高位文字の0である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号000000が割り当てられることとなる。次に、出現回数第2位の文字情報は、高位文字の>である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号000001が割り当てられることとなる。このようにして、出現回数の順位の昇順で圧縮符号を割り当てる。圧縮符号が決まると、生成部3907は、文字情報ごとに、その文字情報や圧縮符号長、伸長種別などをまとめて葉の構造体を生成することとなる。特定部3908は、上限長Nまでの圧縮符号長に基づいて、生成部3907によって生成された葉の構造体1つ当たりの枝数を、上限長Nまでの圧縮符号長ごとに特定する機能を有する。具体的には、たとえば、特定部3908は、図5、図14、図23に示したように、葉当たりの枝数を、圧縮符号長ごとに特定する。構築部3909は、2N分枝無節点ハフマン木を構築する機能を有する。具体的には、たとえば、構築部3909は、葉の構造体内の圧縮符号に特定部3908によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成する。たとえば、N=11の場合は、図7~図12に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=12の場合は、図15~図21に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=13の場合は、図24~図31に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、構築部3909は、各葉の構造体についての葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築する。具体的には、たとえば、N=11の場合は、図13に示したように、212分枝無節点ハフマン木を構築する。N=12の場合は、図22に示したように、212分枝無節点ハフマン木を構築する。N=13の場合は、図32に示したように、213分枝無節点ハフマン木を構築する。<2N分枝無節点ハフマン木の生成処理手順>図43は、2N分枝無節点ハフマン木の生成処理手順前半を示すフローチャートである。まず、図43において、生成装置3900は、集計部3901により、第1集計処理ステップS4301と第2集計処理ステップS4302を実行する。第1集計処理ステップS4301では、各文字情報の出現回数を集計する。第2集計処理ステップS4302では、圧縮符号長ごとの文字情報の種類数を集計する。第1集計処理ステップS4301と第2集計処理ステップS4302の詳細については後述する。つぎに、生成装置3900は、決定部3902により、圧縮符号長の上限長Nを決定するステップS4303。このNが後述する補正Aでの最大圧縮符号長となる。そして、生成装置3900は、全文字情報の圧縮符号長がNビット以内であるか否かを判断するステップS4304。Nビット以内でない場合ステップS4304:No、生成装置3900は、補正部3903により、補正A処理を実行するステップS4305。具体的には、生成装置3900は、上限長Nが最大圧縮符号長となるように、Nビット以上の各圧縮符号長での文字情報の種類数葉数の総和を求め、この総和を、圧縮符号長Nビットでの文字情報の種類数に補正する。したがって、N1ビット以上の圧縮符号長での文字情報の種類数は0となり、最大圧縮符号長がNビットとなる。このあと、ステップS4306に移行する。一方、Nビット以内である場合ステップS4304:Yes、生成装置3900は、補正A処理ステップS4305を実行せずに、ステップS4306に移行する。ステップS4306では、生成装置3900は、算出部3904により、圧縮符号長ごとの生起確率を算出しステップS4306、算出された圧縮符号長ごとの生起確率の総和生起確率総和TOPを算出するステップS4307。そして、図44のステップS4401に移行する。図44は、2N分枝無節点ハフマン木の生成処理手順後半を示すフローチャートである。生成装置3900は、判断部3905により、算出された生起確率総和TOPが、t≦TOP≦1であるか否かを判断するステップS4401。tは上述したしきい値である。t≦TOP≦1でない場合ステップS4401:No、生成装置3900は、判断部3905により、t>TOPであるか否かを判断するステップS4402。t>TOPである場合ステップS4402:Yes、生成装置3900は、更新部3906により、補正B処理を実行するステップS4403。補正B処理ステップS4403の詳細については後述する。補正B処理のあとは、ステップS4405に移行する。一方、ステップS4402において、t>TOPでない場合ステップS4402:No、生成装置3900は、更新部3906により、補正B処理を実行するステップS4404。補正B処理ステップS4404の詳細については後述する。補正B処理のあとは、ステップS4405に移行する。また、ステップS4401において、t≦TOP≦1である場合ステップS4401:Yes、ステップS4405に移行する。また、ステップS4405において、生成装置3900は、生成部3907により、文字情報ごとに葉の構造体を生成するステップS4405。そして、生成装置3900は、特定部3908により、枝数特定処理を実行するステップS4406。枝数特定処理ステップS4406では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理ステップS4406の詳細については後述する。そして、生成装置3900は、構築部3909により、構築処理を実行するステップS4407。枝数特定処理ステップS4406により葉の構造体ごとの枝数が特定されるため、まず、構築部3909は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、2N分枝無節点ハフマン木が生成されることとなる。なお、生成された2N分枝無節点ハフマン木は、生成装置3900内の記憶装置RAM3803や磁気ディスク3805などに格納される。<第1集計処理ステップS4301>図45は、図43に示した第1集計処理ステップS4301の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、ファイル番号iをi=1に設定しステップS4501、対象ファイルFiを読み込むステップS4502。そして、生成装置3900は、対象ファイルFiの集計処理を実行するステップS4503。このあと、生成装置3900は、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS4504。i>nでない場合ステップS4504:No、生成装置3900は、iをインクリメントしステップS4505、ステップS4502に戻る。一方、i>nである場合ステップS4504:Yes、生成装置3900は、第2集計処理ステップS4302に移行して、第1集計処理ステップS4301を終了する。この第1集計処理ステップS4301によれば、対象ファイルFiごとに対象ファイルFiの集計処理ステップS4503を実行することができる。<対象ファイルFiの集計処理ステップS4503>図46は、図45に示した対象ファイルFiの集計処理ステップS4503の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、対象文字を対象ファイルFiの先頭文字としステップS4601、特殊単語集計処理を実行するステップS4602。このあと、生成装置3900は、対象文字の出現回数を1増加するステップS4603。そして、生成装置3900は、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS4604。対象文字が対象ファイルFiの末尾文字でない場合ステップS4604:No、生成装置3900は、対象文字を末尾方向へ1文字シフトしステップS4605、ステップS4602に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS4604:Yes、生成装置3900は、ステップS4504に移行して、対象ファイルFiの集計処理ステップS4503を終了する。この対象ファイルFiの集計処理ステップS4503によれば、対象ファイル群Fに存在する特殊単語および単一文字の出現頻度を集計することができる。<特殊単語集計処理ステップS4602>図47は、図46に示した特殊単語集計処理ステップS4602の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、最長一致検索処理を実行しステップS4701、最長一致した特殊単語があったか否かを判断するステップS4702。最長一致した特殊単語があった場合ステップS4702:Yes、生成装置3900は、特殊単語出現頻度テーブルにおいて最長一致した特殊単語の出現回数を1増加しステップS4703、ステップS4603に移行する。一方、最長一致した特殊単語がなかった場合ステップS4702:No、ステップS4603に移行する。これにより、特殊単語集計処理ステップS4602を終了する。この特殊単語集計処理ステップS4602によれば、最長一致検索処理ステップS4701により特殊単語を計数することができるため、文字列が長い特殊単語を優先的に計数することができる。<最長一致検索処理ステップS4701>図48は、図47に示した最長一致検索処理ステップS4701の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、c=1とするステップS4801。cは対象文字からの文字数対象文字含むである。c=1の場合は、対象文字だけである。つぎに、生成装置3900は、対象文字からc文字目までの対象文字列と前方一致する特殊単語を、特殊単語構造体を検索するステップS4802。そして、生成装置3900は、検索により特殊単語があるか否かを判断するステップS4803。2分探索により特殊単語がヒットしなかった場合ステップS4803:No、ステップS4806に移行する。一方、2分探索により特殊単語がヒットした場合ステップS4803:Yes、生成装置3900は、ヒットした特殊単語と対象文字列とが完全一致するか否かを判断するステップS4804。そして、完全一致しない場合ステップS4804:No、ステップS4806に移行する。一方、完全一致する場合ステップS4804:Yes、生成装置3900は、最長一致候補として記憶装置に保持しステップS4805、ステップS4806に移行する。ステップS4806では、生成装置3900は、対象文字列について2分探索が終了したか否かを判断するステップS4806。具体的には、生成装置3900は、末尾の特殊単語まで2分探索したか否かを判断する。2分探索が終了していない場合ステップS4806:No、生成装置3900は、ステップS4802に移行して、2分探索が終了するまで継続する。一方、対象文字列について2分探索が終了した場合ステップS4806:Yes、生成装置3900は、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断するステップS4807。c文字目の文字が対象ファイルFiの末尾文字である場合ステップS4807:Yes、ステップS4810に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合ステップS4807:No、生成装置3900は、c>cmaxであるか否かを判断するステップS4808。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。c>cmaxでない場合ステップS4808:No、生成装置3900は、cをインクリメントしてステップS4809、ステップS4802に戻る。一方、c>cmaxである場合ステップS4808:Yes、生成装置3900は、最長一致候補があるか否かを判断するステップS4810。具体的には、生成装置3900は、ステップS4805において1つでも最長一致候補がメモリに保持されているか否かを判断する。最長一致候補がある場合ステップS4810:Yes、生成装置3900は、最長一致候補のうち最長文字列を、最長一致した特殊単語に決定するステップS4811。そして、ステップS4702に移行する。一方、ステップS4810において、最長一致候補が1つもない場合ステップS4810:No、ステップS4702に移行する。これにより、最長一致検索処理ステップS4701を終了する。この最長一致検索処理ステップS4701によれば、特殊単語構造体にある特殊単語の中から、完全一致した文字列の中でかつ最長の文字列を特殊単語として検索することができる。<第2集計処理ステップS4302>図49は、図43に示した第2集計処理ステップS4302の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、文字情報ごとに出現率を算出するステップS4901。つぎに、生成装置3900は、未選択文字情報があるか否かを判断するステップS4902。未選択文字情報がある場合ステップS4902:Yes、生成装置3900は、出現率が最上位の未選択文字情報を選択するステップS4903。そして、生成装置3900は、選択文字情報の出現率に応じて生起確率および圧縮符号長を特定しステップS4904、ステップS4902に戻る。そして、ステップS4902において、未選択文字情報がない場合ステップS4902:No、生成装置3900は、圧縮符号長ごとに文字情報の種類数を計数するステップS4905。これにより、圧縮符号長ごとの葉数文字情報の種類数が特定されることとなる。<補正B処理ステップS4403>図50は、図44に示した補正B処理ステップS4403の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、更新処理を実行するステップS5001。更新処理ステップS5001の詳細については後述する。つぎに、生成装置3900は、更新処理ステップS5001後において、更新前後で葉数の変動があるか否かを判断するステップS5002。変動がある場合ステップS5002:Yes、まだ、生起確率総和TOPが1以下の最大漸近値に収束していないため、更新処理ステップS5001に戻る。一方、変動がない場合ステップS5002:No、これ以上更新処理ステップS5001をしても葉数が変動しない。すなわち、前回の補正Bで最大漸近値に収束したこととなり、生成装置3900は、今回の更新処理ステップS5001での圧縮符号長ごとの葉数で確定させステップS5003、ステップS4405に移行する。これにより、生起確率総和TOPを増加させて、1に漸近させることができ、圧縮効率の向上を図ることができる。<補正B処理ステップS4404>図51は、図44に示した補正B処理ステップS4404の詳細な処理手順を示すフローチャートである。補正B処理ステップS4404は、図50に示した補正B処理ステップS4403と同一内容であるため、同一処理には同一ステップ番号を付す。補正B処理ステップS4404は、補正B処理ステップS4403と同一内容であるが、扱う生起確率総和TOPは1より大きい値であり、更新処理ステップS5001を繰り返すことで、ある時点の補正Bで生起確率総和TOPが1を下回ることとなる。生起確率総和TOPが1未満となると、補正Bの場合と同様、1以下の最大漸近値に収束するまで、更新処理ステップS5001を繰り返すこととなる。これにより、1より大きい生起確率総和TOPを減少させて、1に漸近させることができ、圧縮効率の向上を図ることができる。<更新処理ステップS5001>図52は、図50および図51に示した更新処理ステップS5001の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、未選択の圧縮符号長があるか否かを判断するステップS5201。未選択の圧縮符号長がある場合ステップS5201:Yes、生成装置3900は、未選択の中で最短の圧縮符号長を1つ選択するステップS5202。生成装置3900は、選択圧縮符号長が上限長N補正Aでの最長圧縮符号長であるか否かを判断するステップS5203。選択圧縮符号長が上限長Nでない場合ステップS5203:No、生成装置3900は、選択圧縮符号長の葉数文字情報の種類数を、生起確率総和TOPで割るステップS5204。生成部3907は、選択圧縮符号長の葉数をこの割り算結果の値に更新する。割り算結果の値については、小数点以下は切り捨て、四捨五入、切り上げのいずれでもよい。そして、ステップS5201に戻る。また、ステップS5203において、選択圧縮符号長が上限長Nである場合ステップS5203:Yes、生成装置3900は、葉数の総和から、ステップS5205で更新済みの葉数の総和を引くことにより、選択圧縮符号長この場合は、上限長Nの葉数を引き算結果の値に更新するステップS5206。そして、ステップS5201に戻る。ステップS5201において、未選択の圧縮符号長上限長N以下の圧縮符号長がない場合ステップS5201:No、生成装置3900は、葉数の更新後における生起確率総和TOPを算出しステップS5207、図50および図51のステップS5002に移行する。<枝数特定処理ステップS4406>図53は、図44に示した枝数特定処理ステップS4406の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、特定部3908により、最大圧縮符号長CLmax=Nと最小圧縮符号長CLmin=Mとの差分D=N-Mを算出するステップS5301。たとえば、N=11の場合、図5を参照すると、M=6である。したがって、D=5である。つぎに、生成装置3900は、2のべき数の変数jをj=0とし、圧縮符号長の変数CLをCL=NとするステップS5302。そして、生成装置3900は、j>Dであるか否かを判断するステップS5303。j>Dでない場合ステップS5303:No、生成装置3900は、圧縮符号長CLの葉当たりの枝数bCLを算出するステップS5304。圧縮符号長CLの葉当たりの枝数bCLは、bCL=2jで算出される。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの葉当たりの枝数b11は、b11=2j=20=1となる。つぎに、生成装置3900は、圧縮符号長CLの総枝数BLを算出するステップS5305。圧縮符号長CLの総枝数BLは、BL=LCL×bCLで算出される。LCLは、圧縮符号長CLでの葉数文字情報の種類数である。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの総枝数BLは、1216×20=1216となる。このあと、生成装置3900は、jをインクリメントし、圧縮符号長CLをデクリメントしてステップS5306、ステップS5303に戻り、インクリメント後のjがj>Dであるか否かが判断される。なお、N=11の場合は、j=Dになるとj=D=5となり、CL=M=6となる。したがって、ステップS5304では、圧縮符号長CL5ビット当たりの枝数b6は、b6=26=64となる。同様に、総枝数BLは、B6=0×26=0となる。そして、j>Dである場合ステップS5303:Yes、構築処理ステップS4407に移行する。<構築処理ステップS4407>図54は、図44に示した構築処理ステップS4407の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、圧縮符号長CLをCL=CLmin=MとするステップS5401。つぎに、生成装置3900は、圧縮符号長CLでの未選択の葉があるか否かを判断するステップS5402。未選択の葉がある場合ステップS5402:Yes、生成装置3900は、葉へのポインタ生成処理ステップS5403を実行して、ステップS5402に戻る。葉へのポインタ生成処理ステップS5403では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理ステップS5403の詳細については後述する。一方、ステップS5402において、未選択の葉がない場合ステップS5402:No、生成装置3900は、CL>Nであるか否かを判断するステップS5404。CL>Nでない場合ステップS5404:No、生成装置3900は、CLをインクリメントしてステップS5405、ステップS5402に戻る。一方、CL>Nである場合ステップS5404:Yes、2N分枝無節点ハフマン木が構築されたこととなり、一連処理が終了することとなる。<葉へのポインタ生成処理ステップS5403>図55は、図54に示した葉へのポインタ生成処理ステップS5403の詳細な処理手順を示すフローチャートである。まず、生成装置3900は、未選択の葉Lを選択しステップS5501、選択葉へのポインタ数kをk=1に設定するステップS5502。そして、生成装置3900は、選択葉へのポインタPLkの先行ビット列を、選択葉の圧縮符号に設定するステップS5503。たとえば、上限長N=11については、選択葉が、文字情報0の葉の構造体である場合、圧縮符号は000000である。したがって、選択葉へのポインタPLkの先行ビット列も、図7に示したように、000000となる。つぎに、生成装置3900は、選択葉へのポインタPLkの後続ビット列のビット長を、最大圧縮符号長Nから選択葉の圧縮符号長CLを引いた差分とし、後続ビット列の初期値をオール0に設定するステップS5504。たとえば、選択葉が、文字情報0の葉の構造体である場合、圧縮符号長CLは6ビットであるため、後続ビット列のビット長は5ビット=11-6となる。k=1の場合は、後続ビット列はオール0となるため、後続ビット列は、5ビットの00000となる。そして、生成装置3900は、選択葉へのポインタPLkを根の構造体に格納するステップS5505。このあと、生成装置3900は、k>bCLであるか否かを判断するステップS5506。bCLは、選択葉の圧縮符号長CLの葉当たりの枝数である。k>bCLでない場合ステップS5506:No、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、生成装置3900は、kをインクリメントするステップS5507。そして、生成装置3900は、現在の後続ビット列をインクリメントし、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタPLkを生成するステップS5508。そして、生成装置3900は、選択葉へのポインタPLkを根の構造体に格納しステップS5509、ステップS5506に戻る。ステップS5506~ステップS5509を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップS5506において、k>bCLである場合ステップS5506:Yes、ステップS5402に移行する。このように、本実施の形態によれば、対象ファイル群に出現する文字情報の種類数に応じて、2N分枝無節点ハフマン木の最大枝数2Nを最適な本数に設定することができるため、2N分枝無節点ハフマン木のサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Nが2~4の整数倍でない場合たとえば、上限長N=11,13であっても、圧縮効率のよい2N分枝無節点ハフマン木を生成することができる。<補正B処理の他の例>つぎに、補正B処理の他の例について説明する。上述した補正B処理および補正B処理では、圧縮符号長の葉数ごとに、各圧縮符号長の葉数を生起確率総和で割ることにより、各圧縮符号長の葉数を更新することとした。これに対し、本例では、最小圧縮符号長CLminから最大圧縮符号長CLmaxすなわち、上限長Nに向かって、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増減するように、葉数を移動させる。具体的には、本例の補正B処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも減少するように、葉数を補正する。一方、本例の補正B処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増加するように、葉数を移動させる。その後は、補正後の葉数を生起確率総和で割ることで、各圧縮符号長の葉数を更新する。なお、以下に説明する例では、ある圧縮符号長CLの葉数LCLを、圧縮符号長CL1の葉数LCL1よりも増加/減少するように補正をおこなう例について説明するが、圧縮符号長CLよりも大きい圧縮符号長CL2,CL3,...であってもよい。また、移動対象葉数の個数は、1個に限らず、2個以上でもよい。たとえば、移動元の圧縮符号長の葉数をすべて移動先に移動させてもよい。図56は、補正B処理ステップS4403の他の例の詳細な処理手順を示すフローチャートである。補正B処理ステップS4403において、最小圧縮符号長CLminをMとする。また、最大圧縮符号長CLmaxは上限長Nとなる。図56では、葉数を1個ずつ移動させる例を示している。まず、生成装置3900は、圧縮符号長CLをCL=Mに設定するステップS5601。つぎに、生成装置3900は、圧縮符号長CLがCL=Nであるか否かを判断するステップS5602。CL=Nでない場合ステップS5602:No、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、生成装置3900は、葉数LCLがLCL=0であるか否かを判断するステップS5603。LCL=0の場合ステップS5603:Yes、移動させる葉数LCLがないため、生成装置3900は、圧縮符号長CLをインクリメントしステップS5604、ステップS5602に戻る。そして、圧縮符号長CLがCL=Nとなった場合ステップS5602:Yes、ステップS5613に移行し、生成装置3900は、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。また、ステップS5603において、葉数LCLがLCL=0でない場合ステップS5603:No、生成装置3900は、現在対象となっている圧縮符号長CLの葉数LCLをデクリメントしステップS5605、移動先となる圧縮符号長CL1の葉数LCL1をインクリメントするステップS5606。そして、圧縮符号長CL,CL1については、ステップS5605,ステップS5606において葉数が増減したため、生成装置3900は、圧縮符号長CLについての生起確率と圧縮符号長CL1についての生起確率とを再計算するステップS5607。このあと、生成装置3900は、各圧縮符号長CLmin~CLmaxの最新の葉数での生起確率総和TOPを算出するステップS5608。そして、生成装置3900は、算出されたTOPがt>TOPであるか否かを判断するステップS5609。t>TOPである場合ステップS5609:Yes、まだ改善の余地があるため、ステップS5603に戻る。一方、t>TOPでない場合ステップS5609:No、生成装置3900は、t≦TOP≦1であるか否かを判断するステップS5610。t≦TOP≦1である場合ステップS5610:Yes、これ以上補正する必要がないため、ステップS5613に移行する。一方、t≦TOP≦1でない場合ステップS5610:No、生成装置3900は、現在対象となっている圧縮符号長Lの葉数LCLをインクリメントしステップS5611、移動先の圧縮符号長CL1の葉数LCL1をデクリメントするステップS5612。すなわち、t≦TOP≦1でない場合ステップS5610:Noは、TOP>1であるため、今回の補正自体が失敗となる。したがって、ステップS5605およびステップS5606での葉数移動を、ステップS5611およびステップS5612で元に戻すこととなる。このあと、ステップS5604に戻る。ステップS5604では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の増加がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。また、ステップS5613になると、生成装置3900は、そのときの圧縮符号長CLmin~CLmaxごとの葉数LCLmin~葉数LCLmaxで確定させることとなるステップS5613。その後、ステップS4405に移行することで、補正B処理ステップS4403を終了する。図57は、補正B処理ステップS4404の他の例の詳細な処理手順を示すフローチャートである。補正B処理ステップS4404は、図56に示した補正B処理ステップS4403とほぼ同一内容であるため、同一処理には同一ステップ番号を付す。異なる点は、ステップS5705,ステップS5706,ステップS5709,ステップS5711,ステップS5712である。まず、生成装置3900は、圧縮符号長CLをCL=Mに設定するステップS5601。つぎに、生成装置3900は、圧縮符号長CLがCL=Nであるか否かを判断するステップS5602。CL=Nでない場合ステップS5602:No、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、生成装置3900は、葉数LCLがLCL=0であるか否かを判断するステップS5603。LCL=0の場合ステップS5603:Yes、移動させる葉数LCLがないため、生成装置3900は、圧縮符号長CLをインクリメントしステップS5604、ステップS5602に戻る。そして、圧縮符号長CLがCL=Nとなった場合ステップS5601:Yes、ステップS5613に移行し、生成装置3900は、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。また、ステップS5603において、葉数LCLがLCL=0でない場合ステップS5603:No、生成装置3900は、現在対象となっている圧縮符号長CLの葉数LCLをインクリメントしステップS5705、移動先となる圧縮符号長CL1の葉数LCL1をデクリメントするステップS5706。そして、圧縮符号長CL,CL1については、ステップS5705,ステップS5706において葉数が増減したため、生成装置3900は、圧縮符号長CLについての生起確率と圧縮符号長CL1についての生起確率とを再計算するステップS5607。このあと、生成装置3900は、各圧縮符号長CLmin~CLmaxの最新の葉数での生起確率総和TOPを算出するステップS5608。そして、生成装置3900は、算出されたTOPが1<TOPであるか否かを判断するステップS5709。1<TOPである場合ステップS5709:Yes、まだ改善の余地があるため、ステップS5603に戻る。一方、1<TOPでない場合ステップS5709:No、生成装置3900は、t≦TOP≦1であるか否かを判断するステップS5610。t≦TOP≦1である場合ステップS5610:Yes、これ以上補正する必要がないため、ステップS5613に移行する。一方、t≦TOP≦1でない場合ステップS5610:No、生成装置3900は、現在対象となっている圧縮符号長Lの葉数LCLをデクリメントしステップS5711、移動先の圧縮符号長CL1の葉数LCL1をインクリメントするステップS5712。すなわち、t≦TOP≦1でない場合ステップS5610:Noは、t>TOPであるため、今回の補正自体が失敗となる。したがって、ステップS5705およびステップS5706での葉数移動を、ステップS5711およびステップS5712で元に戻すこととなる。このあと、ステップS5604に戻る。ステップS5604では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の減少がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。また、ステップS5613になると、生成装置3900は、そのときの圧縮符号長CLmin~CLmaxごとの葉数LCLmin~葉数LCLmaxで確定させることとなるステップS5613。その後、ステップS4405に移行することで、補正B処理ステップS4404を終了する。図58は、図56に示した補正B処理の他の例を適用した場合における、図2の3葉数特定~5葉の構造体生成の詳細N=12を示す説明図である。図58では、移動元の圧縮符号長の葉数を、1ビット小さい移動先の圧縮符号長の葉数に1個ずつシフトさせた例を示している。図58では、図56におけるしきい値tをt=1とする。図58では、補正Aでの生起確率総和TOPが0.823であるため、補正B処理が適用される。まず、移動先を最小圧縮符号長である6ビットとし、移動元を1ビット大きい7ビットとする。補正B1では、圧縮符号長7ビットの葉数9を1つずつ、最小圧縮符号長6ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B1では生起確率総和TOPが1を超えていない。そして、移動元の圧縮符号長7ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11=92となる。このときの補正B1での生起確率総和TOPは0.894であるため、さらに補正Bが必要である。つぎに、補正B2では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を6ビットから7ビットとし、移動元の圧縮符号長を7ビットから8ビットとする。そして、移動元の圧縮符号長8ビットの葉数22を1つずつ、補正B1で葉数が0になった移動先の圧縮符号長7ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B2では生起確率総和TOPが1を超えていない。そして、移動元の圧縮符号長8ビットの葉数が0になった場合、移動先の圧縮符号長7ビットの葉数は22=022となる。このときの補正B2での生起確率総和TOPは0.979であるため、さらに補正Bが必要である。つぎに、補正B3では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を7ビットから8ビットとし、移動元の圧縮符号長を8ビットから9ビットとする。そして、移動元の圧縮符号長9ビットの葉数19を1つずつ、補正B2で葉数が0になった移動先の圧縮符号長8ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長9ビットの葉数が28から19になり、移動先の圧縮符号長8ビットの葉数が0から11になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻し、移動元の圧縮符号長9ビットの葉数を18、移動先の圧縮符号長8ビットの葉数を10として、補正B3を終了する。このときの補正B3での生起確率総和TOPは0.999であるため、さらに補正Bが必要である。つぎに、補正B4では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を8ビットから9ビットとし、移動元の圧縮符号長を9ビットから10ビットとする。そして、移動元の圧縮符号長10ビットの葉数29を1つずつ、補正B3で葉数が18になった移動先の圧縮符号長9ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長10ビットの葉数が29から27になり、移動先の圧縮符号長9ビットの葉数が18から20になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻し、移動元の圧縮符号長10ビットの葉数を28、移動先の圧縮符号長9ビットの葉数を19として、補正B4を終了する。このときの補正B4での生起確率総和TOPは1.000であるため、さらに補正Bが可能である。つぎに、補正B5では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を9ビットから10ビットとし、移動元の圧縮符号長を10ビットから11ビットとする。そして、移動元の圧縮符号長11ビットの葉数25を1つずつ、補正B4で葉数が28になった移動先の圧縮符号長10ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長11ビットの葉数が25から23になり、移動先の圧縮符号長10ビットの葉数が28から30になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻し、移動元の圧縮符号長11ビットの葉数を24、移動先の圧縮符号長10ビットの葉数を29として、補正B5を終了する。このときの補正B5での生起確率総和TOPは1.000であるため、さらに補正Bが可能である。つぎに、補正B6では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を10ビットから11ビットとし、移動元の圧縮符号長を11ビットから12ビットとする。そして、移動元の圧縮符号長12ビットの葉数2214を1つずつ、補正B5で葉数が24になった移動先の圧縮符号長11ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長12ビットの葉数が2214から2213になり、移動先の圧縮符号長11ビットの葉数が24から25になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻すこととなる。戻した葉数は、補正B5終了時点での葉数となる。補正B5終了時点での生起確率総和TOPは1.000である。本例では、これ以上、移動元の圧縮符号長を大きくすることができないため、補正B5終了時点での葉数が確定することとなる。図59は、上述した補正B処理の他の例を適用した場合における、図2の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図59では、移動元の圧縮符号長の葉数をすべて、1ビット大きい移動先の圧縮符号長の葉数にシフトさせた例を示している。図59では、図57におけるしきい値tをt=1とする。図59では、補正Aでの生起確率総和TOPが1.146であるため、補正B処理が適用される。まず、移動元を最小圧縮符号長である5ビットとし、移動先を1ビット大きい6ビットとする。補正B1では、移動元の圧縮符号長5ビットの葉数2を1つずつ、圧縮符号長6ビットに移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B1では生起確率総和TOPが1以下にならない。そして、移動元の圧縮符号長5ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11=92となる。このときの補正B1での生起確率総和TOPは1.115であるため、さらに補正Bが必要である。つぎに、補正B2では、移動元および移動先の圧縮符号長を1ビット大きくする。すなわち、移動元の圧縮符号長を5ビットから6ビットとし、移動先の圧縮符号長を6ビットから7ビットとする。そして、移動元の圧縮符号長6ビットの葉数11を1つずつ、移動先の圧縮符号長7ビットの葉数22に移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B2では生起確率総和TOPが1以下にならない。そして、移動元の圧縮符号長6ビットの葉数が0になった場合、移動先の圧縮符号長7ビットの葉数は33=2211となる。このときの補正B2での生起確率総和TOPは1.029であるため、さらに補正Bが必要である。つぎに、補正B3では、移動元および移動先の圧縮符号長を1ビット大きくする。すなわち、移動元の圧縮符号長を6ビットから7ビットとし、移動先の圧縮符号長を7ビットから8ビットとする。そして、移動元の圧縮符号長7ビットの葉数33を1つずつ、移動先の圧縮符号長8ビットの葉数28に移動させる。生成装置3900は、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B3では、移動元である圧縮符号長7ビットの葉数が25、移動先である圧縮符号長8ビットの葉数が36に到達すると、生起確率総和TOPが1以下の0.998となる。これ以上葉数移動をしても、生起確率総和TOPが低下するため、このときの各圧縮符号長の葉数で確定させることとなる。<圧縮処理>つぎに、上述した2N分枝無節点ハフマン木を用いた対象ファイル群の圧縮処理について説明する。圧縮処理は、生成装置3900が実行してもよく、また、2N分枝無節点ハフマン木が格納された情報処理装置が実行してもよい。すなわち、少なくとも2N分枝無節点ハフマン木が格納されていればよい。以下、生成装置3900および情報処理装置を総称してコンピュータとする。ここで、まず、圧縮対象文字列とその圧縮符号を例に挙げて説明する。図60は、圧縮対象文字列の一例を示す説明図である。図60では、次の兎はという文字列の16ビットコード16進と2進を示している。図61は、図60に示した圧縮対象文字列の圧縮符号を示す説明図である。図61に示した圧縮符号は、図22に示した2N分枝無節点ハフマン木N=12を用いて圧縮した例を示している。図61では、図60と比較すると、高位文字次は、16ビットから12ビットに圧縮されている。また、高位文字のは、16ビットから7ビットに圧縮されている。また、兎の上位分割文字コード0x51は、8ビットから11ビットに圧縮されている。兎の下位分割文字コード0x4Eは、8ビットから11ビットに圧縮されている。高位文字はは、16ビットから9ビットに圧縮されている。なお、分割文字コードについては、圧縮後のほうがビット長が長いが、兎のような単一文字はそもそも出現回数が少ないために分割されているため、対象ファイル群全体で見れば問題ない。図62は、圧縮対象文字列の他の例を示す説明図である。図62では、兎は動物園のという文字列の16ビットコード16進と2進を示している。図63は、図62に示した圧縮対象文字列の圧縮符号を示す説明図である。図63に示した圧縮符号は、図32に示した2N分枝無節点ハフマン木N=13を用いて圧縮した例を示している。図63では、図62と比較すると、兎の上位分割文字コード0x51は、8ビットから12ビットに圧縮されている。兎の下位分割文字コード0x4Eは、8ビットから12ビットに圧縮されている。高位文字はは、16ビットから10ビットに圧縮されている。動物園は基礎単語に該当するため、48ビットから13ビットに圧縮されている。また、高位文字のは、16ビットから8ビットに圧縮されている。なお、分割文字コードについては、圧縮後のほうがビット長が長いが、兎のような単一文字はそもそも出現回数が少ないために分割されているため、対象ファイル群全体で見れば問題ない。また、基礎単語は、そのビット列に比べて圧縮符号が非常に短くなるため最大でも13ビット、2文字高位文字以上であれば十分圧縮効率が向上することとなる。<圧縮処理の具体例>図64は、2N分枝無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。まず、コンピュータは、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイル上の位置を保持しておく。そして、コンピュータは、特殊単語の構造体3600に対して2分木探索をおこなう。特殊単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する特殊単語raaは葉の番号が探索された場合、特殊単語の構造体3600において対応付けされている葉Laへのポインタにより葉Laの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Laの構造体に格納されている特殊単語raの圧縮符号を探索して、圧縮バッファ6400に格納する。一方、不一致の圧縮文字コードが出現した場合、特殊単語の構造体3600に対する2分木探索を終了するEOTEndOfTransmissionまで進む。そして、コンピュータは、1文字目の圧縮対象文字コードを再度レジスタにセットして、高位文字コードの構造体3400に対する2分木探索をおこなう。一致する文字コードebbは葉の番号が探索された場合、コンピュータは、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lbの構造体に格納されている文字コードebの圧縮符号を探索して、圧縮バッファ6400に格納する。一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは高位文字コードではないため、コンピュータは、上位8ビットと下位8ビットに分割する。そして、コンピュータは、上位8ビットの分割文字コードについて、分割文字コードの構造体3500に対する2分木探索をおこなう。一致する分割文字コードDc1c1は葉の番号が探索された場合、コンピュータは、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc1の構造体に格納されている分割文字コードDc1の圧縮符号を探索して、圧縮バッファ6400に格納する。引き続き、コンピュータは、下位8ビットの分割文字コードについて、分割文字コードの構造体3500に対する2分木探索をおこなう。一致する分割文字コードDc2c2は葉の番号が探索された場合、コンピュータは、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc2の構造体に格納されている分割文字コードDc2の圧縮符号を探索して、圧縮バッファ6400に格納する。<ファイル圧縮処理>図65は、コンピュータが自動実行する2N分枝無節点ハフマン木を用いたファイル圧縮処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号:pをp=1としステップS6501、対象ファイルFpを読み込むステップS6502。つぎに、コンピュータは、圧縮処理を実行してステップS6503、ファイル番号:pをインクリメントするステップS6504。そして、コンピュータは、p>αであるか否かを判断するステップS6505。αは対象ファイル群Fsの総数である。p>αでない場合ステップS6505:No、ステップS6502に戻る。一方、p>αである場合ステップS6505:Yes、一連のファイル圧縮処理を終了する。図66は、図65に示した圧縮処理ステップS6503の詳細な処理手順を示すフローチャートその1である。図66において、まず、コンピュータは、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断するステップS6601。ある場合ステップS6601:Yes、コンピュータは、圧縮対象文字コードを取得してレジスタにセットするステップS6602。そして、コンピュータは、先頭の圧縮対象文字コードか否かを判断するステップS6603。ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合ステップS6603:Yes、コンピュータは、その圧縮対象文字コードの対象ファイル群Fs上の位置先頭位置となるポインタを取得しステップS6604、ステップS6605に移行する。一方、先頭でない場合ステップS6603:No、先頭位置を取得せずにステップS6605に移行する。そして、コンピュータは、特殊単語の構造体3600に対して2分木探索をおこなうステップS6605。圧縮対象文字コードが一致した場合ステップS6606:Yes、コンピュータは、連続して一致した文字コード列が特殊単語の文字コード列に該当するか否かを判断するステップS6607。該当しない場合ステップS6607:No、コンピュータは、ステップS6602に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。一方、ステップS6607において、特殊単語に該当する場合ステップS6607:Yes、コンピュータは、該当する特殊単語の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6608。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている特殊単語の圧縮符号を抽出するステップS6609。この後、コンピュータは、抽出された圧縮符号を圧縮バッファ6400に格納してステップS6610、ステップS6601に戻る。このループが特殊単語の圧縮処理の流れとなる。ステップS6601において、圧縮対象文字コードがない場合ステップS6601:No、コンピュータは、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ6400からファイル出力して保存するステップS6611。そして、ステップS6504に移行する。一方、ステップS6606において不一致となった場合ステップS6606:No、16ビットの文字コードの圧縮処理のループに入る。図67は、図65に示した圧縮処理ステップS6503の詳細な処理手順を示すフローチャートその2である。図67において、コンピュータは、ステップS6604で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットするステップS6701。つぎに、コンピュータは、圧縮対象文字コードについて、高位文字コードの構造体3400に対して2分木探索をおこなうステップS6702。一致した場合ステップS6703:Yes、コンピュータは、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6704。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出するステップS6705。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6400に格納してステップS6706、ステップS6601に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS6703において一致する文字コードが存在しなかった場合ステップS6703:No、分割文字コードの圧縮処理のループに入る。図68は、図65に示した圧縮処理ステップS6503の詳細な処理手順を示すフローチャートその3である。図68において、まず、コンピュータは、圧縮対象文字コードを上位8ビットと下位8ビットとに分割しステップS6801、上位8ビットの分割文字コードを抽出するステップS6802。そして、コンピュータは、分割文字コードの構造体3500に対して2分木探索をおこなうステップS6803。そして、コンピュータは、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6804。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出するステップS6805。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6400に格納するステップS6806。つぎに、コンピュータは、下位8ビットが探索済みか否かを判断しステップS6807、探索済みでない場合ステップS6807:No、コンピュータは、下位8ビットの分割文字コードを抽出してステップS6808、ステップS6803~S6806を実行する。一方、下位8ビットが探索済みである場合ステップS6807:Yes、ステップS6601に戻り、特殊単語の圧縮処理のループに入る。このように、2N分枝無節点ハフマン木を用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字情報を抽出して、圧縮バッファ6400に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。また、圧縮対象文字コードが格納されている葉L♯の構造体を、特殊単語の構造体3600、高位文字コードの構造体3400および分割文字コードの構造体3500により即座に特定することができる。したがって、2N分枝無節点ハフマン木の葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、6万種以上ある低位の文字コードをたかだか256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。<伸長処理例>つぎに、2N分枝無節点ハフマン木により圧縮された圧縮符号列を伸長する伸長処理例について説明する。図69~図73は、図61に示した圧縮符号列の伸長処理例を示す説明図である。伸長処理では、コンピュータは、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。コンピュータは、抽出した圧縮符号を、1パス1枝分のアクセスで2N分枝無節点ハフマン木の根から探索する。そして、コンピュータは、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファ6900に格納する。圧縮符号を抽出するため、コンピュータは、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を0xFFF00000とする。このマスクパターンは先頭12ビットが1であり、後続の20ビットが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のときは、マスク位置はシフトされないこととなり、マスクパターンは、0xFFF00000となる。一方、ビットオフセットbios=4のときは、マスク位置は末尾方向に4ビットシフトすることとなり、マスクパターンは、0x0FFF0000となる。レジスタシフト数rsは、マスクパターンとのAND演算後のレジスタ内の圧縮符号列を末尾方向にシフトするビット数であり、rs=32-12-biosで求められる。このシフトにより、コンピュータは、シフト後のレジスタの末尾mビットのビット列を対象ビット列として抽出する。コンピュータは、対象ビット列の抽出後はレジスタをクリアする。なお、図69~図73において、メモリには図61に示した圧縮符号列が保持されているものとする。また、図69~図73のメモリ内のブロックは1バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図69は、初期状態Aの状態を示している。Aでは、ビットアドレスabi=0により、バイトオフセットbyos=0、ビットオフセットbios=0となる。バイトオフセットbyos=0により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=0により、マスクパターンは、0xFFF00000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0xFFF00000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32-m―bios=32-12-0=20となる。したがって、レジスタ内のAND結果を末尾方向に20ビット分シフトする。このシフトによりレジスタには、101111111011が残されるため、コンピュータは、末尾12ビットを対象ビット列として抽出する。この場合は、101111111011が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図22に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L2329へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列101111111011と一致する葉L♯へのポインタを探索する。この場合、葉L691へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L691へのポインタを読み出して、葉L691の構造体にアクセスする。葉L691の構造体には、文字コード0x216B高位文字:次に相当が格納されているため、コンピュータは、当該文字コード0x216Bを抽出して伸長バッファ6900に格納する。また、葉L691の構造体には、文字コード0x216Bの圧縮符号長leg=12ビットも格納されているため、コンピュータは、文字コード0x216Bの圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=012=12となる。図70は、図69に示したAの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Bの状態を示している。前回であるAのビットアドレスabiはabi=0、圧縮符号長legは12ビットであるため、Bのビットアドレスabiはabi=12ビットとなる。また、このビットアドレスabi=12により、バイトオフセットbyos=1、ビットオフセットbios=4となる。バイトオフセットbyos=1により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=4により、マスクパターンは、0x0FFF0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x0FFF0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32-m―bios=32-12-4=16となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に16ビット分シフトする。このシフトによりレジスタには、0000010101110011が残されるため、コンピュータは、末尾12ビットを対象ビット列として抽出する。この場合は、010101110011が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図22に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L2329へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列010101110011と一致する葉L♯へのポインタを探索する。この場合、対象ビット列010101110011が葉L27へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L27へのポインタを読み出して、葉L27の構造体にアクセスする。葉L27の構造体には、文字コード0x6E30文字:のに相当が格納されているため、コンピュータは、当該文字コード0x6E30を抽出して伸長バッファ6900に格納する。また、葉L27の構造体には、文字コード0x6E30の圧縮符号長leg=7ビットも格納されているため、コンピュータは、文字コード0x6E30の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=127=19となる。図71は、図70に示したBの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Cの状態を示している。前回であるBのビットアドレスabiはabi=12、圧縮符号長legは7ビットであるため、Cのビットアドレスabiはabi=19ビットとなる。また、このビットアドレスabi=19により、バイトオフセットbyos=2、ビットオフセットbios=3となる。バイトオフセットbyos=2により、メモリに保持されている圧縮符号列のうち先頭2バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=3により、マスクパターンは、0x1FFE0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x1FFE0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=3により、レジスタシフト数rsは、rs=32-m―bios=32-12-3=17となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に17ビット分シフトする。このシフトによりレジスタには、000100110011101が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、100110011101が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図22に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L2329へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体セルの中から、抽出された対象ビット列100110011101と一致する葉L♯へのポインタを探索する。この場合、対象ビット列100110011101が葉L167へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L167へのポインタを読み出して、葉L167の構造体にアクセスする。葉L167の構造体には、分割文字コード0x51が格納されているため、コンピュータは、当該文字コード0x51を抽出して伸長バッファ6900に格納する。また、葉L167の構造体には、文字コード0x51の圧縮符号長leg=11ビットも格納されているため、コンピュータは、文字コード0x51の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=1911=30となる。図72は、図71に示したCの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Dの状態を示している。前回であるCのビットアドレスabiはabi=19、圧縮符号長legは11ビットであるため、Dのビットアドレスabiはabi=30ビットとなる。また、このビットアドレスabi=30により、バイトオフセットbyos=3、ビットオフセットbios=6となる。バイトオフセットbyos=3により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭3バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=6により、マスクパターンは、0x03FFC000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x03FFC000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=6により、レジスタシフト数rsは、rs=32-m―bios=32-12-6=14となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に14ビット分シフトする。このシフトによりレジスタには、000000100110000111が残されるため、コンピュータは、末尾12ビットを対象ビット列として抽出する。この場合は、100110000111が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図22に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L2329へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列100110000111と一致する葉L♯へのポインタを探索する。この場合、対象ビット列100110000111が葉L156へのポインタ群の中の一つと一致するため、葉L156へのポインタを読み出して、葉L156の構造体にアクセスする。葉L156の構造体には、分割文字コード0x4Eが格納されているため、コンピュータは、当該文字コード0x4Eを抽出して伸長バッファ6900に格納する。また、葉L156の構造体には、文字コード0x4Eの圧縮符号長leg=11ビットも格納されているため、コンピュータは、文字コード0x4Eの圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=3011=41となる。図73は、図72に示したDの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Eの状態を示している。前回であるDのビットアドレスabiはabi=30、圧縮符号長legは11ビットであるため、Eのビットアドレスabiはabi=41ビットとなる。また、このビットアドレスabi=41により、バイトオフセットbyos=5、ビットオフセットbios=1となる。バイトオフセットbyos=5により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭5バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=1により、マスクパターンは、0x7FF80000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x7FF80000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=1により、レジスタシフト数rsは、rs=32-m―bios=32-12-1=19となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタには、0100001101は1または0が残されるため、コンピュータは、末尾12ビットを対象ビット列として抽出する。この場合は、100001101が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図22に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L2329へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列100001101と一致する葉L♯へのポインタを探索する。この場合、対象ビット列100001101が葉L79へのポインタと一致するため、コンピュータは、葉L79へのポインタを読み出して、葉L79の構造体にアクセスする。葉L79の構造体には、文字コード0x6F30が格納されているため、コンピュータは、当該文字コード0x6F30を抽出して伸長バッファ6900に格納する。また、葉L79の構造体には、文字コード0x6F30の圧縮符号長leg=8ビットも格納されているため、コンピュータは、文字コード0x6F30の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=418=49となる。このように、葉へのポインタには圧縮符号が含まれているため、いずれの葉へのポインタが抽出された場合であっても、圧縮符号を特定するまでもなく、直接葉の構造体にアクセスすることができる。したがって、伸長処理の高速化を実現することができる。図74~図78は、図63に示した圧縮符号列の伸長処理例を示す説明図である。図74は、初期状態Aの状態を示している。Aでは、ビットアドレスabi=0により、バイトオフセットbyos=0、ビットオフセットbios=0となる。バイトオフセットbyos=0により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=0により、マスクパターンは、0xFFF80000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0xFFF80000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32-m―bios=32-13-0=19となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタには、1001100111010が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、1001100111010が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図32に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列1001100111010と一致する葉L♯へのポインタを探索する。この場合、葉L167へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L167へのポインタを読み出して、葉L167の構造体にアクセスする。葉L167の構造体には、分割文字コード0x51が格納されているため、コンピュータは、当該文字コード0x51を抽出して伸長バッファ6900に格納する。また、葉L167の構造体には、文字コード0x51の圧縮符号長leg=11ビットも格納されているため、コンピュータは、文字コード0x51の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=011=11となる。図75は、図74に示したAの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Bの状態を示している。前回であるAのビットアドレスabiはabi=0、圧縮符号長legは11ビットであるため、Bのビットアドレスabiはabi=11ビットとなる。また、このビットアドレスabi=11により、バイトオフセットbyos=1、ビットオフセットbios=3となる。バイトオフセットbyos=1により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=3により、マスクパターンは、0x1FFF0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x1FFF0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=3により、レジスタシフト数rsは、rs=32-m―bios=32-13-3=16となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に16ビット分シフトする。このシフトによりレジスタには、0001001100001110が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、1001100001110が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図32に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列1001100001110と一致する葉L♯へのポインタを探索する。この場合、対象ビット列1001100001110が葉L156へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L156へのポインタを読み出して、葉L156の構造体にアクセスする。葉L156の構造体には、分割文字コード0x4Eが格納されているため、コンピュータは、当該文字コード0x4Eを抽出して伸長バッファ6900に格納する。また、葉L156の構造体には、文字コード0x4Eの圧縮符号長leg=11ビットも格納されているため、コンピュータは、文字コード0x4Eの圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=1111=22となる。図76は、図75に示したBの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Cの状態を示している。前回であるBのビットアドレスabiはabi=11、圧縮符号長legは11ビットであるため、Cのビットアドレスabiはabi=22ビットとなる。また、このビットアドレスabi=22により、バイトオフセットbyos=2、ビットオフセットbios=6となる。バイトオフセットbyos=2により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭2バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=6により、マスクパターンは、0x03FFE000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x03FFE000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=6により、レジスタシフト数rsは、rs=32-m―bios=32-13-6=13となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に13ビット分シフトする。このシフトによりレジスタには、0000001000011011111が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、1000011011111が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図32に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体セルの中から、抽出された対象ビット列1000011011111と一致する葉L♯へのポインタを探索する。この場合、対象ビット列1000011011111が葉L79へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L79へのポインタを読み出して、葉L79の構造体にアクセスする。葉L79の構造体には、文字コード0x6F30が格納されているため、コンピュータは、当該文字コード0x6F30を抽出して伸長バッファ6900に格納する。また、葉L79の構造体には、文字コード0x6F30の圧縮符号長leg=9ビットも格納されているため、コンピュータは、文字コード0x6F30の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=229=31となる。図77は、図76に示したCの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Dの状態を示している。前回であるCのビットアドレスabiはabi=22、圧縮符号長legは9ビットであるため、Dのビットアドレスabiはabi=31ビットとなる。また、このビットアドレスabi=31により、バイトオフセットbyos=3、ビットオフセットbios=7となる。バイトオフセットbyos=3により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭3バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=7により、マスクパターンは、0x01FFF000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x01FFF000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=7により、レジスタシフト数rsは、rs=32-m―bios=32-13-7=12となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に12ビット分シフトする。このシフトによりレジスタには、00000001111001100001が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、1111001100001が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図32に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列1111001100001と一致する葉L♯へのポインタを探索する。この場合、対象ビット列1111001100001が葉L5401へのポインタ群の中の一つと一致するため、コンピュータは、葉L5401へのポインタを読み出して、葉L5401の構造体にアクセスする。葉L5401の構造体には、基礎単語動物園が格納されているため、コンピュータは、当該基礎単語動物園を抽出して伸長バッファ6900に格納する。また、葉L5401の構造体には、基礎単語動物園の圧縮符号長leg=13ビットも格納されているため、コンピュータは、基礎単語動物園の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=3113=44となる。図78は、図77に示したDの状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理Eの状態を示している。前回であるDのビットアドレスabiはabi=31、圧縮符号長legは13ビットであるため、Eのビットアドレスabiはabi=44ビットとなる。また、このビットアドレスabi=44により、バイトオフセットbyos=5、ビットオフセットbios=4となる。バイトオフセットbyos=5により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭5バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=4により、マスクパターンは、0x0FFE0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x0FFE0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32-m―bios=32-13-4=15となる。したがって、コンピュータは、レジスタ内のAND結果を末尾方向に15ビット分シフトする。このシフトによりレジスタには、00000101001は1または0が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、0101001が対象ビット列として抽出される。抽出後、レジスタはクリアされる。図32に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1~L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列0101001と一致する葉L♯へのポインタを探索する。この場合、対象ビット列0101001が葉L27へのポインタと一致するため、コンピュータは、葉L27へのポインタを読み出して、葉L27の構造体にアクセスする。葉L27の構造体には、文字コード0x6E30が格納されているため、コンピュータは、当該文字コード0x6E30を抽出して伸長バッファ6900に格納する。また、葉L27の構造体には、文字コード0x6E30の圧縮符号長leg=9ビットも格納されているため、コンピュータは、文字コード0x6E30の圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=449=53となる。このように、葉へのポインタには圧縮符号が含まれているため、いずれの葉へのポインタが抽出された場合であっても、圧縮符号を特定するまでもなく、直接葉の構造体にアクセスすることができる。したがって、伸長処理の高速化を実現することができる。<伸長処理手順>図79は、2N分枝無節点ハフマン木を用いた伸長処理手順を示すフローチャートその1である。図79において、まず、コンピュータは、ビットアドレスabiをabi=0としステップS7901、バイトオフセットbyosを算出しステップS7902、ビットオフセットbiosを算出するステップS7903。そして、コンピュータは、バイトオフセットbyosの位置からの圧縮符号列をレジスタにセットするステップS7904。つぎに、コンピュータは、マスクパターンをビットオフセットbios分、末尾方向にシフトしてステップS7905、レジスタにセットされた圧縮符号列とのAND演算をおこなうステップS7906。このあと、コンピュータは、レジスタシフト数rsを算出してステップS7907、AND演算後のレジスタをレジスタシフト数rs分、末尾にシフトするステップS7908。図80は、2N分枝無節点ハフマン木を用いた伸長処理手順を示すフローチャートその2である。ステップS7908のあと、図80において、コンピュータは、シフト後のレジスタから末尾Nビットを対象ビット列として抽出するステップS8001。つぎに、コンピュータは、2N分枝無節点ハフマン木の根の構造体から葉L♯へのポインタを特定しステップS8002、ポイント先となる葉L♯の構造体に1パスでアクセスするステップS8003。そして、コンピュータは、アクセス先の葉L♯の構造体から文字情報を抽出しステップS8004、抽出された文字情報を伸長バッファ6900に書き込むステップS8005。また、コンピュータは、葉L♯の構造体から圧縮符号長legを抽出しステップS8006、ビットアドレスabiを更新するステップS8007。このあと、コンピュータは、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断するステップS8008。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合ステップS8008:Yes、図79のステップS7902に戻る。一方、圧縮符号列がない場合ステップS8008:No、一連の伸長処理を終了する。このような伸長処理により、圧縮符号列からNビット単位で圧縮符号を抽出することができ、さらに、2N分枝無節点ハフマン木の根の構造体にアクセスすることで、該当する枝番号となる葉L♯へのポインタを特定することができる。そして、アクセス先となる葉L♯の構造体から文字コードを抽出することで、圧縮符号を伸長する。このように、2N分枝無節点ハフマン木は、内部節点を有していないため、葉L♯へのポインタが特定されれば、1パスで葉L♯の構造体にアクセスすることができ、伸長速度の高速化を図ることができる。以上説明したように、本実施の形態によれば、文字情報の総種類数に応じて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に近似するように各圧縮符号長の葉数を最適な葉数とすることで、圧縮効率の向上を図ることができる。なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本生成プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本生成プログラムは、インターネット等のネットワークを介して配布してもよい。"