(57)【要約】【課題】ビット列データのソート処理において、無効となる処理が発生しない、効率的なソート手法を提供する。【解決手段】基準となるキーとソート対象であるビット列からなるキーのビット列比較を行い、最初に異なるビット値となるビット位置である差分ビット位置を求め、ソート対象のキーの差分ビット位置による分類を行い、同一の差分ビット位置に分類された複数のキーのうちの基準となるキーについての差分ビット位置による分類をさらに繰り返すことにより、ソート済みキー列を取得する。【選択図】図１Ｂ
2010146472.tif 000002
【特許請求の範囲】
【請求項１】
ビット列で表されるソート対象のキーのソート処理を行うビット列データソート装置において、
前記ソート対象のキーを記憶するソート対象キー記憶手段と、
前記ソート対象キー記憶手段に記憶された前記ソート処理を構成する分類処理の分類対象である前記キーと、該分類対象であるキーのうち基準となるキーと、のビット列比較により、最初に異なるビット値となる差分ビット位置を求める差分ビット位置計算手段と、
前記差分ビット位置計算手段で求めた差分ビット位置毎に該差分ビット位置を有するキーの識別情報を記憶する分類対象キー差分ビット位置記憶手段と、
前記差分ビット位置計算手段で求めた前記差分ビット位置毎に該差分ビット位置を有するキーの識別情報を前記分類対象キー差分ビット位置記憶手段に書き込むことにより、前記分類対象であるキーを同一の差分ビット位置を有する組に分類する差分ビット位置分類手段と、
前記差分ビット位置分類手段で分類された同一の差分ビット位置を有するキーが１つの場合はそのキーを、同一の差分ビット位置を有するキーが複数の場合はそのうちの次の分類処理において基準となるキーをソート済みキーとして出力するソート済みキー出力手段と、
前記差分ビット位置計算手段、前記前記差分ビット位置分類手段及び前記ソート済みキー出力手段を制御する制御手段と、
を備え、
前記制御手段は、
前記差分ビット位置計算手段が、前記差分ビット位置計算手段の最初の処理における前記分類対象をソート対象のキー全体とし、以後、前記差分ビット位置分類手段で分類された同一の差分ビット位置を有するキーを複数含むキーの組を前記分類対象として前記差分ビット位置をもとめることを繰り返し、
前記差分ビット位置分類手段が、前記差分ビット位置計算手段で求められた差分ビット位置毎に同一の差分ビット位置を有する組に分類することを繰り返し、
前記ソート済みキー出力手段は、前記差分ビット位置分類手段が前記差分ビット位置毎に同一の差分ビット位置を有する組に分類するたびに、該同一の差分ビット位置を有するキーが１つの場合のキー及び前記基準となるキーをソート済みキーとして出力するために、
前記差分ビット位置計算手段、前記前記差分ビット位置分類手段及び前記ソート済みキー出力手段を制御すること、
を特徴とするビット列データソート装置。
【請求項２】
請求項１に記載のビット列データソート装置において、
前記分類対象であるキーのうち基準となるキーを、分類対象であるキーのうち最小の値をとる最小値キーあるいは最大の値をとる最大値キーとすることを特徴とするビット列データソート装置。
【請求項３】
請求項２に記載のビット列データソート装置において、
前記キーを識別する情報は、該キーが記憶された前記ソート対象キー記憶手段における該キーのアドレスである読出位置であり、
前記分類対象キー差分ビット位置記憶手段は、前記分類対象であるキーと該分類対象であるキーのうち基準となるキーである前記最小値キーあるいは最大値キーとの差分ビット位置毎に、該最小値キーあるいは最大値キーに対する同一の差分ビット位置を有するキーのうち、最小あるいは最大のキーの前記読出位置である親リンクを格納する差分ビット位置表と、前記読出位置毎に該読出位置のキーと前記同一の差分ビット位置を有するキーの読出位置であるリンクを格納するリンク表から構成されることを特徴とするビット列データソート装置。
【請求項４】
請求項３に記載のビット列データソート装置において、
前記同一の差分ビット位置を有するキーの前記キー表の読出位置をリンク表の読出位置とするリンクは、該リンクをリンク表の読出位置とし、さらに該読出位置に設定されたリンクをたどることにより、前記同一の差分ビット位置を有する全てのキーの前記キー表の読出位置を参照するために設定されており、該同一の差分ビット位置を有するキーのうちの最後のキーの読出位置のリンクには、該最後のキーの読出位置が格納されていることを特徴とするビット列データソート装置。
【請求項５】
請求項４に記載のビット列データソート装置において、
前記制御手段は、前記差分ビット位置分類手段が、前記差分ビット位置表の差分ビット位置の降順あるいは昇順に、該差分ビット位置に格納された前記親リンクを読出位置とするキーと同一の差分ビット位置を有する組を分類することを繰り返すこと、を制御することを特徴とするビット列データソート装置。
【請求項６】
ビット列で表されるソート対象のキーのソート処理を行うビット列データソート方法において、
前記ソート対象のキーを記憶するソート対象キー記憶手段に前記ソート対象のキーを記憶するソート対象キー記憶ステップと、
前記ソート対象キー記憶手段に記憶された前記ソート処理を構成する分類処理の分類対象である前記キーと、該分類対象であるキーのうち基準となるキーと、のビット列比較により、最初に異なるビット値となる差分ビット位置を求める差分ビット位置計算ステップと、
前記差分ビット位置計算ステップで求めた差分ビット位置毎に、分類対象キー差分ビット位置記憶手段に該差分ビット位置を有するキーの識別情報を書き込むことにより、前記分類対象であるキーを同一の差分ビット位置を有する組に分類する差分ビット位置分類ステップと、
前記差分ビット位置分類ステップで分類された同一の差分ビット位置を有するキーが１つの場合はそのキーを、同一の差分ビット位置を有するキーが複数の場合はそのうちの次の分類処理において基準となるキーをソート済みキーとして出力するソート済みキー出力ステップと、
前記差分ビット位置計算ステップ、前記前記差分ビット位置分類ステップ及び前記ソート済みキー出力ステップを制御する制御ステップと、
を備え、
前記制御ステップは、
最初の処理における前記分類対象をソート対象のキー全体として前記差分ビット位置計算ステップを実行し、以後、前記差分ビット位置分類ステップで分類された同一の差分ビット位置を有するキーを複数含むキーの組を前記分類対象として前記差分ビット位置計算ステップを繰り返し、
前記差分ビット位置計算ステップで求められた差分ビット位置毎に同一の差分ビット位置を有する組に分類する前記差分ビット位置分類ステップを繰り返し、
前記差分ビット位置分類ステップが前記差分ビット位置毎に同一の差分ビット位置を有する組に分類するたびに、前記ソート済みキー出力ステップが、該同一の差分ビット位置を有するキーが１つの場合のキー及び前記基準となるキーをソート済みキーとして出力するために、前記差分ビット位置計算ステップ、前記前記差分ビット位置分類ステップ及び前記ソート済みキー出力ステップを制御する、
ことを特徴とするビット列データソート方法。
【請求項７】
請求項６に記載のビット列データソート方法において、
前記分類対象であるキーのうち基準となるキーを、分類対象であるキーのうち最小の値をとる最小値キーあるいは最大の値をとる最大値キーとすることを特徴とするビット列データソート方法。
【請求項８】
請求項７に記載のビット列データソート方法において、
前記キーを識別する情報は、該キーが記憶された前記ソート対象キー記憶手段における該キーのアドレスである読出位置であり、
前記分類対象キー差分ビット位置記憶手段は、前記分類対象であるキーと該分類対象であるキーのうち基準となるキーである前記最小値キーあるいは最大値キーとの差分ビット位置毎に、該最小値キーあるいは最大値キーに対する同一の差分ビット位置を有するキーのうち、最小あるいは最大のキーの前記読出位置である親リンクを格納する差分ビット位置表と、前記読出位置毎に該読出位置のキーと前記同一の差分ビット位置を有するキーの読出位置であるリンクを格納するリンク表から構成されることを特徴とするビット列データソート方法。
【請求項９】
請求項８に記載のビット列データソート方法において、
前記同一の差分ビット位置を有するキーの前記キー表の読出位置をリンク表の読出位置とするリンクは、該リンクをリンク表の読出位置とし、さらに該読出位置に設定されたリンクをたどることにより、前記同一の差分ビット位置を有する全てのキーの前記キー表の読出位置を参照するために設定されており、該同一の差分ビット位置を有するキーのうちの最後のキーの読出位置のリンクには、該最後のキーの読出位置が格納されていることを特徴とするビット列データソート方法。
【請求項１０】
請求項９に記載のビット列データソート方法において、
前記制御ステップは、前記差分ビット位置分類ステップが、前記差分ビット位置表の差分ビット位置の降順あるいは昇順に、該差分ビット位置に格納された前記親リンクを読出位置とするキーと同一の差分ビット位置を有する組を分類することを繰り返すことを、制御することを特徴とするビット列データソート方法。
【請求項１１】
請求項６〜請求項１０のいずれか１項に記載のビット列データソート方法をコンピュータに実行させるプログラム。
【請求項１２】
請求項６〜請求項１０のいずれか１項に記載のビット列データソート方法をコンピュータに実行させるプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット列で表されるキーデータのソート装置、方法及びプログラムに関する。
【背景技術】
【０００２】
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
【０００３】
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
一方、データベースに関連した処理として、データベース中のレコードのインデックスキーによるソート処理が行われている。このソート処理もビット列のソート処理に帰着される。
【０００４】
ソートの手法は各種のものが開発されており、下記特許文献１には、クイックソート、ラディックソート（基数ソート）等が紹介されている。また、特許文献２にも基数ソートが記載されている。
【０００５】
図１Ａに示すのは、従来の基数ソートの概念を説明する図である。基数ソートによれば、図１Ａに例示するソート対象である４ビットのビット列であるキーは、０ビット目から３ビット目に至る各ビット位置におけるビット値による分類を繰り返すことにより、ソートが実行される。以下、図１Ａの例示により、基数ソートの概念を説明する。
【０００６】
図１Ａには、ソート対象であるキーからなるキー列１００が示されている。図１Ａの例示では、キー列１００に含まれるキーの存在するキーの位置であるキー位置１０１が１００ａ（以下、キー位置１００ａのように表記する。）である記憶領域にはキー“１１１１”が存在する。また、キー位置１００ｂ、１００ｃ１００ｄ、１００ｅには、それぞれキー“００１１”、“１０１０”、“０００１”、“１１１０”が存在する。
【０００７】
図に示すように、まずビット位置毎の分類（０ビット目）１１０ａによりキー列１００に含まれるキーの０ビット目による分類が行われる。その結果、キー“０００１”とキー“００１１”からなる０ビット目の値０の組１２０ａと、キー“１１１１”、キー“１０１０”、キー“１１１０”からなる値１の組１２１ａが得られる。次に値０の組１２０ａはビット位置毎の分類（１ビット目）１１０ｂにより、次に値１の組１２１ａはビット位置毎の分類（１ビット目）１１０ｅによりそれぞれ１ビット目の値による分類が行われる。
【０００８】
ビット位置毎の分類（１ビット目）１１０ｂでは、キー“０００１”とキー“００１１”の１ビット目が共に０であることから、１ビット目の値０の組１２０ｂしか得られず、０ビット目の値０の組１２０ａと同じキーが２ビット目による分類の対象となり、ビット位置毎の分類（２ビット目）１１０ｃにより２ビット目による分類が行われる。ビット位置毎の分類（２ビット目）１１０ｃでは、２ビット目の値０の組１２０ｄとして１つのキー“０００１”が得られるので、最小値であるキーを格納する、ソート済みキー列１３０のキーを格納する位置であるキー位置１３１が１３０ａ（以下、キー位置１３０ａのように表記する。）である記憶領域に格納される。同様に、２ビット目の値１の組１２１ｄとして１つのキー“００１１”が得られるので、ソート済みキー列１３０の最小値の次の値のキーを格納するキー位置１３０ｂに格納される。なお、ソート済みキー列には、キー位置の符号順に小さいほうのキーから格納されるものとする。
【０００９】
一方、ビット位置毎の分類（１ビット目）１１０ｅの分類では、１ビット目の値０の組１２０ｅとして１つのキー“１０１０”が得られるので、ソート済みキー列１３０の次の格納位置であるキー位置１３０ｃに格納される。また、１ビット目の値１の組１２１ｅとして、キー“１１１１”とキー“１１１０”の組が得られ、ビット位置毎の分類（２ビット目）１１０ｆの分類で、２ビット目の値に基づく分類が行われる。
【００１０】
ビット位置毎の分類（２ビット目）１１０ｆでは、キー“１１１１”とキー“１１１０”の２ビット目が共に１であることから、１ビット目の値１の組１２１ｆしか得られず、１ビット目の値１の組１２１ｅと同じキーが３ビット目による分類の対象となり、ビット位置毎の分類（３ビット目）１１０ｇにより３ビット目の値による分類が行われる。ビット位置毎の分類（３ビット目）１１０ｇでは、３ビット目の値０の組１２０ｇとして１つのキー“１１１０”が得られるので、ソート済みキー列１３０の次の格納位置であるキー位置１３０ｄに格納される。同様に、３ビット目の値１の組１２１ｇとして１つのキー“１１１１”が得られるので、ソート済みキー列１３０の次の格納位置であるキー位置１３０ｅに格納される。
【００１１】
以上の処理により、キー列１００のキーは、ソート済みキー列１３０のキー位置１３０ａ〜１３０ｅにソートされて格納される。しかし、上述の基数ソート方法によりソートを実行する場合には、図１Ａに示すビット位置毎の分類（１ビット目）１１０ｂやビット位置毎の分類（２ビット目）１１０ｆにみられるように、分類が行われない無効な処理が発生する。
【特許文献１】特開２００２−１１６９０７号公報
【特許文献２】特開２００５−３１６６６３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
そこで本発明の解決しようとする課題は、ビット列データのソート処理において、無効となる処理が発生しない、効率的なソート手法を提供することである。
【課題を解決するための手段】
【００１３】
本発明のソート処理によれば、基準となるキーとソート対象であるビット列からなるキーのビット列比較を行い、最初に異なるビット値となるビット位置である差分ビット位置を求め、差分ビット位置によるソート対象のキーの分類を行い、同一の差分ビット位置に分類された複数のキーのうちの基準となるキーについての差分ビット位置による分類をさらに繰り返すことにより、ソート済みキー列を取得する。
【発明の効果】
【００１４】
本発明によれば、差分ビット位置によりキーのソートを行うため、分類が行われない無効な処理は発生しない。したがって、効率的なソート処理を実現することができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明を実施するための最良の形態を、図１Ａに示したキー列１００に含まれるキーと同一のキーをソート対象のキーとして例示して説明する。
【００１６】
図１Ｂに示すのは、本発明の一実施の形態における差分ビット位置によるソート処理の概念を説明する図である。ソート対象のキー列１００及びソート済みキー列１３０は、図１Ａに示すものと同じである。
【００１７】
キー列１００を構成する各キーは、差分ビット位置による分類１４９ａにおいて、最小値キー１４８ａ、最小値キーとの差分ビット位置が２であるキー群１４２ａ及び最小値キー１４８ａとの差分ビット位置が０であるキー群１４０ａに分類される。図の例では、最小値キー１４２ａは“０００１”である。キー群１４２ａには、キー“００１１”のみが含まれており、キー群１４０ａにはキー“１０１０”、“１１１１”及び“１１１０”が含まれている。最小値キー１４８ａは、キー列１００からキーを差分ビット位置によるソート処理のための入力バッファに読み込むときに求めることができる。
【００１８】
最小値キー１４８ａは、図の点線の矢印１５８ａに示すように、ソート済みキー列１３０のキー位置１３０ａに格納される。また、キー群１４２ａのキーは１つのみであるので、図の点線の矢印１５２ａに示すように、ソート済みキー列１３０のキー位置１３０ｂに格納される。
【００１９】
最小値キー１４８ａとの差分ビット位置が０であるキー群１４０ａにはキーが複数含まれているので、図の点線の矢印の組１５０ａに示すように、差分ビット位置による分類１４９ｂにおいて、キー群１４０ａ内の最小値キー１４８ｂと、最小値キー１４８ｂとの差分ビット位置が１であるキー群１４１ｂ、に分類される。図の例では、最小値キー１４８ｂは“１０１０”である。キー群１４１ｂには、キー
“１１１１”とキー“１１１０”が含まれている。
【００２０】
最小値キー１４８ｂは、図の点線の矢印１５８ｂに示すように、ソート済みキー列１３０のキー位置１３０ｃに格納される。
一方、最小値キー１４８ａとの差分ビット位置が１であるキー群１４１ｂにはキーが複数含まれているので、図の点線の矢印の組１５１ｂに示すように、差分ビット位置による分類１４９ｃにおいて、キー群１４１ｂ内の最小値キー１４８ｃと、最小値キー１４８ｃとの差分ビット位置が３であるキー群１４３ｃ、に分類される。図の例では、最小値キー１４８ｃは“１１１０”である。キー群１４３ｃにはキー
“１１１１”のみが含まれている。
【００２１】
最小値キー１４８ｃは、図の点線の矢印１５８ｃに示すように、ソート済みキー列１３０のキー位置１３０ｄに格納される。また、キー群１４３ｃのキーは１つのみであるので、図の点線の矢印１５３ｃに示すように、ソート済みキー列１３０のキー位置１３０ｅに格納される。
【００２２】
以上の処理により、キー列１００のキーは、ソート済みキー列１３０のキー位置１３０ａ〜１３０ｅに昇順で格納され、ソート処理が完了する。そして、本実施の態様によるソート処理は、差分ビット位置に基づいて分類を繰り返すので、分類処理毎に必ずキーの分類が実行される。なお、上述の例では、最小値キーを、差分ビット位置を計算する基準のキーとしているが、最大値キーを、差分ビット位置を計算する基準のキーとすることも可能である。この場合には、図１Ｂのソート対象キーの例では、最大値キーがキー“１１１１”であり、最初の差分ビット位置による分類処理の結果として、最大値キー、差分ビット位置が３のキー“１１１０”、差分ビット位置が１のキー“１０１０”及び差分ビット位置のキー“００１１”と“０００１”の組が得られる。
【００２３】
次に、図１Ｂを参照してその概念を説明した本実施の形態における差分ビット位置によるソート処理を実現するための機能ブロック構成例について説明する。本実施の形態における差分ビット位置によるソート処理は、図１Ｂに例示した差分ビット位置による分類１４９ａ、１４９ｂ、１４９ｃ等の処理を実行する機能ブロックを、ソート対象のあらゆるキーの組み合わせに対して用意すれば実現可能であることは明らかである。しかしそれでは資源の無駄遣いであり、その実現手法は現実的でない。そこで本実施の形態においては、以下に説明する工夫を行っている。
【００２４】
図２Ａは、本発明の一実施の形態における差分ビット位置によるソート処理で用いるデータ構造を説明するものである。図２Ａに示すように、キー表３０９、差分ビット位置表３１０、リンク表３１１、ソート済みキー表３１３が用いられる。
【００２５】
キー表３０９はソート要求があったときにソート対象のキー６０２が読み込まれて設定されるものである。図２Ａの例示では、ソート対象の５つのキー６０２は、図１Ａ及び図１Ｂ示すキー列１００に含まれるものが読み込まれている。キー表３０９の読出位置６０１の先頭はＰ０であり、以下、Ｐ１、Ｐ２、Ｐ３、Ｐ４と続いている。読出位置Ｐ０には、最小値キー“０００１”が設定されているが、別領域に設定しておくことも可能である。点線の矢印６８９ｃで示すように、最小値キーはソート済みキー表３１３の所定の位置に格納される。
【００２６】
差分ビット位置表３１０は、最小値キーに対する同一の差分ビット位置を有するキーのうち、最小のキーの読出位置６０１を親リンク６１２として差分ビット位置６１１毎に格納するものである。図２Ａの例示では、点線の矢印６６０ａで示すように、最小値キー“０００１”との差分ビット位置が０であるキー“１１１１”、“１０１０”、“１１１０”のうち最小のキー“１０１０”の読出位置Ｐ３が差分ビット位置表３１０の差分ビット位置６１１が０である位置に格納されている。また、点線の矢印６６２ａで示すように、最小値キー“０００１”との差分ビット位置が２であるキーはキー“００１１”だけであるので、キー“００１１”
の読出位置Ｐ２が差分ビット位置表３１０の差分ビット位置６１１が２である位置に格納されている。
【００２７】
リンク表３１１は、最小値キーに対する同一の差分ビット位置を有するキーにアクセスするためのものである。図に示すように、キーの読出位置６２１に対して、同一の差分ビット位置を有するキーの読出位置を示すリンク６２２が格納されている。
【００２８】
差分ビット位置表３１０からリンク表３１１への点線の矢印６７３ｂで示すように、同一の差分ビット位置０を有するキーの最小値キーの読出位置Ｐ３に対して、その読出位置Ｐ３を読出位置６２１とするリンク表３１１の読出位置（以下、リンク表３１１の読出位置Ｐ３のようにいう。）に、最小値キー“０００１”に対して差分ビット位置０を有するキーの最小値キー“１０１０”と同一の差分ビット位置０を有するキー“１１１０”のキー表３０９の読出位置Ｐ４が格納されている。
【００２９】
そして、図の点線の矢印６７４ｃで示すように、リンク表３１１の読出位置Ｐ４に同一の差分ビット位置０を有するキー“１１１１”のキー表３０９の読出位置Ｐ１が格納されている。また、図の点線の矢印６７１ｃで示すように、リンク表３１１の読出位置Ｐ１には、同一の値のキー表３０９の読出位置Ｐ１が格納されている。これにより、それ以上同一の差分ビット位置０を有するキーは存在しないことを表している。
【００３０】
また、差分ビット位置表３１０からリンク表３１１への点線の矢印６７２ｂで示すように、同一の差分ビット位置２を有するキーの最小値キーの読出位置Ｐ２に対して、リンク表３１１の読出位置Ｐ２には、リンク表３１１の読出位置Ｐ２と同一の値のキー表３０９の読出位置Ｐ２が格納されている。これは、キー表３０９の読出位置Ｐ２のキー“００１１”が最小値キー“０００１”との差分ビット位置が２であるキーの最小のキーであるとともに、最後のものでもあることを示している。
【００３１】
上述の図２Ａに示す差分ビット位置表３１０とリンク表３１１の状態は、図１Ｂに示す差分ビット位置による分類１４９ａが実行されて得られるものである。
以上の説明から明らかなとおり、上述のキー表３０９は請求項１に係る発明のソート対象キー記憶手段の一実施例である。また、差分ビット位置表３１０とリンク表３１１で分類対象キー差分ビット位置記憶手段の一実施例を構成しており、キー表３０９の読出位置６０１はキーの識別情報に相当する。
【００３２】
図２Ｂは、本発明の一実施の形態におけるビット列データソート装置の機能ブロック構成を説明する図である。
図に示すように、ビット列データソート装置２００は、差分ビット位置計算手段２１０、差分ビット位置分類手段２２０、ソート済みキー出力手段２３０、及び制御手段２４０を含む。以下、各手段の動作の概要について、図２Ａの例示を参照して説明する。
【００３３】
差分ビット位置計算手段２１０は、キー表３０９に記憶されたキー６０２のうちから、差分ビット位置による分類処理の対象となるキーの差分ビット位置を計算する。制御手段２４０は最初の分類処理の対象をキー表３０９に記憶された全てのキーとする。この場合、差分ビット位置を計算する基準となるキーは、読出位置Ｐ０に格納された最小値キー“０００１”である。ソート済みキー出力手段２３０は、最小値キー“０００１”をソート済みキー表３１３に出力する。
【００３４】
差分ビット位置分類手段２２０は、差分ビット位置計算手段２１０の計算結果に基づいて、差分ビット位置表３１０とリンク表３１１の書き込みを行う。その結果、キーの識別情報をキー表３０９の読出位置６０１として、差分ビット位置が０の組（Ｐ３、Ｐ４、Ｐ１）と差分ビット位置が２の組（Ｐ２）に分類される。
【００３５】
制御手段２４０は、分類後に複数のキーが含まれる組について、さらに差分ビット位置計算手段２１０による差分ビット位置の計算と差分ビット位置分類手段２２０による分類処理が繰り返されるように制御する。
【００３６】
図３は、本発明を実施するためのハードウェア構成例を説明する図である。
本発明によるソート処理は中央処理装置３０２及びキャッシュメモリ３０３を少なくとも備えたデータ処理装置３０１によりデータ格納装置３０８を用いて実施される。キー表３０９、差分ビット位置表３１０、リンク表３１１、ソート済みキー表３１３を有するデータ格納装置３０８は、主記憶装置３０５または外部記憶装置３０６で実現することができ、あるいは通信装置３０７を介して接続された遠方に配置された装置を用いることも可能である。
【００３７】
図３の例示では、主記憶装置３０５、外部記憶装置３０６及び通信装置３０７が一本のバス３０４によりデータ処理装置３０１に接続されているが、接続方法はこれに限るものではない。また、主記憶装置３０５をデータ処理装置３０１内のものとすることもできるし、キー表３０９は外部記憶装置３０６に、他の表は主記憶装置３０５に持つなど、使用可能なハードウェア環境、ソート対象キーの集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
【００３８】
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた主記憶装置３０５の一時記憶領域が用いられることは当然である。そして、以下の説明においては、一次記憶領域に格納されるあるいは設定される値を一時記憶領域の名前で呼ぶことがある。
【００３９】
次に、本発明の一実施の形態におけるソート処理について、図４Ａ及び図４Ｂを参照して詳細に説明する。また、その説明において、図１Ｂあるいは図２Ａの例示を適宜用いて説明する。
【００４０】
図４Ａは、本発明の一実施の形態におけるソート処理の初段の分類処理とソート済みキーの出力処理の処理フローを説明する図である。キー表にはソート対象のキーが記憶されており、キー表の先頭の読出位置には最小値キーが記憶されていることを前提とする。すなわち、図１Ｂに示すキー列１００に含まれるキーは図２Ａに示すようにキー表３０９に記憶されているものとする。
【００４１】
まず、ステップＳ４０１において、キー表の先頭位置をキー表の読出位置（以下、単に読出位置ということがある。）に設定する。ここでいう「キー表の読出位置」は、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域」の１つである。以下の説明では、「キー表の先頭位置をキー表の読出位置に設定する。」のように、「キー表の読出位置」が図示しない一次記憶領域であることを省略して述べることがある。
上記の設定により、図２Ａの例示では、キー表の読出位置にＰ０が設定される。
【００４２】
次にステップＳ４０２において、キー表より、先頭位置の指すキーを最小値キーとして取り出す。ここでいう「最小値キーとして取り出す」は、図示しない一次記憶領域である最小値キーに設定する、の意味である。以下においても、同様な表記を用いる場合がある。
【００４３】
ステップＳ４０３に進み、読出位置に次の読出位置を設定する。次にステップＳ４０４において、全てのキーは処理済みか、すなわち、全てのキーについての初段における分類処理が終了したか判定する。
【００４４】
全てのキーが処理済みでなければ、ステップＳ４０５に進み、キー表より、読出位置の指すキーをソートキーとして取り出すとともに、読出位置をソートキーの読出位置に設定する。そしてステップＳ４０６において、ソートキーと最小値キーの差分ビット位置を得て、差分ビット位置によりソートキーを分類し、ステップＳ４０３に戻る。
ステップＳ４０６の処理においては、初段における分類処理として差分ビット位置表とリンク表への設定が行われる。その処理の詳細については、後に図５Ａ及び図５Ｂを参照して説明する。
【００４５】
一方、ステップＳ４０４で全てのキーが処理済みであると判定されると、ステップＳ４０７に分岐し、ステップＳ４０２で得た最小値キーを、ソート済みキー表に設定し、図４Ｂに示すステップＳ４０８以下の処理に進む。以上の処理により、図２Ａの例示のように、差分ビット位置表３１０とリンク表３１１の各エントリの値が設定される。また、最小値キー“０００１”がソート済みキー表３１３に格納される。
【００４６】
図４Ｂは、本発明の一実施の形態におけるソート処理の初段以降の分類処理とソート済みキーの出力処理の処理フローを説明する図である。
【００４７】
ステップＳ４０８においては、図示しない一次記憶領域である差分ビット位置に、初期値として差分ビット位置表の差分ビット位置、すなわちソート対象のキーが有する可能性のある差分ビット位置の最大値を設定する。図２Ａの例示では、差分ビット位置の最大値として３が設定される。
【００４８】
ステップＳ４０９において、差分ビット位置表の全ての差分ビット位置のエントリについて処理済みであるか判定し、処理済みであればソート処理を終了し、処理済みでなければステップＳ４１０に進む。
【００４９】
ステップＳ４１０では、差分ビット位置表より、差分ビット位置の指すエントリから親リンクを読み出す。差分ビット位置の指すエントリに親リンクが格納されていれば、この読み出された親リンクは一次記憶領域である親リンクに設定される。すなわち、本実施の態様の説明における「親リンクを読み出す」等の表記は、親リンクを読み出して図示しない一次記憶領域である親リンクに設定することを意味することがある。親リンク以外のものに対しても同様である。
ステップＳ４１１では、親リンクは設定済みであるか判定する。設定済みでなければステップＳ４１６で差分ビット位置から値を１減らしてステップＳ４０９に戻り、一方、設定済みであればステップＳ４１２に進む。
【００５０】
ステップＳ４１２では、キー表より、ステップＳ４１０で設定した親リンク（キー表の読出位置）の指すキーをソート済みキーとして取り出し、その取り出したソート済みキーをソート済みキー表に設定する。先に説明したように、差分ビット位置表にその読出位置が格納されているキーは、同一の差分ビット位置に分類されたキーのうちの最小値キーであるので、ステップＳ４１２でソート済みキー表に設定する。
【００５１】
次にステップＳ４１３で、リンク表より、ステップＳ４１０で設定した親リンクの指すリンクを次リンクとして読み出し、ステップＳ４１４で、差分ビット位置表の、差分ビット位置の指す親リンクを削除してステップＳ４１５に進む。ここで差分ビット位置表の差分ビット位置の指す親リンクを削除するのは、キー表の読出位置が親リンクである最小値キーの分類処理はステップＳ４１２で完了しており、もはや差分ビット位置表上のこの親リンクは必要がないことと、この親リンクが差分ビット位置表に残っていることによる後続の処理への影響を避けるためである。
【００５２】
ステップＳ４１５では、ステップＳ４１３で読み出した次リンクとステップＳ４１０で設定した親リンクが同一であるか判定する。
ステップＳ４１５で次リンクと親リンクが同一であると判定されると、先に説明したステップＳ４１６を経由してステップＳ４０９に戻る。
上述のステップＳ４０９〜ステップＳ４１６のループ処理により、差分ビット位置の降順でソート済みキーの取り出しとソート済みキー表への格納が行われる。より大きい差分ビット位置を有するキーの値がより最小値キーの値に近いので、差分ビット位置の降順でソート済みキーを取り出すことにより、昇順でソート済みキーをソート済みキー表へ格納することができる。
【００５３】
ステップＳ４１５で次リンクと親リンクが同一であると判定されるのは、親リンクが格納された差分ビット位置を有するキーが親リンクをキー表の読出位置とするキーしか存在しない場合である。図２Ａの例示では、リンク表３１１の読出位置６２１がＰ２でリンク６２２がＰ２の場合である。また、図１Ｂの例示では、キー群１４２ａがキー“００１１”のみで構成され、キー群１４２ａについての分類処理は行われない場合に相当する。そして、この場合は差分ビット位置表に親リンクが格納された差分ビット位置についての分類処理が終了したことを意味するので、差分ビット位置から値１を減らし、次の差分ビット位置についてのステップＳ４０９〜Ｓ４１５の処理に進む。図１Ｂの例示では、差分ビット位置０のキー群１４０ａについての処理が行われる。
【００５４】
一方、ステップＳ４１５で次リンクと親リンクが同一でないと判定されると、ステップＳ４１７に進み、同一の差分ビット位置（ステップＳ４０８またはステップＳ４１６で設定されている。）を有する複数のキーを、下位の差分ビット位置によりさらに分類する。ステップＳ４１７の処理の詳細については、後に図５Ｃを参照して説明する。
【００５５】
次リンクと親リンクが同一でないと判定される場合は、図２Ａの例示では、リンク表３１１の読出位置６２１がＰ３でリンク６２２がＰ４の場合である。図１Ｂの例示では、キー群１４０ａの複数のキーについて、差分ビット位置による分類１４９ｂ、１４９ｃが実行される。
ステップＳ４１７の処理では、差分ビット位置表とリンク表が再設定され、ステップＳ４０８に戻る。そして、再設定された差分ビット位置表の親リンクの設定された差分ビット位置についての処理が繰り返される。
【００５６】
上述の処理を、ステップＳ４０９において、差分ビット位置表の全ての差分ビット位置のエントリについて処理済みである、と判定されるまで繰り返し、その判定が得られるとソート対象のキーのソートが完了しているので処理を終了する。
図４Ｂに例示する処理は、差分ビット位置を計算する基準となるキーを最小のキーとし、差分ビット位置の降順で処理を行ってソート済みキーを昇順で取り出すものである。しかし、先に述べたように、差分ビット位置を計算する基準となるキーを最大のキーとする場合には、差分ビット位置の昇順で処理を行ってソート済みキーを降順で取り出すことができることは、本明細書及び図面の記載によって当業者に明らかである。
【００５７】
次に図５Ａ及び図５Ｂを参照して本発明の一実施の形態におけるキーを分類する処理を説明する。図５Ａ及び図５Ｂに記載するものは、図４Ａに示すステップＳ４０６の処理、及び後述の図５Ｃに示すステップＳ５２４の処理の詳細な処理フローである。
図５Ａは、本発明の一実施の形態におけるキーを分類する処理の前段の処理フローを説明する図である。
【００５８】
図に示すように、ステップＳ５０１で、ソートキーに設定されているキーと最小値キーに設定されているキーをビット列として比較し、上位０ビット目からみた最初の不一致ビットのビット位置を、差分ビット位置に設定する。ソートキーは、図４Ａに示すステップＳ４０５、あるいは後述の図５Ｃに示すステップＳ５２２で設定されるものであり、図５Ａ及び図５Ｂに示す分類処理の対象のキーである。
【００５９】
次にステップＳ５０２で差分ビット位置表より、ステップＳ５０１で設定した差分ビット位置の指す親リンクを読み出し、ステップＳ５０３で親リンクは設定済みであるか判定する。親リンクが設定済みでなければ、ステップＳ５０４に進み、差分ビット位置表の、差分ビット位置の指す親リンクにソートキーの読出位置を設定し、ステップＳ５０５において、リンク表の、ソートキーの読出位置の指すリンクに、ソートキーの読出位置を設定して処理を終了する。
【００６０】
差分ビット位置表には、先に述べたように同一の差分ビット位置を有するキーのうち、最小のキーの読出位置が親リンクとして格納されるが、上記ステップＳ５０４の処理は、最初のソートキーを仮の最小値キーとして、ソートキーの読出位置を差分ビット位置表の差分ビット位置の指す親リンクに設定するものである。一旦親リンクが設定済みとなった後、すなわちステップＳ５０３での判定が親リンクは設定済みになると、図５Ｂに示す後段の処理に進み、ソートキーと最小値キーの大小比較による最小値キーの更新が行われ、最終的には同一の差分ビット位置を有するキーのうち、最小のキーの読出位置が親リンクとして差分ビット位置表に格納される。
【００６１】
なお、ステップＳ５０４の処理におけるソートキーの読出位置は、図４Ａに示すステップＳ４０５あるいは後述の図５Ｃに示すステップＳ５２３で設定されるものである。
【００６２】
図５Ｂは、本発明の一実施の形態におけるキーを分類する処理の後段の処理フローを説明する図である。
【００６３】
図に示すように、ステップＳ５０６で、キー表より、親リンクの指すキーを、親ソートキーとして読み出し、ステップＳ５０７において、ソートキーは親ソートキーより小さいか判定する。
【００６４】
ステップＳ５０７でソートキーは親ソートキーより小さいと判定されると、ステップＳ５０８に進み、差分ビット位置表の、差分ビット位置の指す親リンクにソートキーの読出位置を設定し、ステップＳ５０９でリンク表の、ソートキーの読出位置の指すリンクに、ステップＳ５０２で得た親リンクを設定して処理を終了する。
【００６５】
上述のステップＳ５０８の処理は、差分ビット位置表の差分ビット位置の指す親リンクに同一の差分ビット位置を有するキーのうちで最小のキーの読出位置を設定するために、より小さいキーの読出位置で親リンクを更新するものである。そして、ステップＳ５０９の処理は、差分ビット位置表に新たに設定されたソートキーの読出位置の指すリンク表のリンクに、差分ビット位置表に設定されていた親リンクを設定することで、リンク表に、同一の差分ビット位置を有するキーのキー表における読出位置をたどるための情報を保持させるものである。
【００６６】
一方、ステップＳ５０７でソートキーは親ソートキーより小さくないと判定されると、ステップＳ５１０に進み、リンク表より、親リンクの指すリンクを次リンクとして読み出し、ステップＳ５１１で、次リンクと親リンクは同一か判定する。
【００６７】
ステップＳ５１１で次リンクと親リンクは同一であると判定されると、ステップＳ５１２において、リンク表の親リンクの指すリンクに、ソートキーの読出位置を設定する。そして、ステップＳ５１３において、リンク表のソートキーの読出位置の指すリンクに、ソートキーの読出位置を設定して処理を終了する。
【００６８】
一方、ステップＳ５１１で次リンクと親リンクは同一でないと判定されると、ステップＳ５１４に進み、リンク表の親リンクの指すリンクに、ソートキーの読出位置を設定する。そして、ステップＳ５１５において、リンク表のソートキーの読出位置の指すリンクに、ステップＳ５１０で得た次リンクを設定して処理を終了する。
【００６９】
上述のステップＳ５１１の判定は、同一の差分ビット位置を有するキーのうちで分類済みのキーが１つのみであったかの判定と同じである。分類済みのキーが１つのみであればこのキーの読出位置の指すリンク表のリンクにはその読出位置が格納されている。そこで、それをソートキーの読出位置で更新し、ソートキーの読出位置の指すリンク表のリンクにソートキーの読出位置を設定してソートキーが、その時点での最後の分類済みのキーであることを示す。分類済みのキーが２つ以上のときは、ステップＳ５１４とステップＳ５１５の処理により、リンク表で表現される親リンクと次リンクのリンク関係の間に、ソートキーの読出位置を挿入する。
【００７０】
次に図５Ｃを参照して、図４Ｂに示すステップＳ４１７の処理である、本発明の一実施の形態における同一の差分ビット位置を有する複数のキーをさらに分類する処理の詳細な処理フローを説明する。
図５Ｃは、本発明の一実施の形態における同一の差分ビット位置を有する複数のキーをさらに分類する処理の詳細な処理フローを説明する図である。
【００７１】
図に示すように、ステップＳ５２１において、最小値キーにソート済みキーを設定する。ソート済みキーは、図４Ｂに示すステップＳ４１２で得たものであり、後記ステップＳ５２４においてソートキーの差分ビット位置を計算するための基準となるキーである。
【００７２】
ステップＳ５２２に進み、キー表より、次リンクの指すキーをソートキーとして取り出すとともに、次リンクをソートキーの読出位置に設定する。そして、ステップＳ５２３において、キー表より次リンクの指すリンクを読み出して退避エリアに退避する。ステップＳ５２２における次リンクは、図４Ｂに示すステップＳ４１３において、リンク表より読み出された親リンクの指すリンクである。図２Ａの例の差分ビット位置０を有するキーの分類処理であれば、親リンクがＰ３、次リンクがＰ４、そして次リンクの指すリンクであって退避エリアに退避されるリンクはＰ１である。
【００７３】
ステップＳ５２３において次リンクの指すリンクを退避するのは、次のステップＳ５２４において、ステップＳ５２２で設定したソートキーの、ステップＳ５２１で設定した最小値キーに対する差分ビット位置に基づく分類処理が行われ、その結果としてリンク表の次リンクの指すリンクの値が書き換えられるので、あらかじめ退避しておいて、ステップＳ５２４以後の、次リンクの指すリンクを用いた処理を正常に行うためである。
【００７４】
ステップＳ５２４では、図５Ａ及び図５Ｂを参照して詳細に説明した、ソートキーと最小値キーの差分ビット位置を得て差分ビット位置によりソートキーを分類する処理が実行される。
【００７５】
そして、ステップＳ５２５において、次リンクと退避リンクは一致するか判定される。退避リンクが次リンクと一致すれば、同一差分ビット位置を有する分類対象となるキーは残っていないことから処理を終了する。
【００７６】
一方、ステップＳ５２５において、退避リンクが次リンクと一致しないと判定されると、ステップＳ５２６において退避リンクを次リンクに設定してステップＳ５２２に戻り、新しく設定された次リンクをキー表の読出位置とするキーを分類対象のソートキーとして分類処理を継続する。
【００７７】
上述のステップＳ５２２〜Ｓ５２６のループ処理を、退避リンクが次リンクと一致するまで、すなわち分類処理の対象となるキーがなくなるまで繰り返し、分類処理の対象となるキーがなくなると処理を終了する。
【００７８】
以上、本発明の最良の実施形態に詳細に説明した。以下においては、本発明の理解をさらに容易にするために、図１Ｂ及び図２Ａの例示についての処理を、図６Ａ〜図７を参照して説明する。
【００７９】
図６Ａは、本発明の一実施の形態におけるキーを昇順に取り出す初段の処理のデータの流れを説明する図である。
図６Ａの（ａ）に示すのは、キー列１００に含まれるキーをキー表３０９に設定するデータの流れである。
【００８０】
キー位置１００ａのキー“１１１１”は、点線の矢印６５１ａで示すように、キー表３０９の読出位置Ｐ１に設定される。同様に、キー位置１００ｂのキー“００１１”は、点線の矢印６５１ｂで示すように、キー表３０９の読出位置Ｐ２に設定され、キー位置１００ｃのキー“１０１０”は、点線の矢印６５１ｃで示すように、キー表３０９の読出位置Ｐ３に設定され、キー位置１００ｅのキー“１１１０”は、点線の矢印６５１ｅで示すように、キー表３０９の読出位置Ｐ４に設定される。キー位置１００ｄのキー“０００１”は、点線の矢印６５１ｄで示すように、最小値キーとしてキー表３０９の読出位置Ｐ０に設定される。
【００８１】
図６Ａの（ｂ）に示すのは、初段の分類処理で最小値キーがソート済みキーとして取り出され、最小値キーを基準のキーとした差分ビット位置によりソート対象のキーを分類した状態である。先に図２Ａに示したものと類似のものである。キー表３０９の先頭の読出位置Ｐ０に設定された最小値キー“０００１”は、矢印６８９ｃに示すように、ソート済みキー表３１３の先頭の書込位置６４０ａに設定される。
【００８２】
また、図の点線の矢印６６０ａに示すように、差分ビット位置が０である３つのキーのうち最小のキーである“１０１０”の読出位置Ｐ３が差分ビット位置表３１０の差分ビット位置０に親リンクとして格納され、差分ビット位置が２である１つのキーであって最小のキーである“００１１”の読出位置Ｐ２が差分ビット位置表３１０の差分ビット位置２に親リンクとして格納される。
【００８３】
リンク表３１１には、点線の矢印６７３ｂ及び６７２ｂに示すように、差分ビット位置表３１０に設定された親リンクの読出位置６２１に、同一の差分ビット位置を有するキーの読出位置が格納されている。すなわち、親リンクＰ３が指す読出位置６２１にはリンク６２２としてＰ４が、親リンクＰ２が指す読出位置６２１にはリンク６２２としてＰ２が格納されている。
【００８４】
点線の矢印６７４ｃに示すように、リンクＰ４が指す読出位置６２１にはリンク６２２としてＰ１が格納され、リンクＰ１が指す読出位置６２１には、同一の読出位置Ｐ１がリンク６２２として格納されている。これは、同一の差分ビット位置０を有するキーがそれ以上存在しないことを表している。すなわち、キー表３０９の読出位置Ｐ１のキー“１１１１”がリンク表３１１において同一差分ビット位置のキーの最後のキーであることを示している。
【００８５】
読出位置６２１がＰ２のリンク６２２にＰ２が格納されているのは、キー表３０９の読出位置Ｐ２のキー“００１１”がリンク表３１１において同一差分ビット位置のキーの唯一のキーであることに対応している。
図６Ａの（ｂ）に示す差分ビット位置表３１０とリンク表３１１の設定については、後に図７を参照して詳細に説明する。
【００８６】
図６Ａの（ｃ）に示すのは、初段の分類処理で分類されたキー群のうち、差分ビット位置６１１が２である親リンクＰ２を読出位置とするキー“００１１”を含むキー群（実際には１つのキーしか含まない。）の最小値キー“００１１”をソート済みキーとしてソート済みキー表３１３に格納する流れを説明する図である。
【００８７】
親リンク６１２は、差分ビット位置表３１０の差分ビット位置６１１の降順で取り出される。図の例の場合、矢印６８２で示す差分ビット位置６１１が２であるエントリの親リンクＰ２が取り出され、図の矢印６８２ｂに示すように、キー表３０９の親リンクＰ２の指す読出位置６０１からキー“００１１”が読み出され、矢印６８２ｃに示すようにソート済みキー表３１３の書込位置６４０ｂに書き出される。
【００８８】
一方、矢印６７２ｂに示す親リンクＰ２に対応するリンク表３１１の読出位置６２１に格納されたリンク６２２は親リンク６１２と同一のＰ２であるから、差分ビット位置２に関するさらなる分類は行われない。そこで、差分ビット位置表３１０の差分ビット位置２に格納されていた親リンクＰ２は、以降の処理の妨げにならないように削除される。
【００８９】
図６Ｂは、本発明の一実施の形態におけるキーを昇順に取り出す中段の処理のデータの流れを説明する図である。
図６Ｂの（ｄ）に示すのは、図６Ａの（ｃ）に示す差分ビット位置２についての処理に続いて、図の矢印６８０ａで示すように差分ビット位置０についての分類処理を開始するときの、差分ビット位置表３１０とリンク表３１１の状態である。この状態は、差分ビット位置表の差分ビット位置２のエントリから親リンクＰ２が削除されている点を除いて、図６Ａの（ｂ）に示すものと同様である。ただし、リンク表３１１の読出位置Ｐ２のエントリの値は不必要なので省略している。
【００９０】
図６Ｂの（ｅ）に示すのは、図６Ａの（ｂ）に示す最小値キー“０００１”を基準のキーとしたときの差分ビット位置が０であるキーの分類処理の流れを示すものである。図１Ｂの例示では、差分ビット位置による分類１４９ｂに相当する。
【００９１】
矢印６８０ａで示す差分ビット表３１０の差分ビット位置０の親リンクＰ３が取り出され、点線の矢印６８３ｂで示すＰ３を読出位置とするキー表３０９からの点線の矢印６８３ｄに示すように、キー表３０９の読出位置Ｐ３に格納されたキー“１０１０”、すなわち親リンクＰ３の指すキーが図４Ｂに示すステップＳ４１２でソート済みキーとして取り出されて一次記憶領域であるソート済みキー６５０に設定され、さらにソート済みキー表３１３の書込位置６４０ｃに書き出される。
【００９２】
一方、ソート済みキー６５０に設定された、先の分類対象キーのうちの最小値キーであるキー“０００１”について同一の差分ビット位置０を有するキーのうち最小の値のキーであるキー“１０１０”と、同一の差分ビット位置０を有するキー“１１１１”と“１１１０”との差分ビット位置１が計算され、図の点線の矢印６６１ａが示すように、小さいほうのキーの読出位置であるＰ４が差分ビット位置表３１０の差分ビット位置６２１が１であるエントリに親リンク６１２として格納される。
【００９３】
さらに矢印６７４ｂに示すように、親リンクＰ４の指すリンク表３１１のリンク６２２には読出位置Ｐ１が格納され、その読出位置Ｐ１が指すリンク表３１１のリンクには、矢印６７１ｃで示すように同じＰ１が格納されている。
【００９４】
図６Ｂの（ｆ）に示すのは、図６Ｂの（ｅ）に示す最小値キー“１０１０”を基準のキーとしたときの差分ビット位置が３であるキーの分類処理の流れを示すものである。図１Ｂの例示では、差分ビット位置による分類１４９ｃに相当する。
【００９５】
矢印６８１ａで示す差分ビット表３１０の差分ビット位置１の親リンクＰ４が取り出され、点線の矢印６８４ｂで示すＰ４を読出位置とするキー表３０９からの点線の矢印６８４ｄに示すように、キー表３０９の読出位置Ｐ４に格納されたキー“１１１０”、すなわち親リンクＰ４の指すキーが図４Ｂに示すステップＳ４１２でソート済みキーとして取り出されて一次記憶領域であるソート済みキー６５０に設定され、さらにソート済みキー表３１３の書込位置６４０ｄに書き出される。
【００９６】
一方、ソート済みキー６５０に設定された、先の分類対象キーのうちの最小値キーであるキー“１０１０”について同一の差分ビット位置１を有するキーのうち最小の値のキーであるキー“１１１０”と、同一の差分ビット位置１を有するキー“１１１１”との差分ビット位置３が計算され、図の点線の矢印６６２ａが示すように、小さいほう、すなわち唯一のキーの読出位置であるＰ１が差分ビット位置表３１０の差分ビット位置６２１が３であるエントリに親リンク６１２として格納される。
さらに矢印６７１ｂに示すように、親リンクＰ１の指すリンク表３１１のリンク６２２には親リンクと同じ値のＰ１が格納される。
【００９７】
図６Ｃは、本発明の一実施の形態におけるキーを昇順に取り出す終段の処理のデータの流れを説明する図である。すなわち図６Ｂの（ｆ）に示す処理により、差分ビット位置表３１０には、差分ビット位置３のエントリの親リンクＰ１だけが格納されている。
【００９８】
差分ビット位置表３１０の差分ビット位置６１１の降順で親リンク６１２が取り出されるので、図の例の場合、矢印６８３ａで示す差分ビット位置６１１が３であるエントリの親リンクＰ１が取り出され、図の矢印６８１ｂに示すように、キー表３０９の親リンクＰ１の指す読出位置６０１からキー“１１１１”が読み出され、矢印６８１ｃに示すようにソート済みキー表３１３の書込位置６４０ｅに書き出される。
【００９９】
一方、矢印６７１ｂに示す親リンクＰ１に対応するリンク表３１１の読出位置６２１に格納されたリンク６２２は親リンク６１２と同一のＰ１であるから、差分ビット位置３に関するさらなる分類は行われない。そこで、差分ビット位置表３１０の差分ビット位置３に格納されていた親リンクＰ１は、削除される。
すると、差分ビット位置表３１０の全ての親リンクは削除され、全ての差分ビット位置についての処理は完了するので、すべての処理を終了する。
【０１００】
図７は、初段の分類処理のデータの流れ、すなわち、図６Ａの（ｂ）に示す差分ビット位置表３１０とリンク表３１１の設定を説明する図である。
図７の（ａ）に示すのは、キー表３０９にキー６０２が設定され、差分ビット位置表３１０とリンク表３１１には何も設定されていない、初期状態である。
【０１０１】
なお、読出位置Ｐ２に格納されるキー“００１１”は省略されている。キー“００１１”については、最小値キー“０００１”に対する差分ビット位置が２であるキーが唯一のものである。したがって、図５Ａに示すステップＳ５０４とステップＳ５０５で、差分ビット位置表とリンク表３１１の読出位置Ｐ２に関する設定が一度で完成するので、その設定の理解が容易なものであるから省略した。
【０１０２】
図７の（ｂ）に示すのは、キー表３０９の読出位置Ｐ１に格納されたキー“１１１１”に関する処理のデータの流れである。点線６８０ｄと６８１ｄで示すように、読出位置Ｐ０に格納された最小値キー“０００１”とのビット列比較により差分ビット位置０が計算され、点線の矢印６６０ａに示すように、差分ビット位置表３１０の差分ビット位置０に読出位置Ｐ１が設定される。また、点線の矢印６７１ｂで示すように、リンク表３１１の読出位置Ｐ１に、Ｐ１が設定される。
【０１０３】
図７の（ｃ）に示すのは、キー表３０９の読出位置Ｐ３に格納されたキー“１０１０”に関する処理のデータの流れである。点線６８０ｄと６８３ｄで示すように、読出位置Ｐ０に格納された最小値キー“０００１”とのビット列比較により差分ビット位置０が計算される。そして、差分ビット位置表３１０の差分ビット位置０に設定されている親リンクＰ１を読出位置とするキー“１１１１”との大小比較が図５Ｂに示すステップＳ５０７で行われる。読出位置Ｐ３のキーの方が小さいので、点線の矢印６６０ａに示すように、差分ビット位置表３１０の差分ビット位置０のエントリは読出位置Ｐ３に更新される。また、点線の矢印６７３ｂで示すように、リンク表３１１の読出位置Ｐ３に、Ｐ１が設定される。この設定により、矢印６７１ｃで示すように読出位置Ｐ３のキーと読出位置Ｐ１のキーの差分ビット位置が同一であるというリンク関係が保持される。
【０１０４】
図７の（ｄ）に示すのは、キー表３０９の読出位置Ｐ４に格納されたキー“１１１０”に関する処理のデータの流れである。点線６８０ｄと６８４ｄで示すように、読出位置Ｐ０に格納された最小値キー“０００１”とのビット列比較により差分ビット位置０が計算される。そして、差分ビット位置表３１０の差分ビット位置０に設定されている親リンクＰ３を読出位置とするキー“１０１０”との大小比較が図５Ｂに示すステップＳ５０７で行われる。読出位置Ｐ４のキーの方が大きいので、点線の矢印６６０ａに示すように、差分ビット位置表３１０の差分ビット位置０の読出位置Ｐ３は更新されない。しかし、点線の矢印６７３ｂで示すように、リンク表３１１の読出位置Ｐ３のエントリはＰ４に更新される。そして、矢印６７４ｃで示すように、リンク表３１１の読出位置Ｐ４にＰ１が設定される。この設定により、矢印６７４ｃと矢印６７１ｃで示すように、読出位置Ｐ３のキー、読出位置Ｐ４のキー及び読出位置Ｐ１のキーの差分ビット位置が同一であるというリンク関係が保持される。
以上のデータの流れ（読出位置Ｐ２については省略）により、初段の分類処理による差分ビット位置表３１０とリンク表３１１の設定が行われる。
【０１０５】
以上本発明を実施するための最良の形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。
また、本発明のビット列データソート装置が、図２Ａに例示するデータ構造を有する記憶手段と図４Ａ及び図４Ｂに示す処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
したがって、上記プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の実施の形態に含まれる。
以上詳細に説明した本発明が提供する新しいビット列データソート手法を用いることにより、より高速なビット列データのソートを行うことが可能となる。
【図面の簡単な説明】
【０１０６】
【図１Ａ】従来の基数ソートの概念を説明する図である。
【図１Ｂ】本発明の一実施の形態における差分ビット位置によるソート処理の概念を説明する図である。
【図２Ａ】本発明の一実施の形態における差分ビット位置によるソート処理で用いるデータ構造を説明する図である。
【図２Ｂ】本発明の一実施の形態におけるビット列データソート装置の機能ブロック構成を説明する図である。
【図３】本発明を実施するためのハードウェア構成例を説明する図である。
【図４Ａ】本発明の一実施の形態におけるソート処理の初段の分類処理とソート済みキーの出力処理の処理フローを説明する図である。
【図４Ｂ】本発明の一実施の形態におけるソート処理の初段以降の分類処理とソート済みキーの出力処理の処理フローを説明する図である。
【図５Ａ】本発明の一実施の形態におけるキーを分類する処理の前段の処理フローを説明する図である。
【図５Ｂ】本発明の一実施の形態におけるキーを分類する処理の後段の処理フローを説明する図である。
【図５Ｃ】本発明の一実施の形態における同一の差分ビット位置を有する複数のキーをさらに分類する処理の処理フローを説明する図である。
【図６Ａ】本発明の一実施の形態におけるキーを昇順に取り出す初段の処理のデータの流れを説明する図である。
【図６Ｂ】本発明の一実施の形態におけるキーを昇順に取り出す中段の処理のデータの流れを説明する図である。
【図６Ｃ】本発明の一実施の形態におけるキーを昇順に取り出す終段の処理のデータの流れを説明する図である。
【図７】初段の分類処理のデータの流れを説明する図である。
【符号の説明】
【０１０７】
１００                            キー列
１３０                            ソート済みキー列
１４９ａ、１４９ｂ、１４９ｃ      差分ビット位置による分類
２００                            ビット列データソート装置
２１０                            差分ビット位置計算手段
２２０                            差分ビット位置分類手段
２３０                            ソート済みキー出力手段
２４０                            制御手段
３０１                            データ処理装置
３０２                            中央処理装置
３０３                            キャッシュメモリ
３０４                            バス
３０５                            主記憶装置
３０６                            外部記憶装置
３０７                            通信装置
３０８                            データ格納装置
３０９                            キー表
３１０                            差分ビット位置表
３１１                            リンク表
３１３                            ソート済みキー表
【図１Ａ】
2010146472.tif 000003
【図１Ｂ】
2010146472.tif 000004
【図２Ａ】
2010146472.tif 000005
【図２Ｂ】
2010146472.tif 000006
【図３】
2010146472.tif 000007
【図４Ａ】
2010146472.tif 000008
【図４Ｂ】
2010146472.tif 000009
【図５Ａ】
2010146472.tif 000010
【図５Ｂ】
2010146472.tif 000011
【図５Ｃ】
2010146472.tif 000012
【図６Ａ】
2010146472.tif 000013
【図６Ｂ】
2010146472.tif 000014
【図６Ｃ】
2010146472.tif 000015
【図７】
2010146472.tif 000016