(57)【特許請求の範囲】
【請求項１】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法であって、コンピュータが、
ツリーのノードを、前記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、前記ツリーを構築するステップと、
検索キーの値を有効数とする最小ビット幅のグループに対応する前記命令を使用して、前記検索キーの値を有効数とする最小ビット幅の前記グループからデータを検索するステップと
を実行することを含む、前記方法。
【請求項２】
前記構築するステップが、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに前記挿入されるキーを挿入するステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
前記構築するステップが、
前記キーの値を有効数とする最小ビット幅のグループに属するノードを発見するステップであって、前記キーの値を有効数とする最小ビット幅の前記グループが、前記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、前記発見するステップ
をさらに含む、請求項２に記載の方法。
【請求項４】
前記構築するステップが、
前記発見したノードが、前記挿入されるキーの挿入によってあふれることに応じて、前記発見したノード又は当該発見したノードの上位にあるノードを分割するステップ
をさらに含む、請求項３に記載の方法。
【請求項５】
前記構築するステップが、
前記ノードそれぞれに前記グループを識別する識別子を付与するステップ
を含み、
前記検索するステップが、
前記構築されたツリーのノードを辿って、前記識別子により各ノードが属するグループを判定するステップと、
前記判定されたグループに対応する命令を使用して、前記データを検索するステップと
を含む、
請求項１に記載の方法。
【請求項６】
前記構築するステップが、
前記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、前記ツリーを構築するステップ
を含む、請求項１に記載の方法。
【請求項７】
前記構築するステップが、
各グループを、根ノードを親ノードとするサブツリーとして構築するステップ
を含み、
前記検索するステップが、
前記サブツリーに対応する前記命令を使用して、前記データを検索するステップ
を含む、
請求項１に記載の方法。
【請求項８】
前記構築するステップが、
グループそれぞれを、部分ツリーとして構築するステップ
を含み、
前記検索するステップが、
前記部分ツリーに対応する前記命令を使用して、前記データを検索するステップ
を含む、請求項１に記載の方法。
【請求項９】
前記命令がＳＩＭＤ（Single Instruction Multiple Data）命令である、請求項１に記載の方法。
【請求項１０】
前記ビット幅が、８ビット幅、１６ビット幅、３２ビット幅、６４ビット幅、１２８ビット幅、又は、２５６ビット幅である、請求項１に記載の方法。
【請求項１１】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うコンピュータであって、
ツリーのノードを、前記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、前記ツリーを構築するツリー構築手段と、
検索キーの値を有効数とする最小ビット幅のグループに対応する前記命令を使用して、前記検索キーの値を有効数とする最小ビット幅の前記グループからデータを検索するデータ検索手段と
を備えている、前記コンピュータ。
【請求項１２】
前記ツリー構築手段が、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに前記挿入されるキーを挿入する、
請求項１１に記載のコンピュータ。
【請求項１３】
前記ツリー構築手段が、
前記キーの値を有効数とする最小ビット幅のグループに属するノードを発見し、ここで、前記キーの値を有効数とする最小ビット幅の前記グループが、前記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、
請求項１２に記載のコンピュータ。
【請求項１４】
前記ツリー構築手段が、
前記発見したノードが、前記挿入されるキーの挿入によってあふれることに応じて、前記発見したノード又は当該発見したノードの上位にあるノードを分割する、
請求項１３に記載のコンピュータ。
【請求項１５】
前記ツリー構築手段が、
前記ノードそれぞれに前記グループを識別する識別子を付与し、
前記データ検索手段が、
前記構築されたツリーのノードを辿って、前記識別子により各ノードが属するグループを判定し、
前記判定されたグループに対応する命令を使用して、前記データを検索する、
請求項１１に記載のコンピュータ。
【請求項１６】
前記ツリー構築手段が、
前記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、前記ツリーを構築する、
請求項１０に記載のコンピュータ。
【請求項１７】
前記ツリー構築手段が、
各グループを、根ノードを親ノードとするサブツリーとして構築し、
前記データ検索手段が、
前記サブツリーに対応する前記命令を使用して、前記データを検索する、
請求項１１に記載のコンピュータ。
【請求項１８】
前記ツリー構築手段が、
グループそれぞれを、部分ツリーとして構築し、
前記データ検索手段が、
前記部分ツリーに対応する前記命令を使用して、前記データを検索する、
請求項１１に記載のコンピュータ。
【請求項１９】
前記命令がＳＩＭＤ（Single Instruction Multiple Data）命令である、請求項１１に記載のコンピュータ。
【請求項２０】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータ・プログラムであって、コンピュータに、請求項１〜１０のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ツリー構造において、キーが挿入されるノード又は与えられたキーを持つノードを発見する際に、命令レベルの並列度を活用する技法に関する。特には、本発明は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う技法に関する。
【背景技術】
【０００２】
ツリー構造は、データが持つキーの決められた順序を保持して保存する処理又は与えられたデータを検索する処理を高速に行うことを可能にする為に、データベースや同様のものの検索操作の際に用いられる。当該ツリー構造において、データ挿入又はデータ検索の際には、与えられたデータに対応する内部のノードを発見する（すなわち、特定する）必要がある。当該内部のノードを発見する操作は、一般には、データロード命令、比較命令、又は分岐命令を用いて、与えられたキーの値に基づく検索である。当該内部のノードを発見する操作を高速にすることがツリー構造の処理の高速化に重要である。
【０００３】
下記特許文献１は、データベースには、速度を向上させることが常に求められていること（段落００２２）、及び、ツリーインデックス構造のデータベースを管理する装置であって、第１の階層に属するノードは第１のサイズとなるように設定されており、第２の階層に属するノードは第２のサイズとなるように設定されており、前記第１の階層に属するノード及び前記第２の階層に属するノードそれぞれに対して、分割、挿入、及び探索を行うノード管理手段を備えるデータベース管理装置（請求項１）を記載する。
【０００４】
下記特許文献２は、処理手順を減少させてノード検索の高速化を図るとともに、メモリ使用量を低減することができる情報検索方法及び装置を提供することを目的とすること（段落０００５）、パトリシアツリーを構成するノード２ａについて、通常の２分木では２つ必要となる下位ノードへのリンクポインタを１つだけリンクポインタ２ａ２として持たせること（段落００２４）を記載する。
【０００５】
下記特許文献３は、データ検索の高速化又は管理可能なデータ量の拡大化を図ることができる検索プログラム、検索方法、検索装置、ノードおよび検索システムを提供することを目的とすること（段落００１１）、段数ｈ、ビット幅ｓ、擬陽性または陰性を示すビットが配列された第ｈ段の分割数ｄ、第ｐ（１≦ｐ≦ｈ）段のブルームフィルタのビット幅ｍ＝ｓ／ｄ[h-(p-1)]、第ｐ段のブルームフィルタの配列数ｎ＝ｄ[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタ（請求項１）を記載する。
【０００６】
下記特許文献４〜８それぞれは、木構造データの検索を記載する。
【０００７】
下記非特許文献１は、B+-Treeの内部ノードにおいて次のノードを決定する際に、ＳＩＭＤロードと比較命令を使った”Naive SIMD Binary Search”と、ＳＩＭＤロードと比較命令を使った”Sequential Comparison with SIMD”と、ＳＩＭＤロードと比較命令を使った”Naive SIMD Binary Search”と”Sequential Comparison with SIMD”の”Hybrid Search”とを用いる旨を記載する（第150頁“4. INDEX STRUCTURES”〜第151頁“4.1.3 Hybrid Search”の各項を参照）。
【０００８】
下記非特許文献２は、k-AryでＳＩＭＤロードと比較命令を利用して、ノード内の比較を一命令で行う旨を記載する（第54頁“3.K-ARY SEARCH”〜第56頁“3.4 Non-perfect Trees”の各項を参照）。
【０００９】
下記非特許文献３は、Binary-treeの親ノードと複数子ノードにおけるkeyの比較を、ＳＩＭＤロードと比較命令で行う旨を記載する（第343頁“5.1 CPU Implementation”〜第349頁“6.2.2 Traversing Compressed Trees”の各項を参照）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】国際公開第２０１３／０３５２８７号
【特許文献２】特開２００１−３５７０７０号公報
【特許文献３】特開２０１２−２５２６５８号公報
【特許文献４】特開２００６−２３５８４０号公報
【特許文献５】特開平８−６３４８０号公報
【特許文献６】特開平１０−４０２５５号公報
【特許文献７】特開平１１−６６０９６号公報
【特許文献８】特開２００１−１３４５９４号公報
【非特許文献】
【００１１】
【非特許文献１】Jingren Zhou等、”Implementing Database Operations Using SIMD Instructions”，ACM，Proceeding SIGMOD '02 Proceedings of the 2002 ACM SIGMOD international conference on Management of data，p. 145-156，2002年，インターネット〈URL：http://research.microsoft.com/en-us/um/people/jrzhou/pub/simd.pdf〉より入手可能
【非特許文献２】Benjamin Schlegel等、”k-Ary Search on Modern Processors”，ACM，Proceeding DaMoN '09 Proceedings of the Fifth International Workshopon Data Management on New Hardware，p. 52-60，2009年，インターネット〈URL：http://www.mpi-inf.mpg.de/~rgemulla/publications/schlegel09search.pdf〉より入手可能
【非特許文献３】Changkyu Kim等、”FAST: Fast Architecture Sensitive Tree Search on Modern CPUs and GPUs”，ACM，Proceeding SIGMOD '10 Proceedings of the 2010 ACM SIGMOD International Conference on Management of data，p. 339-350，2010年，インターネット〈URL：http://www.webislands.net/pubs/FAST__SIGMOD10.pdf〉より入手可能
【発明の概要】
【発明が解決しようとする課題】
【００１２】
近年の扱うデータ量の増大によって、ツリー構造が予め大きなデータ量を有することになることを予測する必要がある。そのために、キーのビット幅が大きくなることがある。実際の製品における例として、IBM（登録商標） Cognos（登録商標） Business Intelligence10.2が挙げられる。当該製品において、決められた順序で保存するデータ構造があり、当該データ構造としてツリーが用いられている。このデータ構造のキーは、大きな整数値を取る可能性を考慮して、Java（登録商標）のlong及びBigInteger（変更が不可能な、任意精度の整数）をキーとしている。
【００１３】
近年のプロセッサ（例えば、インテル・コーポレーションのHaswell、インターナショナル・ビジネス・マシーンズ・コーポレーションのPOWER7、アドバンスト・マイクロ・デバイセズのK10、及び、ＡＲＭホールディングズのＡＲＭアーキテクチャに基づくＣＰＵ）では、決められたビット幅の複数データに対して同じ処理を１命令で同時に適用するSingle Instruction Multiple Data（ＳＩＭＤ）命令を持つものが多い。このとき、複数データのビット幅の合計数には上限があり、当該上限は例えば、POWER7では１２８又は２５６である。
【００１４】
データ挿入又はデータ検索の際における内部ノードの発見操作において、データロード又はデータ比較にＳＩＭＤ命令を用いて処理を高速化することは可能である。しかしながら、当該ＳＩＭＤ命令を用いて高速化することにおいて、以下に示す問題点が存在する。
【００１５】
キーのデータ幅が大きい（例えば、６４ビット）場合には、ＳＩＭＤ命令を用いても命令レベルの並列度が大きくないので（例えば、ＳＩＭＤ命令のレジスタ幅が128であれば、並列度は２＝（１２８／６４）である）、高速化の度合いが小さい。
【００１６】
また、プロセッサのアーキテクチャによっては、大きなデータ幅の演算がサポートされていない（例えば、POWER7では６４ビットの比較は一命令では行えない）ので、ＳＩＭＤ命令を用いても高速化の度合いが小さい。
【００１７】
そこで、本発明は、予め決められたビット幅のデータに対して操作を行う命令（例えば、ＳＩＭＤ命令）を用いながら、データ挿入又はデータ検索の際における内部ノードの発見操作を高速化することを目的とする。
【課題を解決するための手段】
【００１８】
本発明は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う技法を提供する。当該技法は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法、並びに、当該ツリーの検索を行うためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【００１９】
本発明に従う第１の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法であって、コンピュータが、
ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築するステップと、
検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索する（search）ステップと
を実行することを含む。
【００２０】
本発明の一つの実施態様において、上記構築するステップが、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記挿入されるキーを挿入するステップ
をさらに含みうる。
【００２１】
本発明の一つの実施態様において、上記構築するステップが、
上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見する（find）ステップであって、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、上記発見するステップ
をさらに含みうる。
【００２２】
本発明の一つの実施態様において、上記構築するステップが、
上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割するステップ
をさらに含みうる。
【００２３】
本発明の一つの実施態様において、上記構築するステップが、
上記ノードそれぞれに上記グループを識別する識別子を付与するステップ
を含み、
上記検索するステップが、
上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定するステップと、
上記判定されたグループに対応する命令を使用して、上記データを検索するステップと
を含みうる。
【００２４】
本発明の一つの実施態様において、上記構築するステップが、
上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築するステップ
を含みうる。
【００２５】
本発明の一つの実施態様において、上記構築するステップが、
上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも２つのグループを下位にあるノードとして有するように、上記ツリーを構築するステップ
を含みうる。
【００２６】
本発明の一つの実施態様において、上記構築するステップが、
各グループを、根ノードを親ノードとするサブツリーとして構築するステップ
を含み、
上記検索するステップが、
上記サブツリーに対応する上記命令を使用して、上記データを検索するステップ
を含みうる。
【００２７】
本発明の一つの実施態様において、上記構築するステップが、
グループそれぞれを、部分ツリーとして構築するステップ
を含み、
上記検索するステップが、
上記部分ツリーに対応する上記命令を使用して、上記データを検索するステップ
を含みうる。
【００２８】
本発明に従う第２の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うコンピュータは、
ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築するツリー構築手段と、
検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索するデータ検索手段と
を備えている。
【００２９】
本発明の一つの実施態様において、上記ツリー構築手段が、挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記キーを挿入しうる。
【００３０】
本発明の一つの実施態様において、上記ツリー構築手段が、上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見しうる。ここで、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである。
【００３１】
本発明の一つの実施態様において、上記ツリー構築手段が、上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割しうる。
【００３２】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ノードそれぞれに上記グループを識別する識別子を付与し、
上記データ検索手段が、上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令を使用して、上記データを検索しうる。
【００３３】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築しうる。
【００３４】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも２つのグループを下位にあるノードとして有するように、上記ツリーを構築しうる。
【００３５】
本発明の一つの実施態様において、上記ツリー構築手段が、各グループを、根ノードを親ノードとするサブツリーとして構築し、
上記データ検索手段が、上記サブツリーに対応する上記命令を使用して、上記データを検索しうる。
【００３６】
本発明の一つの実施態様において、上記ツリー構築手段が、グループそれぞれを、部分ツリーとして構築し、
上記データ検索手段が、上記部分ツリーに対応する上記命令を使用して、上記データを検索しうる。
【００３７】
本発明に従う第３の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第１の態様に記載の方法の各ステップを実行させる。
【００３８】
本発明に従う第４の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータであって、
単一又は複数のプロセッサと、
上記単一又は複数のプロセッサに接続されたメモリと、
上記第３の態様に記載のコンピュータ・プログラムを記憶した記憶媒体と
を備えており、
上記プロセッサが、上記コンピュータ・プログラムを上記メモリに読み込んで、当該コンピュータ・プログラムを実行する。
【００３９】
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ＢＤ、ハードディスク装置、ＵＳＢに接続可能なメモリ媒体、ＲＯＭ、ＭＲＡＭ、ＲＡＭ等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
【００４０】
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
【００４１】
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【００４２】
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、１．他の言語、コード若しくは表記への変換及び、２．他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
【発明の効果】
【００４３】
本発明の実施態様に従うと、ツリーのノードを、予め定められた複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、当該ツリーを構築することによって、データ挿入又はデータ検索の際における内部ノードの発見操作を高速化することが可能になる。また、当該発見操作が早くなることによって、上記データ挿入の操作を高速化することが可能になる。
【図面の簡単な説明】
【００４４】
【図１】本発明の実施態様において使用されうるコンピュータの一例を示した図である。
【図２】本発明の実施態様に従う検索手法１において使用するために構築されたツリー構造の例を示した図である。
【図３Ａ】本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【図３Ｂ】本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【図３Ｃ】本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【図４Ａ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図４Ｂ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図４Ｃ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図４Ｄ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図４Ｅ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図４Ｆ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図４Ｇ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図４Ｈ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図５Ａ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図５Ｂ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【図５Ｃ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図５Ｄ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図５Ｅ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【図６】本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理全体のフローチャートを示す。
【図７Ａ】本発明の実施態様に従い、上記検索手法１の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【図７Ｂ】本発明の実施態様に従い、上記検索手法２の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【図８Ａ】本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【図８Ｂ】本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【図９】図１に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータの機能ブロック図の一例を示した図である。
【発明を実施するための形態】
【００４５】
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
【００４６】
本発明の実施態様において使用されうる「コンピュータ」は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理を実行可能なコンピュータであれば特に限定されない。当該コンピュータは例えば、例えば、デスクトップ・コンピュータ、ノート・コンピュータ、一体型パソコン若しくはタブレット端末、又は、サーバ・コンピュータでありうる。
【００４７】
本発明の実施態様において、「予め決められた複数のビット幅のデータに対して操作を行う命令」とは、予め決められたビット幅の複数のデータに対して同じ処理を1命令で適用可能な命令である。当該命令は例えば、予め決められたビット幅の複数のデータに対して同じ処理を1命令で同時に適用可能であってもよく又は同時に適用可能でない命令であってもよい。予め決められたビット幅の複数のデータに対して同じ処理を1命令で同時に適用可能な命令は例えば、ＳＩＭＤ命令である。ＳＩＭＤ命令には、ＳＳＥやＮＥＯＮと呼ばれるＳＩＭＤ命令も含まれる。
【００４８】
本発明の実施態様において、「キーの値を表現可能な最小のビット幅ビット幅」は例えば、８ビット幅、１６ビット幅、３２ビット幅、６４ビット幅、１２８ビット幅、又は、２５６ビット幅である。
【００４９】
本発明の実施態様において、「ツリー」（木とも表現される）とは、複数の子ノードと当該子ノードそれぞれに関連付けられたキーを持つ中間ノードを有するツリー構造であればよい。当該ツリーは例えば、Ｂ＋−ツリー、Ｂ−ツリー、Ｂ＊ツリー、２−３ツリー、２−３−４ツリーである。
【００５０】
Ｂ＋−ツリー、Ｂ−ツリー、Ｂ＊ツリー、２−３ツリー、２−３−４ツリーはいずれも、キーを指定することで挿入、検索、又は削除が行えるツリー構造の一種である。
【００５１】
Ｂ＋−ツリーは、動的な階層型インデックスであり、各インデックスセグメント（「ブロック」とも呼ばれ、ツリー構造におけるノードに相当する）にはキー数の上限と下限がある。Ｂ＋−ツリーはＢ−ツリーとは異なり、全てのレコードは木の最下層（葉ノード）に格納され、中間ノード（内部ノード）にはキーの代表のみが格納される。Ｂ＋−ツリーでは、中間ノードが複数のキーと子ノードペアを持ち、葉ノードが検索されるキーの値を持つ。
【００５２】
Ｂ−ツリーは、単純な２分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできる。
【００５３】
Ｂ＊ツリーは、Ｂ−ツリーから派生した木構造の一種であり、根ノード以外のノードは、Ｂ−ツリーのように１／２ではなく、２／３まで埋まった状態になる。
【００５４】
図１は、本発明の実施態様において使用されうるコンピュータの一例を示した図である。
【００５５】
コンピュータ（１０１）は、１つ又は複数のＣＰＵ（１０２）とメイン・メモリ（１０３）とを備えており、これらはバス（１０４）に接続されている。ＣＰＵ（１０２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものである。当該ＣＰＵ（１０２）は例えば、インテル社のＣｏｒｅ（商標）  ｉシリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｘｅｏｎ（登録商標）シリーズ、Ｐｅｎｔｉｕｍ（登録商標）シリーズ若しくはＣｅｌｅｒｏｎ（登録商標）シリーズ、ＡＭＤ（Advanced Micro Devices）社のＡシリーズ、Ｐｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（登録商標）シリーズ若しくはＳｅｍｐｒｏｎ（商標）、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのＰｏｗｅｒ（商標）シリーズでありうる。
【００５６】
バス（１０４）には、ディスプレイ・コントローラ（１０５）を介して、ディスプレイ（１０６）、例えば液晶ディスプレイ（ＬＣＤ）が接続されうる。また、液晶ディスプレイ（ＬＣＤ）は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ（１０６）は、コンピュータ（１０１）上で動作中のソフトウェア（例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ（１０１）上で動作中の各種コンピュータ・プログラム）が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。
【００５７】
バス（１０４）には任意的に、例えばＳＡＴＡ又はＩＤＥコントローラ（１０７）を介して、ディスク（１０８）、例えばハードディスク又はソリッド・ステート・ドライブ（ＳＳＤ）が接続されうる。
【００５８】
バス（１０４）には任意的に、例えばＳＡＴＡ又はＩＤＥコントローラ（１０７）を介して、ドライブ（１０９）、例えばＣＤ、ＤＶＤ又はＢＤドライブが接続されうる。
【００５９】
バス（１０４）には、周辺装置コントローラ（１１０）を介して、例えばキーボード・マウス・コントローラ又はＵＳＢバスを介して、任意的に、キーボード（１１１）及びマウス（１１２）が接続されうる。
【００６０】
ディスク（１０８）には、オペレーティング・システム、例えばＷｉｎｄｏｗｓ（登録商標），Ｍａｃ  ＯＳ（登録商標）  Ｘ，Ｌｉｎｕｘ（登録商標），Ａｎｄｒｏｉｄ（登録商標），ｉＯＳ、Ｊ２ＥＥなどのＪａｖａ（登録商標）処理環境、Ｊａｖａ（登録商標）アプリケーション、Ｊａｖａ（登録商標）仮想マシン（ＶＭ）、Ｊａｖａ（登録商標）実行時（ＪＩＴ）コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ（１０３）にロード可能なように記憶されうる。
【００６１】
ディスク（１０８）は、コンピュータ（１０１）内に内蔵されていてもよく、当該コンピュータ（１０１）がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ（１０１）がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
【００６２】
ドライブ（１０９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク（１０８）にインストールするために使用されうる。
【００６３】
通信インタフェース（１１４）は、例えばイーサネット（登録商標）・プロトコルに従う。通信インタフェース（１１４）は、通信コントローラ（１１３）を介してバス（１０４）に接続され、コンピュータ（１０１）を通信回線（１１５）に有線又は無線接続する役割を担い、コンピュータ（１０１）のオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどのＷｉ−Ｆｉ無線ＬＡＮ環境、又は携帯電話網環境（例えば、３Ｇ又は４Ｇ環境）でありうる。
【００６４】
下記図２、並びに下記図３Ａ〜図３Ｃそれぞれにおいて、本発明の実施態様に従う検索手法において使用するために構築されたツリー構造の例を示す。本発明の実施態様に従う検索手法には２態様あり、以下において、検索手法１及び検索手法２という。図２は上記検索手法１において使用するために構築されたツリー構造（２０１）を示したものであり、図３Ａ〜図３Ｃそれぞれは上記検索手法２において使用するために構築されたツリー構造（３０１，３０２及び３０３）を示したものである。
【００６５】
本発明の実施態様に従う検索手法１において使用するために構築されたツリー構造（２０１）において、或る中間ノードＡは、当該中間ノードＡが属するグループと異なるグループ（すなわち、当該中間ノードＡが属するグループのビット幅よりも小さい又は大きいビット幅のキーを持つグループ）の中間ノードＢを子ノードとして有する場合がある。上記検索手法１は、上記ツリー構造におけるノード決定操作でキーを比較する際に、子ノードを辿って、与えられたキー値とノードが持つキー値とを比較する際に、当該ノードが属するグループを調べて、当該ノードが持つキーのグループ（すなわち、当該キーが持つキーの値の範囲）に応じた、命令レベル並列度をより適切に利用できるＳＩＭＤ比較命令を用いて比較を行うことを可能にする手法である。
【００６６】
本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造（３０１，３０２及び３０３）において、或る中間ノードＡは、当該中間ノードＡが属するグループと同じグループ（すなわち、当該中間ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループ）の中間ノードＢだけを子ノードとして有することが保証されている。
【００６７】
図２は、本発明の実施態様に従う検索手法１において使用するために構築されたツリー構造の例を示した図である。
【００６８】
ツリー（２０１）は、根ノード（２１１）、中間ノード（２１２〜２１６）、及び、葉ノード（２２１〜２３１）を有するとする。
【００６９】
根ノード（２１１）はツリー（２０１）の頂点にあるノードであり、従って、根ノード（２１１）は親ノードを持たない。根ノード（２１１）は、エントリとして、複数（図示の例では、４個）のキーを持つことができるとする。根ノード（２１１）は、中間ノード（２１２〜２１６）と直接的に又は間接的にエッジによって接続されている。根ノード（２１１）の各エントリは、当該根ノード（２１１）と直接的にエッジによって接続されている中間ノード（２１２、２１３、２１４及び２１５）それぞれの左端にあるエントリ内のキー値を持つ。
【００７０】
中間ノード（２１２〜２１６）は子ノードを持つノードであり、且つ、根ノード（２１１）及び葉ノード（２２１〜２３１）以外のノードである。中間ノード（２１２〜２１６）はそれぞれ、エントリとして、１又は複数個（図示の例では、４個）のキーを持つことができるとする。中間ノード（２１２〜２１６）はそれぞれ、根ノード（２１１）及び葉ノード（２２１〜２３１）それぞれと直接的に又は間接的にエッジによって接続されている。中間ノードは内部ノードとも呼ばれる。
【００７１】
葉ノード（２２１〜２３１）は、ツリー（２０１）の最底辺にあるノードであり、従って、葉ノード（２２１〜２３１）は子ノードを持たない。葉ノード（２２１〜２３１）はそれぞれ、エントリとして、１又は複数個（図示の例では、２個）のキーを持つことができるとする。また、葉ノード（２２１〜２３１）にデータが格納されている。
【００７２】
根ノード（２１１）及び中間ノード（２１２〜２１６）はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記３つのグループのノードに分類される：
（１）３２ビット幅以下のキーを持つノード（すなわち、全てのビット幅のキーを持ちうる）；
（２）１６ビット幅以下のキーを持つノード；及び、
（３）８ビット幅のキーだけを持つノード。
【００７３】
なお、図２に示すツリー（２０１）の例では３つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、４つのグループ（６４ビット幅以下のキーを持つノード；３２ビット幅以下のキーを持つノード；１６ビット幅以下のキーを持つノード；及び、８ビット幅のキーだけを持つノード）、５つのグループ（１２８ビット幅以下のキーを持つノード；６４ビット幅以下のキーを持つノード；３２ビット幅以下のキーを持つノード；１６ビット幅以下のキーを持つノード；及び、８ビット幅のキーだけを持つノード）、又は、６つのグループ（２５６ビット幅以下のキーを持つノード；１２８ビット幅以下のキーを持つノード；６４ビット幅以下のキーを持つノード；３２ビット幅以下のキーを持つノード；１６ビット幅以下のキーを持つノード；及び、８ビット幅のキーだけを持つノード）の各ノードに分類することも可能である。
【００７４】
（１）３２ビット幅以下のキーを持つノードは、３２ビット幅のキー、並びに任意的に、１６ビット幅のキー及び／又は８ビット幅のキーを有しうる。ツリー（２０１）のうち、３２ビット幅以下のキーを持つノードは、根ノード（２１１）及び中間ノード（２１５）である。根ノード（２１１）は、３２ビット幅のキー（70000）、１６ビット幅のキー（500）、及び８ビット幅のキー（0，50）を有している。中間ノード（２１５）は、３２ビット幅のキー（70000，71000，80000）だけを有している。
【００７５】
（２）１６ビット幅以下のキーを持つノードは、１６ビット幅のキー、及び任意的に、８ビット幅のキーを有しうる。ツリー（２０１）のうち、１６ビット幅以下のキーを持つノードは、中間ノード（２１３）及び中間ノード（２１４）である。中間ノード（２１３）は、１６ビット幅のキー（400）、及び８ビット幅のキー（50）を有している。中間ノード（２１４）は、１６ビット幅のキー（500，510）だけを有している。
【００７６】
（３）８ビット幅のキーだけを持つノードは、ツリー（２０１）のうち、中間ノード（２１２）及び中間ノード（２１６）である。中間ノード（２１２）は、８ビット幅のキー（0，10，20）だけを有している。中間ノード（２１６）は、８ビット幅のキー（50，60）だけを有している。
【００７７】
ツリー（２０１）中、中間ノード（２１３）は１６ビット幅以下のキーを持つノードであるが、その子ノードとして中間ノード（２１６）を有しており、当該中間ノード（２１６）は、８ビット幅のキーだけを持つノードである。すなわち、本発明の実施態様に従う検索手法１において使用するために構築されたツリー構造において、或る中間ノードＡは、当該中間ノードＡが属するグループと異なるグループ（すなわち、当該中間ノードＡが属するグループのビット幅よりも小さい又は大きいビット幅のキーを持つグループ）の中間ノードＢを子ノードとして有しうる。
【００７８】
ツリー（２０１）において、データを検索する場合には、（１）３２ビット幅以下のキーを持つノード、（２）１６ビット幅以下のキーを持つノード、及び（３）８ビット幅のキーだけを持つノード毎に、キー幅（３２ビット幅、１６ビット幅、又は８ビット幅）に応じたＳＩＭＤ命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【００７９】
また、ツリー（２０１）は、上記したとおり、或る中間ノードＡは、当該中間ノードＡが属するグループと異なるグループの中間ノードＢを子ノードとして有する場合がある。例えば、１６ビット幅以下のキーを持つ中間ノード（２１３）はその子ノードとして、上記１６ビット幅と異なる８ビット幅のキーだけを持つ中間ノード（２１６）を有する。従って、コンピュータは、検索キーの値を有効数とする最小ビット幅のグループに対応する命令（例えば、ＳＩＭＤ命令）を使用して、当該ツリー（２０１）中のデータの検索を行う場合に、子ノードである中間ノードを辿る度に、当該中間ノードの種類を判断する（すなわち、上記（１）〜（３）のどのグループに属するかを判断する）必要がある。
【００８０】
図３Ａは、本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【００８１】
ツリー（３０１）は、根ノード（３１１）、中間ノード（３１２〜３１７）、及び、葉ノード（３２１〜３３１）を有するとする。
【００８２】
根ノード（３１１）はツリー（３０１）の頂点にあるノードであり、従って、根ノード（３１１）は親ノードを持たない。根ノード（３１１）は、エントリとして、複数（図示の例では、４個）のキーを持つことができるとする。根ノード（３１１）は、中間ノード（３１２〜３１７）と直接的に又は間接的にエッジによって接続されている。根ノード（３１１）の各エントリは、当該根ノード（３１１）と直接的にエッジによって接続されている中間ノード（３１２、３１３及び３１４）それぞれの左端にあるエントリ内のキー値を持つ。
【００８３】
中間ノード（３１２〜３１７）は子ノードを持つノードであり、且つ、根ノード（３１１）及び葉ノード（３２１〜３３１）以外のノードである。中間ノード（３１２〜３１７）はそれぞれ、エントリとして、１又は複数個（図示の例では、４個）のキーを持つことができるとする。中間ノード（３１２〜３１７）はそれぞれ、根ノード（３１１）及び葉ノード（３２１〜３３１）それぞれと直接的に又は間接的にエッジによって接続されている。中間ノードは内部ノードとも呼ばれる。
【００８４】
葉ノード（３２１〜３３１）は、ツリー（３０１）の最底辺にあるノードであり、従って、葉ノード（３２１〜３３１）は子ノードを持たない。葉ノード（３２１〜３３１）はそれぞれ、エントリとして、１又は複数個（図示の例では、２個）のキーを持つことができるとする。また、葉ノード（３２１〜３３１）にデータが格納されている。
【００８５】
根ノード（３１１）及び中間ノード（３１２〜３１７）はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記４つのグループのノードに分類される：
（１）３２ビット幅以下のキーを持つノード（すなわち、全てのビット幅のキーを持ちうる）；
（２）３２ビット幅のキーだけを持つノード；
（３）１６ビット幅のキーだけを持つノード；及び、
（４）８ビット幅のキーだけを持つノード。
【００８６】
なお、図３Ａに示すツリー（３０１）の例では４つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、５つのグループ（６４ビット幅以下のキーを持つノード；６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）、６つのグループ（１２８ビット幅以下のキーを持つノード；１２８ビット幅のキーだけを持つノード；６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）、又は、７つのグループ（２５６ビット幅以下のキーを持つノード；２５６ビット幅のキーだけを持つノード；１２８ビット幅のキーだけを持つノード；６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）の各ノードに分類することも可能である。
【００８７】
（１）３２ビット幅以下のキーを持つノードは、３２ビット幅のキー、並びに任意的に、１６ビット幅のキー及び／又は８ビット幅のキーを有しうる。ツリー（３０１）のうち、３２ビット幅以下のキーを持つノードは、根ノード（３１１）である。根ノード（３１１）は、３２ビット幅のキー（70000）、１６ビット幅のキー（500）、及び８ビット幅のキー（0）を有している。
【００８８】
（２）３２ビット幅のキーだけを持つノードは、ツリー（３０１）のうち、中間ノード（３１４）である。中間ノード（３１４）は、３２ビット幅のキー（70000，71000，80000）だけを有している。
【００８９】
（３）１６ビット幅のキーだけを持つノードは、ツリー（３０１）のうち、中間ノード（３１３）、中間ノード（３１６）及び中間ノード（３１７）である。中間ノード（３１３）は、１６ビット幅のキー（400，500）だけを有している。中間ノード（３１６）は、１６ビット幅のキー（400）だけを有している。中間ノード（３１７）は、１６ビット幅のキー（500，510）だけを有している。
【００９０】
（４）８ビット幅のキーだけを持つノードは、ツリー（３０１）のうち、中間ノード（３１２）及び中間ノード（３１５）である。中間ノード（３１２）は、８ビット幅のキー（0，50，60）だけを有している。中間ノード（３１５）は、８ビット幅のキー（0，10，20）だけを有している。
【００９１】
図３Ａに示す本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造において、根ノード以外の中間ノードは、３２ビット幅、１６ビット幅、又は８ビット幅のいずれかのキーだけを持つノードに分類される。また、図３Ａに示す本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造において、或る中間ノードＡは、当該中間ノードＡが属するグループと同じグループ（すなわち、当該中間ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループ）の中間ノードＢだけを子ノードとして有する。
【００９２】
ツリー（３０１）において、データを検索する場合には、（１）３２ビット幅以下のキーを持つノード、（２）１６ビット幅以下のキーを持つノード、及び（３）８ビット幅のキーだけを持つノード毎に、キー幅（３２ビット幅、１６ビット幅、又は８ビット幅）に応じたＳＩＭＤ命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【００９３】
また、ツリー（３０１）は、上記したとおり、根ノード（３１１）以外のある中間ノードＡは、その子ノードとして、当該中間ノードＡが属するグループと同じグループ（すなわち、当該中間ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループである）の中間ノードＢだけを子ノードとして有することが保証されている。従って、コンピュータ（１０１）は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令（例えば、ＳＩＭＤ命令）を使用して、当該ツリー（３０１）中のデータの検索を行う場合には、根ノード（３１１）に直接的にエッジによって接続されている中間ノード（３１２，３１３，及び３１４）の種類を判断すれば（すなわち、上記（２）〜（４）のどのグループに属するかを判断する）、それ以降の子ノードである中間ノードにおいて、当該中間ノードを辿る度に、当該中間ノードの種類を判断する（すなわち、上記（２）〜（４）のどのグループに属するかを判断する）必要はない。
【００９４】
図３Ｂは、本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【００９５】
ツリー（３０２）は、根ノード（３４１）、中間ノード（３４２〜３４６）、及び、葉ノード（３５１〜３６１）を有するとする。
【００９６】
根ノード（３４１）について、図３Ａに示す根ノード（３１１）の説明を参照されたい。
【００９７】
中間ノード（３４２〜３４６）について、図３Ａに示す中間ノード（３１２〜３１７）の説明を参照されたい。
【００９８】
葉ノード（３５１〜３６１）について、図３Ａに示す葉ノード（３２１〜３３１）の説明を参照されたい。
【００９９】
図３Ｂに示すツリー（３０２）の根ノード（３４１）は、図３Ａに示すツリー（３０１）の根ノード（３１１）と異なり、あるビット幅のキーだけを持つノードの複数それぞれと直接的にエッジによって接続されている。すなわち、根ノード（３４１）は、１６ビット幅のキーだけを持つノードである中間ノード（３４３）及び中間ノード（３４４）それぞれと直接的にエッジによって接続されている。
【０１００】
ツリー（３０２）において、データを検索する場合には、（１）３２ビット幅以下のキーを持つノード、（２）１６ビット幅以下のキーを持つノード、及び（３）８ビット幅のキーだけを持つノード毎に、キー幅（３２ビット幅、１６ビット幅、又は８ビット幅）に応じたＳＩＭＤ命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【０１０１】
また、ツリー（３０２）は、上記したとおり、根ノード（３４１）以外のある中間ノードＡは、その子ノードとして、当該中間ノードＡが属するグループと同じグループ（すなわち、当該中間ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループである）の中間ノードＢだけを子ノードとして有することが保証されている。従って、コンピュータ（１０１）は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令（例えば、ＳＩＭＤ命令）を使用して、当該ツリー（３０２）中のデータの検索を行う場合には、根ノード（３４１）に直接的にエッジによって接続されている中間ノード（３４２，３４３，３４４，及び３４５）の種類を判断すれば（すなわち、上記（２）〜（４）のどのグループに属するかを判断する）、それ以降の子ノードである中間ノードにおいて、当該中間ノードを辿る度に、当該中間ノードの種類を判断する（すなわち、上記（２）〜（４）のどのグループに属するかを判断する）必要はない。
【０１０２】
図３Ｃは、本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造の例を示した図である。
【０１０３】
ツリー（３０３）は、ノード（３７１〜３７４）、及び、葉ノード（３８１〜３９１）を有するとする。ツリー（３０３）は、所謂、根ノードを有していない。しかしながら、ノード（３７１）、ノード（３７２）及びノード（３７３）の最上位ノードとして実質的に根ノードが存在するともみなせる。従って、ノード（３７１〜３７４）は、中間ノードに対応する。または、ツリー（３０３）は、最上位ノードであるノード（３７１）、ノード（３７２）及びノード（３７３）それぞれを部分ツリーの根ノードとするツリーであるとも見なせる。この場合に、根ノード（３７１）の中間ノードは、ノード（３７４）である。
【０１０４】
根ノード及び中間ノードについて、図３Ａに示す根ノード（３１１）及び中間ノード（３１２〜３１７）の説明を参照されたい。
【０１０５】
葉ノード（３８１〜３９１）について、図３Ａに示す葉ノード（３２１〜３３１）の説明を参照されたい。
【０１０６】
ノード（３７１〜３７４）はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記３つのグループのノードに分類される：
（１）３２ビット幅のキーだけを持つノード； 
（２）１６ビット幅のキーだけを持つノード；及び、
（３）８ビット幅のキーだけを持つノード。
【０１０７】
なお、図３Ｃに示すツリー（３０３）の例では３つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、４つのグループ（６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）、５つのグループ（１２８ビット幅のキーだけを持つノード；６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）、又は、６つのグループ（２５６ビット幅のキーだけを持つノード；１２８ビット幅のキーだけを持つノード；６４ビット幅のキーだけを持つノード；３２ビット幅のキーだけを持つノード；１６ビット幅のキーだけを持つノード；及び、８ビット幅のキーだけを持つノード）の各ノードに分類することも可能である。
【０１０８】
（１）３２ビット幅のキーだけを持つノードは、ツリー（３０３）のうち、ノード（３７３）である。ノード（３７３）は、３２ビット幅のキー（70000，71000，80000）だけを有している。従って、ノード（３７３）及び葉ノード（３８９〜３９１）は、ツリー（３０３）の部分ツリーであり、当該部分ツリーは３２ビット幅のキーだけを持つグループといえる。また、この場合に、ノード（３７３）は部分ツリーの根ノードともいえる。
【０１０９】
（２）１６ビット幅のキーだけを持つノードは、ツリー（３０３）のうち、ノード（３７２）である。ノード（３７２）は、１６ビット幅のキー（400，500，510）だけを有している。従って、ノード（３７２）及び葉ノード（３８６〜３８８）は、ツリー（３０３）の部分ツリーであり、当該部分ツリーは１６ビット幅のキーだけを持つグループといえる。また、この場合に、ノード（３７２）は部分ツリーの根ノードともいえる。
【０１１０】
（３）８ビット幅のキーだけを持つノードは、ツリー（３０３）のうち、ノード（３７１）及びノード（３７４）である。ノード（３７１）は、８ビット幅のキー（0，50，60）だけを有している。ノード（３７４）は、８ビット幅のキー（0，10，20）だけを有している。従って、ノード（３７１）、ノード（３７４）及び葉ノード（３８１〜３８５）は、ツリー（３０３）の部分ツリーであり、当該部分ツリーは８ビット幅のキーだけを持つグループといえる。また、この場合に、ノード（３７１）は部分ツリーの根ノード、ノード（３７４）は中間ツリーともいえる。
【０１１１】
図３Ｃに示す本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造において、ノードは、３２ビット幅、１６ビット幅、又は８ビット幅のいずれかのキーだけを持つノードに分類される。また、図３Ｃに示す本発明の実施態様に従う検索手法２において使用するために構築されたツリー構造において、或る中間ノードＡは、当該中間ノードＡが属するグループと同じグループ（すなわち、当該中間ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループ）の中間ノードＢだけを子ノードとして有する。
【０１１２】
ツリー（３０３）において、データを検索する場合には、（１）３２ビット幅以下のキーを持つノード、（２）１６ビット幅以下のキーを持つノード、及び（３）８ビット幅のキーだけを持つノード毎に、キー幅（３２ビット幅、１６ビット幅、又は８ビット幅）に応じたＳＩＭＤ命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【０１１３】
また、ツリー（３０３）は、上記したとおり、あるノードＡは、その子ノードとして、当該ノードＡが属するグループと同じグループ（すなわち、当該ノードＡが属するグループのビット幅と同じビット幅のキーを持つグループである）のノードＢだけを子ノードとして有することが保証されている。従って、コンピュータ（１０１）は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令（例えば、ＳＩＭＤ命令）を使用して、当該ツリー（３０３）中のデータの検索を行う場合には、最上位のノード（３７１，３７２，及び３７３）の種類を判断すれば（すなわち、上記（１）〜（３）のどのグループに属するかを判断する）、それ以降の子ノードにおいて、当該子ノードを辿る度に、当該子ノードの種類を判断する（すなわち、上記（１）〜（３）のどのグループに属するかを判断する）必要はない。
【０１１４】
下記図４Ａ〜図４Ｄ及び下記図４Ｅ〜図４Ｈそれぞれにおいて、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１及び例２を示す。同様に、下記図５Ａ〜図５Ｂ及び下記図５Ｃ〜図５Ｅそれぞれにおいて、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１及び例２を示す。
【０１１５】
図４Ａ〜図４Ｄは、本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【０１１６】
再構築対象のツリー（４０１Ａ）は部分ツリーであり、根ノード（図示せず）、中間ノード（４１１〜４１２）、及び葉ノード（４２１〜４２３）を有するとする。中間ノード（４１１〜４１２）はそれぞれ３つのキーまで、葉ノード（４２１〜４２３）はそれぞれ２つのキーまで持つことができるとする。
【０１１７】
中間ノード（４１１）は、１６ビット幅以下のキーを持つノードであり、１６ビット幅のキー（500）、及び８ビット幅のキー（0，50）を有している。中間ノード（４１２）は、８ビット幅のキーだけを持つノードであり、８ビット幅のキー（0，10，20）だけを有している。
【０１１８】
コンピュータ（１０１）は、キー値が11であるエントリ（キー値11）をツリー（４０１Ａ）の葉ノード中に挿入しようとする。
【０１１９】
ステップ１Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ａ）中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ（１０１）は、キー値11が中間ノード（４１１）中のキー値50よりも小さいことから、当該中間ノード（４１１）のうち、キー値50の左側のエントリが指す中間ノード（４１２）を発見する。引き続き、コンピュータ（１０１）は、ツリー（４０１Ｂ；４０１Ａと同じ）中において、キー値11が上記発見した中間ノード（４１２）中のキー値20よりも小さいことから、当該中間ノード（４１２）のうち、キー値20の左側のエントリが指す葉ノード（４２２）を発見する。
【０１２０】
ステップ２Ａにおいて、コンピュータ（１０１）は、ステップ１Ａで発見した葉ノード（４２２）中にキー値11を挿入しようとする（図４Ａに示すツリー（４０１Ｂ）を参照）。しかしながら、コンピュータ（１０１）は、葉ノード（４２２）は２つのキー値10及び12を既に有しており、且つ、葉ノードは２つまでのキーしか持つことができないことから、葉ノード（４２２）中にキー値11を挿入すると、当該葉ノード（４２２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記葉ノード（４２２）を２つの葉ノード、すなわちキー値10を持つ葉ノードとキー値12を持つ葉ノード（４２５）（図４Ａに示すツリー（４０１Ｃ）を参照）に分割する。そして、コンピュータ（１０１）は、分割後の上記キー値10を持つ葉ノードにキー値11を挿入して、キー値10及び11を持つ葉ノード（４２４）（図４Ａに示すツリー（４０１Ｃ）を参照）を生成する。
【０１２１】
ステップ３Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ｃ）において、上位にある中間ノード（４１２）からキー値12を持つ葉ノード（４２５）に対するエッジがないことから、中間ノード（４１２）から葉ノード（４２５）に対してリンクを張る。そこで、コンピュータ（１０１）は、上記中間ノード（４１２）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（４１２）は３つのキー値0,10及び12を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（４１２）中にキー値12を挿入すると、当該中間ノード（４１２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（４１２）を２つの中間ノード、すなわち中間ノード（４１３）と中間ノード（４１４）とに分割する（図４Ｂに示すツリー（４０１Ｄ）を参照）。上記中間ノード（４１３）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値0及び10を有する（図４Ｂに示すツリー（４０１Ｄ）を参照）。また、上記中間ノード（４１４）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値20を有する（図４Ｂに示すツリー（４０１Ｄ）を参照）。
【０１２２】
ステップ４Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ｄ）において、分割した中間ノード（４１４）の左端にキー値12を挿入し、キー値12及び20を持つ中間ノード（４１５）（図４Ｂに示すツリー（４０１Ｅを参照）を生成する。なお、コンピュータ（１０１）は、分割した中間ノード（４１３）の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード（図示せず）を生成してもよい。以下では、キー値12及び20を持つ中間ノード（４１５）を生成した場合の態様について、引き続き説明する。引き続き、コンピュータ（１０１）は、上位にある中間ノード（４１３，４１５）からキー値12を持つ葉ノード（４２５）に対するエッジがないことから、中間ノード（４１５）からキー値12を持つ葉ノード（４２５）にリンクを張る（図４Ｂに示すツリー（４０１Ｅ）を参照）。
【０１２３】
ステップ５Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ｅ）において、上位にある中間ノード（４１１）から中間ノード（４１５）に対するエッジがないことから、中間ノード（４１１）から中間ノード（４１５）に対してリンクを張る。そこで、コンピュータ（１０１）は、上記中間ノード（４１１）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（４１１）は３つのキー値0,50及び500を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（４１１）中にキー値12を挿入すると、当該中間ノード（４１１）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（４１１）を２つの中間ノード、すなわち中間ノード（４１６）と中間ノード（４１７）とに分割する（図４Ｃに示すツリー（４０１Ｆ）を参照）。上記中間ノード（４１６）は、分割前の１６ビット幅以下のキーと異なる８ビット幅のキーだけを持ち、且つ、キー値0を有する（図４Ｃに示すツリー（４０１Ｆ）を参照）。当該中間ノード（４１６）が分割前の１６ビット幅以下のキーと異なるグループである８ビット幅のキーだけを持つ理由は、当該中間ノード（４１６）のキー値0が８ビット幅だけで表現できるからである。従って、中間ノード（４１６）は１６ビット幅以下のキーを持つノードから８ビット幅のキーだけを持つノードにグループが変更されている。また、上記中間ノード（４１７）は、分割前の１６ビット幅以下のキーと同じ１６ビット幅以下のキーを持ち、且つ、キー値50及び500を有する（図４Ｃに示すツリー（４０１Ｆ）を参照）。
【０１２４】
ステップ６Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ｆ）において、分割した上記中間ノード（４１６）にキー値12を挿入して、中間ノード（４１８）（図４Ｃに示すツリー（４１８）を参照）を生成する。引き続き、コンピュータ（１０１）は、上位にある中間ノード（４１８）からキー値12を持つ中間ノード（４１５）に対するエッジがないことから、中間ノード（４１８）からキー値12を持つ中間ノード（４１５）にリンクを張る（図４Ｃに示すツリー（４０１Ｇ）を参照）。
【０１２５】
ステップ７Ａにおいて、コンピュータ（１０１）は、ツリー（４０１Ｇ）において、中間ノード（４１８）及び中間ノード（４１７）の親ノード（４１９）を生成する（図４Ｄに示すツリー（４０１Ｈ）を参照）。親ノード（４１９）は、１６ビット幅以下のキーを持つノードであり、且つ、中間ノード（４１８）の左端のキー値0及び中間ノード（４１７）の左端のキー値50を有する。
【０１２６】
図４Ｄに示すツリー（４０１Ｈ）は、図４Ａに示す再構築対象のツリー（４０１Ａ）から動的に再構築されたツリーである。
【０１２７】
図４Ａ〜図４Ｄに示す上記例１に説明した通り、キー値が11であるエントリ（キー値11）をツリー（４０１Ａ）のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法１において使用される新たなツリー（４０１Ｈ）が動的に再構築される。
【０１２８】
図４Ｅ〜図４Ｈは、本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例２を示した図である。
【０１２９】
再構築対象のツリー（４３１Ａ）は、図４Ａに示すツリー（４０１Ａ）と同じである。従って、再構築対象のツリー（４３１Ａ）並びに中間ノード（４５１）及び中間ノード（４５２）についての説明は、図４Ａに示す再構築対象のツリー（４０１Ａ）並びに中間ノード（４１１）及び中間ノード（４１２）の説明を参照されたい。
【０１３０】
コンピュータ（１０１）は、キー値が11であるエントリ（キー値11）をツリー（４３１Ａ）の葉ノード中に挿入しようとする。
【０１３１】
ステップ１Ｂ〜ステップ２Ｂそれぞれは、図４Ａに示すステップ１Ａ〜ステップ２Ａそれぞれに対応する。従って、ステップ１Ｂ〜ステップ２Ｂについての説明は、図４に示すステップ１Ａ〜ステップ２Ａについての説明を参照されたい。
【０１３２】
ステップ３Ｂにおいて、コンピュータ（１０１）は、ツリー（４３１Ｃ）において、上位にある中間ノード（４５２）からキー値12を持つ葉ノード（４６５）に対するエッジがないことから、中間ノード（４５２）から葉ノード（４６５）に対してリンクを張る（下記図４Ｆに示すツリー（４３１Ｄ）中の点線を参照）。
【０１３３】
ステップ４Ｂにおいて、コンピュータ（１０１）は、上記中間ノード（４５２）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（４５２）は３つのキー値0,10及び20を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（４５２）中にキー値12を挿入すると、当該中間ノード（４５２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（４５２）を２つの中間ノード、すなわち（４５３）と中間ノード（４５５）とに分割する（図４Ｆに示すツリー（４３１Ｅ）を参照）。上記中間ノード（４５３）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値0及び10を有する（図４Ｆに示すツリー（４３１Ｅ）を参照）。また、上記中間ノード（４５５）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値12（挿入された）及び20を有する（図４Ｆに示すツリー（４３１Ｅ）を参照）。なお、コンピュータ（１０１）は、分割した中間ノード（４５３）の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード（図示せず）を生成してもよい。以下では、キー値12及び20を持つ中間ノード（４５５）を生成した場合の態様について、引き続き説明する。
【０１３４】
ステップ５Ｂにおいて、コンピュータ（１０１）は、ツリー（４３１Ｅ）において、上位にある中間ノード（４５１）から中間ノード（４５５）に対するエッジがないことから、中間ノード（４５１）から中間ノード（４５５）に対してリンクを張る。（下記図４Ｇに示すツリー（４３１Ｆ）中に示す点線を参照）。
【０１３５】
ステップ６Ｂにおいて、コンピュータ（１０１）は、上記中間ノード（４５１）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（４５１）は３つのキー値0,50及び500を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（４５１）中にキー値12を挿入すると、当該中間ノード（４５１）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（４５１）を２つの中間ノード、すなわち中間ノード（４５８）と中間ノード（４５７）とに分割する（下記図４Ｇに示すツリー（４３１Ｇ）を参照）。上記中間ノード（４５８）は、分割前の１６ビット幅以下のキーと異なる８ビット幅のキーだけを持ち、且つ、キー値0及びキー値12（挿入された）を有する（図４Ｇに示すツリー（４３１Ｇ）を参照）。当該中間ノード（４５８）が分割前の１６ビット幅以下のキーと異なるグループである８ビット幅のキーだけを持つ理由は、当該中間ノード（４５８）のキー値0が８ビット幅だけで表現できるからである。従って、中間ノード（４５８）は１６ビット幅以下のキーを持つノードから８ビット幅のキーだけを持つノードにグループが変更されている。また、上記中間ノード（４５７）は、分割前の１６ビット幅以下のキーと同じ１６ビット幅以下のキーを持ち、且つ、キー値50及び500を有する（図４Ｇに示すツリー（４３１Ｇ）を参照）。
【０１３６】
ステップ７Ｂにおいて、コンピュータ（１０１）は、中間ノード（４５８）及び中間ノード（４５７）の親ノード（４５９）を生成する（図４Ｈのツリー４３１Ｈを参照）。親ノード（４５９）は、１６ビット幅以下のキーを持つノードであり、且つ、中間ノード（４５８）の左端のキー値0及び中間ノード（４５７）の左端のキー値50を有する。
【０１３７】
図４Ｈに示すツリー（４３１Ｈ）は、図４Ｅに示す再構築対象のツリー（４３１Ａ）から動的に再構築されたツリーである。
【０１３８】
図４Ｅ〜図４Ｈに示す上記例２に説明した通り、キー値が11であるエントリ（キー値11）をツリー（４３１Ａ）のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法１において使用される新たなツリー（４３１Ｈ）が動的に再構築される。
【０１３９】
図５Ａ〜図５Ｂは、本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【０１４０】
再構築対象のツリー（５０１Ａ）は部分ツリーであり、当該部分ツリーの根ノード（図示せず，ツリー全体からすれば、中間ノードでもある）、中間ノード（５１１）、及び葉ノード（５２１〜５２３）を有するとする。中間ノード（５１１）は３つのキーまで、葉ノード（５２１〜５２３）はそれぞれ２つのキーまで持つことができるとする。
【０１４１】
中間ノード（５１１）は、８ビット幅のキー（0，10，20）だけを有している。
【０１４２】
コンピュータ（１０１）は、キー値が11であるエントリ（キー値11）をツリー（５０１Ａ）の葉ノード中に挿入しようとする。
【０１４３】
ステップ１Ｃにおいて、コンピュータ（１０１）は、ツリー（５０１Ａ）中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ（１０１）は、キー値11が中間ノード（５１１）中のキー値20よりも小さいことから、当該中間ノード（５１１）のうち、キー値20の左側のエントリが指す葉ノード（５２２）を発見する。
【０１４４】
ステップ２Ｃにおいて、コンピュータ（１０１）は、ツリー（５０１Ｂ；５０１Ａと同じ）中において、上記ステップ１Ｃで発見した葉ノード（５２２）中にキー値11を挿入しようとする（図５Ａに示すツリー（５０１Ｂ）を参照）。しかしながら、コンピュータ（１０１）は、葉ノード（５２２）は２つのキー値10及び12を既に有しており、且つ、葉ノードは２つまでのキーしか持つことができないことから、葉ノード（５２２）中にキー値11を挿入すると、当該葉ノード（５２２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記葉ノード（５２２）を２つの葉ノード、すなわちキー値10を持つ葉ノード（図示せず）とキー値12を持つ葉ノード（５２５）とに分割する（図５Ａに示すツリー（５０１Ｃ）を参照）。そして、コンピュータ（１０１）は、分割後の上記キー値10を持つ葉ノード（図示せず）にキー値11を挿入して、キー値10及び11を持つ葉ノード（５２４）（図５Ａに示すツリー（５０１Ｃ）を参照）を生成する。
【０１４５】
ステップ３Ｃにおいて、コンピュータ（１０１）は、上位にある中間ノード（５１１）からキー値12を持つ葉ノード（５２５）に対するエッジがないことから、中間ノード（５１１）から葉ノード（５２５）に対してリンクを張る。そこで、コンピュータ（１０１）は、上記中間ノード（５１１）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（５１１）は３つのキー値0,10及び20を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（５１１）中にキー値12を挿入すると、当該中間ノード（５１１）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（５１１）を２つの中間ノード、すなわち中間ノード（５１２）と中間ノード（５１３）とに分割する（図５Ｂに示すツリー（５０１Ｄ）を参照）。上記中間ノード（５１２）は、分割前と同じ８ビット幅のキーだけを持ち、且つ、キー値0及び10を有する（図５Ｂに示すツリー（５０１Ｄ）を参照）。また、上記中間ノード（５１３）は、分割前と同じ８ビット幅のキーだけを持ち、且つ、キー値20を有する（図５Ｂに示すツリー（５０１Ｄ）を参照）。
【０１４６】
ステップ４Ｃにおいて、コンピュータ（１０１）は、分割した中間ノード（５１３）の左端にキー値12を挿入し、キー値12及び20を持つ中間ノード（５１４）（図５Ｂに示すツリー（５０１Ｅ）を参照）を生成する。なお、コンピュータ（１０１）は、分割した中間ノード（５１２）の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノードを生成してもよい。以下では、キー値12及び20を持つ中間ノード（５１４）を生成した場合の態様について、引き続き説明する。引き続き、コンピュータ（１０１）は、上位にある中間ノード（５１２，５１３）からキー値12を持つ葉ノード（５２５）に対するエッジがないことから、中間ノード（５１４）からキー値12を持つ葉ノード（５２５）にリンクを張る（図５Ｂに示すツリー（５０１Ｅ）を参照）。
【０１４７】
ステップ５Ｃにおいて、コンピュータ（１０１）は、中間ノード（５１２）及び中間ノード（５１４）の親ノード（５１５）を生成する（図５Ｂに示すツリー（５０１Ｆ）を参照）。親ノード（５１５）は、８ビット幅のキーだけを持つノードであり、且つ、中間ノード（５１２）の左端のキー値0及び中間ノード（５１４）の左端のキー値12を有する。
【０１４８】
図５Ｂに示すツリー（５０１Ｆ）は、図５Ａに示す再構築対象のツリー（５０１Ａ）から動的に再構築されたツリーである。
【０１４９】
図５Ａ〜図５Ｂに示す上記例１に説明したとおり、キー値が11であるエントリ（キー値11）をツリー（５０１Ａ）のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法２において使用される新たなツリー（５０１Ｆ）が動的に再構築される。
【０１５０】
図５Ｃ〜図５Ｅは、本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例１を示した図である。
【０１５１】
再構築対象のツリー（５３１Ａ）は部分ツリーであり、当該部分ツリーの根ノード（５４１，ツリー全体からすれば、中間ノードでもある）、中間ノード（５４２）、及び葉ノード（５５１〜５５３）を有するとする。根ノード（５４１）及び中間ノード（５４２）は３つのキーまで、葉ノード（５５１〜５５３）はそれぞれ２つのキーまで持つことができるとする。
【０１５２】
根ノード（５４１）は、８ビット幅のキー（0，50，100）だけを有している。また、中間ノード（５４２）は、８ビット幅のキー（0，10，20）だけを有している。
【０１５３】
コンピュータ（１０１）は、キー値が11であるエントリ（キー値11）をツリー（５３１Ａ）の葉ノード中に挿入しようとする。
【０１５４】
ステップ１Ｄにおいて、コンピュータ（１０１）は、ツリー（５３１Ａ）中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ（１０１）は、キー値11が根ノード（５４１）中のキー値50よりも小さいことから、当該根ノード（５４１）のうち、キー値50の左側のエントリが指す中間ノード（５４２）を発見する。引き続き、コンピュータ（１０１）は、ツリー（５３１Ｂ；５３１Ａと同じ）中において、キー値11が上記発見した中間ノード（５１２）中のキー値20よりも小さいことから、当該中間ノード（５４２２）のうち、キー値20の左側のエントリが指す葉ノード（５５２）を発見する。
【０１５５】
ステップ２Ｄにおいて、コンピュータ（１０１）は、ツリー（５３１Ｂ；５３１Ａと同じ）中において、上記ステップ１Ｄで発見した葉ノード（５５２）中にキー値11を挿入しようとする（図５Ｃに示すツリー（５３１Ｂ）を参照）。しかしながら、コンピュータ（１０１）は、葉ノード（５５２）は２つのキー値10及び12を既に有しており、且つ、葉ノードは２つまでのキーしか持つことができないことから、葉ノード（５５２）中にキー値11を挿入すると、当該葉ノード（５５２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記葉ノード（５５２）を２つの葉ノード、すなわちキー値10を持つ葉ノード（図示せず）とキー値12を持つ葉ノード（５５５）とに分割する（図５Ｃに示すツリー（５３１Ｃ）を参照）。そして、コンピュータ（１０１）は、分割後の上記キー値10を持つ葉ノード（図示せず）にキー値11を挿入して、キー値10及び11を持つ葉ノード（５５４）（図５Ｃに示すツリー（５３１Ｃ）を参照）を生成する。
【０１５６】
ステップ３Ｄにおいて、コンピュータ（１０１）は、上位にある中間ノード（５４１）からキー値12を持つ葉ノード（５５５）に対するエッジがないことから、中間ノード（５４２）から葉ノード（５５５）に対してリンクを張る（下記図５Ｄに示すツリー（５３１Ｄ）中の点線を参照）。
【０１５７】
ステップ４Ｄにおいて、コンピュータ（１０１）は、上記中間ノード（５４２）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該中間ノード（５４２）は３つのキー値0,10及び20を既に有しており、且つ、中間ノードは３つまでのキーしか持つことができないことから、当該中間ノード（５４２）中にキー値12を挿入すると、当該中間ノード（５４２）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記中間ノード（５４２）を２つの中間ノード、すなわち（５４３）と中間ノード（５４４）とに分割する（図５Ｄに示すツリー（５３１Ｅ）を参照）。上記中間ノード（５４３）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値0及び10を有する（図５Ｄに示すツリー（５３１Ｅ）を参照）。また、上記中間ノード（５４４）は、分割前と同じ８ビット幅のキーを持ち、且つ、キー値12（挿入された）及び20を有する（図５Ｄに示すツリー（５３１Ｅ）を参照）。なお、コンピュータ（１０１）は、分割した中間ノード（５４３）の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード（図示せず）を生成してもよい。以下では、キー値12及び20を持つ中間ノード（５４４）を生成した場合の態様について、引き続き説明する。
【０１５８】
ステップ５Ｄにおいて、コンピュータ（１０１）は、ツリー（５３１Ｅ）において、上位にある根ノード（５４１）から中間ノード（５４４）に対するエッジがないことから、根ノード（５４１）から中間ノード（５４４）に対してリンクを張る。（図５Ｄに示すツリー（５３１Ｆ）中に示す点線を参照）。
【０１５９】
ステップ６Ｄにおいて、コンピュータ（１０１）は、上記根ノード（５４１）中にキー値12を挿入しようとする。しかしながら、コンピュータ（１０１）は、当該根ノード（５４１）は３つのキー値0,50及び100を既に有しており、且つ、根ノードは３つまでのキーしか持つことができないことから、当該根ノード（５４１）中にキー値12を挿入すると、当該根ノード（５４１）のエントリがあふれてしまうと判断する。そこで、コンピュータ（１０１）は、上記根ノード（５４１）を２つの中間ノード、すなわち中間ノード（５４５）と中間ノード（５４６）とに分割する（下記図５Ｅに示すツリー（５３１Ｇ）を参照）。上記中間ノード（５４５）は、分割前と同じく８ビット幅のキーだけを持ち、且つ、キー値0を有する（図５Ｅに示すツリー（５３１Ｇ）を参照）。また、上記中間ノード（５４６）は、分割前と同じく８ビット幅のキーだけを持ち、且つ、キー値12（挿入された）、50及び100を有する（図５Ｅに示すツリー（５３１Ｇ）を参照）。
【０１６０】
ステップ７Ｄにおいて、コンピュータ（１０１）は、中間ノード（５４５）及び中間ノード（５４６）の親ノード（５４７）を生成する（図５Ｅのツリー５３１Ｈを参照）。親ノード（５４７）は、中間ノード（５４５）及び中間ノード（５４６）と同じく８ビット幅のキーだけを持つノードであり、且つ、中間ノード（５４５）の左端のキー値0及び中間ノード（５４６）の左端のキー値12を有する。
【０１６１】
図５Ｅに示すツリー（５３１Ｈ）は、図５Ｃに示す再構築対象のツリー（５３１Ａ）から動的に再構築されたツリーである。
【０１６２】
図５Ｃ〜図５Ｅに示す上記例２に説明したとおり、キー値が11であるエントリ（キー値11）をツリー（５３１Ａ）のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法２において使用される新たなツリー（５３１Ｈ）が動的に再構築される。
【０１６３】
図６は、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理全体のフローチャートを示す。
【０１６４】
ステップ６０１において、コンピュータ（１０１）は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理を開始する。
【０１６５】
ステップ６０２において、コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法１又は上記検索手法２において使用する為のツリー構造を構築する。コンピュータ（１０１）は、当該ツリー構造の構築において、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築する。上記グループは例えば、８ビット幅のキーだけを持つノード、１６ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、３２ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、６４ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、１２８ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、又は、２５６ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノードでありうる。
【０１６６】
コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法１において使用する為のツリー構造を構築する場合には、ツリーの根ノード以外のノード（例えば、中間ノード）が、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、ツリーを構築しうる。
【０１６７】
コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法１において使用する為のツリー構造を構築する場合には、ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも２つのグループを下位にあるノードとして有するように、上記ツリーを構築しうる。
【０１６８】
また、コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法１において使用する為のツリー構造を構築する場合に、ノード（根ノード及び中間ノード）それぞれに上記グループを識別する識別子（例えば、Ｎｏｄｅ  ＩＤ＝０８（８ビット幅のキーだけを持つノード），１６（１６ビット幅のキーだけを持つノード），３２（３２ビット幅のキーだけを持つノード）である）を付与しうる。また、コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法１において使用する為のツリー構造を構築する場合に、ノードが持つキー値の範囲に応じて、当該ノード（根ノード及び中間ノード）それぞれに上記グループを識別する識別子を付与しうる。例えば、ノードが持つキー値の範囲が0〜255であればＮｏｄｅ  ＩＤ＝０８（８ビット幅のキーだけを持つノード）、256〜65535であればＮｏｄｅ  ＩＤ＝１６（１６ビット幅のキーだけを持つノード）、65536〜4294967295であればＮｏｄｅ  ＩＤ＝３２（３２ビット幅のキーだけを持つノード）という３種類のグループとしうる。当該識別子は、コンピュータ（１０１）が、上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令（例えば、ＳＩＭＤ命令）を使用してデータを検索する為に使用されうる。コンピュータ（１０１）は例えば、識別子「Ｎｏｄｅ０８」の場合は８ビット幅データのＳＩＭＤ比較命令を用い、識別子「Ｎｏｄｅ１６」の場合は１６ビット幅データのＳＩＭＤ比較命令を用い、識別子「Ｎｏｄｅ３２」の場合は３２ビット幅データのＳＩＭＤ比較命令を用いる。同じ数のキーを比較する場合、例えば１６ビット幅データのＳＩＭＤ比較命令を用いる場合は、１６ビット幅データのＳＩＭＤ比較命令を用いる場合の半分程度の実行命令数で済む。
【０１６９】
コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法２において使用する為のツリー構造を構築する場合には、各グループを、根ノードを親ノードとするサブツリーとして構築する（図３Ａ〜図３Ｂそれぞれに示すツリー（３０１，３０２）を参照）か、又は、グループそれぞれを、部分ツリーとして構築する（図３Ｃに示すツリー（３０３）を参照）。
【０１７０】
また、コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法２において使用するために構築されたツリー構造を構築し、各グループを、根ノードを親ノードとするサブツリーとして構築する場合には、各グループのサブツリーのうち最上位にある親ノードにおいて、用意した全ての種類のノードにどれにでも到達できるようにし、当該最上位にある親ノード以下の子ノードでは特定の種類のノードだけに到達できることを保証する。当該保証により、ノードの種類を調べる操作が不要になり、ノードを辿る操作が高速化される。
【０１７１】
同様に、コンピュータ（１０１）は、本発明の実施態様に従う上記検索手法２において使用するために構築されたツリー構造を構築し、グループそれぞれを、部分ツリーとして構築する場合には、各グループの（中間）ノードのうち最上位にある親ノードにおいて、用意した全ての種類のノードにどれにでも到達できるようにし、当該最上位にある親ノード以下の子ノードでは特定の種類のノードだけに到達できることを保証する。当該保証により、ノードの種類を調べる操作が不要になり、ノードを辿る操作が高速化される。
【０１７２】
ステップ６０３において、コンピュータ（１０１）は、上記検索手法１又は上記検索手法２において使用するために構築されたツリーを再構築する場合に、ツリーのノードにキーを挿入するかを判断する。コンピュータ（１０１）は、ツリーのノードにキーを挿入することに応じて、処理をステップ６０４に進める。一方、コンピュータ（１０１）は、ツリーのノードにキーを挿入しないことに応じて、処理をステップ６０５に進める。
【０１７３】
コンピュータ（１０１）は、ツリーのノードにキーを挿入する場合に、当該ノードが持つキーが一定に範囲に収まるようにして、当該ノードを上記したグループのうちのある特定のグループに属するものとする。上記一定の範囲とは、同一のＳＳＩＭＤ比較命令で処理できることを意味する。例えば、キーの値が３２ビット幅で、８／１６／３２ビット幅データを比較可能なＳＩＭＤ命令において、符号無し整数の比較の場合には、0〜255／256〜65,535／65,536〜4,294,967,295、である。また、符号有り整数の比較の場合には、範囲の数は１６ビット幅の符号有り整数の比較の場合には、-32,768〜-129／-128〜127／128〜32,767である。
【０１７４】
ステップ６０４において、コンピュータ（１０１）は、上記検索手法１又は上記検索手法２において使用するために構築されたツリー構造において、ツリーのノードにキーを挿入する。ツリーのノードにキーを挿入することによって、当該ツリーが動的に再構築される。ツリーのノードにキーを挿入する処理の詳細については、下記図７Ａ（上記検索手法１）及び下記図７Ｂ（上記検索手法２）において説明する。
【０１７５】
ステップ６０５において、コンピュータ（１０１）は、ステップ６０２で構築されたツリー又はステップ６０４で再構築されたツリーを用いて、データ検索を行うかを判断する。コンピュータ（１０１）は、当該データ検索を行うことに応じて、処理をステップ６０６に進める。一方、コンピュータ（１０１）は、当該データ検索を行わないことに応じて、処理をステップ６０７に進める。
【０１７６】
ステップ６０６において、コンピュータ（１０１）は、ステップ６０２で構築されたツリー又はステップ６０４で再構築されたツリーにおいて、検索キーの値を有効数とする最小ビット幅のグループに対応する命令（例えば、ＳＩＭＤ命令）を使用して、検索キーの値を有効数とする最小ビット幅のグループからデータを検索する。当該データの検索において、キー値Ｋと葉ノードが持つキーとを比較して、キー値Ｋを持つ可能性がある葉ノードが発見される。
【０１７７】
ステップ６０７において、コンピュータ（１０１）は、ツリーのノードにキーを挿入することによってツリーの再構築又はデータの検索を繰り返すかを判断する。コンピュータ（１０１）は、ツリーを再構築すること又はデータを検索することに応じて、処理をステップ６０３に戻す。一方、コンピュータ（１０１）は、ツリーを再構築しないこと且つデータの検索をしないことに応じて、処理を終了ステップ６０８に進める。
【０１７８】
ステップ６０８において、コンピュータ（１０１）は、ステップ６０１で開始した上記処理を終了する。
【０１７９】
図６に示す上記フローチャートにおいて、ステップ６０２に示すツリーの構築後、キーの挿入（以下、「挿入」と示す）及びデータの検索（以下、「検索」と示す）を例えば、下記の順に実行しうる：（１）挿入→検索、（２）挿入→挿入→検索、（３）検索→挿入、及び（４）検索→検索。
【０１８０】
図７Ａは、本発明の実施態様に従い、上記検索手法１の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【０１８１】
図７Ａに示す処理において使用するために構築されたツリー構造はＢ＋−ツリーであるとする。また、中間ノードのキー幅は、８ビット幅、１６ビット幅、又は３２ビット幅の３種類であるとする。
【０１８２】
ステップ７０１において、コンピュータ（１０１）は、上記検索手法１の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する（葉ノードを特定することでもある）処理を開始する。
【０１８３】
ステップ７０２において、コンピュータ（１０１）は、入力として、検索対象であるノードが持つキー値Ｋを受け取る。
【０１８４】
ステップ７０３において、コンピュータ（１０１）は、上記検索手法１の為のツリー構造をメモリ（１０３）から読み取り、当該ツリーの根ノードを取り出す。
【０１８５】
ステップ７０４において、コンピュータ（１０１）は、ステップ７０３で取り出した根ノード又は、下記ステップ７０５、７０６若しくは７０７で決定された子ノードが持つキーのビット幅を判定する。コンピュータは、上記キー値Ｋの値を有効数とする最小ビット幅のグループに属するノードを特定する。具体的には、以下の通りである；すなわち、コンピュータ（１０１）は、当該ノードが持つキーのビット幅が８ビット幅であることに応じて、処理をステップ７０５に進める：コンピュータ（１０１）は、当該ノードが持つキーのビット幅が１６ビット幅であることに応じて、処理をステップ７０６に進める：コンピュータ（１０１）は、当該ノードが持つキーのビット幅が３２ビット幅であることに応じて、処理をステップ７０７に進める。
【０１８６】
ステップ７０５において、コンピュータ（１０１）は、当該ノードが持つキーのビット幅が８ビット幅であることに応じて、ステップ７０３で取り出した根ノード又は下記ステップ７０５、７０６若しくは７０７で決定された子ノードについて、８ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０１８７】
また、ステップ７０５において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０１８８】
ステップ７０６において、コンピュータ（１０１）は、当該ノードが持つキーのビット幅が１６ビット幅であることに応じて、ステップ７０３で取り出した根ノード又は、下記ステップ７０５、７０６若しくは７０７で決定された子ノードについて、１６ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０１８９】
また、ステップ７０６において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０１９０】
ステップ７０７において、コンピュータ（１０１）は、当該ノードが持つキーのビット幅が３２ビット幅であることに応じて、ステップ７０３で取り出した根ノード又は、下記ステップ７０５、７０６若しくは７０７で決定された子ノードについて、３２ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０１９１】
また、ステップ７０７において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０１９２】
ステップ７０８において、コンピュータ（１０１）は、ステップ７０５、７０６又は７０７において決定された子ノードが葉ノードであるかを判定する。コンピュータ（１０１）は、当該子ノードが葉ノードであることに応じて、処理をステップ７０９に進める。一方、コンピュータ（１０１）は、当該子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ７０４に戻す。
【０１９３】
ステップ７０９において、コンピュータ（１０１）は、出力として、ステップ７０８で決定された子ノード（葉ノードでもある）を、キー値Ｋを挿入すべき葉ノード又はキー値Ｋを持つ可能性がある葉ノードとする。
【０１９４】
ステップ７１０において、コンピュータ（１０１）は、ステップ７０１で開始した上記処理を終了する。
【０１９５】
図７Ｂは、本発明の実施態様に従い、上記検索手法２の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【０１９６】
図７Ｂに示す処理において使用するために構築されたツリー構造はＢ＋−ツリーであるとする。また、（中間）ノードのキー幅は、８ビット幅、１６ビット幅、又は３２ビット幅の３種類であるとする。
【０１９７】
ステップ７１１において、コンピュータ（１０１）は、上記検索手法２の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理を開始する。
【０１９８】
ステップ７１２において、コンピュータ（１０１）は、入力として、キー値Ｋを受け取る。
【０１９９】
ステップ７１３において、コンピュータ（１０１）は、キー値Ｋが必要とするビット幅を調べる。コンピュータは、上記キー値Ｋの値を有効数とする最小ビット幅のグループに属するノードを特定する。具体的には、以下の通りである；すなわち、コンピュータ（１０１）は、当該ノードが持つキーのビット幅が８ビット幅であることに応じて、Ｋが必要とするビット幅が８ビット幅であると判断する：コンピュータ（１０１）は、当該ノードが持つキーのビット幅が１６ビット幅であることに応じて、Ｋが必要とするビット幅が１６ビット幅であると判断する：コンピュータ（１０１）は、当該ノードが持つキーのビット幅が３２ビット幅であることに応じて、Ｋが必要とするビット幅が３２ビット幅であると判断する。
【０２００】
ステップ７１４において、コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が８ビット幅であることに応じて、処理をステップ７１５に進める。コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が１６ビット幅であることに応じて、処理をステップ７１８に進める。コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が３２ビット幅であることに応じて、処理をステップ７２１に進める。
【０２０１】
ステップ７１５において、コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が８ビット幅であることに応じて、８ビット幅のキーを持つ（中間）ノードを構成する部分ツリーの根ノード（又は、根ノードがない場合には最上位ノード）を取り出す。
【０２０２】
ステップ７１６において、コンピュータ（１０１）は、ステップ７１５において取り出した根ノード又は当該実行中のステップ７１６のループ直前に実行されたステップ７１６で決定された子ノードについて、８ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０２０３】
また、ステップ７１６において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０２０４】
ステップ７１７において、コンピュータ（１０１）は、ステップ７１６において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ（１０１）は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ７２４に進める。一方、コンピュータ（１０１）は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ７１６に戻す。
【０２０５】
ステップ７１８において、コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が１６ビット幅であることに応じて、１６ビット幅のキーを持つ（中間）ノードを構成する部分ツリーの根ノード（又は、根ノードがない場合には最上位ノード）を取り出す。
【０２０６】
ステップ７１９において、コンピュータ（１０１）は、ステップ７１８において取り出した根ノード又は当該実行中のステップ７１９のループ直前に実行されたステップ７１９で決定された子ノードについて、１６ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０２０７】
また、ステップ７１９において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０２０８】
ステップ７２０において、コンピュータ（１０１）は、ステップ７１９において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ（１０１）は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ７２４に進める。一方、コンピュータ（１０１）は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ７１９に戻す。
【０２０９】
ステップ７２１において、コンピュータ（１０１）は、キー値Ｋが必要とするビット幅が３２ビット幅であることに応じて、３２ビット幅のキーを持つ（中間）ノードを構成する部分ツリーの根ノード（又は、根ノードがない場合には最上位ノード）を取り出す。
【０２１０】
ステップ７２２において、コンピュータ（１０１）は、ステップ７２１において取り出した根ノード又は当該実行中のステップ７２２のループ直前に実行されたステップ７２２で決定された子ノードについて、３２ビット・データ幅を用いた比較を行うためのＳＩＭＤ命令を用いて、上記キー値Ｋと上記根又は子ノード（中間ノード又は葉ノードでありうる）のキーとを比較して、次に辿るべき子ノードを決定する。
【０２１１】
また、ステップ７２２において、コンピュータ（１０１）は、キー値Ｋを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Ｋを有効数とする最小ビット幅のグループは、上記キー値Ｋを表現可能な最小のビット幅を有するグループである。
【０２１２】
ステップ７２３において、コンピュータ（１０１）は、ステップ７２２において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ（１０１）は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ７２４に進める。一方、コンピュータ（１０１）は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ７２２に戻す。
【０２１３】
ステップ７２４において、コンピュータ（１０１）は、出力として、ステップ７１７、７２０又は７２３で決定された子ノード（葉ノードでもある）を、キー値Ｋを挿入すべき葉ノード又はキー値Ｋを持つ可能性がある葉ノードとする。
【０２１４】
ステップ７２５において、コンピュータ（１０１）は、ステップ７１１で開始した上記処理を終了する。
【０２１５】
図８Ａは、本発明の実施態様に従い、上記検索手法１において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【０２１６】
図８Ａに示す処理において使用するために構築されたツリー構造はＢ＋−ツリーであるとする。また、中間ノードのキー幅は、８ビット幅、１６ビット幅、又は３２ビット幅の３種類であるとする。
【０２１７】
ステップ８０１において、コンピュータ（１０１）は、上記検索手法１において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理を開始する（図４Ｅに示すステップ１Ｂの処理に対応する）。
【０２１８】
ステップ８０２において、コンピュータ（１０１）は、例えば図７Ａに示すステップ７０９で出力される葉ノード（すなわち、キー値Ｋを挿入する葉ノード）にエントリを挿入しようとする（図４Ｅに示すステップ１Ｂの処理に対応する）。
【０２１９】
ステップ８０３において、コンピュータ（１０１）は、上記葉ノードにエントリを挿入しようとすることで、当該葉ノードのエントリ数がオーバーフローするか（あふれるか）を判断する（図４Ｅに示すステップ２Ｂの処理に対応する）。コンピュータ（１０１）は、当該葉ノードのエントリ数がオーバーフローすることに応じて、当該葉ノードの分割処理をする為に、処理をステップ８０４に進める。一方、コンピュータ（１０１）は、当該葉ノードのエントリ数がオーバーフローしないことに応じて、上記葉ノードにエントリを挿入し、処理を終了ステップ８１３に進める。
【０２２０】
ステップ８０４において、コンピュータ（１０１）は、上記葉ノードを２つの葉ノードに分割する（図４Ｅに示すステップ２Ｂの処理に対応する）。
【０２２１】
ステップ８０５において、コンピュータ（１０１）は、上記分割して生じた２つの葉ノードのうちの一方にエントリを挿入する（図４Ｅに示すステップ２Ｂの処理に対応する）。
【０２２２】
ステップ８０６において、コンピュータ（１０１）は、上記エントリを挿入した葉ノードについて、当該葉ノードの親ノードである中間ノードにリンクを張る（図４Ｅに示すステップ３Ｂの処理に対応する）。
【０２２３】
ステップ８０７において、コンピュータ（１０１）は、上記中間ノードにリンクを張ることで、当該中間ノードのエントリ数がオーバーフローするかを判断する（図４Ｅに示すステップ４Ｂ及びステップ６Ｂの処理に対応する）。コンピュータ（１０１）は、当該中間ノードのエントリ数がオーバーフローすることに応じて、当該中間ノードの分割処理をする為に、処理をステップ８０８に進める。一方、コンピュータ（１０１）は、当該中間ノードのエントリ数がオーバーフローしないことに応じて、上記エントリを挿入した葉ノードの親ノードである中間ノードにリンクを張り、処理を終了ステップ８１３に進める。
【０２２４】
ステップ８０８において、コンピュータ（１０１）は、上記中間ノードを２つの中間ノードに分割して、分割前の中間ノードと同じビット幅のキーを持つ中間ノード、又は、分割結果でより小さいビット幅のキーを持つ中間ノードが利用可能である場合には、当該利用可能なグループに属する中間ノードを作成する（図４Ｆに示すステップ４Ｂ及びステップ６Ｂの処理に対応する）。
【０２２５】
ステップ８０９において、コンピュータ（１０１）は、オーバーフローしたノードに親ノードがあるかを判断する（図４Ｆに示すステップ４Ｂ及びステップ６Ｂの処理に対応する）。コンピュータ（１０１）は、オーバーフローしたノードに親ノードがあることに応じて、処理をステップ８１０に進める。一方、コンピュータ（１０１）は、オーバーフローしたノードに親ノードがないことに応じて、処理をステップ８１１に進める。
【０２２６】
ステップ８１０において、コンピュータ（１０１）は、親ノードの中間ノードに作成されたノードに関するリンクを張る（図４Ｆに示すステップ５Ｂの処理に対応する）。コンピュータ（１０１）は、処理をステップ８０７に進めて、上記中間ノードにリンクを張ろうとすることで、当該中間ノードのエントリ数がオーバーフローするかを判断する。以降、コンピュータ（１０１）は、ステップ８０８以降の処理を繰り返す。
【０２２７】
ステップ８１１において、コンピュータ（１０１）は、リンクを挿入する際に使用するキーのビット幅の最大のものが格納可能である、最小幅のキーを持つ親ノードを作成する（図４Ｇに示すステップ７Ｂの処理（親ノード（４５９）を作成すること）に対応する）。
【０２２８】
ステップ８１２において、コンピュータ（１０１）は、ステップ８１１で作成した親ノードとステップ８０８で作成した中間ノードとの間にリンクを張る（図４Ｇに示すステップ７Ｂの処理（親ノード（４５９）と中間ノード（４５７）との間にリンクを張ること）に対応する）。
【０２２９】
ステップ８１３において、コンピュータ（１０１）は、ステップ８０１で開始した上記処理を終了する。
【０２３０】
図８Ｂは、本発明の実施態様に従い、上記検索手法２において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【０２３１】
図８Ｂに示す処理において使用するために構築されたツリー構造はＢ＋−ツリーであるとする。また、中間ノードのキー幅は、８ビット幅、１６ビット幅、又は３２ビット幅の３種類であるとする。
【０２３２】
ステップ８２１において、コンピュータ（１０１）は、上記検索手法２において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理を開始する（図５Ｃに示すステップ１Ｄの処理に対応する）。
【０２３３】
ステップ８２２において、コンピュータ（１０１）は、例えば図７Ｂに示すステップ７２４で出力される葉ノード（すなわち、キー値Ｋを挿入する葉ノード）にエントリを挿入しようとする（図５Ｃに示すステップ１Ｄの処理に対応する）。
【０２３４】
ステップ８２３において、コンピュータ（１０１）は、上記葉ノードにエントリを挿入しようとすることで、当該葉ノードのエントリ数がオーバーフローするか（あふれるか）を判断する（図５Ｃに示すステップ２Ｄの処理に対応する）。コンピュータ（１０１）は、当該葉ノードのエントリ数がオーバーフローすることに応じて、当該葉ノードの分割処理をする為に、処理をステップ８２４に進める。一方、コンピュータ（１０１）は、当該葉ノードのエントリ数がオーバーフローしないことに応じて、上記葉ノードにエントリを挿入し、処理を終了ステップ８３３に進める。
【０２３５】
ステップ８２４において、コンピュータ（１０１）は、上記葉ノードを２つの葉ノードに分割する（図５Ｃに示すステップ２Ｄの処理に対応する）。
【０２３６】
ステップ８２５において、コンピュータ（１０１）は、上記分割して生じた２つの葉ノードのうちの一方にエントリを挿入する（図５Ｃに示すステップ２Ｄの処理に対応する）。
【０２３７】
ステップ８２６において、コンピュータ（１０１）は、上記エントリを挿入した葉ノードについて、当該葉ノードの親ノードである中間ノードにリンクを張る（図５Ｄに示すステップ３Ｄの処理に対応する）。
【０２３８】
ステップ８２７において、コンピュータ（１０１）は、上記中間ノードにリンクを張ることで、当該中間ノードのエントリ数がオーバーフローするかを判断する（図５Ｄに示すステップ４Ｄ及びステップ６Ｄの処理に対応する）。コンピュータ（１０１）は、当該中間ノードのエントリ数がオーバーフローすることに応じて、当該中間ノードの分割処理をする為に、処理をステップ８２８に進める。一方、コンピュータ（１０１）は、当該中間ノードのエントリ数がオーバーフローしないことに応じて、上記エントリを挿入した葉ノードの親ノードである中間ノードにリンクを張り、処理を終了ステップ８３３に進める。
【０２３９】
ステップ８２８において、コンピュータ（１０１）は、上記中間ノードを２つの中間ノードに分割して、分割前の中間ノードと同じビット幅のキーを持つ中間ノードを作成する（図５Ｄに示すステップ４Ｄ及びステップ６Ｄの処理に対応する）。
【０２４０】
ステップ８２９において、コンピュータ（１０１）は、オーバーフローしたノードに親ノードがあるかを判断する（図５Ｄに示すステップ４Ｄ及びステップ６Ｄの処理に対応する）。コンピュータ（１０１）は、オーバーフローしたノードに親ノードがあることに応じて、処理をステップ８３０に進める。一方、コンピュータ（１０１）は、オーバーフローしたノードに親ノードがないことに応じて、処理をステップ８３１に進める。
【０２４１】
ステップ８３０において、コンピュータ（１０１）は、親ノードの中間ノードに作成されたノードに関するリンクを張る（図５Ｄに示すステップ５Ｄの処理に対応する）。コンピュータ（１０１）は、処理をステップ８２７に進めて、上記中間ノードにリンクを張ろうとすることで、当該中間ノードのエントリ数がオーバーフローするかを判断する。以降、コンピュータ（１０１）は、ステップ８２８以降の処理を繰り返す。
【０２４２】
ステップ８３１において、コンピュータ（１０１）は、現在着目しているノードと同じビット幅のキーを持つ親ノードを作成する（図５Ｄに示すステップ６Ｄの処理（親ノード（５４７）を作成すること）に対応する）。
【０２４３】
ステップ８３２において、コンピュータ（１０１）はステップ８３１で作成した、親ノードとステップ８２０で作成した中間ノードとの間にリンクを張る（図５Ｅに示すステップ７Ｄの処理（親ノード（５４７）と中間ノード（５４６）との間にリンクを張ること）に対応する）。
【０２４４】
ステップ８３３において、コンピュータ（１０１）は、ステップ８２１で開始した上記処理を終了する。
【０２４５】
図９は、図１に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータの機能ブロック図の一例を示した図である。
【０２４６】
コンピュータ（９０１）は、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータであり、例えば図１に示すコンピュータ（１０１）である。
【０２４７】
コンピュータ（９０１）は、ツリー構築手段（９１１）及びデータ検索手段（９１２）、並びに、メモリ（９１３）を備えている。
【０２４８】
ツリー構築手段（９１１）は、ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築する。
【０２４９】
また、ツリー構築手段（９１１）は、挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記キーを挿入する。
【０２５０】
また、ツリー構築手段（９１１）は、上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見する。ここで、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである。
【０２５１】
また、ツリー構築手段（９１１）は、上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割する。
【０２５２】
また、ツリー構築手段（９１１）は、上記検索手法１に従うツリー（図２を参照）を構築する為に、任意的に、上記ノードそれぞれに上記グループを識別する識別子を付与する。
【０２５３】
また、ツリー構築手段（９１１）は、上記検索手法１に従うツリー（図２を参照）を構築する為に、上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築する。
【０２５４】
また、ツリー構築手段（９１１）は、上記検索手法１に従うツリー（図２を参照）を構築する為に、上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも２つのグループを下位にあるノードとして有するように、上記ツリーを構築する。
【０２５５】
また、ツリー構築手段（９１１）は、上記検索手法２に従うツリー（図３Ａ及び図３Ｂを参照）を構築する為に、各グループを、根ノードを親ノードとするサブツリーとして構築する。
【０２５６】
また、ツリー構築手段（９１１）は、上記検索手法２に従うツリー（図３Ｃを参照）を構築する為に、グループそれぞれを、部分ツリーとして構築する。
【０２５７】
ツリー構築手段（９１１）は、図６に示すステップ６０２〜６０４、図７Ａに示す全ステップ（キーの値Ｋを挿入すべき葉ノードの発見処理、及び、キーの値Ｋを持つ可能性がある葉ノードの発見処理）、図７Ｂに示す全ステップ（キーの値Ｋを挿入すべき葉ノードの発見処理、及び、キーの値Ｋを持つ可能性がある葉ノードの発見処理）、並びに、図８Ａに示す全ステップ、及び、図８Ｂに示す全ステップを実行しうる。
【０２５８】
また、データ検索手段（９１２）は、検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索する。
【０２５９】
また、データ検索手段（９１２）は、上記検索手法１の為に構築されたツリーであって、当該ツリーの各ノードそれぞれに上記グループを識別する識別子が付与されている当該ツリー（図２を参照）において、当該構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令を使用して、上記データを検索する。
【０２６０】
データ検索手段（９１２）は、上記検索手法２の為に構築されたツリー（図３Ａ及び図３Ｂを参照）において、上記サブツリーに対応する命令（例えば、ＳＩＭＤ命令）を使用して、上記データを検索する。
【０２６１】
また、データ検索手段（９１２）は、上記検索手法２の為に構築されたツリー（図３Ｃを参照）において、上記部分ツリーに対応する命令（例えば、ＳＩＭＤ命令）を使用して、上記データを検索する。
【０２６２】
データ検索手段（９１２）は、図６に示すステップ６０５を実行しうる。
【０２６３】
コンピュータ（９０１）は、記憶媒体（９２１）から、ツリー構築対象のプログラムをメモリ（９１３）に読み出して、当該メモリ（９１３）に読み出したプログラムをツリー構築手段（９１１）に渡す。
【０２６４】
また、コンピュータ（９０１）は、データ検索手段（９１２）がデータを検索することを可能にする為に、ツリー構築手段（９１１）が構築したツリーをメモリ（９１３）中に記憶する。
【０２６５】
（実施例）
IBM（登録商標） Cognos（登録商標） Business Intelligence 10.2.1では、ＴＰＣ−ＤＳベンチマークを元にしたベンチマーク・プログラムの一つにおいて、ツリーにキーを挿入する処理でプログラムの実行時間の１５％を費やす。
【０２６６】
従って、IBM（登録商標） Cognos（登録商標）Business Intelligence 10.2.1を高速化する為にも、ツリー構造において、ツリーのノードにエントリを挿入する操作を高速化することが重要となってくる。
【０２６７】
上記ベンチマーク・プログラムでは、ツリーのノードに約666,000個のエントリの挿入が数回行われる。当該約666,000個のエントリの挿入の際に使用されるキーの順列を取得し、上記ツリーのノードへの挿入を当該同じキーの順列を用いて実行するＣ言語で記述された単体ベンチマーク・プログラムを用意した。
【０２６８】
本発明の実施態様に従う検索手法２において使用されるツリーを使用して、及び従来手法で構築されたツリーを使用して、POWER7上で、上記単体ベンチマーク・プログラムを実行した。具体的には、longのキーの比較に絞って、本発明の実施態様に従い３２ビット幅又は６４ビット幅でキーの比較のみを行うＳＩＭＤ化されたＢ＋−ツリーと、従来手法に従い６４ビット幅でキーの比較のみを行うＳＩＭＤ化されたＢ＋−ツリーとの間で比較を行った。その結果、本発明の実施態様に従う検索手法２において使用されるツリーを使用した場合、従来手法で構築されたツリーを使用した場合と比べて、実行時間が４１．２％減少した。
【図１】
0005950285.tif 000002
【図６】
0005950285.tif 000003
【図７Ａ】
0005950285.tif 000004
【図７Ｂ】
0005950285.tif 000005
【図８Ａ】
0005950285.tif 000006
【図８Ｂ】
0005950285.tif 000007
【図９】
0005950285.tif 000008
【図２】
0005950285.tif 000009
【図３Ａ】
0005950285.tif 000010
【図３Ｂ】
0005950285.tif 000011
【図３Ｃ】
0005950285.tif 000012
【図４Ａ】
0005950285.tif 000013
【図４Ｂ】
0005950285.tif 000014
【図４Ｃ】
0005950285.tif 000015
【図４Ｄ】
0005950285.tif 000016
【図４Ｅ】
0005950285.tif 000017
【図４Ｆ】
0005950285.tif 000018
【図４Ｇ】
0005950285.tif 000019
【図４Ｈ】
0005950285.tif 000020
【図５Ａ】
0005950285.tif 000021
【図５Ｂ】
0005950285.tif 000022
【図５Ｃ】
0005950285.tif 000023
【図５Ｄ】
0005950285.tif 000024
【図５Ｅ】
0005950285.tif 000025