(57)【要約】【課題】  基数ソート毎に発生する読み出しと書き出しデータ量の削減を行う。【解決手段】  本発明は、入力された並び替え対象の整数列を部分ソート列記憶手段に格納し、入力された並び替え対象の整数列の上位Ｋビットを対象として、ソート処理手段から指定された上位Ｋビットのビット位置の出現頻度のヒストグラムを作成し、ヒストグラム記憶手段に格納し、ヒストグラム記憶手段から読み出したヒストグラムに基づいて、上位Ｋビットを並び替えた部分ソート列を部分ソート列記憶手段に格納する処理をM/K（但し、M:整数対象、K:基数ソートを行う単位）回繰り返し、整列済みの整数列を生成する。【選択図】  図４
2012247866.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個からなるM-bit整数列を、基数ソートを用いて並び替えを行う際のデータ量を削減するためのソート時のキー削減方法であって、
ソート処理手段が、入力された並び替え対象の整数列を部分ソート列記憶手段に格納し、
基数ソート実行手段が、入力された並び替え対象の整数列の上位Ｋビットを対象として、前記ソート処理手段から指定された上位Ｋビットのビット位置の出現頻度のヒストグラムを作成し、ヒストグラム記憶手段に格納し、
前記ソート処理手段が、前記ヒストグラム記憶手段から読み出した前記ヒストグラムに基づいて、上位Ｋビットを並び替えた部分ソート列を前記部分ソート列記憶手段に格納する処理をM/K（但し、M:整数対象、K:奇数ソートを行う単位）回繰り返し、整列済みの整数列を生成する
ことを特徴とするソート時のキー削減方法。
【請求項２】
Ｎ個からなるM-bit整数列を、基数ソートを用いて並び替えを行う際のデータ量を削減するためのソート時のキー削減装置であって、
ソート処理手段と、基数ソート実行手段と、を有し、
前記ソート処理手段は、
入力された並び替え対象の整数列を部分ソート列記憶手段に格納する手段と、
前記基数ソート実行手段で作成されたヒストグラムに基づいて、上位Ｋビットを並び替えた部分ソート列を前記部分ソート列記憶手段に格納する処理をM/K（但し、M:整数対象、K:基数ソートを行う単位）回繰り返し、整列済みの整数列を生成する部分ソート列生成手段と、を有し、
基数ソート実行手段は、
入力された並び替え対象の整数列の上位Ｋビットを対象として、前記ソート処理手段から指定された上位Ｋビットのビット位置の出現頻度のヒストグラムを作成し、ヒストグラム記憶手段に格納するヒストグラム作成手段を有することを特徴とするソート時のキー削減装置。
【請求項３】
コンピュータを、
請求項２記載のキー削減装置の各手段として機能させるためのキー削減プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソート時のキー削減方法及び装置及びプログラムに係り、特に、N個からなるM-bit整数列を昇順（もしくは降順）に並び替える処理（ソート）を高速化するために、並び替えながら不必要なデータ量を削減するためのソート時のキー削減方法及び装置及びプログラムに関する。
【背景技術】
【０００２】
任意の順序で並んだ整数列を入力値として、指定された順序で並び替えを行い、結果を出力する。例えば、入力整数列"10, 3, 7, 8, 1, 4, 2"（N=7）がある場合を考える。この入力整数列を昇順で並び替える最も単純な方法は、先頭の整数（10）から値を調べ、整数列から最も小さい値を先頭に移動する（ここでは、1が先頭になる）。先頭の整数列は並び替えが完了しているため、次の並び替え処理は先頭から2番目の整数から同様の処理を行う。この繰り返し処理を7回行うと並び替え処理が完了する。しかし、並び替え処理を行うための『調べる回数』が7!回（計算量はθ(n2)）と非常に多くなるため、古くから非常に多くの並び替え処理の高速化手法が提案されている。
【０００３】
古くから用いられる並び替え手法は様々存在するが、一般的な用途で最も多く用いられるものとしてクイックソートが挙げられる。
【０００４】
具体的な処理方法を図１に示す。
【０００５】
クイックソートでは、まず処理の始めに任意の軸値（図１のグレーのマスの整数値）を決定する。軸値を決定後、その値より小さい整数値を持つ領域と、その値以上の値を持つ整数値の領域に分割する（図１では軸値が6で，｛2,3,5,4｝{6,9,8,7}の2つの領域に分割している）。その後、分割された領域毎に同じ処理を整数の個数が1になるまで繰り返し行い処理を完了する。
【０００６】
しかし、近年のハードウェアの進歩により最も高速な並び替え手法は桁毎に比較処理を行う基数ソートである（例えば、非特許文献１参照）。範囲1〜5の整数値列における基数ソートの具体的な例を図２に示す。基数ソートでは、まず並び替え対象の整数列の出現頻度ヒストグラムを作成する（図２の左上のヒストグラム）。この作成したヒストグラムを参照することで各整数値が、並び替え後の配列における位置を決定することができる。例えば、整数値『1』であれば出現頻度が4であるため、配列番号1〜4に位置付けられ、整数値『2』であれば出現頻度が3であるため、配列番号5〜7（整数値『1』の出現頻度数に1を加えた値が整数値『2』の開始位置になる）に位置付けられる。そのため、このヒストグラムを参照しながら各値が位置づけられる配列に整数値を書き出す処理を行えば並び替えが完了する。
【０００７】
図２の例では範囲1〜5の整数値を例に説明したが、これをM-bitの整数値に適用した場合の具体的な例を図３に示す。M-bitの整数を基数ソートする場合には、上位K-bit単位ずつ図２で説明した並び替え処理を実施する。図３の具体例ではMを16，Kを8として説明を行う。
【０００８】
まずStep1の処理で各整数値の上位8bitのヒストグラムを作成する（ヒストグラムのエントリ数は8bitなので0〜255の256個である）。ヒストグラム作成後は図２の例の具体例と同じように上位8bitが0〜255の256個の領域に分割する。
【０００９】
そして、Step2の処理で、分割された領域毎で同じように下位8bitのヒストグラムを作成し、領域毎に並び替えを実施する。そして最後に同一の配列に書き出せば、整列された整数列が得られる。この例では整列対象（M）が16bit、基数ソートを行う単位（K）が8bitであるため、全体の基数ソート実行回数は16/8（M/K）で2回となる。
【００１０】
本発明はN個からなるM-bit整数列を、基数ソートを用いて並び替えを行う際に発生する課題を取り扱う。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】浅野哲雄，アルゴリズムイントロダクション第1巻（p163-165），近代科学者，2007
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上記従来の技術では、M/K回の基数ソートを実行する際に、各整数値のM/K回の読み出しと、M/K回の書き出し処理が発生する。整数値総数をNとした場合、全体で(（N*M/8）*(M/K))byteの読み出しと書き出しが発生することになる。そのためセンサ情報や、アクセスログデータなど大規模データ内のM個の整数列を並び替える必要がある時、部分的に並び替えられた整数列を書き出す、もしくは次の並び替えのために読み出す（もしくは，書き出す）データ量が非常に大きくなってしまう問題がある。
【００１３】
本発明は、上記の点に鑑みなされたもので、基数ソート毎に発生する読み出しと書き出しデータ量の削減を行うことが可能なソート時のキー削減方法及び装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記の課題を解決するため、本発明は、Ｎ個からなるM-bit整数列を、基数ソートを用いて並び替えを行う際のデータ量を削減するためのソート時のキー削減方法であって、
ソート処理手段が、入力された並び替え対象の整数列を部分ソート列記憶手段に格納し、
基数ソート実行手段が、入力された並び替え対象の整数列の上位Ｋビットを対象として、前記ソート処理手段から指定された上位Ｋビットのビット位置の出現頻度のヒストグラムを作成し、ヒストグラム記憶手段に格納し、
前記ソート処理手段が、前記ヒストグラム記憶手段から読み出した前記ヒストグラムをに基づいて、上位Ｋビットを並び替えた部分ソート列を前記部分ソート列記憶手段に格納する処理をM/K（但し、M:整数対象、K:基数ソートを行う単位）回繰り返し、整列済みの整数列を生成する。
【発明の効果】
【００１５】
上記のように本発明によれば、各領域における並び替え済みの上位d*K-bitを共通化することで並び替え中に発生する読み込み（もしくは，書き込み）整数値のデータ量を削減することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】クイックソートの具体例である。
【図２】基数ソートの具体例である。
【図３】bit単位で行う基数ソートの例である。
【図４】本発明の一実施の形態におけるキー削減装置の構成図である。
【図５】本発明の一実施の形態におけるソート処理部の動作のフローチャートである。
【図６】本発明の一実施の形態における基数ソート実行部の動作のフローチャートである。
【図７】本発明の一実施の形態における図５のＳ５４０の詳細な動作のフローチャートである。
【図８】本発明の一実施の形態における上位ｄ*K-bitが共通化（並び替え済み）された核領域内の整数値データ表現である。
【発明を実施するための形態】
【００１７】
以下図面と共に、本発明の実施の形態を説明する。
【００１８】
図４は、本発明の一実施の形態におけるキー削減装置の構成を示す。
【００１９】
同図に示すキー削減装置１０は、整数列入力装置１、パラメータＫ入力装置２、結果出力装置３に接続されている。
【００２０】
キー削減装置１０は、ソート処理部１１、基数ソート実行部１２、部分ソート列記憶部１３、ヒストグラム記憶部１４から構成される。部分ソート列記憶部１３、ヒストグラム記憶部１４は、ハードディスク装置やメモリ等の記憶媒体である。
【００２１】
上記の構成において、まず、ソート処理部１１は、入力値として整数列入力装置１とパラメータK入力装置２から値を受け取り、入力された並び替え対象の整数列を部分ソート列記憶部１３に記録する。そして、基数ソート実行部１２は、入力された整数列の上位K-bitを対象に上位K-bitの出現頻度のヒストグラムを作成し、ヒストグラム記憶部１４に記録する。そして、ソート処理部１１では、作成されたヒストグラムをもとに上位K-bitを並び替えた部分ソート列を部分ソート列記憶部１３に再度書き出す。この処理をM/K回繰り返すことで、整列済みの整数列を作成し、最終的に結果出力装置３に出力する。
【００２２】
以下に、各処理部の動作を説明する。
【００２３】
ソート処理部１１は、整数列入力装置１から整列対象整数列、パラメータＫ入力装置２からパラメータＫを取得する。入力された整数列を基数ソート実行部１２を利用しながら上位K-bitずつ並び替えを実施する。上位bitを部分的に並び替えられた中間整数列は部分ソート列記憶部１３に記憶しながら並び替えを実施し、整列結果整数列を結果出力装置３に出力する。
【００２４】
基数ソート実行部１２は、ソート処理部１１からヒストグラム作成対象のbit位置が入力され、整数列入力装置１から整数列が入力されると、指定されたbit位置の出現頻度を数え上げ、ヒストグラムを作成し、ヒストグラム記憶部１４に書き出す。
【００２５】
以下に、ソート処理部１１の詳細な動作を説明する。
【００２６】
図５は、本発明の一実施の形態におけるソート処理部の動作のフローチャートである。
【００２７】
ステップ５００）  ソート処理部１１は、パラメータＫ入力装置２から入力があるまで待機し、パラメータＫを設定する。
【００２８】
ステップ５０５）  整数列入力装置２から入力があるまで待機する。
【００２９】
ステップ５１０）  整数列入力装置２からＮ個の整数列が入力されると、当該整数列を部分ソート列記憶部２に記録する。
【００３０】
ステップ５１５）  d（並び替え済み上位ビット）を値1で初期化する。
【００３１】
ステップ５２０）  上位の((d-1)*K)-bitからK-bitを対象に基数ソート実行部１２を実行するため、dとN個の整数列を基数ソート実行部１２に渡すことで処理を実行させる。
【００３２】
ステップ５２５）  基数ソート実行部１２がヒストグラム作成処理を行う（詳細については図６にて後述する）。
【００３３】
ステップ５３０）  基数ソート実行部１２で作成されたヒストグラムをヒストグラム記憶部１４から読み出し、参照することで上位d*K-bitが並び替えられた整数列を生成する。
【００３４】
ステップ５３５）  iを値1で初期化する。
【００３５】
ステップ５４０）  並び替え済み上位ビットを示すdと、並び替え対象整数の総数を取得し、並び替え済みの上位d*K-bitの値を共通化する「上位d*K-bitの共通化処理」を行い、内部の各整数値のデータ量を削減する（図8）。当該処理の詳細は図７にて後述する。
【００３６】
ステップ５４５）  iに1を加算し、ｉ≦２Kになるまでステップ５４０を繰り返す。
【００３７】
ステップ５５０）  ｄに１を加算し、ｄ≦M/Kであればステップ５５５に移行し、d>M/Kであればステップ５２０に戻る。
【００３８】
ステップ５５５）  部分ソート列記憶部１３から整列された結果整数列を読み出し、結果出力装置３に出力する。
【００３９】
次に、基数ソート実行部１２の処理を説明する。
【００４０】
図６は、本発明の一実施の形態における基数ソート実行部の動作のフローチャートである。
【００４１】
ステップ６００）  基数ソート実行部１２は、ソート処理部１１からヒストグラム対象の整数内bit列位置を示すdの値を受け取る。
【００４２】
ステップ６０５）  入力された整数の出現頻度のヒストグラムを作成するために、2K個のエントリを持つヒストグラムを初期化する。
【００４３】
ステップ６１０）  jを値1で初期化する。
【００４４】
ステップ６１５）  j番目の整数列の上位((d-1)*K)-bitからK-bitを抜き出す。
【００４５】
ステップ６２０）  抜き出されたK-bitの値に対応するヒストグラムのカウント値に1を加算する。
【００４６】
ステップ６２５）  ステップ６２０で作成されたヒストグラムをヒストグラム記憶部１４に記録する。
【００４７】
次に、図５のステップ５４０の『上位d*K-bitの共通化処理』について説明する。
【００４８】
図７は、本発明の一実施の形態における図５のＳ５４０の詳細な動作のフローチャートである。
【００４９】
ステップ７００）  ソート処理部１１は、ステップ５２０でソートされた並び替え済み上位ビットを示すdと、並び替え対象整数の総数Aを入力値として受け取る。
【００５０】
ステップ７０５）  共通値である上位(d*K)-bitをメモリの共通化領域内のヘッダに格納する。格納された状態を図８に示す。このとき、整数値はまだ格納されていない状態である。
【００５１】
ステップ７１０）  jを値1で初期化する。
【００５２】
ステップ７１５）  j番目の整数と、先頭に共通値、その後続に共通値を削除した整数が連結されたデータ列を取得し、j番目の整数の上位(d*K)-bitを削除し、連結したデータ列の後続に加える。ｊに１を加算し、ｊ＞Aであれば当該ステップの処理を繰り返し、ｊ≦Aであればステップ７２０に移行する。
【００５３】
ステップ７２０）  連結したデータ列を部分ソート列記憶部１３に記憶する。
【００５４】
上述のように、本発明は、各領域（図３における太枠四角内）における並び替え済みの上位d*K-bitを共通化することで並び替え中に発生する読み込み（もしくは、書き込み）整数値のデータ量を削減することに特徴がある。共通化された上位d*K-bitは、図８に示すように、各部分領域の先頭にあるヘッダに格納する。部分的に並び替えられた整数列を書き出す際には、この削減された整数値を用いて並び替えを実施し、最終的な整列整数値を書き出す際に、ヘッダに格納された共通値を利用して元の値を復元する。このように並び替え済みの値を共通化することで、並び替え済みbit長が大きくなるにつれて、並び替え対象の各整数値のデータ量が削減され、結果としてこれらの値を読み書きするために必要なデータ総量が減少する。
【００５５】
このように、本発明を適用することで、基数ソート毎に発生する読み出しと書き出しデータ量の削減効果が得られる。
【００５６】
入力整数の総数をN，整数のbit長をM，基数ソートを行うbit長をKとする。
【００５７】
1回目の基数ソートで読み込まれるデータ量は(N*M/8)byte、書き出されるデータ量は並び替え済みの上位K-bitを除去した(N*(M-1*K)/8)byteとなる。実際には共通化された（各整数値から除去された）並び替え済みのK-bitを各領域のヘッダに保存するための書き出しデータ量αが存在するが、Nが大きい場合にαは非常に小さくなるため、これ以降では無視して説明を行う。
【００５８】
続けて2回目の基数ソートで読み込まれるデータ量は(N*(M-1*K)/8)byteで、書き出されるデータ量は(N*(M-2*K)/8)byteとなる。そしてM/K回目の書き出し処理で各共通領域のヘッダに存在する値を利用して元値を復元して並び替えを終了する。最終的に読み出しと書き出しのデータ総量は
【００５９】
【数１】
2012247866.tif 000003
となる。
【００６０】
以下に具体的に説明する。
【００６１】
例えば、232個の32bit整数を4bit毎に基数ソートする場合を考える。従来の手法では、この整数列に対して通常の基数ソートを実行する場合、232個の32bit整数全体を8回読み書きする必要があり、その総サイズは128GiBとなる。一方、本発明の場合は、ソート済みのbit列を共通化することで、必要な読み書きの総数が72GiBとなり、結果的に56GiBの節約が可能になる。
【００６２】
なお、図４に示すキー削減装置の構成要素の図５〜７に示す動作をプログラムとして構築し、キー削減装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【００６３】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【００６４】
１  整数列入力装置
２  パラメータＫ入力装置
３  結果出力装置
１０  キー削減装置
１１  ソート処理部
１２  基数ソート実行部
１３  部分ソート列記憶部
１４  ヒストグラム記憶部
【図１】
2012247866.tif 000004
【図２】
2012247866.tif 000005
【図３】
2012247866.tif 000006
【図４】
2012247866.tif 000007
【図５】
2012247866.tif 000008
【図６】
2012247866.tif 000009
【図７】
2012247866.tif 000010
【図８】
2012247866.tif 000011