(57)【特許請求の範囲】
【請求項１】
複数のデータ列からなるツリー型のデータ構造を生成する情報処理装置のコンピュータにおいて実行される生成方法であって、
親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのある列位置におけるデータのデータ種別毎の数を、前記列位置毎に積算する積算ステップ、および
前記複数のデータ列を、前記積算ステップで積算された前記列位置毎のデータ種別毎の数に基づいて、所定の前記列位置における前記データ種別毎に、複数の子ノードに分類する分類ステップを含み、
前記分類ステップは、前記積算ステップで積算されたデータ種別毎の数が、前記データ種別毎に均等または均等に近い値となる前記列位置を均等位置として特定する第１分類ステップと、前記親ノードに分類された複数のデータ列を、前記第１分類ステップにおいて特定された前記均等位置における前記データ種別毎に、前記複数の子ノードに分類する第２分類ステップとを含み、
前記第１分類ステップでは、前記列位置毎に順次、前記均等位置であるか否かを判定する判定処理を実行し、所定の列位置が前記均等位置であると判定した時点で、当該所定の列位置を前記均等位置として特定し、前記判定処理を未実行の前記列位置に対しては前記判定処理を実行しない、生成方法。
【請求項２】
前記分類ステップで分類された子ノードを親ノードとして、前記積算ステップおよび前記分類ステップからなる一連のステップを再帰的に繰り返す制御ステップをさらに含む、請求項１に記載の生成方法。
【請求項３】
前記制御ステップは、前記子ノードに含まれる前記データ列が１つになるまで、前記一連のステップを再帰的に繰り返す、請求項２に記載の生成方法。
【請求項４】
前記データ列は、０または１で表わされるビットで構成されるビット列であり、
前記積算ステップでは、親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのあるビット位置におけるビットの０と１の種別毎の数を、前記ビット位置毎に積算し、
前記分類ステップでは、前記複数のデータ列を、前記積算ステップで積算されたビットの０及び１の種別毎の数に基づいて、所定の前記ビット位置におけるビットが０であるか１であるかによって、２つの前記子ノードに分類する、請求項１に記載の生成方法。
【請求項５】
複数のデータ列からなるツリー型のデータ構造を生成する情報処理装置であって、
親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのある列位置におけるデータのデータ種別毎の数を、前記列位置毎に積算する積算部、および
前記複数のデータ列を、前記積算部によって積算された前記列位置毎のデータ種別毎の数に基づいて、所定の前記列位置における前記データ種別毎に、複数の子ノードに分類する分類部を含み、
前記分類部は、前記積算部によって積算されたデータ種別毎の数が、前記データ種別毎に均等または均等に近い値となる前記列位置を均等位置として特定する第１分類部と、前記親ノードに分類された複数のデータ列を、前記第１分類部によって特定された前記均等位置における前記データ種別毎に、前記複数の子ノードに分類する第２分類部とを含み、
前記第１分類部は、前記列位置毎に順次、前記均等位置であるか否かを判定する判定処理を実行し、所定の列位置が前記均等位置であると判定した時点で、当該所定の列位置を前記均等位置として特定し、前記判定処理を未実行の前記列位置に対しては前記判定処理を実行しない、情報処理装置。
【請求項６】
複数のデータ列からなるツリー型のデータ構造を生成する情報処理システムであって、
親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのある列位置におけるデータのデータ種別毎の数を、前記列位置毎に積算する積算部、および
前記複数のデータ列を、前記積算部によって積算された前記列位置毎のデータ種別毎の数に基づいて、所定の前記列位置における前記データ種別毎に、複数の子ノードに分類する分類部を含み、
前記分類部は、前記積算部によって積算されたデータ種別毎の数が、前記データ種別毎に均等または均等に近い値となる前記列位置を均等位置として特定する第１分類部と、前記親ノードに分類された複数のデータ列を、前記第１分類部によって特定された前記均等位置における前記データ種別毎に、前記複数の子ノードに分類する第２分類部とを含み、
前記第１分類部は、前記列位置毎に順次、前記均等位置であるか否かを判定する判定処理を実行し、所定の列位置が前記均等位置であると判定した時点で、当該所定の列位置を前記均等位置として特定し、前記判定処理を未実行の前記列位置に対しては前記判定処理を実行しない、情報処理システム。
【請求項７】
複数のデータ列からなるツリー型のデータ構造を生成する情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記コンピュータを、
親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのある列位置におけるデータのデータ種別毎の数を、前記列位置毎に積算する積算部、および
前記複数のデータ列を、前記積算部によって積算された前記列位置毎のデータ種別毎の数に基づいて、所定の前記列位置における前記データ種別毎に、複数の子ノードに分類する分類部として機能させ、
前記分類部は、前記積算部によって積算されたデータ種別毎の数が、前記データ種別毎に均等または均等に近い値となる前記列位置を均等位置として特定する第１分類部と、前記親ノードに分類された複数のデータ列を、前記第１分類部によって特定された前記均等位置における前記データ種別毎に、前記複数の子ノードに分類する第２分類部とを含み、
前記第１分類部は、前記列位置毎に順次、前記均等位置であるか否かを判定する判定処理を実行し、所定の列位置が前記均等位置であると判定した時点で、当該所定の列位置を前記均等位置として特定し、前記判定処理を未実行の前記列位置に対しては前記判定処理を実行しない、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ構造等に関し、より特定的には、検索対象の複数のデータ列からなるツリー型のデータ構造等に関する。
【背景技術】
【０００２】
従来、情報検索を効率良く行うために、検索対象の複数のデータ列を、パトリシア木を用いたツリー型のデータ構造で格納しておくことが知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−２５７８７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１に記載されているようなパトリシア木を用いたツリー型のデータ構造では、例えば、長い文字列のデータ列を検索する場合に、文字列の特性によって検索速度が変化する不安定なものになるという課題がある。
【０００５】
具体的には、図１１に示すように、従来のパトリシア木を用いたデータ構造では、文字列の最初から共通部分毎に分岐するツリーが作成されるため、文字列の前方に共通する文字を多く含むデータ集合（すなわち、前方部分が類似した文字列を多く含むデータ集合）である場合、ツリーはバランスの悪い形状となり、文字列によって検索速度が変化する不安定なものとなる。例えば、図１１において、文字列‘ａａａａａａａ’は、７つの分岐によって特定される一方で、文字列‘ｂｂｂｂｂｂｂ’は、１つの分岐によって特定される。このため、文字列‘ａａａａａａａ’を検索する際には、検索速度が遅くなり、文字列‘ｂｂｂｂｂｂｂ’を検索する際には、検索速度が速くなるといったように、検索速度が不安定なものとなる。
【０００６】
それゆえに、この発明の主たる目的は、データ列の特性によらず、安定した検索速度を実現するデータ構造の生成方法等を提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上述の課題を解決するために、以下の構成を採用した。
【０００８】
本発明に係る生成方法は、複数のデータ列からなるツリー型のデータ構造を生成する方法である。上記生成方法は、親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのある列位置におけるデータのデータ種別毎の数を、列位置毎に積算する積算ステップ、および複数のデータ列を、積算ステップで積算された列位置毎のデータ種別毎の数に基づいて、所定の列位置におけるデータ種別毎に、複数の子ノードに分類する分類ステップを含む。
【０００９】
本構成によれば、複数のデータ列は、列位置毎に積算されたデータ種別毎の数に基づいて決定される所定の列位置におけるデータ種別毎に複数のグループに分類されるので、データ列の特性（データ種別）に応じて決定される列位置で分類される。このことにより、データ列の特性に応じて、安定した検索速度を実現できるデータ構造を生成することができる。
【００１０】
また、分類ステップでは、積算ステップで積算されたデータ種別毎の数が、データ種別毎に均等または均等に近い値となる列位置を特定し、親ノードに分類された複数のデータ列を、当該特定した列位置におけるデータ種別毎に、複数の子ノードに分類してもよい。
【００１１】
本構成によれば、複数のデータ列は、列位置毎に積算されたデータ種別毎の数に基づいて、均等、若しくは、ほぼ均等に分類される。したがって、複数のデータ列は、データ列の特性によらず、バランス良く分類される。このことにより、データ列の特性によらず、安定した検索速度を実現できるデータ構造を生成することができる。
【００１２】
また、分類ステップで分類された子ノードを親ノードとして、積算ステップおよび分類ステップからなる一連のステップを再帰的に繰り返す制御ステップをさらに含んでもよい。
【００１３】
本構成によれば、分類された子ノードを親ノードとして、当該親ノードに分類された複数のデータ列は、列位置毎に積算されたデータ種別毎の数に基づいてさらに分類される。これが繰り返されることにより、データ列の特性に応じて、さらに安定した検索速度を実現できるデータ構造を生成することができる。なお、複数のデータ列が、均等、若しくは、ほぼ均等にさらに分類される場合には、生成されるデータ構造のツリーは、全体としてバランスの取れた形状となる。このことにより、データ列の特性によらず、さらに安定した検索速度を実現できるデータ構造を生成することができる。
【００１４】
また、制御ステップは、子ノードに含まれるデータ列が１つになるまで、一連のステップを再帰的に繰り返すものとしてもよい。
【００１５】
本構成によれば、子ノード（リーフノード）には、データ列は１つしか含まれない。したがって、生成されるデータ構造のリーフノードとデータ列とを１対１に対応させることでデータ列を特定するデータ構造を生成することができる。
【００１６】
また、データ列は、０または１で表わされるビットで構成されるビット列であるとしてもよい。この場合、積算ステップでは、親ノードに分類されている複数のデータ列に対して、当該複数のデータ列それぞれのあるビット位置におけるビットの０と１の種別毎の数を、ビット位置毎に積算し、分類ステップでは、複数のデータ列を、積算ステップで積算されたビットの０及び１の種別毎の数に基づいて、所定のビット位置におけるビットが０であるか１であるかによって、２つの子ノードに分類する。
【００１７】
本構成によれば、データ列がビット列であるので、所定のビット位置におけるビットが０であるか１であるかの２種類に分類することができる。したがって、生成されるデータ構造は、２分木のツリー形状となり、バランスの取れたツリーとなる。このことにより、データ列の特性によらず、安定した検索速度を実現できるデータ構造を生成することができる。
【００１８】
また、複数のデータ列からなるツリー型のデータ構造を生成する生成方法は以下のようであってもよい。すなわち、生成方法は、親ノードに分類されている複数のデータ列に対して、当該複数のデータ列の所定の列範囲におけるデータパターンを算出する算出ステップ、および複数のデータ列を、データパターンに基づいて、複数のデータ列の数が均等、または均等に近い値になるように複数の子ノードに分類する分類ステップを含む。
【００１９】
本構成によれば、複数のデータ列は、データ列の所定の列範囲におけるデータパターンに基づいて、均等、若しくは、ほぼ均等に分類される。したがって、複数のデータ列は、データ列の特性によらず、バランス良く分類される。このことにより、データ列の特性によらず、安定した検索速度を実現できるデータ構造を生成することができる。
【００２０】
また、複数のデータ列からなるツリー型のデータ構造を生成する生成方法は以下のようであってもよい。すなわち、生成方法は、親ノードに分類されている複数のデータ列に対して、所定のアルゴリズムに基づいて列位置を特定する列位置特定ステップ、および複数のデータ列を、列位置特定ステップで特定された列位置におけるデータ種別毎に、複数の子ノードに分類する分類ステップを含む。
【００２１】
本構成によれば、複数のデータ列は、データ列の前の列位置から順に、当該列位置におけるデータ種別毎に分類されるのではなく、所定のアルゴリズムに基づいて特定された列位置におけるデータ種別毎に分類される。このことにより、複数のデータ列の前方が類似していても、安定した検索速度を実現できるデータ構造を生成することができる。
【００２２】
以上では、データ構造を生成する生成方法として本発明を構成する場合について記載した。しかし、本発明は、上記生成方法により生成されるデータ構造として構成されてもよく、また、上記データ構造を有するライブラリで構成されてもよい。更には、データ構造を生成する情報処理装置、データ構造を生成する情報処理システム、データ構造を生成する情報処理プログラム、又は、上記情報処理プログラムを記録したコンピュータ読み取り可能な記録媒体として構成されてもよい。
【発明の効果】
【００２３】
本発明によれば、データ列の特性によらず、安定した検索速度を実現するデータ構造の生成方法等を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】ゲーム装置１の構成の一例を示すブロック図
【図２】開発装置２の構成の一例を示すブロック図
【図３】データ構造の生成方法の一例を示すための説明図
【図４】データ構造の生成方法の一例を示すための説明図
【図５】データ構造の生成方法の一例を示すための説明図
【図６】データ構造の生成方法の一例を示すための説明図
【図７】分類化された文字列データのデータ構造の一例を示す概念図
【図８】ノードデータの一例を示す概念図
【図９】ノードデータで表わされるデータ構造の一例を示す概念図
【図１０】データ構造生成処理フローの一例を示すフローチャート
【図１１】従来のパトリシア木によるデータ構造の一例を示す概念図
【発明を実施するための形態】
【００２５】
（一実施形態）
以下、図面を参照して、本発明の一実施形態について説明する。ここでは、本発明を情報処理装置に適用した例について説明するが、本発明は、このような情報処理装置に限定されるものではなく、このような情報処理装置の機能を実現する情報処理システムであってもよく、このような情報処理装置における情報処理方法であってもよく、このような情報処理装置において実行される情報処理プログラムであってもよい。更には、本発明は、このような情報処理プログラムを記録したコンピュータ読み取り可能な記録媒体であってもよい。
【００２６】
（ハードウェア構成）
はじめに、図１を用いて、情報処理装置の一例であるゲーム装置１について説明する。本実施形態におけるゲーム装置１は、情報処理プログラム（例えば、ゲームプログラム）を実行する際に、ダイナミックリンクライブラリ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ；以下、ＤＬＬと称する）を利用する。図１に示すように、ゲーム装置１は、プロセッサ１０、およびメモリ１１を備えており、当該メモリ１１には、ＤＬＬ１１０が格納されている。
【００２７】
ＤＬＬ１１０は、ゲームプログラムが実行される際にダイナミックリンクされる関数（プログラムモジュール）が取り纏められたライブラリであり、ゲーム装置１の記憶装置（不図示）に記憶されている。また、ＤＬＬ１１０は、辞書１１１を含む。
【００２８】
辞書１１１は、ＤＬＬ１１０内の複数の関数のシンボル（関数名）を示す文字列データが検索キーとして格納されたツリー型のデータ構造であり、関数のシンボルと対応するアドレスとが関連付けられている。
【００２９】
プロセッサ１０は、その機能構成として、ＤＬＬ参照部１００と、入力部１０１と、検索部１０２と、出力部１０３とを備える。プロセッサ１０は、例えばゲーム装置１のメインメモリ（不図示）に格納されたゲームプログラムを実行することにより、ＤＬＬ参照部１００と、入力部１０１と、検索部１０２と、出力部１０３として動作する。
【００３０】
ＤＬＬ参照部１００は、ゲームプログラムを実行する際に利用するＤＬＬ１１０内の目的の関数のアドレスを取得するために、当該関数のアドレスの検索を入力部１０１に指示する。
【００３１】
入力部１０１は、ＤＬＬ参照部１００から指示された検索対象の関数のシンボル（文字列）を検索部１０２に入力する。
【００３２】
検索部１０２は、入力部１０１から入力された文字列に基づいて、ツリー型のデータ構造である辞書１１１内のデータを検索し、検索結果を出力部１０３に出力する。
【００３３】
出力部１０３は、検索部１０２からの検索結果に基づいて、入力部１０１で入力された文字列に対応するアドレスをＤＬＬ参照部１００に出力する。このことにより、ＤＬＬ参照部１００は、目的の機能を有する関数のアドレスを取得することができる。
【００３４】
次に、図２を用いて、上記したＤＬＬ１１０内の辞書１１１を生成する情報処理装置の一例である開発装置２について説明する。
【００３５】
図２に示すように、開発装置２は、プロセッサ２０、記憶装置２１、メインメモリ２２を備えている。記憶装置２１には、プロセッサ２０によって実行されるコンピュータプログラムが格納されており、メインメモリ２２は、コンピュータプログラムやその他のデータを一時的に記憶する。開発装置２のプロセッサ２０は、上記コンピュータプログラムを実行することにより、本実施形態のデータ構造（辞書１１１）を生成する。なお、開発装置２のプロセッサ２０が実行する種々の処理については、後に詳述することにし、まず、本実施形態のデータ構造を生成する生成方法の概要について説明する。
【００３６】
（データ構造生成方法概要）
図３〜図７を用いて、本実施形態における辞書１１１のデータ構造を生成する方法の概要について説明する。なお、以下では、辞書１１１のツリー型のデータ構造を構成する検索キー（関数のシンボル）として、‘ａａａａａａａ’、‘ａａａａａａｂ’、‘ａａａａａｂｂ’、‘ａａａａｂｂｂ’、‘ａａａｂｂｂｂ’、‘ａａｂｂｂｂｂ’、‘ａｂｂｂｂｂｂ’、‘ｂｂｂｂｂｂｂ’の８つの文字列データを例に説明する。
【００３７】
本実施形態では、図３に示すように、まず、各文字列データは、０と１とからなるビット列データに変換される。１文字につき８ビットが割り当てられているので、文字数７の各文字列データは、５６ビットのビット列データに変換される。
【００３８】
次に、図４に示すように、全てのビット列データに対して、各ビット列データの各ビット位置におけるビットデータの種別（すなわち、ビット０及びビット１）毎の数がビット位置毎に積算される。したがって、例えば、１ビット目のビット０の数は８、ビット１の数は０と積算され、７ビット目のビット０の数は７、ビット１の数は１と積算される。
【００３９】
次に、各ビット位置において、積算されたビット０の数と、ビット１の数とが比較されて、両者の数が均等、又は、最も均等に近い値であるビット位置（以下、均等ビット位置と称する）が特定される。具体的には、図５に示すように、ビット０の数が４であり、ビット１の数が４である３１ビット目が、均等ビット位置として特定される。なお、図５では３２ビット目も、ビット０の数が４であり、ビット１の数が４であるため、３２ビット目もビット０とビット１の数が均等となるビット位置であるが、このようにビット０とビット１の数が均等となるビット位置が複数ある場合には、所定のルールで、１つのビット位置を均等ビット位置として特定すればよい（例えば、前方のビット位置を均等ビット位置として特定すればよい）。なお、ビット０とビット１の数が均等となるビット位置を特定するときに、結果的にビット０とビット１の数が均等となるビット位置が複数ある場合であっても、最初にビット０とビット１の数が均等となるビット位置が特定できれば、その時点で特定をやめてもよい。
【００４０】
次に、各ビット列データは、均等ビット位置におけるビットデータの種別（すなわち、ビット０及びビット１）によって、２つのグループに分類される。具体的には、図５に示すように、３１ビット目（均等ビット位置）のビットデータが０であるグループ（以下、ノードｎ１と称する）と、３１ビット目のビットデータが１であるグループ（以下、ノードｎ２と称する）とに分類される。すなわち、文字列データ‘ａａａａａａａ’、‘ａａａａａａｂ’、‘ａａａａａｂｂ’、‘ａａａａｂｂｂ’がノードｎ１に分類され、文字列データ‘ａａａｂｂｂｂ’、‘ａａｂｂｂｂｂ’、‘ａｂｂｂｂｂｂ’、‘ｂｂｂｂｂｂｂ’がノードｎ２に分類される。
【００４１】
次に、各グループ（ノード）に対して、各グループを構成するビット列データに対して、各ビット列データの既に分類に用いられたビット位置とは異なる各ビット位置（３１ビット目とは異なるビット位置）において、同様に、積算されたビット０の数と、ビット１の数とが比較されて、均等ビット位置が特定され、均等ビット位置におけるビットデータの種別がビット０であるかビット１であるかによって、２つのグループに分類される。具体的には、図６に示すように、ノードｎ１に分類された文字列データは、４７ビット目が０であるグループ（以下、ノードｎ３と称する）と、４７ビット目が１であるグループ（以下、ノードｎ４と称する）とに分類される。同様に、ノードｎ２に分類された文字列データは、１５ビット目が０であるグループ（以下、ノードｎ５と称する）と、１５ビット目が１であるグループ（以下、ノードｎ６と称する）とに分類される。
【００４２】
以下、同様に、グループを構成する文字列データが１つになるまで上記した分類が行われる。具体的には、図６に示すように、ノードｎ３に分類された文字列データは、５５ビット目が０であるグループ（以下、ノードｎ７と称する）と、５５ビット目が１であるグループ（以下、ノードｎ８と称する）とに分類される。そして、ノードｎ４に分類された文字列データは、３９ビット目が０であるグループ（以下、ノードｎ９と称する）と、３９ビット目が１であるグループ（以下、ノードｎ１０と称する）とに分類される。ノードｎ５に分類された文字列データは、２３ビット目が０であるグループ（以下、ノードｎ１１と称する）と、２３ビット目が１であるグループ（以下、ノードｎ１２と称する）とに分類される。ノードｎ６に分類された文字列データは、７ビット目が０であるグループ（以下、ノードｎ１３と称する）と、７ビット目が１であるグループ（以下、ノードｎ１４と称する）とに分類される。
【００４３】
図７は、上記のように各グループ（ノード）に分類化された文字列データを、ツリー構造で示した概念図である。なお、ノードｎ０は、全データを構成要素とするグループである。図７に示すように、本実施形態における辞書１１１のデータ構造のツリーは、図１１に示す従来のデータ構造のツリーとは異なり、バランスの取れたツリー形状となっている。具体的には、各文字列データは、分岐の回数がそれぞれ等しい３回となっている。このため、各文字列データの特性によらず、各文字列データの検索速度は安定したものとなる。
【００４４】
（データ構造概要）
次に、図８を用いて、上記した生成方法により生成される辞書１１１のデータ構造の概要について説明する。本実施形態における辞書１１１のデータ構造は、階層型のツリー構造であり、辞書１１１のデータ構造は、ツリーの節点であるノードを示すノードデータで表わされる。なお、ノードデータは、ツリーの最下層であって直下に他のノードを有しないノードを示すリーフノードデータと、当該リーフノード以外のノードを示す内部ノードデータとを含む。図８の（Ａ）は、内部ノードデータの一例を示し、図８の（Ｂ）はリーフノードデータの一例を示す。
【００４５】
図８の（Ａ）に示すように、内部ノードデータは、自ノード番号と、指示ビット位置と、第０リンク先と、第１リンク先とを示すデータで構成される。
【００４６】
自ノード番号は、自ノードの識別子を示すデータである。指示ビット位置は、自ノードに含まれる分類対象の文字列データ（ビット列データ）を、どの列位置（ビット位置）で分類するかを示す（すなわち、均等ビット位置を示す）データである。第０リンク先は、指示ビット位置のビットデータが０であるビット列データの分類先のグループ（ノード）であるノード番号を示すデータである。同様に、第１リンク先は、指示ビット位置のビットデータが１であるビット列データの分類先のグループ（ノード）であるノード番号を示すデータである。したがって、各内部ノードは、２つのリンク先のノードを有する。このことにより、ツリー型のデータ構造が形成される。
【００４７】
図８の（Ｂ）に示すように、リーフノードデータは、自ノード番号と、チェックビットと、本体データとを示すデータで構成される。
【００４８】
本体データは、分類対象の文字列データを示すデータであり、チェックビットは、本体データのビットデータが正しいか否かをチェックするためのデータである。なお、リーフノードは、このチェックビットを有していなくてもよい。
【００４９】
上記のようにして、各内部ノードが、その直下にリンクされるノードのノード番号を示すデータを有し、リーフノードが、本体データを有することにより、各文字列データは、ツリー型に分類されて、その最下層のノードに本体データとして格納される。具体的には、図７に示すように分類化された文字列データで構成される辞書１１１のデータ構造は、図９に示すノードデータで表わされる。
【００５０】
（データ構造の生成処理フロー）
次に、図１０を用いて、開発装置２のプロセッサ２０が実行するデータ構造の生成処理について説明する。プロセッサ２０は、まず、メインメモリ２２を初期化して、記憶装置２１等から各種プログラムや各種データをメインメモリ２２にロードした後に、各種プログラムを実行することにより、図１０に示すフローチャートの処理を実行する。
【００５１】
ステップＳ１１において、プロセッサ２０は、分類対象となる全ての文字列データをビット列データに変換して、変換したビット列データをメインメモリ２２に記憶する。その後、処理はステップＳ１２に移る。
【００５２】
ステップＳ１２において、プロセッサ２０は、分類対象となる全ての文字列データが分類されるノード（グループ）であるルートノードを作成する。なお、ルートノードを示すノードデータとしては、自ノード番号を示すデータのみが生成される。その後、処理はステップＳ１３に移る。
【００５３】
ステップＳ１３において、プロセッサ２０は、ルートノードのノード番号を示すデータを対象ノードデータとして、メインメモリ２２に記憶する。その後、処理はステップＳ１４に移る。
【００５４】
ステップＳ１４において、プロセッサ２０は、メインメモリ２２に記憶された対象ノードデータが示すノードに分類された全ての文字列データのビット列データに対して、各ビット列データの各ビット位置におけるビット０とビット１の種別毎の数を積算し、ビット位置毎の積算値を積算値データとして、メインメモリ２２に記憶する。その後、処理はステップＳ１５に移る。
【００５５】
ステップＳ１５において、プロセッサ２０は、メインメモリ２２に記憶された積算値データに基づいて、ビット０の数とビット１の数とが均等、又は、最も均等に近い値を示すビット位置を特定して、当該ビット位置を均等ビット位置データとしてメインメモリ２２に記憶する。その後、処理はステップＳ１６に移る。
【００５６】
ステップＳ１６において、プロセッサ２０は、メインメモリ２２に記憶された対象ノードデータが示すノードに分類された全ての文字列データを、メインメモリ２２に記憶された均等ビット位置データが示すビット位置におけるビットデータの種別がビット０であるノード（以下、ビット０用ノードと称する）と、ビット１であるノード（以下、ビット１用ノードと称する）とに分類する。その後、処理はステップＳ１７に移る。
【００５７】
ステップＳ１７において、プロセッサ２０は、ビット０用ノードとビット１用ノードとを生成し、これらのノードをメインメモリ２２に記憶された対象ノードデータが示すノードの直下位のノードとする。具体的には、プロセッサ２０は、まず、ビット０用ノードを示すノードデータとして、ビット０用ノードの自ノード番号を示すデータを生成し、ビット１用ノードを示すノードデータとして、ビット１用ノードの自ノード番号を示すデータを生成する。なお、これらのノード番号には、すでに生成されたノード番号と重複しない番号が選択される。そして、プロセッサ２０は、メインメモリ２２に記憶された対象ノードデータが示すノードのノードデータの指示ビット位置を示すデータとして、メインメモリ２２に記憶された均等ビット位置データを格納し、第０リンク先を示すデータとして、ビット０用ノードのノード番号を示すデータを格納し、第１リンク先を示すデータとして、ビット１用ノードのノード番号を示すデータを格納する。その後、処理はステップＳ１８に移る。
【００５８】
ステップＳ１８において、プロセッサ２０は、メインメモリ２２に記憶された対象ノードデータが示すノードの分類済みフラグデータ（不図示）をＯＮに設定し、メインメモリ２２に記憶された対象ノードデータ、積算値データ、均等ビット位置データをクリアする。その後、処理はステップＳ１９に移る。
【００５９】
ステップＳ１９において、プロセッサ２０は、生成されたノードの分類済みフラグデータがＯＮではないか否かを判定することにより、分類済みではないノードがあるか否かを判定する。この判定結果がＹＥＳの場合、処理はステップＳ２０に移り、ＮＯの場合、処理は終了する。すなわち、全てのノードが分類済みである場合に処理は終了する。
【００６０】
ステップＳ２０において、プロセッサ２０は、まず、分類済みフラグデータがＯＮではない１つのノードを特定する。具体的には、プロセッサ２０は、分類済みフラグデータがＯＮではない１つのノードを所定のルールで特定する。例えば、分類済みフラグデータがＯＮではないノードが複数ある場合には、所定のルールで（例えば、ノード番号の小さい順に）１つのノードが特定されるものとすればよい。そして、プロセッサ２０は、特定したノードに分類された文字列データが複数あるか否かを判定する。この判定の結果がＹＥＳの場合、処理はステップＳ２１に移り、ＮＯの場合、処理はステップＳ２２に移る。
【００６１】
ステップＳ２１において、プロセッサ２０は、ステップＳ２０で特定されたノードのノード番号を示すデータを対象ノードデータとして、メインメモリ２２に記憶する。その後、処理はステップＳ１４に戻る。
【００６２】
ステップＳ２２において、プロセッサ２０は、ステップＳ２０で特定されたノードをリーフノードとして設定する。具体的には、プロセッサ２０は、ステップＳ２０で特定されたノードのノードデータの本体データとして、当該ノードに分類された文字列データを格納し、チェックビットとして、当該文字列データをチェックするためのデータを格納する。その後、処理はステップＳ２３に移る。
【００６３】
ステップＳ２３において、プロセッサ２０は、ステップＳ２２でリーフノードとして設定したノードの分類済みフラグデータをＯＮに設定する。その後、処理はステップＳ１９に戻る。
【００６４】
以上に説明したように、本実施形態のデータ構造生成処理によれば、複数の文字列データが分類されたノードは、直下位に２つのノードを有する内部ノードデータとして生成される（図１０のステップＳ１１〜Ｓ１７、及び、ステップＳ２０でＹＥＳ、ステップＳ２１、Ｓ１４〜Ｓ１７）。そして、繰り返し分類されて生成されたノードに、１つの文字列データのみが含まれると、当該ノードは、リーフノードとして生成され、当該リーフノードに文字列データが格納される（ステップＳ２０でＮＯ、ステップＳ２２）。また、各内部ノードに分類された文字列データをさらに分類する際には、分類される文字列データが互いに均等、又は最も均等に近い数になるように分類される（ステップＳ１４〜Ｓ１６）。したがって、各内部ノードの直下位に生成される２つのノードに含まれる文字列データの数は、均等、又は均等に近い数になる。このため、ノードデータで表わされるデータ構造のツリーの形状は、バランスの取れたものとなる。このことにより、文字列データの特性によらず、安定した検索速度を実現できるデータ構造を生成することができる。なお、上記では特に記載していないが、文字列データは辞書１１１の検索キーとして用いられるデータであり、この検索キーに対応するデータ（関数のシンボルに対応するアドレスを示すデータ）も辞書１１１に併せて格納される。
【００６５】
上記実施形態において説明したように、メモリを多く使用するゲームプログラムでは、メモリの使用量を減らすために、ＤＬＬが利用されることがある。このＤＬＬには、複数の関数のシンボルと対応するアドレスとを関連付けた辞書が含まれており、関数の呼び出しの際に、関数のシンボルを検索キーにして辞書が検索されて対応する関数のアドレスが取得される。そして、例えば、ゲームプログラムがプログラミング言語Ｃ＋＋で記述される場合、関数のシンボルを表わす文字列（検索キー）が長くなりやすく、また、文字列の前方が類似しやすいという性質がある。しかし、本実施形態では、辞書のデータ構造のツリー形状がバランスの取れたものであるため、文字列（検索キー）の特性によらず、安定した検索速度を実現することができる。このことにより、ＤＬＬを用いたゲームプログラムの実行速度を安定化させることができる。また、本実施形態の辞書のデータ構造によれば、上記のように文字列を検索キーとして検索する場合に限らず、検索キーとなるデータ列の特性によらず、安定した検索速度を実現することができる。
【００６６】
なお、上記実施形態では、検索キーとなる文字列（関数のシンボル）の文字数は同じであるとしたが、文字数は異なっていても良い。この場合、例えば、最も文字数の多い文字列の文字数を基準に、文字数が少ない文字列は、ビット列に変換される際に、不足分のビット列として後方のビット位置にビット０が追加されるものとすればよい。
【００６７】
また、上記実施形態では、ビット位置におけるビットデータの種別毎の数が全てのビット位置毎に積算されるものとした。しかし、特定のビット位置において積算されたビットデータの種別毎の数が均等になった時点で、積算をやめるものとしてもよい。
【００６８】
また、上記実施形態では、ビット列データに変換された文字列データは、各ビット位置において積算されたビット種別であるビット０及びビット１の数によって、分類されるものとした。しかし、各ビット位置ではなく、複数の連続するビット範囲において積算されたビット種別の数によって、分類されるものとしてもよい。例えば、連続する２ビット範囲におけるビット種別毎の数によって、分類されるものとしてもよい。この場合、ビット種別は、‘００’、‘０１’、‘１０’、‘１１’の４種となるので、各ビット範囲において積算された４種のビット種別毎の数が均等、又は、最も均等に近いビット範囲において、ビット種別毎に４つのグループに分類される。
【００６９】
また、上記実施形態では、文字列データは、ビット列データに変換されてビットデータの種別（ビット０及びビット１）によって、分類されるものとした。しかし、例えば、文字列データのデータ種別が数種類に限られる場合などには、文字列データはビット列データに変換されず、文字列データとして分類されてもよい。
【００７０】
また、上記実施形態では、検索キーとなる文字列として関数のシンボルが与えられ、この検索キーに基づいて関数のアドレスが取得される辞書１１１について説明した。しかし、辞書１１１は、このような辞書に限られない。すなわち、検索キーとなるデータ列は、文字列データに限られず、例えばビット列データであってもよく、検索キーに基づいて取得されるデータ列は、関数のアドレスを示す情報に限られず、どのようなものであってもよい。
【００７１】
また、上記実施形態では、ＤＬＬ１１０は、ダイナミックリンクライブラリであるとしたが、これに限らず、辞書１１１を含むスタティックライブラリであってもよい。
【００７２】
また、上記実施形態では、文字列データは、各ビット位置において積算されたビットデータの種別毎の数に基づいてビット位置を特定し、特定したビット位置におけるビットデータ種別毎に分類されるものとした。しかし、所定の関数や乱数を用いて所定のアルゴリズムにしたがってビット位置を特定し、特定したビット位置におけるデータ種別毎に分類されるようにしてもよい。
【００７３】
また、上記実施形態では、１つの開発装置２で上述したデータ構造生成処理を実行しているが、有線又は無線で通信可能な複数の装置からなる開発システム内において上記処理を分担してもよい。
【００７４】
また、上記実施形態において、ゲーム装置１や開発装置２の構成要素等は、単なる一例に過ぎず他の形状、構成要素を有していても、本発明を実現できることは言うまでもない。また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる値等は、単なる一例に過ぎず、本発明の範囲を逸脱しなければ他の順序や値であっても、本発明を実現できることは言うまでもない。
【００７５】
また、上記実施形態の開発装置２において実行される各種情報処理プログラムは、メインメモリ２２等の記憶媒体を通じて開発装置２に供給されるだけでなく、有線又は無線の通信回線を通じて開発装置２に供給されてもよい。また、上記プログラムは、開発装置２内部の不揮発性の記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、ＣＤ−ＲＯＭ、ＤＶＤ、或いはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ等であってもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを一時的に記憶する揮発性メモリでもよい。
【００７６】
以上、本発明を詳細に説明してきたが、上述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【符号の説明】
【００７７】
１    ゲーム装置
２    開発装置
１０    プロセッサ
１１    メモリ
２０    プロセッサ
２１    記憶装置
２２    メインメモリ
１００    ＤＬＬ参照部
１０１    入力部
１０２    検索部
１０３    出力部
１１０    ＤＬＬ
１１１    辞書
【図１】
0005912714.tif 000002
【図２】
0005912714.tif 000003
【図３】
0005912714.tif 000004
【図４】
0005912714.tif 000005
【図５】
0005912714.tif 000006
【図６】
0005912714.tif 000007
【図７】
0005912714.tif 000008
【図８】
0005912714.tif 000009
【図９】
0005912714.tif 000010
【図１０】
0005912714.tif 000011
【図１１】
0005912714.tif 000012