(57)【要約】【課題】一実施形態は、二分木を用いて複数のデータを分割する場合に比較回数を低減することが可能な技術を提供する。【解決手段】一実施形態に係るプログラムは、複数のデータのそれぞれを分類対象データとして、複数の境界値から作られる二分木の根ノードの境界値に基づいて分類対象データを分類する際に、暫定最大値と、暫定最小値とを特定する処理を情報処理装置に実行させる。暫定最大値は、分類対象データと分類済みのデータとのうちの最大値を表す。暫定最小値は、分類対象データと分類済みのデータとのうちの最小値を表す。プログラムは、暫定最大値及び暫定最小値を更新することで複数のデータの最大値と最小値を特定する処理を情報処理装置に実行させる。プログラムは、複数の境界値のうちで、複数のデータの最大値と最小値の間にある境界値に基づいて複数のデータを分割する処理を情報処理装置に実行させる。【選択図】図１０
2017004128.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータのそれぞれを分類対象データとして、複数の境界値から作られる二分木の根ノードの境界値に基づいて前記分類対象データを分類する際に、前記データから前記分類対象データを読み出し、前記分類対象データと分類済みのデータとのうちの最大値を表す暫定最大値と、前記分類対象データと前記分類済みのデータとのうちの最小値を表す暫定最小値とを特定し、前記暫定最大値及び前記暫定最小値を更新することで前記複数のデータの最大値と最小値を特定し、
前記複数の境界値のうちで、前記複数のデータの最大値と最小値の間にある境界値に基づいて前記複数のデータを分割する、
処理を情報処理装置に実行させるプログラム。
【請求項２】
前記複数のデータの最大値と最小値を特定する処理は、前記根ノードの境界値、前記暫定最大値、及び前記暫定最小値の３つの値の大小関係に従って作られる二分木によって決まる、前記３つの値のうちの２つの値と、前記分類対象データとを比較することで、前記分類対象データを分類するとともに前記暫定最大値及び前記暫定最小値を特定する、ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記複数のデータの最大値と最小値を特定する処理は、前記３つの値の大小関係が小さい方から大きい方に前記暫定最小値、前記暫定最大値、前記根ノードの境界値の順である場合、
前記分類対象データが前記暫定最大値よりも小さければ、前記分類対象データを前記根ノードの境界値よりも小さい群に分類し、且つ、前記分類対象データを前記暫定最小値と比較して、前記暫定最小値よりも小さければ前記暫定最小値を前記分類対象データに更新し、
前記分類対象データが前記暫定最大値よりも大きければ、前記暫定最大値を前記分類対象データに更新し、且つ、前記分類対象データを前記根ノードの境界値と比較して、前記根ノードの境界値よりも大きい群又は前記根ノードの境界値よりも小さい群に分類する、
ことを特徴とする請求項２に記載のプログラム。
【請求項４】
前記複数のデータの最大値と最小値を特定する処理は、前記３つの値の大小関係が小さい方から大きい方に前記根ノードの境界値、前記暫定最小値、前記暫定最大値の順である場合、
前記分類対象データが前記暫定最小値よりも大きければ、前記分類対象データを前記根ノードの境界値よりも大きい群に分類し、且つ、前記分類対象データを前記暫定最大値と比較して、前記暫定最大値よりも大きければ前記暫定最大値を前記分類対象データに更新し、
前記分類対象データが前記暫定最小値よりも小さければ、前記暫定最小値を前記分類対象データに更新し、且つ、前記分類対象データを前記根ノードの境界値と比較して、前記根ノードの境界値よりも大きい群又は前記根ノードの境界値よりも小さい群に分類する、
ことを特徴とする請求項２又は３に記載のプログラム。
【請求項５】
前記複数のデータの最大値と最小値を特定する処理は、前記３つの値の大小関係が小さい方から大きい方に前記暫定最小値、前記根ノードの境界値、前記暫定最大値の順である場合、
前記分類対象データが前記根ノードの境界値よりも小さければ、前記分類対象データを前記根ノードの境界値よりも小さい群に分類し、且つ、前記分類対象データを前記暫定最小値と比較して前記暫定最小値よりも小さければ前記暫定最小値を前記分類対象データに更新し、
前記分類対象データが前記根ノードの境界値よりも大きければ、前記分類対象データを前記根ノードの境界値よりも大きい群に分類し、且つ、前記分類対象データを前記暫定最大値と比較して前記暫定最大値よりも大きければ前記暫定最大値を前記分類対象データに更新する、
ことを特徴とする請求項２から４のいずれか１項に記載のプログラム。
【請求項６】
前記複数の境界値を境に区切られる複数の分割区間のうちで前記暫定最大値が属する分割区間から前記暫定最小値が属する分割区間までに含まれる分割区間の数が、前記複数の分割区間の数に対して所定の割合以上である場合、前記暫定最大値及び前記暫定最小値の特定を停止する、
処理を、更に前記情報処理装置に実行させる請求項１から５のいずれか１項に記載のプログラム。
【請求項７】
複数のデータのそれぞれを分類対象データとして、複数の境界値から作られる二分木の根ノードの境界値に基づいて前記分類対象データを分類する際に、前記データから前記分類対象データを読み出し、前記分類対象データと分類済みのデータとのうちの最大値を表す暫定最大値と、前記分類対象データと前記分類済みのデータとのうちの最小値を表す暫定最小値とを特定し、前記暫定最大値及び前記暫定最小値を更新することで前記複数のデータの最大値と最小値を特定する特定部と、
前記複数の境界値のうちで、前記複数のデータの最大値と最小値の間にある境界値に基づいて前記複数のデータを分割する分割部と、
を含む、情報処理装置。
【請求項８】
複数の情報処理装置を有するシステムであって、
前記複数の情報処理装置の各々が、
複数のデータを分割することで得られた複数のデータ群のうちで処理対象として割り当てられている割当データ群に含まれるデータのそれぞれを分類対象データとして、複数の境界値から作られる二分木の根ノードの境界値に基づいて前記分類対象データを分類する際に、前記データから前記分類対象データを読み出し、前記分類対象データと分類済みのデータとのうちの最大値を表す暫定最大値と、前記分類対象データと前記分類済みのデータとのうちの最小値を表す暫定最小値とを特定し、前記暫定最大値及び前記暫定最小値を更新することで、前記割当データ群に含まれるデータの最大値と最小値を特定する特定部と、
前記複数の境界値のうちで、前記割当データ群に含まれるデータの最大値と最小値の間にある境界値に基づいて前記割当データ群に含まれるデータを分割する分割部とを含む、
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、システム、及びプログラムに関する。
【背景技術】
【０００２】
コンピュータのソフトウェア技術に、例えば、複数のデータを、何らかの順序に従って順番通りに並べ替えるソート処理に関する技術がある。ソート処理は、例えば、数値を大きい順又は小さい順に並べ替える、文字列をアルファベット順や五十音順に並べ替える、及び日時を古い順又は新しい順に並べ替えることを含んでいてよい。
【０００３】
ソート処理を高速化する技術に、１つのソート処理を分割し、複数のプロセッサやプロセッサコアに並列して処理させる並列化がある。例えば、１つのソート処理を複数のプロセッサで並列処理する場合、並べ替えを行う対象の複数のデータを複数のデータ群に分割する。そして、複数のプロセッサのそれぞれにデータ群を割り当てて並べ替えを実行させて、得られた複数の並べ替えの結果を結合することで、高速なソートが可能である。
【０００４】
これに関し、ソート対象データの性質、量に対応させてソート方式を自動選択し、ソート速度を高速化するための技術が知られている。（例えば、特許文献１参照）また、ソートするデータをＮ個のグループに分割し、この分割により、データが少なくなったところで、ソート処理することにより、ソート処理時間を短縮するソート方法を提供するための技術が知られている。（例えば、特許文献２参照）不必要な交換処理をなるべく少なくし，かつ与えられた複数のレコード値を２つに区分するに当ってなるべく均等に区分されるようにするための技術が知られている。（例えば、特許文献３参照）分岐予測ミスの数を大幅に減少させることにより性能向上を図るための技術が知られている。（例えば、特許文献４参照）系列間に跨ったデータの順序を系列を意識しつつ視覚的に捉えやすい表示や印刷物等を得るための技術が知られている。（例えば、特許文献５参照）
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１１６９０７号公報
【特許文献２】特開２０１２−１８５７９１号公報
【特許文献３】特開平５−１４３２８６号公報
【特許文献４】特開２０１４−１０２６１３号公報
【特許文献５】特開２００６−２６８６８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
並列処理のために、ソートの対象となる複数のデータを分割する手法の一例に、二分木を用いて、複数のデータを複数の分割区間に分類する手法がある。この手法では、データを分割する境界となる複数の境界値（ピボット）が決められる。そして、複数の境界値から作成された二分木を、データを用いて探索することで、境界値を境とした複数の分割区間に複数のデータを分類する。例えば、境界値が−５，０，５であるとすると、複数のデータは−５未満、−５以上０未満、０以上５未満、５以上の４つの分割区間に分割されてよい。この場合、境界値で区切られた複数の分割区間の間での大小関係は決まっている。そのため、複数のプロセッサに、各分割区間に含まれるデータを割り当てて並べ替えを実行し、得られた複数の並べ替えの結果を分割区間の大小関係に従って結合することで、高速にソートを完了することができる。しかしながら、近年、取り扱われるデータ量は増加傾向にあり、ソート処理における演算負荷の更なる低減が望まれている。本発明の１つの側面に係る目的は、二分木を用いて複数のデータを分割する場合に比較回数を低減することが可能な技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明の一つの態様のプログラムは、複数のデータのそれぞれを分類対象データとして、複数の境界値から作られる二分木の根ノードの境界値に基づいて分類対象データを分類する際に、暫定最大値と、暫定最小値とを特定する処理を情報処理装置に実行させる。暫定最大値は、分類対象データと分類済みのデータとのうちの最大値を表す。暫定最小値は、分類対象データと分類済みのデータとのうちの最小値を表す。プログラムは、暫定最大値及び暫定最小値を更新することで複数のデータの最大値と最小値を特定する処理を情報処理装置に実行させる。プログラムは、複数の境界値のうちで、複数のデータの最大値と最小値の間にある境界値に基づいて複数のデータを分割する処理を情報処理装置に実行させる。
【発明の効果】
【０００８】
１つの側面によれば、二分木を用いて複数のデータを分割する場合に比較回数を低減することが可能な技術を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】二分木を用いたデータの分割とソート処理について例示する図である。
【図２】二分木を用いた複数の分割区間への複数のデータの分類を例示する図である。
【図３】データに偏りのあるデータベースを例示する図である。
【図４】データの偏りの範囲にある境界値を用いて作成した二分木を例示する図である。
【図５】最大値及び最小値を用いた二分木による分割処理の動作フローと処理の比較回数とを例示する図である。
【図６】実施形態に係る情報処理装置の機能ブロック構成を例示する図である。
【図７】暫定最大値、暫定最小値、及び根ノードの境界値の間の大小関係に従って作られる二分木を例示する図である。
【図８】状態の遷移を例示する図である。
【図９】状態１における根ノードの境界値に基づく分類処理の動作フローを例示する図である。
【図１０】状態２における根ノードの境界値に基づく分類処理の動作フローを例示する図である。
【図１１】状態３における根ノードの境界値に基づく分類処理の動作フローを例示する図である。
【図１２】状態４における根ノードの境界値に基づく分類処理の動作フローを例示する図である。
【図１３】終了確認処理の動作フローを例示する図である。
【図１４】最大値及び最小値を用いる分割完了処理の動作フローを例示する図である。
【図１５】第２の分割完了処理の動作フローを例示する図である。
【図１６】一実施形態に係るシステムのハードウェア構成を例示する図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら、本発明のいくつかの実施形態を説明する。なお、複数の図面において対応する要素には同一の符号を付す。
【００１１】
図１は、二分木を用いたデータの分割と、ソート処理について例示する図である。図１に示す手法では、複数のプロセッサでデータを並列処理するために、ソートを行う対象の複数のデータは複数のデータ群（例えば、図１のデータ群１〜データ群Ｘ）に分割される。この分割は、例えば、分割後の複数のデータ群のそれぞれに含まれるデータの個数がおおよそ均等になるように実行されてよい。続いて、分割後の複数のデータ群は、複数のプロセッサのいずれかに割り当てられる。そして、各プロセッサは、割り当てられたデータ群に含まれるデータを用いて、例えば、予め設定されている複数の境界値から作られた二分木を探索する。それにより、各プロセッサは、割り当てられたデータ群に含まれるデータを、複数の境界値を境とする複数の分割区間（例えば、図１の分割区間１〜分割区間ｎ）に分類し、データ群に含まれる複数のデータを分割する。なお、分割において用いられる複数の境界値は、様々な手法で決められていてよく、例えば、複数の境界値は、分割対象の複数のデータをサンプリングして得られた分布に基づいて決められ、設定されていてよい。
【００１２】
図２は、二分木を用いた複数の分割区間への複数のデータの分割を例示する図である。図２の例では、境界値として、１２８、２５６、３８４、５１２、６４０、７６８、及び８９６の７つの値が設定されており、これらの７つの境界値から作られる二分木が示されている。境界値は二分木においてノード（節）２０として用いられる。また、以下の説明では、或るノード２０の左側又は右側の枝２５に配置されるノードを、そのノードの子ノードと呼ぶことがある。また、子ノードを有するノード２０を、その子ノードに対する親ノードと呼ぶことがある。また、二分木は、例えば、左側の子ノード＜親ノード≦右側の子ノード（又は左側の子ノード≦親ノード＜右側の子ノード）という大小関係を満たす様に木構造が生成されてよい。二分木において親ノードを持たない最上位のノード２０は根ノード２１であり、例えば、図２では境界値：５１２は根ノード２１である。また、二分木において子ノードを持たない末端のノード２０は葉ノード２２であり、例えば、図２では境界値：１２８，３８４，６４０，８９６は葉ノード２２である。
【００１３】
続いて、二分木を用いた複数の分割区間への複数のデータの分割について説明する。上述のように、二分木を用いた分割では、複数のデータのそれぞれは、二分木に含まれる境界値を境とした複数の分割区間（例えば、図２の分割区間１〜分割区間８）のいずれかに分類され、それによって、複数のデータの分割が行われる。例えば、複数のデータとしてデータ値：２３０，３２，５０，３４０，５９０，５５０，８５０，９３２があるものとする。例えば、データ値：２３０を用いて図２の二分木を探索する場合、データ値：２３０は、まず根ノード２１である境界値：５１２と比較される。データ値：２３０は境界値：５１２よりも小さいため、左側の枝２５へと分類され、次にデータ値：２３０は境界値：２５６と比較される。データ値：２３０は境界値：２５６よりも小さいため、左側の枝２５へと分類され、次にデータ値：２３０は境界値：１２８と比較される。データ値：２３０は境界値：１２８よりも大きいため、右側の枝２５へと分類される。ここで、境界値：１２８は、葉ノード２２であるので探索は終了し、データ値：２３０は、境界値：１２８と、境界値：２５６との間の分割区間２に分類される。複数のデータに含まれる残りのデータ値：３２，５０，３４０，５９０，５５０，８５０，９３２についても、同様に、根ノード２１から葉ノード２２へと順に二分木を探索することで、分割区間１〜分割区間８のいずれかの区間に分類することができる。その結果、図２に示す様に分割されたデータを得ることができる。
【００１４】
そして、例えば、以上のようにして二分木を探索することで、図１のデータ群１〜データ群Ｘのそれぞれから分割されたデータを取得し、分割区間毎にまとめると、複数のデータが分割区間１〜分割区間ｎのいずれかに分類された分割データを得ることができる。この場合、境界値で区切られた複数の分割区間の間での大小関係は決まっている。そのため、複数のプロセッサに、各分割区間に含まれるデータを割り当てて並べ替えを実行し、得られた複数の並べ替えの結果を分割区間の大小関係に従って結合することで、高速にソートを完了することができる。しかしながら、近年、取り扱われるデータ量は増加傾向にあり、ソート処理における演算負荷の更なる低減が望まれている。
【００１５】
ここで、二分木による分割の演算量を低減するために、例えば、分割する対象のデータ群内のデータの偏りを利用することが考えられる。データの偏りは、例えば、或るデータ群内のデータを並べた場合に、並びの或る区間においてデータの大きさが或る範囲に偏っていることであってよい。
【００１６】
図３は、データに偏りのあるデータベースを例示する図であり、商品の売上データベース３００が示されている。図３の売上データベース３００には、商品を識別するための識別子である商品番号と、商品番号で識別される商品が販売された販売日時と、その販売の個数とが対応づけられて、販売日時の順に並べられて登録されている。そして、例えば、販売する商品が季節ごとに入れ替えられる場合、冬場の販売日時では冬に販売される商品の商品番号が並び、夏場の販売日時では夏に販売される商品の商品番号が並ぶというように、商品番号の並びに偏りが生じることがある。そして、例えば、図３の売上データベース３００の商品番号をデータとして、上段から順に所定の数ずつに分割し、複数のデータ群を得たとする。この場合、例えば、得られた複数のデータ群の或るデータ群には、冬場の商品の商品番号しか含まれておらず、一方、別のデータ群には、夏場の商品の商品番号しか含まれていないといったことが起こり得る。
【００１７】
ここで、例えば、或るデータ群に夏場の商品の商品番号しか含まれていないものとし、また、夏場の商品の商品番号には２５１〜６００の間の数字が割り当てられているものとする。この場合、そのデータ群に含まれる商品番号は２５１〜６００の間の値に偏っている。そして、このデータ群に含まれるデータを、例えば図２に示す境界値を境に分類するものとすると、商品番号の偏りの範囲：２５１〜６００から、データの分類先は分割区間２〜５のいずれかであり、分割区間１、及び分割区間６〜８には分類されないことが分かる。そのため、例えば、データの偏りの範囲：２５１〜６００にある境界値：２５６、３８４、５１２を用いて作成された二分木（例えば、図４）を用いて分割を行えば、データの分類先の分割区間を特定することが可能である。この様に、データ群に含まれるデータが或る範囲に偏っていることが分かれば、予め設定されている全ての境界値から作成された二分木により分割を行わなくてもよく、例えば、偏りの範囲内の境界値から作成された二分木を用いて分割を行うことができる。従って、分割にかかる比較回数を減らすことが可能である。なお、偏りのあるデータ群の例としては、他にも、既にソート済みのデータ群などが挙げられる。
【００１８】
データ群に含まれるデータの偏りの範囲は、例えば、データ群に含まれるデータの最大値と最小値とから特定できる。そこで、例えば、データ群に含まれるデータに二分木による分割を実行する前に、データ群に含まれるデータの最大値と最小値とを特定することが考えられる。
【００１９】
図５は、データ群に含まれるデータの最大値及び最小値を用いた二分木による分割処理の動作フローと、処理の比較回数とを例示する図である。情報処理装置は、例えば、分割の実行を指示する情報が入力されると、図５の動作フローを開始してよい。
【００２０】
ステップ５０１（以降、ステップを“Ｓ”と記載し、例えば、Ｓ５０１と表記する）において情報処理装置は、分割する対象のデータ群に含まれるデータの最大値を特定する。最大値の特定は、例えば、以下のように実行されてよい。まず、予め最大値に所定の初期値を設定しておく。そして、情報処理装置は、最大値と、データ群から読み出したデータとを比較し、最大値に設定されている値よりも読み出したデータの方が大きい場合、最大値を読み出したデータの値に更新する。この処理を、データ群に含まれる全てのデータに対して実行することで、情報処理装置は、データ群のデータの最大値を特定することができる。この場合、最大値の特定にかかる比較回数は、データ群に含まれるデータの個数である“ｍ”回と見積もられてよく、最大値の特定にデータ当たり１回の比較が行われる。Ｓ５０２において情報処理装置は、分割する対象のデータ群に含まれるデータの最小値を特定する。最小値の特定にかかる比較回数も、例えば“ｍ”回と見積もられてよく、データ当たりに１回の比較が行われる。
【００２１】
Ｓ５０３において情報処理装置は、予め設定されている複数の境界値で区切られる複数の分割区間のうちから、最大値が属する分割区間を特定する。情報処理装置は、例えば、設定されている複数の境界値から作成された二分木を、最大値として特定された値を用いて探索することで、最大値が属する分割区間を特定してよい。この場合、最大値が属する分割区間の特定にかかる比較回数は“ｌｏｇ２ｎ”と見積もられてよく、ｎは予め設定されている複数の境界値で区切られる複数の分割区間の数以上の値で、２のべき乗となる値であってよい。Ｓ５０４において情報処理装置は、予め設定されている複数の境界値で区切られる複数の分割区間のうちから最小値が属する分割区間を特定する。最小値が属する分割区間の特定にかかる比較回数も、“ｌｏｇ２ｎ”と見積もられてよい。Ｓ５０５において情報処理装置は、設定されている複数の境界値のうちで、最大値と最小値との間にある境界値を用いて二分木を作成する。そして、情報処理装置は、作成された二分木を用いてデータ群に含まれるデータを分割区間へと分割し、本動作フローは終了する。なお、Ｓ５０５の分割処理の比較回数は“ｍ×ｌｏｇ２ｎ’”と見積もられてよく、“ｎ’”は最大値が属する分割区間から最小値が属する分割区間までの分割区間の数以上の値で、２のべき乗となる値であってよい。
【００２２】
例えば、以上の図５の動作フローを実行することで、データ群に含まれるデータの偏りを最大値と最小値とから特定し、二分木による分割を行うことができる。そして、例えば、データ群に含まれるデータに偏りがあれば、上述のように分割処理に用いる二分木のサイズを小さくすることができるため、比較回数を削減できる可能性がある。しかしながら、最大値と最小値とを求めた結果、例えば、データが複数の分割区間の全体に散っていた場合、二分木のサイズは小さくならず、比較回数は削減されない。また、この場合、最大値と最小値とを求めるために比較を行っているため、計算量が増加してしまう。例えば、データ群に含まれるデータを、境界値によって区切られる１０２４の分割区間へと分類する場合、ｌｏｇ２１０２４＝１０であるため、二分木を辿ってデータ当たりに１０回の比較を行えば、データをいずれかの分割区間に分類することができる。しかしながら、図５の例では、データ当たりに最大値の特定に１回と最小値の特定に１回の計２回の比較を行っているため、データ群に含まれるデータに偏りが無い場合、処理が２割も増加してしまうことになる。そのため、或るデータ群に含まれるデータの最大値及び最小値の特定と、データ群に含まれるデータの二分木による分割とにかかる比較回数を削減することのできる技術が望まれている。
【００２３】
以下で述べる実施形態では、データ群に含まれるデータを二分木の根ノード２１の境界値に基づいて分類する処理に、データ群に含まれるデータの最大値と最小値を特定するための処理が組み合わせられる。そのため、根ノード２１の境界値を境としたデータ群に含まれるデータの分類と、データ群に含まれるデータの最大値及び最小値の特定とにかかる比較回数を削減することができる。なお、以下で述べる実施形態において、二分木は、例えば、左側の子ノード＜親ノード≦右側の子ノードという大小関係を満たす様に木構造が生成されてよい。しかしながら、実施形態で用いられる二分木の構造は、これに限定されるものではなく、その他の二分木が用いられてもよい。例えば、別の実施形態においては、二分木は、左側の子ノード≦親ノード＜右側の子ノード、左側の子ノード＞親ノード≧右側の子ノード、又は左側の子ノード≧親ノード＞右側の子ノードなどの大小関係を満たす様に木構造が生成されてもよい。また、以下では、この様な大小関係を満たす二分木を二分探索木と呼ぶことがある。
【００２４】
＜実施形態＞
図６は、実施形態に係る情報処理装置６０の機能ブロック構成を例示する図である。情報処理装置６０は、例えば、データベースシステムが動作可能なコンピュータであってよい。情報処理装置６０は、例えば、制御部６００及び記憶部６１０を含んでいる。制御部６００は、記憶部６１０を含む情報処理装置６０の各部を制御してよい。また、制御部６００は、例えば、特定部６０１、分割部６０２などの機能部を含んでいる。情報処理装置６０の制御部６００は、例えば、記憶部６１０を利用してプログラムを読み出して実行することで特定部６０１、及び分割部６０２などの機能部として機能してよい。なお、これらの機能部の詳細については後述する。
【００２５】
上述のように、図５の例では、或るデータ群に含まれるデータの最大値と最小値とを特定する場合、データ群に含まれるデータ当たりに２回の比較を行っている。また、二分木の根ノード２１の境界値を境としたデータ群に含まれるデータの分類は、例えば、データ群に含まれるそれぞれのデータを根ノード２１の境界値と比較して、根ノード２１の境界値以上の群と、未満の群とに分類することで実行することができる。この場合、二分木の根ノード２１の境界値を境とした分類では、データ当たりに１回の比較が行われる。従って、例えば、データ群に含まれるデータの最大値及び最小値の特定と、根ノード２１の境界値を境とした分類とを個別に実行すると、データ当たりに３回の比較を行うことになる。しかしながら、二分木の根ノード２１の境界値を境としたデータ群に含まれるデータの分類に、データ群に含まれるデータの最大値と最小値を特定するための処理を組み合わせると、以下で述べるように比較回数を削減することが可能である。
【００２６】
例えば、或るデータ群に含まれるデータのそれぞれを分類対象のデータとして、根ノード２１の境界値を境に分類する際、暫定最大値と、暫定最小値とを特定することを考える。ここで、暫定最大値は、例えば、分類対象のデータと既に分類済みのデータとのうちでの最大値を表す。また、暫定最小値は、例えば、分類対象のデータと既に分類済みのデータとのうちでの最小値を表す。この場合に、暫定最大値、暫定最小値、及び根ノード２１の境界値の３つの値の大小関係が分かれば、３つの値の大小関係に従って作られる二分木（例えば、二分探索木）を用いて、分類対象のデータと３つの値のそれぞれとの大小関係を２回の比較で特定できる。以下に例を示す。
【００２７】
まず、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係は、例えば以下の４通りで示すことができる。
（状態１）データを一つも処理していない初期状態。暫定最大値、暫定最小値は未定義。根ノード２１の境界値は定義されている。
（状態２）暫定最小値  ≦  暫定最大値  ＜  根ノード２１の境界値
（状態３）根ノード２１の境界値  ≦  暫定最小値  ≦  暫定最大値
（状態４）暫定最小値  ＜  根ノード２１の境界値  ≦  暫定最大値
【００２８】
また、図７は、暫定最大値、暫定最小値、及び根ノード２１の境界値の３つの値の大小関係に従って作られる二分木を例示する図である。図７（ａ）は状態２、図７（ｂ）は状態３、及び図７（ｃ）は状態４における暫定最大値、暫定最小値、及び根ノード２１の境界値の二分木を表している。そして、制御部６００は、状態が分かれば、状態に応じた大小関係に従って作られる二分木を探索することで、暫定最大値、暫定最小値、及び根ノード２１の境界値のそれぞれと、分類の対象のデータとの大小関係を２回の比較で特定することができる。
【００２９】
また、以上の４通りの状態は、データ群から読み出した分類対象のデータを処理するたびに遷移する可能性があるが、その遷移は図８に示す仕方で遷移する。図８は、状態の遷移を例示する図である。以下、図７及び図８を参照して、状態の遷移と、根ノード２１の境界値を境としたデータの分類並びに暫定最大値及び暫定最小値の特定の処理について例示する。
【００３０】
まず、分割対象のデータ群に含まれるデータを一つも処理していない初期状態では状態は状態１にある（図８）。この場合、最大値及び最小値は未定義の状態であり、二分木の根ノード２１の境界値の値は定義されている。状態１において、制御部６００は、データ群からデータを１つ読み出し、読み出したデータを根ノード２１の境界値と比較する。データが、例えば根ノード２１の境界値未満である場合、状態は状態１から状態２へと遷移する。一方、データが、例えば境界値以上である場合、状態は状態１から状態３へと遷移する。なお、状態２及び状態３のいずれに遷移する場合においても、制御部６００は、データの値を暫定最大値と暫定最小値との両方に設定する。
【００３１】
状態が状態２にある場合、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係に従って作成される二分木は、例えば図７（ａ）の二分木となる。そのため、状態２において、制御部６００は、データ群から次のデータを読み出し、読み出したデータを、まず、図７（ａ）の二分木の根ノードに当たる暫定最大値と比較する。ここで、データが、例えば暫定最大値未満である場合、データは根ノード２１の境界値よりも小さいことになる。そのため、制御部６００は、データを根ノード２１の境界値と比較しなくても、データを根ノード２１の境界値未満の群に分類することができる。続いて、制御部６００は、データを、図７（ａ）の左側の枝のノードである暫定最小値と比較し、データが暫定最小値よりも小さければ、暫定最小値をデータの値に更新する。一方、分類対象のデータが暫定最小値以上であれば、暫定最小値は現在の値のまま維持される。
【００３２】
また、状態２において、データが、例えば暫定最大値以上である場合、制御部６００は、暫定最大値をデータの値に更新する。また、データが暫定最大値よりも大きい場合、データは暫定最小値とはならないため、制御部６００は、データと暫定最小値との比較を省くことができる。続いて、制御部６００は、データを、図７（ａ）の右側の枝のノードである根ノード２１の境界値と比較する。そして、制御部６００は、データが境界値よりも小さければ、データを境界値未満の群に分類する。一方、制御部６００は、データが根ノード２１の境界値以上であれば、データを根ノード２１の境界値以上の群に分類する。なお、状態２において、データが根ノード２１の境界値以上の群に分類された場合、状態は図８に示す様に状態２から状態４に遷移する。また、状態２において、データが根ノード２１の境界値未満の群に分類される場合、状態は図８に示す様に状態２のまま維持される。この場合、制御部６００は、データ群から次のデータを読み出し、読み出されたデータを分類対象として以上の状態２における処理を繰り返してよい。
【００３３】
また、状態が状態３にある場合、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係に従って作成される二分木は、例えば図７（ｂ）の二分木となる。そのため、状態３において、制御部６００は、データ群から次のデータを読み出し、読み出されたデータを、まず、図７（ｂ）の二分木の根ノードに当たる暫定最小値と比較する。ここで、データが、例えば暫定最小値以上である場合、データは根ノード２１の境界値以上の値を有することになる。そのため、制御部６００は、データを、根ノード２１の境界値と比較しなくても、根ノード２１の境界値以上の群に分類することができる。続いて、制御部６００は、分類対象のデータを、図７（ｂ）の右側の枝のノードである暫定最大値と比較し、データが暫定最大値よりも大きければ暫定最大値をデータの値に更新する。一方、制御部６００は、データが、暫定最大値以下であれば暫定最大値を現在の値のまま維持する。
【００３４】
また、状態３において、データが、例えば暫定最小値未満である場合、制御部６００は、暫定最小値をデータの値に更新する。また、データが暫定最小値未満である場合、データは暫定最大値とはならないため、制御部６００は、データと暫定最大値との比較を省くことができる。続いて、制御部６００は、データを、図７（ｂ）の左側の枝のノードである根ノード２１の境界値と比較する。そして、制御部６００は、データが根ノード２１の境界値以上であれば、データを根ノード２１の境界値以上の群に分類する。一方、制御部６００は、データが根ノード２１の境界値未満であれば、データを境界値未満の群に分類する。なお、状態３において、データが根ノード２１の境界値未満の群に分類された場合、状態は図８に示す様に状態３から状態４に遷移する。また、状態３において、データが根ノード２１の境界値以上の群に分類される場合には、状態は図８に示す様に状態３のまま維持される。この場合、制御部６００は、データ群から次のデータを読み出し、読み出されたデータを分類対象として以上の状態３における処理を繰り返してよい。
【００３５】
状態が状態４にある場合、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係に従って作成される二分木は、図７（ｃ）の二分木となる。そのため、制御部６００は、データ群から次のデータを読み出し、読み出されたデータを、図７（ｃ）の二分木の根ノードに当たる根ノード２１の境界値と比較する。そして、制御部６００は、データが、例えば根ノード２１の境界値以上である場合、データを根ノード２１の境界値以上の群に分類する。また、状態４では、データが根ノード２１の境界値以上である場合、データは暫定最小値とはならないため、制御部６００は、データと暫定最小値との比較を省くことができる。続いて、制御部６００は、データを、図７（ｃ）の右側の枝のノードである暫定最大値と比較し、データが暫定最大値よりも大きければ、暫定最大値をデータの値に更新する。一方、制御部６００は、データが、暫定最大値以下であれば暫定最大値を現在の値のまま維持する。
【００３６】
また、制御部６００は、データが、例えば根ノード２１の境界値未満である場合、データを根ノード２１の境界値未満の群に分類する。また、状態４では、データが根ノード２１の境界値未満である場合、データは暫定最大値とはならないため、制御部６００は、データと暫定最大値との比較を省くことができる。続いて、制御部６００は、データを、図７（ｃ）の左側の枝のノードである暫定最小値と比較し、データが暫定最小値よりも小さければ暫定最小値をデータの値に更新する。一方、制御部６００は、データが、暫定最小値以上であれば暫定最小値を現在の値のまま維持する。なお、状態は状態４に移行した以降は、図８に示す様に状態４のまま維持され、制御部６００は、データ群から次のデータを読み出し、読み出されたデータを分類対象として以上の状態４における処理を繰り返してよい。
【００３７】
以上で述べたように、制御部６００は、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係によって決まる二分木に基づいて、暫定最大値、暫定最小値、及び根ノード２１の境界値の３つの値のうちの２つの値を分類対象のデータと比較する。それにより、制御部６００は、暫定最大値、暫定最小値、及び根ノード２１の境界値のそれぞれと、データとの大小関係を２回の比較で特定することができる。そして、上述の状態に応じた処理によりデータ群内の全てのデータの分類を行い、暫定最大値及び暫定最小値を更新した場合、暫定最大値はデータ群内のデータの最大値を表す値となり、また、暫定最小値はデータ群内のデータの最小値を表す値となる。従って、制御部６００は、根ノード２１の境界値を境にデータ群内のデータを分類するとともに、データ群内のデータの最大値と最小値とを特定することができる。従って、制御部６００は、根ノード２１の境界値を境としたデータ群に含まれるデータの分類と、データ群に含まれるデータの最大値及び最小値の特定とにかかる比較回数を削減することができる。
【００３８】
また、状態の遷移は、それぞれの状態において根ノード２１の境界値とデータとの間で特定された大小関係から特定することができる。そのため、制御部６００は、例えば、暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係を別途の比較を行って特定しなくても、状態の遷移が起こるか否かを特定することができる。そして、例えば、状態の遷移が起こる場合に、実行する動作フローをジャンプ命令などにより変更することで、状態を示す情報を記憶部６１０などに保持しなくても、状態に合わせて実行する処理を変更することができる。
【００３９】
以下、図９から図１２を参照して、以上で述べた状態１から状態４の各状態における実施形態に係る根ノード２１の境界値に基づく分類処理の動作フローを説明する。図９は、状態１における根ノード２１の境界値に基づく分類処理の動作フローを例示する図である。一実施形態においては、制御部６００は、予め設定されている複数の境界値を境としたデータ群の分割を指示する情報が入力されると、図９の動作フローを開始してよい。
【００４０】
Ｓ９０１において、制御部６００は、変数ｎ＿Ｓ及び変数ｎ＿Ｌの値を“０”に初期化する。なお、変数ｎ＿Ｓ及び変数ｎ＿Ｌについての詳細は後述する。Ｓ９０２において制御部６００は、分割を行う対象のデータ群から１つデータを読み出し、そのデータを暫定最大値、暫定最小値、及び変数ｖａｌに設定する。なお、変数ｖａｌは、分類対象のデータを格納する変数として用いられる。Ｓ９０３において制御部６００は、変数ｖａｌを、分割処理に対して予め設定されている複数の境界値を用いて作成された二分木の根ノード２１の境界値と比較する。なお、二分木の探索では、根ノード２１から葉ノード２２までの枝の長さが短いほど比較回数が減るため、例えば、根ノード２１の境界値は分割に用いられる境界値を大きさ順に並べた場合に、並びにおいて真中に近い境界値であることが好ましい。
【００４１】
Ｓ９０３において変数ｖａｌが根ノード２１の境界値よりも小さい場合（Ｓ９０３がＹｅｓ）、フローはＳ９０４へと進む。Ｓ９０４において制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］（例えば、ここでは変数ｎ＿Ｓ＝１となるため、配列変数Ｓ［１］）に変数ｖａｌの値を設定し、フローは状態２の動作フローに進む。一方、Ｓ９０３において変数ｖａｌが根ノード２１の境界値以上である場合（Ｓ９０３がＮｏ）、フローはＳ９０５へと進む。Ｓ９０５において制御部６００は、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］（例えば、ここでは変数ｎ＿Ｌ＝１となるため、配列変数Ｌ［１］）に変数ｖａｌの値を設定し、フローは状態３の動作フローへと進む。
【００４２】
なお、以上の図９及び後述する図１０〜図１２の動作フローにおいて、変数ｎ＿Ｓは、分割対象のデータ群に含まれるデータのうちで、根ノード２１の境界値よりも小さい値を有するデータの数をカウントするための変数である。また、配列変数Ｓは、分割対象のデータ群に含まれるデータのうちで、根ノード２１の境界値よりも小さい値を有するデータが格納される配列変数である。例えば、配列変数Ｓ［ｎ＿Ｓ］は、ｎ＿Ｓ番目に根ノード２１の境界値よりも小さい群に分類されたデータの値を格納するために用いられる。また同様に、変数ｎ＿Ｌは、分割対象のデータ群に含まれるデータのうちで、根ノード２１の境界値以上の値を有するデータの数をカウントするための変数である。配列変数Ｌは、分割対象のデータ群に含まれるデータのうちで、根ノード２１の境界値以上の値を有するデータが格納される変数である。例えば、配列変数Ｌ［ｎ＿Ｌ］は、ｎ＿Ｌ番目に根ノード２１の境界値以上の群に分類されたデータの値を格納するために用いられる。
【００４３】
図１０は、状態２における根ノード２１の境界値に基づく分類処理の動作フローを例示する図である。一実施形態においては、制御部６００は図９のＳ９０４の処理の実行が完了すると、図１０の動作フローを開始してよい。
【００４４】
Ｓ１００１において制御部６００は、終了確認処理を実行する。終了確認処理の詳細については図１３を参照して後述する。終了確認処理を実行した結果、処理が終了していない場合、フローはＳ１００２へと進む。Ｓ１００２において制御部６００は、分割を行う対象のデータ群から、次のデータを読み出して変数ｖａｌに設定する。Ｓ１００３において制御部６００は、変数ｖａｌが暫定最大値に設定されている値以下であるか否かを判定する。変数ｖａｌが暫定最大値に設定されている値以下である場合（Ｓ１００３がＹｅｓ）、フローはＳ１００４へと進む。Ｓ１００４において制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］に変数ｖａｌの値を設定する。Ｓ１００５において制御部６００は、変数ｖａｌが暫定最小値に設定されている値よりも小さいか否かを判定する。変数ｖａｌが暫定最小値に設定されている値以上である場合（Ｓ１００５がＮｏ）、フローはＳ１００１へと戻る。一方、変数ｖａｌが暫定最小値に設定されている値よりも小さい場合（Ｓ１００５がＹｅｓ）、フローはＳ１００６へと進む。Ｓ１００６において制御部６００は、暫定最小値を変数ｖａｌに設定されている値に更新し、フローはＳ１００１へと戻る。
【００４５】
また、Ｓ１００３において、変数ｖａｌが暫定最大値に設定されている値よりも大きい場合（Ｓ１００３がＮｏ）、フローはＳ１００７へと進む。Ｓ１００７において制御部６００は、暫定最大値を変数ｖａｌに設定されている値に更新し、フローはＳ１００８へと進む。Ｓ１００８において制御部６００は、変数ｖａｌが根ノード２１の境界値よりも小さいか否かを判定する。変数ｖａｌが根ノード２１の境界値よりも小さい場合（Ｓ１００８がＹｅｓ）、フローはＳ１００９へと進む。Ｓ１００９において制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］に変数ｖａｌの値を設定して、フローはＳ１００１へと戻る。一方、Ｓ１００８において変数ｖａｌが根ノード２１の境界値以上である場合（Ｓ１００８がＮｏ）、フローはＳ１０１０へと進む。Ｓ１０１０において制御部６００は、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］に変数ｖａｌの値を設定して、フローを状態４の動作フローへと進める。
【００４６】
図１１は、状態３における根ノード２１の境界値に基づく分類処理の動作フローを例示する図である。一実施形態においては、制御部６００は図９のＳ９０５の処理の実行が完了すると、図１１の動作フローを開始してよい。
【００４７】
Ｓ１１０１において制御部６００は、終了確認処理を実行する。終了確認処理の詳細については図１３を参照して後述する。続いて、Ｓ１１０２において制御部６００は、分割を行う対象のデータ群から、次のデータを読み出して変数ｖａｌに設定する。Ｓ１１０３において制御部６００は、変数ｖａｌが暫定最小値に設定されている値以上であるか否かを判定する。変数ｖａｌが暫定最小値に設定されている値以上である場合（Ｓ１１０３がＹｅｓ）、フローはＳ１１０４へと進む。Ｓ１１０４において制御部６００は、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］に変数ｖａｌの値を設定する。Ｓ１１０５において制御部６００は、変数ｖａｌが暫定最大値に設定されている値よりも大きいか否かを判定する。変数ｖａｌが暫定最大値に設定されている値以下である場合（Ｓ１１０５がＮｏ）、フローはＳ１１０１へと戻る。一方、変数ｖａｌが暫定最大値に設定されている値よりも大きい場合（Ｓ１１０５がＹｅｓ）、フローはＳ１１０６へと進む。Ｓ１１０６において制御部６００は、暫定最大値を変数ｖａｌに設定されている値に更新し、フローはＳ１１０１へと戻る。
【００４８】
また、Ｓ１１０３において、変数ｖａｌが暫定最小値に設定されている値未満である場合（Ｓ１１０３がＮｏ）、フローはＳ１１０７へと進む。Ｓ１１０７において制御部６００は、暫定最小値を変数ｖａｌに設定されている値に更新し、フローはＳ１１０８へと進む。Ｓ１１０８において制御部６００は、変数ｖａｌが根ノード２１の境界値以上であるか否かを判定する。変数ｖａｌが根ノード２１の境界値以上である場合（Ｓ１１０８がＹｅｓ）、フローはＳ１１０９へと進む。Ｓ１１０９において制御部６００は、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］に変数ｖａｌの値を設定して、フローはＳ１１０１へと戻る。一方、Ｓ１１０８において変数ｖａｌが根ノード２１の境界値未満である場合（Ｓ１１０８がＮｏ）、フローはＳ１１１０へと進む。Ｓ１１１０において制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］に変数ｖａｌの値を設定して、フローを状態４の動作フローへと進める。
【００４９】
図１２は、状態４における根ノード２１の境界値に基づく分類処理の動作フローを例示する図である。一実施形態においては、制御部６００は図１０のＳ１０１０又は図１１のＳ１１１０の処理を実行が完了すると、図１２の動作フローを開始してよい。
【００５０】
Ｓ１２０１において制御部６００は、終了確認処理を実行する。終了確認処理の詳細については図１３を参照して後述する。終了確認処理を実行した結果、処理が終了しない場合、フローはＳ１２０２へと進む。Ｓ１２０２において制御部６００は、分割を行う対象のデータ群から、次のデータを読み出して変数ｖａｌに設定する。Ｓ１２０３において制御部６００は、変数ｖａｌが根ノード２１の境界値未満であるか否かを判定する。変数ｖａｌが根ノード２１の境界値未満である場合（Ｓ１２０３がＹｅｓ）、フローはＳ１２０４へと進む。Ｓ１２０４において制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］に変数ｖａｌの値を設定する。Ｓ１２０５において制御部６００は、変数ｖａｌが暫定最小値に設定されている値未満であるか否かを判定する。変数ｖａｌが暫定最小値に設定されている値以上である場合（Ｓ１２０５がＮｏ）、フローはＳ１２０１へと戻る。一方、変数ｖａｌが暫定最小値に設定されている値未満である場合（Ｓ１２０５がＹｅｓ）、フローはＳ１２０６へと進む。Ｓ１２０６において制御部６００は、暫定最小値を変数ｖａｌに設定されている値に更新し、フローはＳ１２０１へと戻る。
【００５１】
一方、Ｓ１２０３において、変数ｖａｌが根ノード２１の境界値以上である場合（Ｓ１２０３がＮｏ）、フローはＳ１２０７へと進む。Ｓ１２０７において制御部６００は、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］に変数ｖａｌの値を設定する。Ｓ１２０８において制御部６００は、変数ｖａｌが暫定最大値よりも大きいか否かを判定する。変数ｖａｌが暫定最大値以下である場合（Ｓ１２０８がＮｏ）、フローはＳ１２０１へと戻る。一方、変数ｖａｌが暫定最大値よりも大きい場合（Ｓ１２０８がＹｅｓ）、フローはＳ１２０９へと進む。Ｓ１２０９において制御部６００は、暫定最大値を変数ｖａｌに設定されている値に更新し、フローはＳ１２０１へと戻る。
【００５２】
以上で述べたように、制御部６００は、図９から図１２の動作フローのいずれかを状態に応じて実行することで、例えば、分割する対象のデータ群から読み出したデータが、根ノード２１の境界値以上である場合には、そのデータを配列変数Ｌに格納する。また、制御部６００は、例えば、分割する対象のデータ群から読み出したデータが、根ノード２１の境界値未満である場合には、そのデータを配列変数Ｓに格納する。それにより、制御部６００は、分割する対象のデータ群に含まれるデータを、根ノード２１の境界値以上の値を有する配列変数Ｌに格納されたデータ群と、根ノード２１の境界値未満の値を有する配列変数Ｓに格納されたデータ群とに分類する。また更に、制御部６００は、例えば、分割する対象のデータ群から読み出したデータが、暫定最大値よりも大きい場合には、暫定最大値を読み出したデータの値に更新する。制御部６００は、例えば、分割する対象のデータ群から読み出したデータが、暫定最小値よりも小さい場合には、暫定最小値を読み出したデータの値に更新する。
【００５３】
図１３は、制御部６００が実行する終了確認処理を例示する動作フローである。一実施形態においては、制御部６００はＳ１００１、Ｓ１１０１、又はＳ１２０１に進むと、図１３の動作フローを開始してよい。
【００５４】
Ｓ１３０１において制御部６００は、分割を行う対象のデータ群から全てのデータを読み出し終えたか否かを判定する。Ｓ１３０１において分割を行う対象のデータ群から全てのデータを読み出し終えている場合（Ｓ１３０１がＹｅｓ）、本動作フローは終了する（終了１）。なお、データ群内の全てのデータを読み出し終えている場合、暫定最大値はデータ群に含まれる全てのデータとの比較から特定されているため、暫定最大値はデータ群内のデータの最大値である。また同様に、暫定最小値も、データ群に含まれる全てのデータとの比較から特定されているため、データ群内のデータの最小値である。即ち、制御部６００は、例えば、上述の図９から図１２のいずれかの動作フローを実行し、暫定最大値及び暫定最小値を更新してゆくことで、データ群に含まれるデータの最大値及び最小値を特定することができる。この場合、制御部６００は、後述する図１４の動作フローを実行し、得られたデータ群のデータの最大値及び最小値を用いてデータ群に含まれるデータの分割区間への分割を完了させてよい。
【００５５】
一方、Ｓ１３０１において分割を行う対象のデータ群から全てのデータを読み出し終えていない場合（Ｓ１３０１がＮｏ）、フローはＳ１３０２へと進む。Ｓ１３０２において制御部６００は、データ群から読み出したデータの数が、所定の数で割り切れるか否かを判定する。読み出したデータの数が所定の数で割り切れない場合（Ｓ１３０２がＮｏ）、フローは呼び出し元の動作フローへと戻る。上述のように、終了確認処理は、Ｓ１００１、Ｓ１１０１、又はＳ１２０１において呼び出される。そのため、例えば、呼び出し元の動作フローがＳ１００１である場合には、フローはＳ１００２へと進んでよい。同様に、呼び出し元の動作フローがＳ１１０１である場合にはフローはＳ１１０２へ、また、呼び出し元の動作フローがＳ１２０１である場合にはフローはＳ１２０２へと進んでよい。一方、Ｓ１３０２において読み出したデータの数が所定の数で割り切れる場合（Ｓ１３０２がＹｅｓ）、フローはＳ１３０３へと進む。Ｓ１３０２の処理によって、所定の数で割り切れたときだけ、つまり全データのうち一部のデータの処理のときだけ、Ｓ１３０３およびＳ１３０４が実行されることになる。Ｓ１３０２の代わりに乱数による判定など行ってもよい。
【００５６】
Ｓ１３０３において制御部６００は、予め設定されている複数の境界値で区切られる複数の分割区間のどの分割区間に暫定最大値が属するかを特定する。例えば、制御部６００は、暫定最大値に設定されている値を用いて、予め設定されている複数の境界値を用いて作成された二分木を探索することで、暫定最大値がどの分割区間に属するかを特定してよい。また、Ｓ１３０４において制御部６００は、予め設定されている複数の境界値で区切られる複数の分割区間のどの分割区間に暫定最小値が属するかを特定する。例えば、制御部６００は、暫定最小値に設定されている値を用いて、予め設定されている複数の境界値から作成された二分木を探索することで、暫定最小値がどの分割区間に属するかを特定してよい。
【００５７】
Ｓ１３０５において制御部６００は、暫定最大値が属する分割区間から暫定最小値が属する分割区間までに含まれる分割区間の数を特定する。そして、制御部６００は、その分割区間の数が、分割処理に対して予め設定されている複数の境界値で区切られる全分割区間の数に対して所定の割合以上であるか否かを判定する。なお、所定の割合は、例えば、１／４であってよい。また、別の実施形態においては、Ｓ１３０５の判定は、例えば、暫定最大値から暫定最小値までの間にある境界値の数が、全境界値の数に対して所定の割合以上であるか否かを判定することで実行されてもよい。Ｓ１３０５において暫定最大値が属する分割区間から暫定最小値が属する分割区間までに含まれる分割区間の数が、全分割区間の数に対して所定の割合未満である場合（Ｓ１３０５がＮｏ）、フローは呼び出し元へと戻る。一方、Ｓ１３０５において暫定最大値が属する分割区間から暫定最小値が属する分割区間までの分割区間の数が、全分割区間の数に対して所定の割合以上である場合（Ｓ１３０５がＹｅｓ）、本動作フローは終了する（終了２）。なお、この場合、制御部６００は、後述する図１５の動作フローを実行し、データ群に含まれるデータの分割区間への分割を完了させてよい。
【００５８】
図１４は、最大値及び最小値を用いる分割完了処理を例示する図である。図１４の動作フローは、例えば、図１３のＳ１３０１においてＹｅｓと判定された場合（終了１）に、開始してよい。
【００５９】
Ｓ１４０１において制御部６００は、分割を行う対象のデータ群に含まれるデータの最大値が、分割処理に対して予め設定されている複数の境界値で区切られる複数の分割区間のどの分割区間に属するかを特定する。なお、上述のように、Ｓ１３０１においてＹｅｓと判定される場合、暫定最大値はデータ群に含まれる全てのデータとの比較から特定されているため、暫定最大値の値はデータ群に含まれるデータの最大値である。そのため、Ｓ１４０１において制御部６００は、暫定最大値に設定されている値をデータ群に含まれるデータの最大値として用いてよい。そして、制御部６００は、例えば、データ群に含まれるデータの最大値を用いて、予め設定されている複数の境界値を用いて作成された二分木を探索することで、最大値がどの分割区間に属するかを特定してよい。また、Ｓ１４０２において制御部６００は、分割を行う対象のデータ群に含まれるデータの最小値が、予め設定されている複数の境界値で区切られる複数の分割区間のどの分割区間に属するかを特定する。なお、Ｓ１３０１においてＹｅｓと判定される場合、暫定最小値はデータ群に含まれる全てのデータとの比較から特定されているため、暫定最小値の値はデータ群に含まれるデータの最小値である。そのため、Ｓ１４０２において制御部６００は、暫定最小値に設定されている値をデータ群に含まれるデータの最小値として用いてよい。そして、例えば、制御部６００は、データ群に含まれるデータの最小値を用いて、予め設定されている複数の境界値を用いて作成された二分木を探索することで、最小値がどの分割区間に属するかを特定してよい。
【００６０】
続いて、Ｓ１４０３において制御部６００は、例えば、データ群に含まれるデータの最大値が属する分割区間と、データ群に含まれるデータの最小値が属する分割区間との間にある境界値に基づいて二分木を生成する。例えば、制御部６００は、データ群に含まれるデータの最大値が属する分割区間と、データ群に含まれるデータの最小値が属する分割区間との間にある境界値を用いて二分木を生成してよい。Ｓ１４０４において制御部６００は、生成した二分木を用いて分割を行う対象のデータ群に含まれるデータを分割区間へと分類することで分割を完了し、本動作フローは終了する。
【００６１】
なお、Ｓ１４０３及びＳ１４０４の処理において、例えば、データ群に含まれるデータの最小値と最大値との間に、予め設定されている複数の境界値から作成された二分木の根ノード２１の境界値が含まれていることがある。この場合、根ノード２１の境界値を境とした分類の結果は配列変数Ｓと配列変数Ｌとに格納されているため、その結果を用いて更に比較回数が削減されてもよい。
【００６２】
例えば、制御部６００は、データ群に含まれるデータの最小値以上で、根ノード２１の境界値よりも小さい境界値を用いて二分木を作成する。そして、制御部６００は、得られた二分木を、配列変数Ｓに含まれるデータを用いて探索することで、配列変数Ｓに含まれるデータの分類先の分割区間を特定してよい。また、制御部６００は、例えば、データ群に含まれるデータの最大値以下で、根ノード２１の境界値よりも大きい境界値を用いて二分木を作成する。そして、制御部６００は、得られた二分木を、配列変数Ｌに含まれるデータを用いて探索することで、配列変数Ｌに含まれるデータの分類先の分割区間を特定してよい。
【００６３】
図１５は、第２の分割完了処理を例示する図である。図１５の動作フローは、図１３のＳ１３０５においてＹｅｓと判定された場合（終了２）に、開始してよい。
【００６４】
Ｓ１５０１において制御部６００は、分割を行う対象のデータ群に含まれるデータのうちで、未だ配列変数Ｓにも配列変数Ｌにも分類されていない残りのデータのそれぞれを、根ノード２１の境界値を境に分類する。例えば、分類対象のデータが根ノード２１の境界値未満であれば、制御部６００は、変数ｎ＿Ｓの値を１加算し、配列変数Ｓ［ｎ＿Ｓ］に分類対象のデータを設定する。一方、分類対象のデータが根ノード２１の境界値以上であれば、制御部６００は、例えば、変数ｎ＿Ｌの値を１加算し、配列変数Ｌ［ｎ＿Ｌ］に分類対象のデータを設定する。Ｓ１５０２において制御部６００は、配列変数Ｓに格納されているデータのそれぞれを、分割処理に対して予め設定されている複数の境界値を用いて作成された二分木の根ノード２１の左側の子ノードから探索することで、分割区間に分類してよい。また、Ｓ１５０３において制御部６００は、配列変数Ｌに登録されているデータのそれぞれを、分割処理に対して予め設定されている複数の境界値を用いて作成された二分木の根ノード２１の右側の子ノードから探索することで、分割区間に分類してよい。Ｓ１５０３の処理が完了すると、本動作フローは終了する。
【００６５】
以上で述べたように、上述の実施形態では、制御部６００は、二分木の根ノード２１の境界値に基づいた分類対象のデータの分類に、暫定最大値と暫定最小値を特定する処理を組み合わせている。それによって、制御部６００は、例えば、データ群に含まれるデータの根ノード２１の境界値に基づいた分類と、データ群に含まれるデータの最大値と最小値の特定とにかかる比較回数を削減することができる。
【００６６】
例えば、上述のように、或るデータが、データ群の中での最大値であるか否か、及び最小値であるか否かと、根ノード２１の境界値を境とした分類とを個別に実行すると、データ当たりに３回の比較を行うことが見積もられる。しかし、上述の実施形態では、制御部６００は、根ノード２１の境界値、暫定最大値、及び暫定最小値の３つの値の大小関係に従って作られる二分木によって決まる３つの値のうちの２つの値と、分類対象のデータとの比較を行う。それによって、制御部６００は、根ノード２１の境界値を境とした分類と、暫定最大値及び暫定最小値の特定を実行している。従って、実施形態によれば、比較回数を２回に削減することが可能である。
【００６７】
また更に、例えば、暫定最大値、暫定最小値、及び根ノード２１の境界値の大小関係が小さい方から大きい方に暫定最小値、暫定最大値、根ノード２１の境界値の順であるとする。この場合、制御部６００は、例えば、分類対象のデータを暫定最大値と比較して、分類対象のデータが暫定最大値よりも小さければ、分類対象のデータを根ノード２１の境界値と比較しなくても、根ノード２１の境界値よりも小さい群に分類することができる。一方、分類対象のデータが暫定最大値よりも大きければ、分類対象のデータは暫定最小値とはならないため、制御部６００は、分類対象のデータと暫定最小値との比較を省くことができる。
【００６８】
また、例えば、暫定最大値、暫定最小値、及び根ノード２１の境界値の大小関係が小さい方から大きい方に根ノード２１の境界値、暫定最小値、暫定最大値の順であるとする。この場合、制御部６００は、例えば、分類対象のデータを暫定最小値と比較して、分類対象のデータが暫定最小値よりも大きければ、分類対象のデータを、根ノード２１の境界値と比較しなくても、根ノード２１の境界値よりも大きい群に分類することができる。一方、分類対象のデータが暫定最小値よりも小さければ、分類対象のデータは暫定最大値とはならないため、制御部６００は、分類対象のデータと暫定最大値との比較を省くことができる。
【００６９】
また、例えば、暫定最大値、暫定最小値、及び根ノード２１の境界値の大小関係が小さい方から大きい方に暫定最小値、根ノード２１の境界値、暫定最大値の順であるとする。この場合、例えば、分類対象のデータを根ノード２１の境界値と比較し、分類対象のデータが根ノード２１の境界値よりも小さければ、分類対象のデータは暫定最大値とはならないため、制御部６００は、分類対象のデータと暫定最大値との比較を省くことができる。一方、分類対象のデータが根ノード２１の境界値よりも大きければ、分類対象のデータは暫定最小値とはならないため、制御部６００は、分類対象のデータと暫定最小値との比較を省くことができる。
【００７０】
また、上述の実施形態では、Ｓ１３０５において暫定最大値が属する分割区間から暫定最小値が属する分割区間までに含まれる分割区間の数が、全分割区間の数に対して所定の割合以上である場合、フローは図１５の動作フローへと進む。それによって、制御部６００は、暫定最大値及び暫定最小値の特定を停止している。例えば、分割の対象のデータ群からデータをある程度読み終えた時点で、読み終えたデータが、分割処理に対して予め設定されている複数の境界値で区切られる複数の分割区間の全体に散っている場合、最大値と最小値の間の範囲から外れる境界値の数が少なくなる。その結果、例えば図４を参照して述べた、二分木の作成に用いる境界値を減らすことで得られる計算量の低減の効果が低くなることがある。一方で、分割の対象のデータ群に含まれるデータの最大値と最小値を求める場合、最大値及び最小値を求めるために比較を行っている。そこで、上述の実施形態では、制御部６００は、分割の対象のデータ群からデータをある程度読み終えた時点で、読み終えたデータの偏りを確認する。そして、読み終えたデータにおいて、予め設定されている複数の境界値によって区切られる複数の分割区間の広範囲にデータが散っている場合には、制御部６００は、暫定最大値及び暫定最小値の特定を停止する。そのため、制御部６００は、例えば、予め設定されている複数の境界値のうちから、二分木による分割で用いる境界値が十分に間引かれないことが推定される状況で、最大値及び最小値を求めるために比較を実行してしまうことを抑制することができる。そのため、制御部６００は、比較回数を削減することができる。
【００７１】
従って、実施形態によれば、制御部６００は、例えば、データ群に含まれるデータの偏りを検出して、データ群内のデータを二分木を用いて分割する場合に、比較回数を削減することができる。
【００７２】
なお、上記の例では、データの例として整数値を用いて説明が行われている。しかしながら、実施形態で利用可能なデータはこれに限定されるものではなく、整数値以外のデータに対して実施形態が適用されてよい。例えば、データは文字列及び日付などであってもよく、アルファベット順や、五十音順、及び日時の古い順又は新しい順などで大小関係が定義されたデータであってよい。例えば、以下の条件を満たすデータが実施形態に係る分割の対象のデータとして用いられてよい。
【００７３】
（ａ）集合中の任意の２つの要素Ａと要素Ｂとを取り出したときに、要素Ａと要素Ｂとの間に大小関係が定義されている。大小関係は、要素Ａが要素Ｂより小さい（要素Ｂが要素Ａより大きいことと同じ）か、要素Ａと要素Ｂとが等しいか、要素Ａが要素Ｂより大きい（要素Ｂが要素Ａより小さいことと同じ）かのどれかである。
【００７４】
（ｂ）集合中の任意の要素Ａ、要素Ｂ、要素Ｃを取り出したとき、要素Ａが要素Ｂより小さく、要素Ｂが要素Ｃより小さいならば、要素Ａは要素Ｃより小さいと定義されている。
【００７５】
また、集合の中の要素Ａが以下の条件を満たすとき、要素Ａは集合の最大値とする。
（ｃ）集合中の任意の要素Ｂに対し、要素Ａは要素Ｂより大きいか、要素Ａと要素Ｂは等しい。
【００７６】
同様に、集合の中の要素Ａが以下の条件を満たすとき、要素Ａは集合の最小値とする。
（ｄ）集合中の任意の要素Ｂに対し、要素Ａは要素Ｂより小さいか、要素Ａと要素Ｂは等しい。
【００７７】
また、実施形態で利用可能なデータは、例えば、数字や文字列などの値であってもよいし、或いは図３の売上データベース３００における商品番号のように、複数の要素が関連付けられて登録されるデータベース及び表などにおける、一部の要素の値であってもよい。
【００７８】
また、上記の実施形態では、分割対象のデータ群のデータを、暫定最大値、暫定最小値、及び根ノード２１の境界値の大小関係に従って作られる二分木によって決まる２つの値と比較することで、比較回数が削減される。しかしながら、実施形態はこれに限定されるものではない。例えば、データと、根ノード２１の境界値、暫定最大値、及び暫定最小値との比較の順番が決まっており、根ノード２１の境界値、暫定最大値、暫定最小値の順序で比較を行うものとする。この場合に、例えば、状態が状態２であれば、データを根ノード２１の境界値と比較した際に、データが根ノード２１の境界値よりも大きければ、データを暫定最大値及び暫定最小値と比較しなくても、データが暫定最大値及び暫定最小値よりも大きいことが分かる。この様に、例えば、各状態における暫定最大値、暫定最小値、及び根ノード２１の境界値の間の大小関係の情報を利用することで、比較回数を減らして処理が実行されてもよい。
【００７９】
以上において、実施形態を例示したが、実施形態はこれらに限定されるものではない。例えば、上述の動作フローは例示であり、実施形態はこれに限定されるものではない。例えば、可能な場合には、動作フローは、処理の順番を変更して実行されてもよく、別に更なる処理を含んでもよく、又は、一部の処理が省略されてもよい。例えば、別の実施形態においては、Ｓ９０１の処理とＳ９０２の処理とは順序を入れ替えて実行されてもよい。また、同様に、Ｓ１３０３の処理とＳ１３０４の処理、Ｓ１４０１の処理とＳ１４０２の処理、Ｓ１５０２の処理とＳ１５０３の処理は、それぞれ順序を入れ替えて実行されてもよい。
【００８０】
また、上記の例では、分類対象のデータが境界値と等しい場合、データを境界値よりも大きい側に分類する例を示したが、実施形態はこれに限定されるものではない。例えば、別の実施形態では、分類対象のデータが境界値と等しい場合、制御部６００はデータを境界値よりも小さい側に分類してもよい。
【００８１】
また、上述の図９から図１２の動作フローにおいて制御部６００は、例えば、特定部６０１として動作してよい。また、図１４の動作フローにおいて制御部６００は、例えば、分割部６０２として動作してよい。
【００８２】
図１６は、一実施形態に係るシステム１６００のハードウェア構成を例示する図である。システム１６００は、例えば、複数の情報処理装置６０を含んでいてよい。情報処理装置６０は、例えば、データベースシステムが動作可能なコンピュータであってよい。情報処理装置６０は、例えば、プロセッサ１６０１、ＲＡＭ１６０２、及びＲＯＭ１６０３を備えている。ＲＡＭは、Random Access Memoryの略称である。ＲＯＭは、Read Only Memoryの略称である。また、プロセッサ１６０１は、少なくとも１つのコア１６０４、メモリコントローラ１６０５、周辺機器コントローラ１６０６、及びプロセッサ間インタフェース１６０７を備えていてよく、これらはバス１６１０を介して接続されていてよい。各プロセッサ１６０１同士は、例えば、プロセッサ間インタフェース１６０７によって互いに接続されていてよい。メモリコントローラ１６０５は、例えば、ＲＡＭ１６０２と接続されており、ＲＡＭ１６０２にアクセスしてよい。
【００８３】
そして、プロセッサ１６０１は、例えば、ＲＡＭ１６０２を利用して上述の動作フローの手順を記述したプログラムを実行することで、上述の動作フローの処理を実行してよい。一実施形態においては、制御部６００は、例えば、プロセッサ１６０１であってよい。また、記憶部６１０は、例えば、ＲＡＭ１６０２であってよい。
【００８４】
周辺機器コントローラ１６０６は、例えば、ＲＯＭ１６０３と接続されていてよい。また、周辺機器コントローラ１６０６は、例えば、記憶装置コントローラ１６１１と接続されていてよい。記憶装置コントローラ１６１１は、例えば、ハードディスクなどの外部記憶装置と接続されていてよく、プロセッサ１６０１の指示に従って外部記憶装置にデータを読み書きしてよい。更に、周辺機器コントローラ１６０６は、読取装置１６１２と接続されていてよい。読取装置１６１２は、例えば、プロセッサ１６０１の指示に従って可搬型記録媒体１６１３にアクセスする。可搬型記録媒体１６１３は、例えば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現されてよい。なお、ＵＳＢは、Universal Serial Busの略称である。ＣＤは、Compact Discの略称である。ＤＶＤは、Digital Versatile Diskの略称である。
【００８５】
また、周辺機器コントローラ１６０６は、例えば、通信インタフェース１６１４と接続されていてよい。通信インタフェース１６１４は、例えば、プロセッサ１６０１の指示に従ってネットワークを介してデータを送受信してよい。周辺機器コントローラ１６０６は、例えば、入出力インタフェース１６１５と接続されていてよく、入出力インタフェース１６１５は、例えば、入力装置及び出力装置との間のインタフェースであってよい。入力装置は、例えばユーザからの入力を受け付ける入力キー、及びタッチパネルなどのデバイスであってよい。出力装置は、例えばディスプレイ、及びタッチパネルなどの表示装置、並びにプリンタなどの印刷装置であってよい。
【００８６】
また、上述の動作フローをプロセッサ１６０１に実行させるための実施形態に係る各プログラム、及び例えば分割を行う対象となる複数のデータは、下記の形態で情報処理装置６０に提供されてよい。
（１）記憶装置コントローラ１６１１に接続された外部記憶装置に記憶されている。
（２）サーバからネットワークを介して提供される。
（２）可搬型記録媒体１６１３により提供される。
【００８７】
なお、図１６において、システム１６００は、複数の情報処理装置６０を含み、情報処理装置６０に含まれるプロセッサ１６０１単位で上述の動作フローを実行してよい。そして、複数のプロセッサ１６０１のそれぞれに実施形態に係る動作フローを実行させることで、並列処理が実現されてよい。しかしながら、実施形態はこれに限定されるものではなく、例えば、並列処理はコア１６０４単位で実行されてもよい。この場合、コア１６０４が実施形態に係る情報処理装置６０として機能してもよい。更に別の実施形態では、ネットワークに接続された複数のコンピュータのそれぞれに、実施形態に係る動作フローを実行させることで、並列処理が実現されてもよい。或いは、複数の仮想マシンに実施形態に係る動作フローを実行させることで、並列処理が実現されてもよい。この場合には、コンピュータ、又は仮想マシンが実施形態に係る情報処理装置６０として機能してよい。
【００８８】
また、上述の実施形態を含むいくつかの実施形態は、上述の実施形態の各種変形形態及び代替形態を包含するものとして当業者には理解される。例えば、各種実施形態は、構成要素を変形して具体化されてよい。また、上述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施されてよい。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施されてよい。
【符号の説明】
【００８９】
６０      情報処理装置
６００    制御部
６０１    特定部
６０２    分割部
６１０    記憶部
１６００  システム
１６０１  プロセッサ
１６０２  ＲＡＭ
１６０３  ＲＯＭ
１６０４  コア
１６０５  メモリコントローラ
１６０６  周辺機器コントローラ
１６０７  プロセッサ間インタフェース
１６１０  バス
１６１１  記憶装置コントローラ
１６１２  読取装置
１６１３  可搬型記録媒体
１６１４  通信インタフェース
１６１５  入出力インタフェース
【図１】
2017004128.tif 000003
【図２】
2017004128.tif 000004
【図３】
2017004128.tif 000005
【図４】
2017004128.tif 000006
【図５】
2017004128.tif 000007
【図６】
2017004128.tif 000008
【図７】
2017004128.tif 000009
【図８】
2017004128.tif 000010
【図９】
2017004128.tif 000011
【図１０】
2017004128.tif 000012
【図１１】
2017004128.tif 000013
【図１２】
2017004128.tif 000014
【図１３】
2017004128.tif 000015
【図１４】
2017004128.tif 000016
【図１５】
2017004128.tif 000017
【図１６】
2017004128.tif 000018