(57)【要約】【課題】二分木を高速に列挙する。【解決手段】生成装置は、最小の二分木であり、根と左子及び右子の２つの子とを有する株から、根が他の株に接続されていない親株の２つの子のうち少なくともいずれかに、他の株の根を接続する形で拡張した株の木構造を生成する。生成装置は、株の木構造を構成する株それぞれを二分木に展開することにより、株の木構造から二分木を生成する。生成装置は、接続対象の株が、親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続する。生成装置は、接続対象の株が株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続する。【選択図】図４
2019135634.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成する、
処理を実行させる生成プログラムであって、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する
ことを特徴とする生成プログラム。
【請求項２】
前記所定の拡張手法は、前記接続対象の株が最右株列上の株である場合において、当該接続対象の株の左子に他の株が接続され、当該接続対象の株の右子に他の株が接続されていない場合には、当該接続対象の株の右子に別の新たな株を接続し、又は前記接続対象の株が最左株列上の株である場合において、当該接続対象の株の右子に他の株が接続され、当該接続対象の株の右子に他の株が接続されていない場合には、当該接続対象の株の左子に別の新たな株を接続することを特徴とする請求項１に記載の生成プログラム。
【請求項３】
前記所定の拡張手法は、前記接続対象の株が、前記最右株列上の株に前記新たな株が接続されて前記株の木構造が拡張された場合における前記最右株列上の株ではない場合、並びに前記最左株列に前記新たな株が接続されて前記株の木構造が拡張された場合における前記最左株列上の株ではない場合、当該接続対象の株への新たな株の接続を抑止することを特徴とする請求項１又は２に記載の生成プログラム。
【請求項４】
前記所定の拡張手法は、前記接続対象の株が、前記最右株列上の株に前記新たな株が接続されて前記株の木構造が拡張された場合において、当該接続対象の株の右子に他の株が接続されている場合、又は前記最左株列上の株に前記新たな株が接続されて前記株の木構造が拡張された場合において、当該接続対象の株の左子に他の株が接続されている場合、当該接続対象の株への新たな株の接続を抑止することを特徴とする請求項１乃至３のいずれか１つに記載の生成プログラム。
【請求項５】
前記株の木構造に含まれる株の数又は前記株の木構造の段数が所定の数に到達するまで、前記所定の拡張手法を繰り返すことを特徴とする請求項１乃至４のいずれか１つに記載の生成プログラム。
【請求項６】
前記所定の拡張手法は、前記根並びに前記左子及び右子のうち少なくともいずれかのノードにラベルが付された前記新たな株を接続し、
前記ラベルが付されたノードを含む株の木構造を用いて生成された前記二分木が、ラベルが付されたノードを含む他の二分木と一致するか否かを判定する
ことを特徴とする請求項１乃至５のいずれか１つに記載の生成プログラム。
【請求項７】
コンピュータが、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成する、
処理を行う生成方法であって、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張し、  
処理を行うことを特徴とする生成方法。
【請求項８】
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成する木構造生成部と、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成する二分木生成部と、
を有する生成装置であって、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する
ことを特徴とする生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成プログラム、生成方法及び生成装置に関する。
【背景技術】
【０００２】
情報処理における基本的なデータ構造の一つである、二分木を列挙する技術が知られている。例えば、基本ボリュームを表す葉ノードと、２項可換演算組合せボリュームを表す非葉ノードと、を持つ二分木の葉ノードの追加または除去をトリガする設計動作を実行し、二分木を修正し、一方で、弱い葉ノードの個数を最小化する技術が知られている。
【０００３】
また、主成分分析に基づく二分木を用いて、最近傍のデータ点を効率的に探索する技術も知られている。当該技術は、主成分得点に応じた第１および第２子クラスターを有する二分木の階層構造にベクトルデータが分類された近似最近傍探索用データベース、およびクエリーベクトルデータを用いる。当該技術は、探索対象クラスターの初期値を二分木の根ノードとし、クエリーから対象クラスターの平均ベクトルを差引いて補正し、対象クラスターの主成分分析を行って得られる第一主成分ベクトルとの内積を、対象クラスターに対するクエリー主成分得点とする。当該技術は、クエリー主成分得点がゼロ以下ならば、第１子クラスターを、クエリー主成分得点が正ならば第２子クラスターを探索クラスターとし、末端の階層に至るまで探索を繰り返す。当該技術は、末端の階層の探索クラスターに属し、クエリーから最も近い距離のベクトルデータを最近傍のデータとする。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−６４８７６号公報
【特許文献２】特開２０１３−７３２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記技術においては、ノードを１個ずつ追加していく際に、二分木以外の木も列挙する場合があるため、木の列挙に時間を要する。また、列挙された木から二分木だけを取り出す際のコストが大きい。
【０００６】
一つの側面では、二分木を高速に列挙できる生成プログラム、生成方法及び生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
一つの態様において、生成装置は、最小の二分木であり、根と左子及び右子の２つの子とを有する株から、根が他の株に接続されていない親株の２つの子のうち少なくともいずれかに、他の株の根を接続する形で拡張した株の木構造を生成する。生成装置は、株の木構造を構成する株それぞれを二分木に展開することにより、株の木構造から二分木を生成する。生成装置は、接続対象の株が、親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続する。生成装置は、接続対象の株が株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続する。
【発明の効果】
【０００８】
一つの態様によれば、二分木を高速に列挙できる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１における二分木の一例を示す図である。
【図２】図２は、一般技術における二分木列挙処理の一例を示す図である。
【図３】図３は、実施例１における二分木列挙処理の一例を示す図である。
【図４】図４は、実施例１における生成装置の一例を示す図である。
【図５】図５は、実施例１におけるスタックの一例を示す図である。
【図６】図６は、実施例１における二分木ＤＢの一例を示す図である。
【図７】図７は、実施例１における条件記憶部の一例を示す図である。
【図８】図８は、実施例１における株の一例を示す図である。
【図９】図９は、実施例１における二分木とスタックとの対応関係の一例を示す図である。
【図１０】図１０は、実施例１において生成された二分木の集合の一例を示す図である。
【図１１】図１１は、実施例１における生成処理の一例を示すフローチャートである。
【図１２】図１２は、実施例１における列挙処理の一例を示すフローチャートである。
【図１３】図１３は、実施例１における拡張処理の一例を示すフローチャートである。
【図１４】図１４は、実施例２における監査処理の一例を示す図である。
【図１５】図１５は、生成プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する生成プログラム、生成方法及び生成装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、以下に示す各実施例は、矛盾を起こさない範囲で適宜組み合わせてもよい。
【実施例１】
【００１１】
本実施例における、後に説明する生成装置１００は、図１に示すような二分木を生成する。図１は、実施例１における二分木の一例を示す図である。図１に示すように、生成装置１００が生成する二分木ｂ１は、左右２個の子ノードを有するノードと、子ノードを１個も有さないノードとから構成される。本実施例における二分木ｂ１は、例えば１個だけ子ノードを有するノードや、３個以上の子ノードを有するノードを含まない。
【００１２】
図１に示すような二分木ｂ１を生成する際、一般技術においては、例えば、木の一番右のノードに新しいノードを付け加える操作を繰り返す最右拡張法を用いる。図２は、一般技術における二分木列挙処理の一例を示す図である。図２に示すように、例えば最右拡張法などの一般技術においては、まず、子ノードを有さないノード１０を生成し、ノード１０に子ノードを付与して、２個のノードからなる木を生成する。次に、一般技術においては、ノード１０、又はノード１０の子ノードに対して、新たな子ノードを付け加えることにより、３個のノードからなる木を生成する。この段階において、最も単純な二分木１１ａが生成される。
【００１３】
一般技術においては、木の一番右のノードに新しいノードを付け加える操作をさらに繰り返し、より多くのノードからなる木を生成することにより、二分木１２ａ及び１２ｂを生成する。このように、一般技術においては、例えば３個の二分木１１ａ、１２ａ及び１２ｂを生成する際に、２０個以上の木が生成されるので、木の生成及び二分木の列挙に時間を要する。
【００１４】
一方、本実施例における生成装置１００は、図３に示すように、親ノードと、左右２個の子ノードとの３個のノードからなる「株」を、その他の株に接続する。図３は、実施例１における二分木列挙処理の一例を示す図である。なお、以下において、左の子ノードを「左子」と表記し、右の子ノードを「右子」と表記する場合がある。
【００１５】
生成装置１００は、例えば、二分木１１ａの株１１の左子に新たな株を接続することにより、二分木１２ａを生成する。また、生成装置１００は、例えば、株１１の右子に新たな株を接続することにより、二分木１２ｂを生成する。すなわち、生成装置１００は、図１に示すような二分木のみを生成し、例えば１個だけ子ノードを有するノードや、３個以上の子ノードを有するノードを生成しない。
【００１６】
また、本実施例における生成装置１００は、他の株に接続されていないルート株から、右子に接続された株又は右子に株がない場合に左子に接続された株を辿った系列を、「最右株列」として特定する。なお、以下において、最右株列に属する株であって、新たな株を接続する対象とする株を「接続対象の株」と表記する場合がある。
【００１７】
生成装置１００は、最右株列に属する株のうち、左子及び右子のいずれの子ノードにも株が接続されていない末端の株である「最右下株」には、左子又は右子のいずれにも株を接続することができる。また、最右株列に属する株のうち、末端以外の株には、右子にのみ株を接続することができる。なお、生成装置１００は、左右いずれにも他の株が接続されている株、及び最右株列に属さない株に対しては、新たな株を接続しない。
【００１８】
すなわち、生成装置１００は、親と左右の子とを有する株を、ルート株から、右子に付いた株又は右子に株がない場合に左子に付いた株を辿った系列である最右株列の右子、及び最右株列の最下段株の左子にのみ付けるので、二分木を高速に列挙できる。
【００１９】
［機能ブロック］
次に、本実施例における生成装置１００の一例について、図４を用いて説明する。図４は、実施例１における生成装置の一例を示す図である。図４に示すように、本実施例における生成装置１００は、外部Ｉ／Ｆ１１０と、記憶部１２０と、制御部１３０とを有する。生成装置１００は、例えばスタンドアロンのコンピュータにより実装されるが、これに限られず、コンピュータと無線又は有線にて相互に通信可能なサーバコンピュータであってもよく、またクラウド上において実装されてもよい。
【００２０】
外部Ｉ／Ｆ１１０は、有線又は無線を問わず、生成装置１００の利用者（不図示）の端末（不図示）など、その他のコンピュータなどとの通信を制御する。外部Ｉ／Ｆ１１０は、例えばＮＩＣ（Network  Interface  Card）などの通信インタフェースなどであるが、これに限られず、キーボードなどの入力デバイスや、ディスプレイなどの出力デバイスから構成されていてもよい。
【００２１】
記憶部１２０は、例えば制御部１３０が実行するプログラムなどの各種データなどを記憶する記憶装置の一例であり、例えばメモリやプロセッサなどである。記憶部１２０は、スタック１２１、二分木ＤＢ１２２及び条件記憶部１２３を有する。なお、以下の説明では、データベース（Database）を「ＤＢ」と表記する場合がある。
【００２２】
スタック１２１は、二分木の最右株列に属する株に対して、新たな株を接続できるか否かに関する情報を記憶する。図５は、実施例１におけるスタックの一例を示す図である。図５に示すように、スタック１２１は、例えば、「Ｎｏ．」に対応付けて、「株ＩＤ（Identifer）」と、「ステータス」とを対応付けて記憶する。なお、スタック１２１に記憶される情報は、例えば後に説明する対象特定部１３１により入力され、また株接続部１３２により入力又は更新される。
【００２３】
スタック１２１は、例えば、生成される二分木１個ごとに１テーブルを有し、また二分木に含まれる最右株列に属する株１個ごとに１レコードとして記憶する。例えば、図５は、生成される二分木を一意に識別する二分木ＩＤが「ｂ５６」であり、最右株列に属する株が「ｔ」個である二分木に対応するテーブルを示す。なお、以下において、二分木ＩＤが「ｂＸＸ」である二分木を、単に「二分木ｂＸＸ」と表記する場合がある。
【００２４】
なお、以下において、生成される二分木を「ｂ」と表記し、二分木ｂに対応するスタックを「ｓ」と表記する場合がある。また、二分木ｂとスタックｓとの組み合わせを「（ｂ，ｓ）」と表記し、サイズｎの（ｂ，ｓ）の集合を「Ｂｎ」と表記する場合がある。なお、以下において、二分木ｂのサイズｎは、例えば二分木ｂに含まれる株の数であるが、これに限られず、二分木ｂの段数や二分木ｂに含まれるノードの数を、サイズｎとして用いてもよい。
【００２５】
図５において、「Ｎｏ．」は、二分木ｂの最右株列に属する株の順番を示す。「株ＩＤ」は、各レコードに対応する最右株列に属する株を一意に識別する情報である。「ステータス」は、レコードに対応する最右株列に属する株に対して、他の株を接続可能であるか否かを示す。また、以下において、最右株列に属する株に対応するスタック１２１の各レコードの「ステータス」を「セル」と表記する場合がある。また、以下において、株ＩＤが「ＸＸ」である株を、単に「株ＸＸ」と表記する場合がある。
【００２６】
図５において、「◎」は、当該セルに対応する最右株列に属する株に対して、右子にのみ新たな株を接続することができることを示す。また、「×」は、当該セルに対応する最右株列に属する株に対して、左子及び右子のいずれに対しても新たな株を接続することはできないことを示す。「ｌａｓｔ」は、当該セルに対応する最右株列に属する株が、最右下株であることを示す。すなわち、ステータスが「ｌａｓｔ」であるセルに対応する最右株列に属する株に対しては、左子及び右子のいずれにも新たな株を接続できる。
【００２７】
次に、二分木ＤＢ１２２は、生成された二分木に関する情報を記憶する。図６は、実施例１における二分木ＤＢの一例を示す図である。図６に示すように、二分木ＤＢ１２２は、例えば、「株ＩＤ」と、「親ノードＩＤ」と、「左子株ＩＤ」及び「右子株ＩＤ」とを対応付けて記憶する。なお、二分木ＤＢ１２２に記憶される情報は、例えば後に説明する株接続部１３２により入力される。
【００２８】
二分木ＤＢ１２２は、例えば、生成される二分木１個ごとに１テーブルを有し、また二分木に含まれる株１個ごとに１レコードとして記憶する。例えば、図６は、二分木ＩＤが「ｂ３３」であり、「４」個の株を有する二分木に対応するテーブルを示す。
【００２９】
図６において、「親ノードＩＤ」は、当該株ＩＤの株が接続される株のノードを一意に識別する情報を示す。なお、「親ノードＩＤ」は、例えば親ノードの株ＩＤに、左子であることを示す「Ｌ」又は右子であることを示す「Ｒ」を付したＩＤである。また、当該株ＩＤの株が、二分木のルートを含む株である場合、親ノードＩＤは「−」となる。
【００３０】
図６において、例えば、株ＩＤ「２１」の株は、株ＩＤ「１１」の株の左子に接続され、株ＩＤ「２２」の株は、株ＩＤ「１１」の株の右子に接続される。また、株ＩＤ「１１」は、二分木のルートを含む株である。
【００３１】
図６において、「左子株ＩＤ」及び「右子株ＩＤ」は、当該株の左子に接続される株の株ＩＤ、及び当該株の右子に接続される株の株ＩＤをそれぞれ示す。なお、左子又は右子に他の株が接続されていない場合、「左子株ＩＤ」又は「右子株ＩＤ」は「−」となる。例えば、株ＩＤ「２２」の株に対しては、左子に株ＩＤ「４１」の株が接続され、右子には株が接続されていない。
【００３２】
次に、条件記憶部１２３は、二分木の生成を終了する条件に関する情報を記憶する。図７は、実施例１における条件記憶部の一例を示す図である。図７に示すように、条件記憶部１２３は、例えば、「種別」と「条件」とを対応付けて記憶する。なお、条件記憶部１２３に記憶される情報は、例えば対象特定部１３１により入力される。
【００３３】
図７において、「種別」は、条件の種別を示し、「条件」は、当該種別における具体的な条件を示す。例えば、図７は、二分木に含まれる株の数を示す「株数」及び二分木に含まれるノードの段の数を示す「段数」については条件を設けず、「ノード数」が「７」になった場合に二分木の生成を終了することを示す。
【００３４】
図４に戻って、制御部１３０は、生成装置１００全体を司る処理部であり、例えばプロセッサなどである。制御部１３０は、対象特定部１３１、株接続部１３２、条件判定部１３３及び出力部１３４を有する。なお、対象特定部１３１、株接続部１３２、条件判定部１３３及び出力部１３４は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
【００３５】
対象特定部１３１は、二分木の生成処理の開始指示を受け付けるとともに、株を接続する対象となる株及び左子又は右子を特定する。例えば、対象特定部１３１は、外部Ｉ／Ｆ１１０を通じて、生成装置１００の利用者の端末から二分木の生成処理の開始指示を受け付けると、株を１個だけ有する、大きさ１の二分木ｂを生成する。また、対象特定部１３１は、二分木の生成処理の開始指示において受け付けた、二分木の生成を終了する条件に関する情報を、条件記憶部１２３に記憶する。なお、対象特定部１３１は、木構造生成部の一例である。
【００３６】
また、対象特定部１３１は、二分木ｂの最右株列を管理する長さ１のスタックｓを生成し、スタックｓの唯一のセルｓ［１］に「ｌａｓｔ」を記憶する。さらに、対象特定部１３１は、二分木ｂとスタックｓとの組み合わせＢ（ｂ，ｓ）を生成する。すなわち、対象特定部１３１は、他の根に接続されていない親株であって、左子及び右子のいずれにも他の株を接続させることができる株を生成する。
【００３７】
本実施例における株について、図８を用いて説明する。図８は、実施例１における株の一例を示す図である。図８に示すように、株１１は、親ノード１１Ｐと、左子１１Ｌ及び右子１１Ｒとの３個のノードを有する。生成装置１００は、左子１１Ｌ及び右子１１Ｒに、それぞれ１個だけ株を接続することができる。
【００３８】
次に、株接続部１３２は、生成された二分木ｂに、株を接続して二分木を生成する。株接続部１３２は、生成された全ての二分木に対して、新たな株を接続する処理を繰り返す。なお、株接続部１３２は、接続部の一例である。
【００３９】
株接続部１３２は、例えば、Ｂ（ｂ，ｓ）に含まれる二分木ｂについて、スタックｓを参照して株を接続する。この場合において、株接続部１３２は、スタックｓのセルｓ［１］が「ｌａｓｔ」である、すなわち接続対象の株が二分木ｂの最右下株であることを示すので、接続対象の株の左子に株を接続した二分木と、接続対象の株の右子に株を接続した二分木とを生成する。
【００４０】
例えば、株接続部１３２は、接続対象の株の左子に新たな株を接続した二分木Ｌｅｆｔを生成する。また、株接続部１３２は、セルｓ［１］を「◎」に更新し、左子に接続した株に対応するセルｓ［２］に「ｌａｓｔ」を登録したスタック「ｓ＿Ｌｅｆｔ」を生成する。
【００４１】
また、株接続部１３２は、スタックｓのセルｓ［１］が「ｌａｓｔ」である場合、接続対象の株の右子に新たな株を接続した二分木Ｒｉｇｈｔを生成する。この際、株接続部１３２は、セルｓ［１］を「×」に更新し、右子に接続した新たな株に対応するセルｓ［２］に「ｌａｓｔ」を登録したスタック「ｓ＿Ｒｉｇｈｔ」を生成する。すなわち、株接続部１３２は、二分木Ｒｉｇｈｔにおいて、接続対象の株の左子には新たな株を接続しない。
【００４２】
また、株接続部１３２は、接続対象の株に対応するセルｓ［ｉ］が「◎」であると判定した場合、接続対象の株の右子に新たな株を接続した二分木Ｎｅｗを生成する。この際、株接続部１３２は、セルｓ［ｉ］を「×」に更新したスタック「ｓ＿Ｎｅｗ」を生成する。
【００４３】
また、株接続部１３２は、スタック「ｓ＿Ｎｅｗ」を生成する際に、セルｓ［ｉ＋１］に対応付けられる株を、接続対象の株の左子に接続された株から、接続対象の株の右子に接続された新たな株に更新する。例えば、株接続部１３２は、スタック１２１のセルｓ［ｉ＋１］に対応する株ＩＤを更新する。すなわち、株接続部１３２は、接続対象の株の左子に接続された株を、最右株列から除外する。
【００４４】
さらに、株接続部１３２は、セルｓ［ｉ＋１］が「ｌａｓｔ」以外である場合、「ｌａｓｔ」に更新する。すなわち、株接続部１３２は、接続対象の株の右子に新たに接続された株を最右下株として特定する。また、この場合、最右下株は変更されるものの、最右下株の高さには変更がない。
【００４５】
さらに、株接続部１３２は、スタックｓ＿Ｎｅｗにおいて、セルｓ［ｉ＋１］より下位のセル、例えば接続対象の株の左子に接続された株にさらに接続された株が存在すると判定した場合、当該セルを削除する。すなわち、株接続部１３２は、例えばセルｓ［ｉ＋２］に対応する、接続対象の株の左子に接続された株にさらに接続された株を、最右株列から除外する。
【００４６】
また、株接続部１３２は、接続対象の株の左子又は右子に新たな株を接続する拡張処理を、二分木に含まれる全ての最右株列に対して行う。例えば、株接続部１３２は、最右株列の上位の株に対して株を接続するたびにカウンタｍを１インクリメントし、カウンタｍがスタックｓの長さｔに到達するまで処理を繰り返す。
【００４７】
株接続部１３２による二分木の生成とスタックの更新の流れについて、図９を用いて説明する。図９は、実施例１における二分木とスタックとの対応関係の一例を示す図である。図９において、株接続部１３２は、まず、株を１個だけ有する二分木ｂ１１に、新たな株を接続する。例えば、株接続部１３２は、二分木ｂ１１に含まれる株１１の左子１１Ｌに、新たな株２１を接続して、二分木ｂ２１を生成する。
【００４８】
この場合において、最右株列は、ルート株である株１１の右子に株が接続されていないため、左子に接続された株２１を辿る系列となる。従って、株１１及び株２１は、いずれも最右株列に属し、さらに株２１は最右下株に該当する。また、株接続部１３２は、株１１に対しては、右子にのみ新たな株を接続可能であり、株２１に対しては左子及び右子の両方に新たな株を接続可能である。
【００４９】
この際、株接続部１３２は、第１の最右株列である株１１に対応するセルｓ［１］に「◎」を記憶し、第２の最右株列である株２１に対応するセルｓ［２］には「ｌａｓｔ」を記憶した新たなスタックｓ＿２１を生成する。
【００５０】
次に、株接続部１３２は、二分木ｂ２１に対し、株１１の右子１１Ｒに、新たな株２２を接続することにより、二分木ｂ２３を生成する。この場合において、最右株列は、ルート株である株１１の右子に接続された株２２を辿る系列となる。これにより、株２１は最右株列から除外される。
【００５１】
この場合において、株接続部１３２は、スタックｓ＿２１における第２の最右株列に対応するレコードの株ＩＤを、「２１」から「２２」に更新した新たなスタックｓ＿２３を生成する。また、スタックｓ＿２３における株２２に対応するセルｓ＿２３［２］には「ｌａｓｔ」を記憶する。
【００５２】
さらに、株接続部１３２は、株１１の左子１１Ｌ及び右子１１Ｒの両方にそれぞれ新たな株が接続されたため、スタックｓ＿２３における第１の最右株列に対応するセルｓ＿２３［１］を「×」に更新する。
【００５３】
次に、株接続部１３２は、二分木ｂ２３に対し、株２２の左子２２Ｌに、新たな株４１を接続することにより、二分木ｂ３３を生成する。この場合において、新たに接続された株４１は、ルート株である株１１の右子に接続された株２２を辿る系列に含まれ、かつ末端の株であるため、最右下株に該当する。
【００５４】
そこで、株接続部１３２は、スタックｓ＿２３における第３の最右株列に対応するレコードを追加した新たなスタックｓ＿３３を生成する。株接続部１３２は、スタックｓ＿３３のセルｓ＿３３［３］に対応する株ＩＤ「４１」を記憶する。また、株接続部１３２は、スタックｓ＿３３の株２２に対応するセルｓ＿３３［２］を「◎」に更新する。なお、株接続部１３２は、接続対象の株である株２２より上の株に対応するセルｓ＿３３［１］は更新しない。
【００５５】
このような処理により生成される二分木について、図１０を用いて説明する。図１０は、実施例１において生成された二分木の集合の一例を示す図である。図１０は、二分木の最大サイズＮが「３」である場合に生成される二分木の集合を列挙した例を示す。
【００５６】
図９に示す例と同様に、株接続部１３２は、二分木ｂ１１から二分木ｂ２１を生成し、二分木ｂ２１から二分木ｂ２３を生成する。なお、二分木ｂ３３は、サイズｎが「４」であるため、図１０においては列挙されない。
【００５７】
一方、株接続部１３２は、二分木ｂ２２においてスタックｓ＿２２の株１１に対応するセルｓ＿２２［１］は「×」であるので、株１１の左子１１Ｌに新たな株を接続して二分木ｂ２３を生成することはない。これにより、株接続部１３２は、二分木が重複して生成されることを抑制する。
【００５８】
図４に戻って、条件判定部１３３は、二分木の生成処理を終了するか否かの条件を判定する。条件判定部１３３は、例えば、二分木を列挙する処理において、サイズｎの二分木を全て列挙したか否かを判定する。条件判定部１３３は、全ての二分木を列挙していない場合は二分木を列挙する処理を繰り返し、全ての二分木の列挙が完了している場合は、二分木のサイズｎを１インクリメントし、サイズｎの二分木を列挙する処理に戻る。
【００５９】
また、条件判定部１３３は、例えば、二分木に株を接続する拡張処理において、二分木ｂに対応するスタックの最後のセルｓ［ｔ］まで処理が完了したか否かを判定する。例えば、条件判定部１３３は、株接続部１３２によりインクリメントされるカウンタｍが、スタックｓの長さｔに到達するまで処理を繰り返す。条件判定部１３３は、スタックの最後のセルｓ［ｔ］まで処理が完了していない場合は拡張処理を繰り返し、スタックの最後のセルｓ［ｔ］まで処理が完了している場合は、次の二分木を列挙する処理に戻る。
【００６０】
さらに、条件判定部１３３は、例えば、条件記憶部１２３を参照し、生成された二分木が、記憶された条件を満たすか否かを判定する。条件判定部１３３は、例えば図７に示すような条件記憶部１２３を参照した場合、生成された二分木のサイズｎが、二分木の最大サイズＮに到達したか否かを判定する。条件判定部１３３は、二分木の最大サイズＮに到達していない場合は二分木の生成処理を繰り返し、二分木の最大サイズＮに到達した場合は出力部１３４に二分木を出力させる。
【００６１】
次に、出力部１３４は、生成された組み合わせの集合Ｂｎに含まれる二分木ｂの集合を出力する。例えば、出力部１３４は、図１０に示すような列挙された二分木の一覧を、外部Ｉ／Ｆ１１０を通じて利用者の端末に出力する。また、出力部１３４は、図６に示すような二分木ＤＢ１２２のテーブルを出力してもよい。なお、出力部１３４は、二分木生成部の一例である。
【００６２】
［処理の流れ］
次に、本実施例における処理について、図１１乃至図１３を用いて説明する。図１１は、実施例１における生成処理の一例を示すフローチャートである。図１１に示すように、生成装置１００の対象特定部１３１は、例えば外部Ｉ／Ｆ１１０を通じて、利用者の端末から二分木の生成処理の開始指示を受け付けるまで待機する（Ｓ１０：Ｎｏ）。
【００６３】
対象特定部１３１は、開始指示を受け付けたと判定した場合（Ｓ１０：Ｙｅｓ）、大きさ１の二分木、すなわち株を１個だけ有する二分木ｂを生成し、二分木ｂのサイズｎを１に設定する（Ｓ１１）。次に、対象特定部１３１は、二分木ｂの最右株列を管理する長さ１のスタックｓを生成し（Ｓ１２）、セルに“ｌａｓｔ”を記録する。そして、対象特定部１３１は、二分木ｂとスタックｓとの組み合わせＢ（ｂ，ｓ）を生成する。
【００６４】
次に、株接続部１３２は、列挙処理を行う（Ｓ１３）。図１２は、実施例１における列挙処理の一例を示すフローチャートである。図１２に示すように、株接続部１３２は、二分木ｂとスタックｓとの組み合わせの集合Ｂｎから、二分木とスタックとの組み合わせを特定する（Ｓ１０１）。次に、株接続部１３２は、特定した未処理の二分木とスタックとの組み合わせに含まれる二分木に対する拡張処理を行う（Ｓ１０２）。
【００６５】
図１３は、実施例１における拡張処理の一例を示すフローチャートである。図１３に示すように、株接続部１３２は、カウンタｍがスタックｓの長さｔに到達したか否か、すなわち接続対象の株が最右下株か否かを判定する（Ｓ２０１）。
【００６６】
株接続部１３２は、カウンタｍがスタックｓの長さｔに到達したと判定した場合（Ｓ２０１：Ｙｅｓ）、接続対象の株の左子に新たな株を接続した二分木Ｌｅｆｔを生成する（Ｓ２０２）。そして、株接続部１３２は、接続対象の株に対応するセルｓ［ｍ］を「◎」に更新する（Ｓ２０３）。また、株接続部１３２は、接続した新たな株に対応するセルｓ［ｍ＋１］を生成し、「ｌａｓｔ」を登録する（Ｓ２０４）。
【００６７】
次に、株接続部１３２は、株の右子に新たな株を接続した二分木Ｒｉｇｈｔを生成する（Ｓ２０５）。そして、株接続部１３２は、セルｓ［ｍ］を「×」に更新する（Ｓ２０６）。また、株接続部１３２は、スタックｓにおける接続した新たな株に対応するセルｓ［ｍ＋１］に「ｌａｓｔ」を登録する（Ｓ２０７）。そして、株接続部１３２は、Ｂｎに（Ｎｅｗ，ｓ＿Ｎｅｗ）を追加し、Ｓ１０２に戻る。
【００６８】
一方、株接続部１３２は、カウンタｍはスタックｓの長さｔに到達していないと判定した場合（Ｓ２０１：Ｎｏ）、スタックｓの対応するセルｓ［ｍ］は「◎」であるか否か、すなわち接続対象の株の左子に別の株が接続されているか否かを判定する（Ｓ２１１）。株接続部１３２は、セルｓ［ｍ］が「◎」でもないと判定した場合（Ｓ２１１：Ｎｏ）、接続対象の株に対応するセルｓ［ｍ］は「×」であり、新たな株を接続できないので、新たな株を接続せずにＳ１０２に戻る。
【００６９】
一方、株接続部１３２は、セルｓ［ｍ］が「◎」であると判定した場合（Ｓ２１１：Ｙｅｓ）、株の右子に新たな株を接続した二分木Ｎｅｗを生成する（Ｓ２１２）。そして、株接続部１３２は、セルｓ［ｍ］を「×」に更新する（Ｓ２１３）。また、株接続部１３２は、接続した新たな株に対応するセルｓ［ｍ＋１］の株ＩＤ、すなわち最右株列の株ＩＤを、接続対象の株の左子に接続された株から、右子に接続された株に変更する（Ｓ２１４）。この際、株接続部１３２は、セルｓ［ｍ＋１］が「ｌａｓｔ」ではない場合、セルｓ［ｍ＋１］を「ｌａｓｔ」に更新する。
【００７０】
次に、株接続部１３２は、スタックｓに、セルｓ［ｍ＋１］よりさらに下位のセルがあるか否か、すなわち接続対象の株の左子にさらに別の株が接続されているか否かを判定する（Ｓ２２１）。株接続部１３２は、さらに下位のセルはないと判定した場合（Ｓ２２１：Ｎｏ）、Ｓ１０２に戻る。一方、株接続部１３２は、さらに下位のセルがあると判定した場合（Ｓ２２１：Ｙｅｓ）、当該セルを削除し（Ｓ２２２）、Ｓ１０２に戻る。
【００７１】
図１２に戻って、条件判定部１３３は、カウンタｍを１インクリメントする（Ｓ１０３）。そして、条件判定部１３３は、カウンタｍが、スタックｓのセルの長さｔに到達したか否か、すなわちスタックｓの全てのセルについて処理を完了したか否かを判定する（Ｓ１１１）。条件判定部１３３は、カウンタｍが、スタックｓのセルの長さｔに到達していないと判定した場合（Ｓ１１１：Ｎｏ）、Ｓ１０２に戻って処理を繰り返す。
【００７２】
一方、条件判定部１３３は、カウンタｍが、スタックｓのセルの長さｔに到達したと判定した場合（Ｓ１１１：Ｙｅｓ）、Ｂｎに含まれる全ての二分木について処理が完了したか否かを判定する（Ｓ１１２）。条件判定部１３３は、全ての二分木について処理が完了していないと判定した場合（Ｓ１１２：Ｎｏ）、Ｓ１０１に戻って処理を繰り返す。条件判定部１３３は、全ての二分木について処理が完了したと判定した場合（Ｓ１１２：Ｙｅｓ）、Ｓ１３の処理に戻る。
【００７３】
図１１に戻って、条件判定部１３３は、二分木のサイズｎを１インクリメントする（Ｓ１４）。そして、条件判定部１３３は、二分木のサイズｎが、例えば条件判定部１３３に記憶された二分木の最大サイズＮに到達したか否かを判定する（Ｓ３１）。条件判定部１３３は、二分木のサイズｎが二分木の最大サイズＮに到達していないと判定した場合（Ｓ３１：Ｎｏ）、Ｓ１３に戻って処理を繰り返す。
【００７４】
一方、出力部１３４は、二分木のサイズｎが二分木の最大サイズＮに到達したと判定した場合（Ｓ３１：Ｙｅｓ）、二分木ＤＢ１２２に記憶された、生成された二分木ｂの集合を出力し（Ｓ３２）、処理を終了する。
【００７５】
［効果］
以上説明したように、本実施例における生成装置は、最小の二分木であり、根と左子及び右子の２つの子とを有する株から、根が他の株に接続されていない親株の２つの子のうち少なくともいずれかに、他の株の根を接続する形で拡張した株の木構造を生成する。生成装置は、株の木構造を構成する株それぞれを二分木に展開することにより、株の木構造から二分木を生成する。生成装置は、接続対象の株が、親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続する。生成装置は、接続対象の株が株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続する。これにより、生成装置は、二分木を高速に列挙できる。
【００７６】
また、生成装置は、接続対象の株が最右株列上の株である場合において、当該接続対象の株の左子に他の株が接続され、当該接続対象の株の右子に他の株が接続されていない場合には、当該接続対象の株の右子に別の新たな株を接続し、又は接続対象の株が最左株列上の株である場合において、当該接続対象の株の右子に他の株が接続され、当該接続対象の株の右子に他の株が接続されていない場合には、当該接続対象の株の左子に別の新たな株を接続する。さらに、生成装置は、株の木構造に含まれる株の数又は株の木構造の段数が所定の数に到達するまで、所定の拡張手法を繰り返してもよい。これにより、生成装置は、所定のノード数を含む二分木のパターンを漏れなく生成できる。
【００７７】
また、生成装置は、接続対象の株が、最右株列上の株に新たな株が接続されて株の木構造が拡張された場合における最右株列上の株ではない場合、並びに最左株列に新たな株が接続されて株の木構造が拡張された場合における最左株列上の株ではない場合、当該接続対象の株への新たな株の接続を抑止する。生成装置は、接続対象の株が、最右株列上の株に新たな株が接続されて株の木構造が拡張された場合において、当該接続対象の株の右子に他の株が接続されている場合、又は最左株列上の株に新たな株が接続されて株の木構造が拡張された場合において、当該接続対象の株の左子に他の株が接続されている場合、当該接続対象の株への新たな株の接続を抑止する。これにより、生成装置は、重複なく二分木を生成できる。
【実施例２】
【００７８】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。例えば、実施例１においては、二分木の木構造を列挙する構成について説明したが、同一の木構造の二分木であっても、各ノードにそれぞれ異なるラベルが付与される場合がある。
【００７９】
例えば、第１の株について、親ノードに「身長１６０ｃｍ以上？」というラベルが付与され、左子には「Ｔ」（True）というラベルが付与され、右子には「性別は女性？」というラベルが付与されている場合が考えられる。一方、第２の株については、親ノードに「身長１６０ｃｍ以上？」というラベルが付与され、左子には「性別は女性？」というラベルが付与され、右子には「Ｆ」（False）というラベルが付与されている場合が考えられる。
【００８０】
このような場合、第１の株と第２の株は、二分木の木構造は同一であるが、各ノードのラベルにまで着目した場合、同一の二分木ではない。例えば、ディープラーニングなどの学習過程において二分木が生成される場合において、生成された二分木が適正であるかを、当該二分木の各ノードに付与されたラベルに着目して監視したい場合が考えられる。そこで、本実施例においては、各ノードに付与されたラベルが同一であるか否かをさらに判定する構成について生成する。
【００８１】
図１４は、実施例２における監査処理の一例を示す図である。図１４に示すように、本実施例における生成装置２００（不図示）は、ノードにラベルＬ１乃至Ｌ４が付された二分木Ｃ１１及びＣ１２を生成する。図１４において、例えばラベルＬ１は「ｙ」であり、ラベルＬ２は、「ｚ」であり、ラベルＬ３は「Ｔ」であり、ラベルＬ４は「Ｆ」である。そして、生成装置２００は、生成した二分木Ｃ１１及びＣ１２を、別の二分木Ｄ１と比較する。なお、二分木Ｄ１は、例えば二分木Ｃ１１及びＣ１２よりも大きなサイズを持つ。
【００８２】
この場合において、二分木Ｄ１の一部Ｄ１１は、二分木Ｃ１１と同一の木構造を含み、かつ各ノードに付されたラベルも、二分木Ｃ１１のものと一致する。一方、二分木Ｃ１２は、木構造も、各ノードに付されたラベルも、二分木Ｄ１の一部Ｄ１１とは一致しない。このような場合、生成装置２００は、二分木Ｄ１は、二分木Ｃ１１を包含するが、二分木Ｃ１２は包含しないと判定する。
【００８３】
以上説明したように、本実施例における生成装置は、根並びに左子及び右子のうち少なくともいずれかのノードにラベルが付された新たな株を接続し、ラベルが付されたノードを含む株の木構造を用いて生成された二分木が、ラベルが付されたノードを含む他の二分木と一致するか否かを判定する。これにより、生成装置は、学習した決定木の監査ができる。
【００８４】
なお、ラベルは、例えばルート株又はその他の株に接続される新たな株のノードに付与されるが、これに限られず、ルート株のノードにラベルが付与されていてもよい。
【００８５】
また、実施例１においては、ルート株から、右子に接続された株又は右子に株がない場合に左子に接続された株を辿る「最右株列」について説明したが、実施の形態はこれに限られない。例えば、生成装置１００が、ルート株から、左子に接続された株又は左子に株がない場合に右子に接続された株を辿る、すなわち実施例１における「左子」と「右子」とを読み替えて処理を行うような構成であってもよい。
【００８６】
また、条件記憶部１２３に記憶される情報は一例であり、二分木に含まれる株の数やノードの段数などの複数の条件のうち、いずれか１つの条件又は全ての条件を満たすか否かを判定するような構成であってもよい。さらに、条件は上限値に限られず、例えば「株の数が５個以上９個未満」のように、下限値を設定するような条件であってもよい。
【００８７】
なお、図５乃至図７に示す各テーブルの構成は一例であり、その他の項目を含んでもよく、また少なくともいずれかの項目を含まない構成であってもよい。例えば、図６に示す二分木ＤＢ１２２が、「親ノードＩＤ」並びに「左子株ＩＤ」及び「右子株ＩＤ」のうち、少なくともいずれかの項目を含まないような構成であってもよい。
【００８８】
［システム］
また、各実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の一部を手動的におこなうこともできる。あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図４に示す対象特定部１３１及び株接続部１３２、又は株接続部１３２及び条件判定部１３３を統合してもよい。また、図４に示す条件判定部１３３を、図１１に示す生成処理の終了条件を判定する処理部と、図１３に示す拡張処理の終了条件を判定する処理部とに分散してもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９０】
［二分木生成プログラム］
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。図１５は、生成プログラムを実行するコンピュータの一例を示す図である。なお、以下においては、実施例１における生成装置１００を例として説明するが、実施例２における対応する各装置についても同様である。
【００９１】
図１５に示すように、コンピュータ３００は、ＣＰＵ（Central  Processing  Unit）３１０、ＨＤＤ（Hard  Disk  Drive）３２０、ＲＡＭ（Random  Access  Memory）３４０を有する。これら３００〜３４０の各部は、バス４００を介して接続される。
【００９２】
なお、図１５において、ＣＰＵ３１０は、プロセッサの一例であり、ＨＤＤ３２０及びＲＡＭ３４０は、メモリの一例である。また、メモリとしては、例えば、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）などの各種のＲＡＭ、ＲＯＭ（Read  Only  Memory）、フラッシュメモリなどが挙げられる。プロセッサとしては、ＤＳＰ（Digital  Signal  Processor）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＰＬＤ（Programmable  Logic  Device）などが挙げられる。
【００９３】
ＨＤＤ３２０には上記の対象特定部１３１、株接続部１３２、条件判定部１３３及び出力部１３４と同様の機能を発揮する二分木生成プログラム３２０Ａが予め記憶される。なお、二分木生成プログラム３２０Ａについては、適宜分離してもよい。
【００９４】
また、ＨＤＤ３２０は、各種情報を記憶する。例えば、ＨＤＤ３２０は、ＯＳや各種の処理に用いる各種データを記憶する。
【００９５】
そして、ＣＰＵ３１０が、二分木生成プログラム３２０ＡをＨＤＤ３２０から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、二分木生成プログラム３２０Ａは、対象特定部１３１、株接続部１３２、条件判定部１３３及び出力部１３４と同様の動作を実行する。
【００９６】
なお、上記した二分木生成プログラム３２０Ａは、必ずしも最初からＨＤＤ３２０に記憶させることを要しない。
【００９７】
また、例えば、二分木生成プログラム３２０Ａは、コンピュータ３００に挿入されるＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラムを記憶させてもよい。そして、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。
【００９８】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３００に接続される「他のコンピュータ（又はサーバ）」などにプログラムを記憶させてもよい。そして、コンピュータ３００がこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【００９９】
１００、２００  生成装置
１１０  外部Ｉ／Ｆ
１２０  記憶部
１２１  スタック
１２２  二分木ＤＢ
１２３  条件記憶部
１３０  制御部
１３１  対象特定部
１３２  株接続部
１３３  条件判定部
１３４  出力部
【図１】
2019135634.tif 000003
【図２】
2019135634.tif 000004
【図３】
2019135634.tif 000005
【図４】
2019135634.tif 000006
【図５】
2019135634.tif 000007
【図６】
2019135634.tif 000008
【図７】
2019135634.tif 000009
【図８】
2019135634.tif 000010
【図９】
2019135634.tif 000011
【図１０】
2019135634.tif 000012
【図１１】
2019135634.tif 000013
【図１２】
2019135634.tif 000014
【図１３】
2019135634.tif 000015
【図１４】
2019135634.tif 000016
【図１５】
2019135634.tif 000017