(57)【特許請求の範囲】
【請求項１】
トーナメント技法を用いて、入力レコード列を指定されるキーに従って昇順又は降順の規定順に並び換えるソート処理装置において、
トーナメントに割り付けられたキーの全てが保留状態に達した場合に、１ストリングとして並び換えられた優勝レコードの数をトーナメント規模と比較することにより、該優勝レコードのキーの並びの傾向を検出する検出手段と、
上記検出結果が上記規定順と逆である並びの傾向を示す場合に、逆順フラグを実行状態に設定するフラグ設定手段と、
上記逆順フラグを参照し、該逆順フラグが実行状態にあれば、上記入力レコードのキーに演算処理を施すことで、該キーの間の大小関係を反転させる演算手段と、
上記逆順フラグを参照し、該逆順フラグが実行状態にあれば、トーナメントの優勝レコードのキーに対して上記演算処理の逆演算処理を施すとともに、１ストリングとして優勝レコードを並び換えるときに、該優勝レコードの並び順を逆に変更する復元手段とを備えることを、
特徴とするソート処理装置。
【請求項２】
請求項１記載のソート処理装置において、
上記演算手段は、上記入力レコードのキーの各ビットに否定演算を施すことで、該キーの間の大小関係を反転させることを、
特徴とするソート処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、トーナメント技法を用いて、入力レコード列を指定されるキーに従って規定順に並び換えるソート処理装置に関し、特に、効率的なソート処理を実現できるようにするソート処理装置に関するものである。
【０００２】
データベース等のデータ処理分野では、トーナメント技法を用いて、入力レコード列を指定されるキーに従って昇順や降順に並び換えるソート処理を実行する。このようなソート処理は、データ処理の効率を高めるためにも効率的に実行できるようにしていく必要があるのである。
【０００３】
【従来の技術】
トーナメント技法を用いるレコードのソート処理では、指定されるキーの昇順にレコードをソートする場合、トーナメントに参加するレコードの間で最も小さな値（なお、キーの降順にレコードをソートする場合には最も大きな値となる）を示すキーを持つレコードを選択し、続いて、この選択により空きとなったキーの格納位置に次のレコードのキーを割り付けて、この割り付けたキーが既に選択されているキーよりも小さなものである場合には、トーナメントへの参加を保留にし、一方、大きなものである場合には、そのままトーナメントへの参加を許可していくことで、全キーが保留状態となるまで指定されるキーの昇順にレコードをソートしていく。そして、このようにして１ストリングとしてソートされたレコードを各ストリング間でマージしていくことで、指定されるキーの昇順にレコードをソートしていくことを実現するものである。
【０００４】
すなわち、例えば、トーナメント規模（トーナメントに参加できるレコード数）が“４”で、入力レコードのキー値が、
“８”→“７”→“６”→“５”→“４”→“３”→“２”→“１”
という完全降順である場合には、図５に示すように、初期状態として、キー値が“８”，“７”，“６”，“５”というレコードがトーナメントに参加することになるので、先ず最初に、キー値“５”のレコードを選択して、この空きとなったところにキー値“４”を保留状態として割り付け、次に、キー値“６”のレコードを選択して、この空きとなったところにキー値“３”を保留状態として割り付け、続いて、キー値“７”のレコードを選択して、この空きとなったところにキー値“２”を保留状態として割り付け、続いて、キー値“８”のレコードを選択して、この空きとなったところにキー値“１”を保留状態として割り付けていくことで、“５”→“６”→“７”→“８”というキーの昇順のレコードを１ストリングとしてソートする。
【０００５】
次に、保留状態を解除することで、キー値が“４”，“３”，“２”，“１”というレコードがトーナメントに参加することになるので、先ず最初に、キー値“１”のレコードを選択し、次に、キー値“２”のレコードを選択し、続いて、キー値“３”のレコードを選択し、続いて、キー値“４”のレコードを選択していくことで、“１”→“２”→“３”→“４”というキーの昇順のレコードを１ストリングとしてソートする。
【０００６】
そして、最後に、１ストリングとしてソートされた“５”→“６”→“７”→“８”というキーの昇順のレコードと、“１”→“２”→“３”→“４”というキーの昇順のレコードとをマージすることで、
“１”→“２”→“３”→“４”→“５”→“６”→“７”→“８”
というキーの昇順にレコードをソートするのである。
【０００７】
なお、この説明では、入力レコードのキー値が完全降順であることで説明したので、１ストリングとしてソートされたレコードのキー値が完全昇順になることになるが、入力レコードのキー値が完全降順でない場合には、ソートされたキー値に飛びがでてしまう。このような飛びは、ストリング間のマージ処理によって完全昇順にソートされていくことになる。
【０００８】
【発明が解決しようとする課題】
しかしながら、このような従来技術では、指定されるキーの昇順にレコードをソートするときに、入力レコードのキー値が昇順傾向である場合には、ストリングの長さ（１ストリングとしてソートされるレコードの数）が長くなるものの、降順傾向である場合には、ストリングの長さが短くなるとともに、指定されるキーの降順にレコードをソートするときに、入力レコードのキー値が降順傾向である場合には、ストリングの長さが長くなるものの、昇順傾向である場合には、ストリングの長さが短くなる。
【０００９】
これから、指定されるキーの昇順にレコードをソートするときに、入力レコードのキー値に降順傾向である場合と、指定されるキーの降順にレコードをソートするときに、入力レコードのキー値に昇順傾向である場合には、ストリングの長さが短くなることでストリング数が増えることになって、後続のストリング間のマージ処理の負荷が大きくなるという問題点があった。
【００１０】
本発明はかかる事情に鑑みてなされたものであって、トーナメント技法を用いて、入力レコード列を指定されるキーに従って規定順に並び換えるときに、効率的なソート処理を実現できるようにする新たなソート処理装置の提供を目的とするものである。
【００１１】
【課題を解決するための手段】
図１に本発明の原理構成を図示する。
図中、１は本発明により構成されるソート処理装置であって、トーナメント技法を用いて、入力レコード列を指定されるキーに従って昇順又は降順の規定順に並び換えるもの、２は入力レコードファイルであって、ソート処理装置１のソート対象となる入力レコードを管理するもの、３はストリングファイルであって、ソート処理装置１により１ストリングとして並び換えられたレコードをストリングを単位にして管理するもの、４は出力レコードファイルであって、ソート処理装置１により規定順に並び換えられたレコードを管理するものである。
【００１２】
このソート処理装置１は、トーナメント技法に従って、トーナメントに参加しているレコードをキーの規定順に並び換えてストリングファイル３に格納するトーナメント処理手段１０と、１ストリングとして並び換えられた入力レコードのキーの並びの傾向を検出する検出手段１１と、検出手段１１の検出結果に応じて、入力レコードのキーに演算処理を施すことでキーの間の大小関係を反転させる演算手段１２と、演算手段１２が演算処理を実行するときに、トーナメント処理手段１０により並び換えられたレコードのキーに演算手段１２の施す演算処理の逆演算処理を施すとともに、そのレコードの並び順を逆に変更する逆変換手段１３と、ストリングファイル３の管理するストリング単位のレコードをマージして出力レコードファイル４に格納するマージ処理手段１４とを備える。
【００１３】
【作用】
本発明では、トーナメント処理手段１０が、トーナメント技法に従って、入力レコードをストリングを単位にしてキーの規定順に並び換えてストリングファイル３に格納していくときに、検出手段１１は、１ストリングとして並び換えられたレコードの数と、トーナメント規模とを比較することで、ストリングの長さが短いか否かを検出する。
この検出処理により、ストリングの長さが短いと検出されるとき、すなわち、１ストリングとして並び換えられた入力レコードのキーの並びの傾向が、トーナメント処理手段１０の並び換えている順序とは逆のものであることが検出されるときには、演算手段１２は、例えば、入力レコードのキーの各ビットに否定演算を施すことで、入力レコードのキーの大小関係を反転していく。
この反転処理に従って、トーナメント処理手段１０は、ストリングの長さを長く保持しつつ入力レコードを並び換えていくことができるようになる。
【００１４】
そして、逆変換手段１３は、演算手段１２が演算処理を実行するときには、トーナメント処理手段１０により並び換えられたレコードのキーに対して、演算手段１２の施す演算処理の逆演算処理を施すことで本来のキーに戻すとともに、そのレコードの並び順を逆に変更することで本来のレコードの並び順に戻してストリングファイル３に格納していく。
実施例で説明するように、本発明では、トーナメント技法を用いて、入力レコード列を指定されるキーに従って昇順又は降順の規定順に並び換える構成を採るときにあって、（１）トーナメントに割り付けられたキーの全てが保留状態に達した場合に、１ストリングとして並び換えられた優勝レコードの数をトーナメント規模と比較することにより、該優勝レコードのキーの並びの傾向を検出する検出手段と、（２）上記検出結果が上記規定順と逆である並びの傾向を示す場合に、逆順フラグを実行状態に設定するフラグ設定手段と、（３）上記逆順フラグを参照し、該逆順フラグが実行状態にあれば、上記入力レコードのキーに演算処理を施すことで、該キーの間の大小関係を反転させる演算手段と、（４）上記逆順フラグを参照し、該逆順フラグが実行状態にあれば、トーナメントの優勝レコードのキーに対して上記演算処理の逆演算処理を施すとともに、１ストリングとして優勝レコードを並び換えるときに、該優勝レコードの並び順を逆に変更する復元手段とを備えることで、以上に説明した処理を実現するという構成を採っているのである。
【００１５】
このようにして、本発明では、ストリングの長さを常に長くできるので、ストリングファイル３に格納されるストリング数が従来よりも大幅に少なくなって、マージ処理手段１４の実行するマージ処理の負荷を小さくでき効率的なソート処理を実現できるようになるのである。
【００１６】
【実施例】
以下、実施例に従って本発明を詳細に説明する。
図２に、本発明により構成されるソート処理装置１の実行する処理フローの一実施例を図示する。次に、この処理フローに従って、本発明のソート処理について詳細に説明する。ここで、この処理フローでは、入力レコードを昇順に並び換えることを想定するとともに、図１で説明した演算手段１２が、入力レコードのキーの各ビットに否定演算を施すことで、入力レコードのキーの大小関係を反転していく演算処理を実行することを想定している。
【００１７】
ソート処理装置１は、この処理フローに示すように、先ず最初に、ステップ１で、トーナメントに参加すべく割り付けられたキーの間で初期トーナメント処理を実行して、最も小さなキー値を持つレコードを優勝レコードとして選択する。次に、ステップ２で、演算手段１２の演算処理の実行状態を表示する降順ビットがＯＮにセットされているか否かを判断する。このステップ２の判断で、降順ビットがＯＮにセットされていると判断するとき、すなわち、演算手段１２が演算処理を実行していると判断するときには、続くステップ３で、キーに対して否定演算をすることでキーを本来の値に戻してから、続くステップ４で、優勝レコードを下から上へとＩ／Ｏバッファにブロッキングする。一方、ステップ２の判断で、降順ビットがＯＦＦにセットされていると判断するとき、すなわち、演算手段１２が演算処理を実行していないと判断するときには、直ちにステップ４に進んで、優勝レコードをステップ３経由とは反対の上から下へとＩ／Ｏバッファにブロッキングする。なお、Ｉ／Ｏバッファにブロッキングされる優勝レコードは、上から順番に読み出されて図１で説明したストリングファイル３に格納されていくことになる。
【００１８】
ソート処理装置１は、続いて、ステップ５で、入力レコードが残されているか否かを判断して、残されていない場合にはそのまま処理を終了する。一方、残されている場合には、続くステップ６で、トーナメントに割り付けられたキーの全てが保留状態（トーナメントに参加しているキーが、既に選択したキーよりも小さなキーだけになる状態）となったか否かを判断する。すなわち、１ストリング分のレコードの並び換えを行ったか否かを判断するのである。このステップ６の判断で、保留限界に達したと判断するときには、ステップ７に進んで、その１ストリングとして並び換えたレコードの数と、トーナメント規模とを比較することで、その並び換えた入力レコードが昇順の傾向を持つのか、降順の傾向を持つのか、ランダムな傾向を持つのかを判断する。この判断処理は、具体的には、例えば、ストリング内のレコード数であるストリングの長さが、トーナメント規模の２倍よりも大きいときには昇順の傾向を持ち、トーナメント規模の２倍程度であるときにはランダムな傾向を持ち、トーナメント規模の２倍よりも小さいときには降順の傾向を持つということで実行されることになる。
【００１９】
ソート処理装置１は、このステップ７で、１ストリングとして並び換えた入力レコードが降順の傾向を持つと判断するとき、すなわち、並び換えの昇順とは反対の傾向を持つと判断するときには、続くステップ８で、演算手段１２が演算処理を実行すべく降順ビットをＯＮにセットしてから保留状態を解除して、ステップ１に戻っていく。一方、このステップ７で、１ストリングとして並び換えた入力レコードが昇順の傾向を持つと判断するとき、すなわち、並び換えの昇順と同じ傾向を持つと判断するときには、そのまま保留状態を解除してステップ１に戻っていく。
【００２０】
一方、ソート処理装置１は、ステップ６の判断で、保留限界に達していないと判断するときには、ステップ９に進んで、降順ビットがＯＮにセットされているか否かを判断して、降順ビットがＯＮにセットされているときには、入力レコードが降順の傾向を持つと見なして、ステップ１０に進んで、キーの否定演算を実行する。
すなわち、図３に示すように、入力レコードのキーの各ビットに否定演算を施すことで、入力レコードのキーの大小関係を反転していくのである。この否定演算処理に従って、入力レコードが降順の傾向を持つ場合には、入力レコードのキーは、見かけ上、昇順の傾向を持つものに変換されることになる。
そして、続くステップ１１で、トーナメント処理を実行して、最も小さなキー値（否定演算を施す前の最も大きなキー値）を持つレコードを優勝レコードとして選択してステップ２に戻っていく。
一方、ステップ９の判断で、降順ビットがＯＮにセットされていないと判断するときには、入力レコードが昇順の傾向を持つと見なして、直ちにステップ１１に進み、トーナメント処理を実行して、最も小さなキー値（本来的な最も小さなキー値）を持つレコードを優勝レコードとして選択してステップ２に戻っていく。
【００２１】
このようにして、トーナメント規模が“４”で、これから入力されてくる入力レコードのキー値が、
“８”→“７”→“６”→“５”→“４”→“３”→“２”→“１”
という完全降順である場合には、キー値の否定演算処理に従って、図３で説明したように、この入力レコードのキー値が、
“７”→“８”→“９”→“１０”→“１１”→“１２”→“１３”→“１４”
と完全昇順に変換されるので、図４に示すように、初期状態として、キー値が“７”，“８”，“９”，“１０”というレコードがトーナメントに参加することになって、先ず最初に、キー値“７”のレコードを選択して、この空きとなったところにキー値“１１”を割り付け、次に、キー値“８”のレコードを選択して、この空きとなったところにキー値“１２”を割り付け、続いて、キー値“９”のレコードを選択して、この空きとなったところにキー値“１３”を割り付け、続いて、キー値“１０”のレコードを選択して、この空きとなったところにキー値“１４”を割り付け、続いて、キー値“１１”のレコードを選択し、続いて、キー値“１２”のレコードを選択し、続いて、キー値“１３”のレコードを選択し、続いて、キー値“１４”のレコードを選択していくことで、
“７”→“８”→“９”→“１０”→“１１”→“１２”→“１３”→“１４”
というキーの昇順のレコードを１ストリングとしてソートする。
【００２２】
このようにして、従来であれば、図５で説明したように、ストリング数が“２”であったものが、本発明では、ストリング数が“１”でもってソートできるようになるのである。
このようにしてソートされたレコード列のキー値は、ステップ３の処理に従って、本来のキー値である
“８”→“７”→“６”→“５”→“４”→“３”→“２”→“１”
に戻されるとともに、ステップ４の処理に従って、Ｉ／Ｏバッファに通常の格納の向きとは逆の下から上へと、
“８”→“７”→“６”→“５”→“４”→“３”→“２”→“１”
の順番でもってブロッキングされていく。これにより、ストリングファイル３に格納されるときには、
“１”→“２”→“３”→“４”→“５”→“６”→“７”→“８”
という本来の順番となるようにセットされることになる。
【００２３】
【発明の効果】
以上説明したように、本発明によれば、トーナメント技法を用いて、入力レコード列を指定されるキーに従って規定順に並び換えるときに、ストリングの長さを長くできるので、後続のマージ処理の負荷が小さくできるようになって効率的なソート処理を実現できるようになるのである。
【図面の簡単な説明】
【図１】本発明の原理構成図である。
【図２】本発明のソート処理装置の実行する処理フローの一実施例である。
【図３】キーに施す否定演算の説明図である。
【図４】本発明の処理の説明図である。
【図５】トーナメント技法の説明図である。
【符号の説明】
１    ソート処理装置
２    入力レコードファイル
３    ストリングファイル
４    出力レコードファイル
１０  トーナメント処理手段
１１  検出手段
１２  演算手段
１３  逆変換手段
１４  マージ処理手段
【図１】
0003549113.tif 000002
【図２】
0003549113.tif 000003
【図３】
0003549113.tif 000004
【図４】
0003549113.tif 000005
【図５】
0003549113.tif 000006