説明

ビット列データソート装置、ソート方法及びプログラム

【課題】ビット列データのソート処理において、無効となる処理が発生しない、効率的なソート手法を提供する。
【解決手段】基準となるキーとソート対象であるビット列からなるキーのビット列比較を行い、最初に異なるビット値となるビット位置である差分ビット位置を求め、ソート対象のキーの差分ビット位置による分類を行い、差分ビット位置順に、同一の差分ビット位置に分類されたキーをソートすることにより、ソート済みキー列を取得する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ビット列データのソート装置、ソート方法及びプログラムに関する。
【背景技術】
【0002】
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
【0003】
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列データの検索に帰着されるということができる。
一方、データベースに関連した処理として、データベース中のレコードのインデックスキーによるソート処理が行われている。このソート処理もビット列データからなるキーのソート処理に帰着される。なお、以下においては、ビット列データを、単にキーということもある。
【0004】
ソートの手法は各種のものが開発されており、下記特許文献1には、クイックソート、ラディックソート(基数ソート)等が紹介されている。また、特許文献2にも基数ソートが記載されている。
【0005】
図1に示すのは、従来の基数ソートの概念を説明する図である。基数ソートによれば、図1に例示するソート対象である4ビットのビット列であるキーは、0ビット目から3ビット目に至る各ビット位置におけるビット値による分類を繰り返すことにより、ソートが実行される。以下、図1の例示により、基数ソートの概念を説明する。
【0006】
図1には、ソート対象であるキーからなるキー列100が示されている。図1の例示では、キー列100に含まれるキーの存在するキーの位置であるキー位置101が100a(以下、キー位置100aのように表記する。)である記憶領域にはキー“0001”が存在する。また、キー位置100b、100c、100d、100eには、それぞれキー“1111”、“0011”、“1010”、
“1110”が存在する。
【0007】
図1に示すように、まずビット位置毎の分類(0ビット目)110aによりキー列100に含まれるキーの0ビット目による分類が行われる。その結果、キー“0001”とキー“0011”からなる0ビット目の値0の組120aと、キー“1111”、キー“1010”、キー“1110”からなる値1の組121aが得られる。次に値0の組120aはビット位置毎の分類(1ビット目)110bにより、次に値1の組121aはビット位置毎の分類(1ビット目)110eによりそれぞれ1ビット目の値による分類が行われる。
【0008】
ビット位置毎の分類(1ビット目)110bでは、キー“0001”とキー“0011”の1ビット目が共に0であることから、1ビット目の値0の組120bしか得られず、0ビット目の値0の組120aと同じキーが2ビット目による分類の対象となり、ビット位置毎の分類(2ビット目)110cにより2ビット目による分類が行われる。ビット位置毎の分類(2ビット目)110cでは、2ビット目の値0の組120dとして1つのキー“0001”が得られるので、最小値であるキーを格納する、ソート済みキー列130のキーを格納する位置であるキー位置131が130a(以下、キー位置130aのように表記する。)である記憶領域に格納される。同様に、2ビット目の値1の組121dとして1つのキー“0011”が得られるので、ソート済みキー列130の最小値の次の値のキーを格納するキー位置130bに格納される。なお、ソート済みキー列には、キー位置の符号順に小さいほうのキーから格納されるものとする。
【0009】
一方、ビット位置毎の分類(1ビット目)110eの分類では、1ビット目の値0の組120eとして1つのキー“1010”が得られるので、ソート済みキー列130の次の格納位置であるキー位置130cに格納される。また、1ビット目の値1の組121eとして、キー“1111”とキー“1110”の組が得られ、ビット位置毎の分類(2ビット目)110fの分類で、2ビット目の値に基づく分類が行われる。
【0010】
ビット位置毎の分類(2ビット目)110fでは、キー“1111”とキー“1110”の2ビット目が共に1であることから、1ビット目の値1の組121fしか得られず、1ビット目の値1の組121eと同じキーが3ビット目による分類の対象となり、ビット位置毎の分類(3ビット目)110gにより3ビット目の値による分類が行われる。ビット位置毎の分類(3ビット目)110gでは、3ビット目の値0の組120gとして1つのキー“1110”が得られるので、ソート済みキー列130の次の格納位置であるキー位置130dに格納される。同様に、3ビット目の値1の組121gとして1つのキー“1111”が得られるので、ソート済みキー列130の次の格納位置であるキー位置130eに格納される。
【0011】
以上の処理により、キー列100のキーは、ソート済みキー列130のキー位置130a〜130eにソートされて格納される。しかし、上述の基数ソート方法によりソートを実行する場合には、図1Aに示すビット位置毎の分類(1ビット目)110bやビット位置毎の分類(2ビット目)110fにみられるように、分類が行われない無効な処理が発生する。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2002−116907号公報
【特許文献2】特開2005−316663号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
そこで本発明の解決しようとする課題は、ビット列データのソート処理において、無効となる処理の発生を少なくした、効率的なソート手法を提供することである。
【課題を解決するための手段】
【0014】
本発明のソート処理によれば、基準となるビット列データである基準キーとソート対象であるビット列データであるソートキーのビット列比較を行い、最初に異なるビット値となるビット位置である差分ビット位置を求め、差分ビット位置によるソート対象のキーの分類を行い、ソートキーの差分ビット位置の下位nビット値によるソートを行うことにより、ソート済みキー列を取得する。ここで、ソートキーの差分ビット位置の下位nビット値とは、ソートキーの差分ビット位置がbとすると、差分ビット位置は0から始まることとしているので、ソートキーから上位b+1ビットを除く残りのビット列のビット値である。
【発明の効果】
【0015】
本発明によれば、最初に差分ビット位置によりキーの分類を行うため、分類が行われない無効な処理の発生をなくすことができる。したがって、効率的なソート処理を実現することができる。
【図面の簡単な説明】
【0016】
【図1】従来の基数ソートの概念を説明する図である。
【図2A】本発明の一実施の形態における差分ビット位置と下位ビット値によるソート処理の概念を説明する図である。
【図2B】本発明の一実施の形態におけるキーを差分ビット位置順に分類するためのデータ構造例を説明する図である。
【図2C】本発明の一実施の形態におけるビット列データソート装置の機能ブロック構成例を説明する図である。
【図3】本発明を実施するためのハードウェア構成例を説明する図である。
【図4A】本発明の一実施の形態におけるソート処理の前段の処理フロー例を説明する図である。
【図4B】本発明の一実施の形態におけるソート処理の後段の処理フロー例を説明する図である。
【図5A】本発明の一実施の形態における各キーを差分ビット位置毎に分類する処理フロー例を説明する図である。
【図5B】本発明の一実施の形態における各差分ビット位置に分類されたキーをソートし、ソート済みキーとして出力する処理フロー例を説明する図である。
【発明を実施するための形態】
【0017】
以下、本発明を実施するための形態を、図1に示したキー列100に含まれるキーと同一のキーをソート対象のキーとして例示して説明する。
【0018】
図2Aに示すのは、本発明の一実施の形態における差分ビット位置と下位ビットのビット値によるソート処理の概念を説明する図である。ソート対象のキー列100及びソート済みキー列130は、図1に示すものと同じである。
【0019】
キー列100を構成する各キーは、差分ビット位置による分類149aにおいて、最小値キー148a、最小値キーとの差分ビット位置が2であるキー群142a及び最小値キー148aとの差分ビット位置が0であるキー群140aに分類される。図の例では、最小値キー148aは“0001”である。キー群142aには、キー“0011”のみが含まれており、キー群140aにはキー“1111”、“1010”及び“1110”が含まれている。最小値キー148aは、キー列100からキーを差分ビット位置によるソート処理のための入力バッファに読み込むときに求めることができる。
【0020】
最小値キー148aは、図の点線の矢印158aに示すように、ソート済みキー列130のキー位置130aに格納される。また、キー群142aのキーは1つのみであるので、図の点線の矢印152aに示すように、ソート済みキー列130のキー位置130bに格納される。
【0021】
最小値キー148aとの差分ビット位置が0であるキー群140aにはキーが複数含まれているので、図の点線の矢印の組150aに示すように、差分ビット位置の下位nビットによるソート149bにおけるソートの対象となる。下差分ビット位置の下位nビットによるソート149bにおけるソートでは、差分ビット位置による分類149aで分類に用いられた差分ビット位置0の下位ビット、図2Aの例では1ビット目から3ビット目までの3ビットを切り出してソートする。
【0022】
上述のソートにより、切り出された差分ビット位置の下位nビットはそれぞれ別々の組に完全に分類される。図2Aの例では、ビット値が“010”の組148b、ビット値が“110”の組148c、ビット値が“111”の組143cに分類される。そして、点線の矢印158b、158c、153cにそれぞれ示すように、差分ビット位置までのビット値を付加して復元したキー“1010”、“1110”、“1111”がキー位置130c、130d、130eに格納され、全体のソート処理が完了する。
【0023】
なお、差分ビット位置の下位nビットによるソート方法、図2Aの例示ではソート149bにおけるソート方法には限定はなく、任意のソート方法を用いることができる。
また、上述の例では、最小値キーを、差分ビット位置を計算する基準のキーとしているが、最大値キーを基準のキーとすることもできる。この場合には、図2Aのソート対象キーの例では、最大値キーはキー“1111”であり、差分ビット位置による分類の結果として、差分ビット位置が3のキー“1110”、差分ビット位置が1のキー“1010”、差分ビット位置が0のキー“0011”と“0001”の3つの組が得られる。
【0024】
図2Bは、本発明の一実施の形態における差分ビット位置によるソート処理で用いるデータ構造を説明するものである。図2Bに示すように、キー表309、差分ビット位置表310、リンク表311、ソート済みキー表313が用いられる。
【0025】
キー表309はソート要求があったときにソート対象のキー602が読み込まれて設定されるものである。図2Bの例示では、ソート対象の5つのキー602は、図1及び図2A示すキー列100に含まれるものが読み込まれている。キー表309の読出位置601の先頭はP0であり、以下、P1、P2、P3、P4と続いている。読出位置P0には、最小値キー“0001”が設定されているが、別領域に設定しておくことも可能である。点線の矢印689cで示すように、最小値キーはソート済みキー表313の所定の位置に格納される。
【0026】
差分ビット位置表310は、最小値キーに対する同一の差分ビット位置を有するキーのうち、キー表309から最初に読み出されたキーの読出位置601が親リンク612として差分ビット位置611毎に格納されている。図2Aの例示では、点線の矢印660aで示すように、最小値キー“0001”との差分ビット位置が0であるキー“1111”、“1010”、“1110”のうち最初に読み出されるキー“1111”の読出位置P1が差分ビット位置表310の差分ビット位置611が0である位置に格納されている。また、点線の矢印662aで示すように、最小値キー“0001”との差分ビット位置が2であるキーはキー“0011”だけであるので、キー“0011”
の読出位置P2が差分ビット位置表310の差分ビット位置611が2である位置に格納されている。なお、親リンクに設定される読出位置は、上述のように最初に読み出されるキーの読出位置に限ることはない。後述のリンク表311に格納されたリンク関係と併せて、最小値キーに対して同一の差分ビット位置を有するキーにアクセスすることができればよい。
【0027】
リンク表311は、最小値キーに対する同一の差分ビット位置を有するキーにアクセスするためのものである。図に示すように、キーの読出位置621に対して、同一の差分ビット位置を有するキーの読出位置を示すリンク622が格納されている。
【0028】
差分ビット位置表310からリンク表311への点線の矢印671bで示すように、同一の差分ビット位置0を有する親リンクのキーの読出位置P1に対して、その読出位置P1を読出位置621とするリンク表311の読出位置(以下、リンク表311の読出位置P1のようにいう。)に、最小値キー“0001”に対して差分ビット位置0を有する親リンクのキー
“1111”と同一の差分ビット位置0を有するキー“1110”のキー表309の読出位置P4が格納されている。
【0029】
そして、図の点線の矢印674cで示すように、リンク表311の読出位置P4に、同一の差分ビット位置0を有するキー“1010”のキー表309の読出位置P3が格納されている。また、図の点線の矢印673cで示すように、リンク表311の読出位置P3には、同一の値のキー表309の読出位置P3が格納されている。これにより、それ以上同一の差分ビット位置0を有するキーは存在しないことを表している。
【0030】
また、差分ビット位置表310からリンク表311への点線の矢印672bで示すように、同一の差分ビット位置2を有する親リンクのキーの読出位置P2に対して、リンク表311の読出位置P2には、リンク表311の読出位置P2と同一の値のキー表309の読出位置P2が格納されている。これは、キー表309の読出位置P2のキー“0011”が最小値キー“0001”との差分ビット位置が2であるキーの唯一のものであることを示している。
【0031】
上述の図2Bに示す差分ビット位置表310とリンク表311の状態は、図2Aに示す差分ビット位置による分類149aが実行されて得られるものである。
以上の説明から明らかなとおり、上述のキー表309は請求項1に係る発明のソート対象キー記憶手段の一実施例である。また、差分ビット位置表310とリンク表311で分類対象キー差分ビット位置記憶手段の一実施例を構成しており、キー表309の読出位置601はキーの識別情報に相当する。
【0032】
図2Cは、本発明の一実施の形態におけるビット列データソート装置の機能ブロック構成を説明する図である。
図に示すように、ビット列データソート装置200は、差分ビット位置計算手段210、差分ビット位置分類手段220、下位nビットソート手段225、及びソート済みキー出力手段230を含む。以下、各手段の動作の概要について、図2Bの例示を参照して説明する。
【0033】
差分ビット位置計算手段210は、キー表309に記憶された全てのキー602のうち、基準キー以外のキーについて、基準キーに対する差分ビット位置を計算する。この場合、差分ビット位置を計算する基準となるキーは、読出位置P0に格納された最小値キー“0001”である。ソート済みキー出力手段230は、最小値キー“0001”をソート済みキー表313に出力する。
【0034】
差分ビット位置分類手段220は、差分ビット位置計算手段210の計算結果に基づいて、差分ビット位置表310とリンク表311の書き込みを行う。その結果、キーの識別情報をキー表309の読出位置601として、差分ビット位置が0の組(P3、P4、P1)と差分ビット位置が2の組(P2)に分類される。
【0035】
下位nビットソート手段225は、差分ビット位置分類手段220により分類された各差分ビット位置の組について、差分ビット位置の下位のnビットによりソートを実行する。
ソート済みキー出力手段230は、下位nビットソート手段225によるソート結果に基づいて、ソート済みのキーをソート済みキー表313に出力する。
【0036】
図3は、本発明を実施するためのハードウェア構成例を説明する図である。
本発明によるソート処理は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。キー表309、差分ビット位置表310、リンク表311、ソート済みキー表313を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
【0037】
図3の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、キー表309は外部記憶装置306に、他の表は主記憶装置305に持つなど、使用可能なハードウェア環境、ソート対象キーの集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
【0038】
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた主記憶装置305の一時記憶領域が用いられることは当然である。そして、以下の説明においては、一次記憶領域に格納されるあるいは設定される値を一時記憶領域の名前で呼ぶことがある。
【0039】
次に、本発明の一実施の形態におけるソート処理について、図4A及び図4Bを参照して詳細に説明する。また、その説明において、図2Aあるいは図2Bの例示を適宜用いて説明する。
【0040】
図4Aは、本発明の一実施の形態におけるソート処理の前段の処理フロー例を説明する図である。この前段の処理は、ソートキーを差分ビット位置毎に分類するとともに、基準キーである最小値キーをソート済みキー表に設定するものである。キー表にはソート対象のキーが記憶されており、キー表の先頭の読出位置には最小値キーが記憶されていることを前提とする。すなわち、図2Bに示すようにキー表309の読出位置P0には最小値キーが記憶されているものとする。
【0041】
まず、ステップS401において、キー表の先頭位置をキー表の読出位置(以下、単に読出位置ということがある。)に設定する。ここでいう「キー表の読出位置」は、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域」の1つである。以下の説明では、「キー表の先頭位置をキー表の読出位置に設定する。」のように、「キー表の読出位置」が図示しない一次記憶領域であることを省略して述べることがある。
上記の設定により、図2Bの例示では、キー表の読出位置にP0が設定される。
【0042】
次にステップS402において、キー表より、先頭位置の指すキーを最小値キーとして取り出す。ここでいう「最小値キーとして取り出す」は、図示しない一次記憶領域である最小値キーに設定する、の意味である。以下においても、同様な表記を用いる場合がある。
【0043】
ステップS403に進み、読出位置に次の読出位置を設定する。次にステップS404において、全てのキーは処理済みか、すなわち、全てのキーについての差分ビット位置による分類処理が終了したか判定する。
【0044】
全てのキーが処理済みでなければ、ステップS405に進み、キー表より、読出位置の指すキーをソートキーとして取り出すとともに、読出位置をソートキーの読出位置に設定する。そしてステップS406において、ソートキーと最小値キーの差分ビット位置を得て、差分ビット位置によりソートキーを分類し、ステップS403に戻る。
ステップS406の処理においては、差分ビット位置表とリンク表への設定が行われる。その処理の詳細については、後に図5Aを参照して説明する。
【0045】
一方、ステップS404で全てのキーが処理済みであると判定されると、ステップS407に分岐し、ステップS402で得た最小値キーを、ソート済みキー表に設定し、図4Bに示すステップS408以下の処理に進む。以上の処理により、図2Bの例示のように、差分ビット位置表310とリンク表311の各エントリの値が設定される。また、最小値キー“0001”がソート済みキー表313に格納される。
【0046】
図4Bは、本発明の一実施の形態におけるソート処理の後段の処理フロー例を説明する図である。この後段の処理は、順次、差分ビット位置毎に分類されたソートキーを差分ビット位置の下位nビットによりソートし、ソート済みキーとしてソート済みキー表に出力するものである。
【0047】
ステップS408においては、図示しない一次記憶領域である差分ビット位置に、初期値として差分ビット位置表の差分ビット位置、すなわちソート対象のキーが有する可能性のある差分ビット位置の最大値を設定する。図2Bの例示では、差分ビット位置の最大値として3が設定される。
【0048】
ステップS409において、差分ビット位置表の全ての差分ビット位置のエントリについて処理済みであるか判定し、処理済みであればソート処理を終了し、処理済みでなければステップS410に進む。
【0049】
ステップS410では、差分ビット位置表より、差分ビット位置の指すエントリから親リンクを読み出す。差分ビット位置の指すエントリに親リンクが格納されていれば、この読み出された親リンクは一次記憶領域である親リンクに設定される。すなわち、本実施の態様の説明における「親リンクを読み出す」等の表記は、親リンクを読み出して図示しない一次記憶領域である親リンクに設定することを意味することがある。親リンク以外のものに対しても同様である。
【0050】
ステップS411では、親リンクは設定済みであるか判定する。設定済みでなければステップS416で差分ビット位置から値を1減らしてステップS409に戻り、一方、設定済みであればステップS413aに進む。
【0051】
ステップS413aでは、リンク表より、ステップS410で読み出した親リンク(キー表の読出位置)の指すリンク列に含まれるキーをソートし、ソート済みキー表に設定してステップS416に進む。ステップS413aの処理の詳細は、後に図5Bを参照して説明する。
【0052】
上述の処理を、ステップS409において、差分ビット位置表の全ての差分ビット位置のエントリについて処理済みである、と判定されるまで繰り返し、その判定が得られるとソート対象のキーのソートが完了しているので処理を終了する。
【0053】
図4Bに例示する処理は、差分ビット位置を計算する基準となるキーを最小のキーとし、差分ビット位置の降順で処理を行ってソート済みキーを昇順で取り出すものである。一方、先に述べたように、差分ビット位置を計算する基準となるキーを最大のキーとする場合でも、差分ビット位置の大きいキーほど基準キーの値に近いのであるから、差分ビット位置の降順で処理を行ってソート済みキーを降順で取り出すことができることは当業者に明らかである。
【0054】
図5Aは、図4Aに示すステップS406の処理の詳細を示すものであり、本発明の一実施の形態における各キーを差分ビット位置毎に分類する処理フロー例を説明する図である。本実施の形態においては、差分ビット位置表とリンク表を生成することにより、分類対象の各キーは差分ビット位置毎に分類される。
【0055】
図5Aに示すように、ステップS501で、ソートキーに設定されているキーと最小値キーに設定されているキーをビット列として比較し、上位0ビット目からみた最初の不一致ビットのビット位置を、差分ビット位置に設定する。ソートキーは、図4Aに示すステップS405で設定されるものであり、図5Aに示す分類処理の対象のキーである。
【0056】
次にステップS502で差分ビット位置表より、ステップS501で設定した差分ビット位置の指す親リンクを読み出し、ステップS503で親リンクは設定済みであるか判定する。
【0057】
親リンクが設定済みでなければ、ステップS504に進み、差分ビット位置表の、差分ビット位置の指す親リンクにソートキーの読出位置を設定し、ステップS505において、リンク表の、ソートキーの読出位置の指すリンクに、ソートキーの読出位置を設定して処理を終了する。
なお、ステップS504の処理におけるソートキーの読出位置は、図4Aに示すステップS405で設定されるものである。
【0058】
差分ビット位置表には、先に述べたように同一の差分ビット位置を有するキーのうち、最初に読み出されたキーの読出位置が親リンクとして格納されるが、上記ステップS504の処理は、まさに最初に読み出されたソートキーの読出位置を差分ビット位置表の差分ビット位置の指す親リンクに設定するものである。
【0059】
一旦親リンクが設定済みとなった後、すなわちステップS503での判定が親リンクは設定済みになると、ステップS510に進み、リンク表より、親リンクの指すリンクを次リンクとして読み出し、ステップS511で、次リンクと親リンクは同一か判定する。
【0060】
ステップS511で次リンクと親リンクは同一であると判定されると、ステップS512において、リンク表の親リンクの指すリンクに、ソートキーの読出位置を設定する。そして、ステップS513において、リンク表のソートキーの読出位置の指すリンクに、ソートキーの読出位置を設定して処理を終了する。
【0061】
一方、ステップS511で次リンクと親リンクは同一でないと判定されると、ステップS514に進み、リンク表の親リンクの指すリンクに、ソートキーの読出位置を設定する。そして、ステップS515において、リンク表のソートキーの読出位置の指すリンクに、ステップS510で得た次リンクを設定して処理を終了する。
【0062】
上述のステップS511の判定は、同一の差分ビット位置を有するキーのうちで分類済みのキーが1つのみであったかの判定と同じである。分類済みのキーが1つのみであればこのキーの読出位置の指すリンク表のリンクにはその読出位置が格納されている。そこで、それをソートキーの読出位置で更新し、ソートキーの読出位置の指すリンク表のリンクにソートキーの読出位置を設定してソートキーが、その時点での最後の分類済みのキーであることを示す。
【0063】
分類済みのキーが2つ以上のときは、ステップS514とステップS515の処理により、リンク表で表現される親リンクと次リンクのリンク関係の間に、ソートキーの読出位置を挿入する。
【0064】
上述の説明から明らかなとおり、同一の差分ビット位置を有するソートキーの読出位置は、差分ビット位置表に格納された親リンクからリンク表の読出位置とリンクをたどることにより順次全てアクセスすることができる。そこで、以下の説明において、この親リンクからたどることのできる親リンクも含めた読出位置の列を親リンクの指すリンク列といい、親リンクの指すリンク列に含まれる読出位置のキー表に記憶されたキーを、親リンクの指すリンク列に含まれるキーということがある。
【0065】
図5Bは、図4Bに示すステップS414aの処理である、本発明の一実施の形態における各差分ビット位置に分類されたキーをソートし、ソート済みキーとして出力する処理フロー例を説明する図である。本実施の形態においては、リンク表に基づいて親リンクの指すリンク列に含まれるキーを取り出してソートし、ソート済みキー表に設定する。
【0066】
図に示すように、ステップS541において、リンク表より、親リンクの指すリンク列のリンクを取り出す。親リンクは、図4Bに示すステップS410で読み出したものである。
【0067】
ステップS542に進み、キー表よりステップS541で取り出したリンクの指すキーを読み出し、リンクとともにキーの差分ビット位置の下位nビットをソートキーとしてソート対象データに設定する。
【0068】
図2Bに示す例で、差分ビット位置が0の場合には、親リンクはP1、親リンクの指すリンク列のリンクは、P1、P4、P3であるから、ソート対象データには、(P1、“111”)、(P4、“110”)、(P3、“010”)の3つのデータが設定される。ソートキーは、それぞれ差分ビット位置の下位3ビットである、“111”、“110”、“010”、である。
【0069】
次に、ステップS543においてソート対象データをソートする。上述の例で昇順にソートすると、ソート結果のデータの並びは、(P3、“010”)、(P4、“110”)、(P1、“111”)となる。
【0070】
最後にステップS544で、ソート順に、ソート対象データのリンクを取り出し、キー表より、リンクの指すキーを読み出し、ソート済みキー表に順次設定し、処理を終了する。
【0071】
上述の例では、まず、リンクP3が取り出され、キー表より読出位置P3のキー“1010”が読み出されてソート済みキー表に設定される。次に、リンクP4が取り出され、キー表より読出位置P4のキー“1010”が読み出されてソート済みキー表に設定される。最後に、リンクP1が取り出され、キー表より読出位置P1のキー“1111”が読み出されてソート済みキー表に設定される。
【0072】
以上本発明を実施するための形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。
例えば、図5Bに示すソート処理では、キー表よりステップS541で取り出したリンクの指すキーを読み出し、リンクとともにキーの差分ビット位置の下位nビットをソートキーとしてソート対象データに設定することにより、ソートキーのサイズを小さくしているが、キー自体をソート対象データに設定し、ソートキーをキーの差分ビット位置の下位nビットとしてソートしても同一のソート結果が得られることは明らかである。
【0073】
また、リンクをソート対象データに含めず、差分ビット位置までの上位のビット値を記憶しておき、ソート後にキーの差分ビット位置の下位nビットと合成してキーを復元することが可能であることも明らかである。処理は複雑になるが、リンクに要するビット数と差分ビット位置の大きさとの関係により、ソート対象データを、リンクを含めたものとするかしないかを切り替えることも可能である。
差分ビット位置が大きい場合には、先頭から差分ビット位置までのビットをソート対象から除くことにより、ソート対象データのデータサイズを縮小することができる。
【0074】
さらに、本発明のビット列データソート装置が、図2Bに例示するデータ構造を有するデータを記憶する記憶手段と図4A及び図4Bに示す処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
したがって、上記プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の実施の形態に含まれる。
以上詳細に説明した本発明が提供する新しいビット列データソート手法を用いることにより、より高速なビット列データのソートを行うことが可能となる。
【符号の説明】
【0075】
100 キー列
130 ソート済みキー列
149a 差分ビット位置による分類
149b 差分ビット位置の下位nビットによるソート
200 ビット列データソート装置
210 差分ビット位置計算手段
220 差分ビット位置分類手段
225 下位nビットソート手段
230 ソート済みキー出力手段
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 キー表
310 差分ビット位置表
311 リンク表
313 ソート済みキー表


