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