【特許請求の範囲】
【請求項1】
ビット列で表されるソート対象のキーのソート処理を行うビット列データソート装置において、
前記ソート対象のキーを記憶するソート対象キー記憶手段と、
前記ソート対象キー記憶手段に記憶された前記ソート処理を構成する分類処理の分類対象である前記キーと、該分類対象であるキーのうち基準となる基準キーとのビット列比較により、最初に異なるビット値となる差分ビット位置を求める差分ビット位置計算手段と、
前記差分ビット位置計算手段で求めた差分ビット位置毎に、該差分ビット位置を有するキーの識別情報を記憶する分類対象キー差分ビット位置記憶手段と、
前記差分ビット位置計算手段で求めた前記差分ビット位置毎に該差分ビット位置を有するキーの識別情報を前記分類対象キー差分ビット位置記憶手段に書き込むことにより、前記分類対象であるキーを同一の差分ビット位置を有する組に分類する差分ビット位置分類手段と、
前記差分ビット位置分類手段で分類された同一の差分ビット位置を有するキーの組毎に差分ビット位置順で各キーの当該差分ビット位置の下位nビットによるソートを行う下位nビットソート手段と、
前記基準キーと、前記下位nビットソート手段により差分ビット位置順で差分ビット位置毎にソートされたキーとを、ソート済みキーとして出力するソート済みキー出力手段と、
を備えることを特徴とするビット列データソート装置。
【請求項2】
請求項1に記載のビット列データソート装置において、
前記分類対象であるキーのうち基準となるキーを、分類対象であるキーのうち最小の値をとる最小値キーあるいは最大の値をとる最大値キーとすることを特徴とするビット列データソート装置。
【請求項3】
請求項2に記載のビット列データソート装置において、
前記キーを識別する情報は、該キーが記憶された前記ソート対象キー記憶手段における該キーのアドレスである読出位置であり、
前記分類対象キー差分ビット位置記憶手段は、前記分類対象であるキーと該分類対象であるキーのうち基準となるキーである前記最小値キーあるいは最大値キーとの差分ビット位置毎に、該最小値キーあるいは最大値キーに対する同一の差分ビット位置を有するキーのうちの任意のキーの前記読出位置である親リンクを格納する差分ビット位置表と、前記読出位置毎に該読出位置のキーと前記同一の差分ビット位置を有するキーの読出位置であるリンクを格納するリンク表から構成されることを特徴とするビット列データソート装置。
【請求項4】
請求項3に記載のビット列データソート装置において、
前記同一の差分ビット位置を有するキーの前記ソート対象キー記憶手段の読出位置をリンク表の読出位置とするリンクは、該リンクをリンク表の読出位置とし、さらに該読出位置に設定されたリンクを順次たどることにより、前記同一の差分ビット位置を有する全てのキーの前記ソート対象キー記憶手段の読出位置を参照するために設定されており、該同一の差分ビット位置を有するキーのうちの最後のキーの読出位置のリンクには、該最後のキーの読出位置が格納されていることを特徴とするビット列データソート装置。
【請求項5】
請求項4に記載のビット列データソート装置において、
前記下位nビットソート手段は、前記差分ビット位置順に、前記差分ビット位置表の当該差分ビット位置に格納された親リンクと該親リンクの指す前記ソート対象キー記憶手段に記憶されたキーの当該差分ビット位置の下位nビットをソートキーとするソート対象データとし、該親リンクと同一の差分ビット位置を有する全てのキーのリンクと該リンクの指す前記ソート対象キー記憶手段に記憶されたキーの当該差分ビット位置の下位nビットをソートキーとするソート対象データとして、前記ソート対象データをソートすることを前記差分ビット位置順に実行するものであり、
前記ソート済みキー出力手段は、差分ビット位置順に、前記下位nビットソート手段によりソートされたソート対象データの前記リンクの指す前記ソート対象キー記憶手段からキーを読み出してソート済みキーとして出力する、
ことを特徴とするビット列データソート装置。
【請求項6】
ビット列で表されるソート対象のキーのソート処理を行うビット列データソート方法において、
前記ソート対象のキーを記憶するソート対象キー記憶手段に前記ソート対象のキーを記憶するソート対象キー記憶ステップと、
前記ソート対象キー記憶手段に記憶された前記ソート処理を構成する分類処理の分類対象である前記キーと、該分類対象であるキーのうち基準となる基準キーとのビット列比較により、最初に異なるビット値となる差分ビット位置を求める差分ビット位置計算ステップと、
前記差分ビット位置計算ステップで求めた前記差分ビット位置毎に、前記分類対象キー差分ビット位置記憶手段に該差分ビット位置を有するキーの識別情報を書き込むことにより、前記分類対象であるキーを同一の差分ビット位置を有する組に分類する差分ビット位置分類ステップと、
前記差分ビット位置分類ステップで分類された同一の差分ビット位置を有するキーの組毎に差分ビット位置順で各キーの当該差分ビット位置の下位nビットによるソートを行う下位nビットソートステップと、
前記基準キーと、前記下位nビットソートステップにおいて差分ビット位置順で差分ビット位置毎にソートされたキーとを、ソート済みキーとして出力するソート済みキー出力ステップと、
を備えることを特徴とするビット列データソート方法。
【請求項7】
請求項6に記載のビット列データソート方法において、
前記分類対象であるキーのうち基準となるキーを、分類対象であるキーのうち最小の値をとる最小値キーあるいは最大の値をとる最大値キーとすることを特徴とするビット列データソート方法。
【請求項8】
請求項7に記載のビット列データソート方法において、
前記キーを識別する情報は、該キーが記憶された前記ソート対象キー記憶手段における該キーのアドレスである読出位置であり、
前記分類対象キー差分ビット位置記憶手段は、前記分類対象であるキーと該分類対象であるキーのうち基準となるキーである前記最小値キーあるいは最大値キーとの差分ビット位置毎に、該最小値キーあるいは最大値キーに対する同一の差分ビット位置を有するキーのうちの任意のキーの前記読出位置である親リンクを格納する差分ビット位置表と、前記読出位置毎に該読出位置のキーと前記同一の差分ビット位置を有するキーの読出位置であるリンクを格納するリンク表から構成されることを特徴とするビット列データソート方法。
【請求項9】
請求項8に記載のビット列データソート方法において、
前記同一の差分ビット位置を有するキーの前記ソート対象キー記憶手段の読出位置をリンク表の読出位置とするリンクは、該リンクをリンク表の読出位置とし、さらに該読出位置に設定されたリンクを順次たどることにより、前記同一の差分ビット位置を有する全てのキーの前記ソート対象キー記憶手段の読出位置を参照するために設定されており、該同一の差分ビット位置を有するキーのうちの最後のキーの読出位置のリンクには、該最後のキーの読出位置が格納されていることを特徴とするビット列データソート方法。
【請求項10】
請求項9に記載のビット列データソート方法において、
前記下位nビットソートステップは、前記差分ビット位置順に、前記差分ビット位置表の当該差分ビット位置に格納された親リンクと該親リンクの指す前記ソート対象キー記憶手段に記憶されたキーの当該差分ビット位置の下位nビットをソートキーとするソート対象データとし、該親リンクと同一の差分ビット位置を有する全てのキーのリンクと該リンクの指す前記ソート対象キー記憶手段に記憶されたキーの当該差分ビット位置の下位nビットをソートキーとするソート対象データとして、前記ソート対象データをソートすることを前記差分ビット位置順に実行し、
前記ソート済みキー出力ステップは、差分ビット位置順に、前記下位nビットソートステップにおいてソートされたソート対象データの前記リンクの指す前記ソート対象キー記憶手段からキーを読み出してソート済みキーとして出力する、
ことを特徴とするビット列データソート方法。
【請求項11】
請求項6〜請求項10のいずれか1項に記載のビット列データソート方法をコンピュータに実行させるプログラム。
【請求項12】
請求項6〜請求項10のいずれか1項に記載のビット列データソート方法をコンピュータに実行させるプログラムを記憶したコンピュータ読み取り可能な記憶媒体。

【図1】
image rotate

【図2A】
image rotate

【図2B】
image rotate

【図2C】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図5A】
image rotate

【図5B】
image rotate


【公開番号】特開2011−40009(P2011−40009A)
【公開日】平成23年2月24日(2011.2.24)
【国際特許分類】
【出願番号】特願2009−189602(P2009−189602)
【出願日】平成21年8月18日(2009.8.18)
【出願人】(506235616)株式会社エスグランツ (32)