(57)【要約】【課題】特定の二分木パターンの探索を高速化すること。【解決手段】探索装置１０は、対象の二分木データ木における、特定の二分木パターンを探索する際に、特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、登録済二分木パターンの位置を利用して、特定の二分木パターンの探索を行う。【選択図】図１
2020077236.tif 000002
【特許請求の範囲】
【請求項１】
対象の二分木データ木における、特定の二分木パターンの探索プログラムであって、
コンピュータに、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う、
処理を実行させる探索プログラムであり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索プログラム。
【請求項２】
請求項１に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の末端の株の右子若しくは左子である場合、前記最右株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【請求項３】
請求項２に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の株であって末端の株以外である場合、前記最右株列上で前記末端よりも上の階層に接続された株の右子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【請求項４】
請求項３に記載の探索プログラムであって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索プログラム。
【請求項５】
請求項１に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の末端の株の右子若しくは左子である場合、前記最左株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【請求項６】
対象の二分木データ木における、特定の二分木パターンの探索方法であって、
コンピュータが、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う、
処理を実行する探索方法であり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索方法。
【請求項７】
対象の二分木データ木における、特定の二分木パターンの探索装置であって、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解する分解部と、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う探索部と、
を有する探索装置であり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、探索プログラム、探索方法及び探索装置に関する。
【背景技術】
【０００２】
情報処理における基本的なデータ構造の１つとして、二分木の構造を持つデータ（以下、「二分木データ木」と記載する場合がある）が挙げられる。例えば、二分木データ木は、ＡＩ（Artificial  Intelligence）分野や決定木などの幅広い場面で活用される。
【０００３】
このような二分木データ木の中から、特定の二分木パターンの各ノードが持つラベルと一致する部分木が出現する位置が探索される。例えば、二分木データ木のルートから下層へ向かって順番に二分木パターンを二分木データ木上で走査しつつ、二分木パターンの各ノードを二分木データ木の部分木に対応付ける。これら二分木パターンおよび二分木パターンの部分木の間で全てのノードのラベルが一致するか否かを比較することにより、二分木パターンの探索が実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１６３５６４号公報
【非特許文献】
【０００５】
【非特許文献１】Tatsuya  Asai,  et  al.,  “Efficient  substructure  discovery  from  large  semi-structured  data,”  Proc.  SDM2002,  158-174.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の技術では、二分木パターンが追加される度に、二分木パターンの全てのノードを二分木データ木の部分木に対応付けてラベルを比較する必要がある。このような二分木パターンの探索が行われる場合、二分木データ木のサイズが大きくなるに連れて探索の処理量も増大する。それ故、上記の技術では、特定の二分木パターンの探索の高速化に限界がある。
【０００７】
１つの側面では、本発明は、特定の二分木パターンの探索を高速化できる探索プログラム、探索方法及び探索装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
一態様では、探索プログラムは、対象の二分木データ木における、特定の二分木パターンの探索プログラムであって、コンピュータに、前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う、処理を実行させる探索プログラムであり、前記所定の手順では、最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、前記所定の拡張手法は、接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する。
【発明の効果】
【０００９】
特定の二分木パターンの探索を高速化できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る探索装置の機能的構成の一例を示すブロック図である。
【図２】図２は、二分木データ木と二分木パターンの対応付けの一例を示す図である。
【図３】図３は、二分木パターン間の包含関係の一例を示す図である。
【図４】図４は、二分木データ木と二分木パターンの対応付けの一例を示す図である。
【図５】図５は、株の一例を示す図である。
【図６】図６は、二分木パターンの一例を示す図である。
【図７】図７は、二分木の探索アルゴリズムの動作例を示す図である。
【図８】図８は、実施例１に係る探索処理の手順を示すフローチャートである。
【図９】図９は、実施例１及び実施例２に係る探索プログラムを実行するコンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して本願に係る探索プログラム、探索方法及び探索装置について説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
図１は、実施例１に係る探索装置の機能的構成の一例を示すブロック図である。図１に示す探索装置１０は、対象の二分木データ木の中から、特定の二分木パターンの各ノードが持つラベルと一致する部分木が出現する位置を探索する探索処理を実行する。このような探索処理の一側面として、特定の二分木パターンが対象の二分木データ木の中で出現する位置の探索を高速化する仕組みに創作の困難性がある。
【００１３】
以下、本実施例に係る探索装置１０の機能ブロックを説明するのに先立って、（１）課題の一側面を説明した後に、（２）課題解決のアプローチの一側面について説明することとする。
【００１４】
（１）課題の一側面
上記の背景技術の欄でも説明した通り、上記の従来技術では、二分木パターンが追加される度に、二分木パターンの全てのノードを二分木データ木の部分木に対応付けてラベルを比較する必要がある。
【００１５】
図２は、二分木データ木と二分木パターンの対応付けの一例を示す図である。図２には、二分木データ木Ｄ０１上における出現位置を探索する特定の二分木パターンの一例として、二分木パターンＰ０１、二分木パターンＰ０２の順にパターンが生成される例が示されている。これら二分木データ木Ｄ０１、二分木パターンＰ０１および二分木パターンＰ０２は、いずれも全てのノードが０個または２個の子ノードを持つ木構造を有し、各ノードにラベルが割り当てられたラベル付き二分木であることとする。なお、図２では、二分木の構造のうちノードが円の図形で表現されると共に、ノード間を結ぶリンク（エッジとも呼ばれる）が直線で表現される。さらに、ノードに割り当てられたラベルは、ラベルが英大文字のアルファベットで模式化された状態でノードに対応する円の図形の内部に記入されることにより表現される。
【００１６】
例えば、二分木パターンＰ０１が生成された場合、上記の従来技術では、二分木データ木Ｄ０１の根に対応するノードｎ０１から下層へ向かって順番に二分木パターンＰ０１が二分木データ木Ｄ０１上で走査される。まず、二分木パターンＰ０１の根に対応するノードＮ０１が二分木データ木Ｄ０１の根に対応するノードｎ０１に対応付けられる。このように、二分木パターンＰ０１の根に対応するノードＮ０１が二分木データ木Ｄ０１に対応付けられた段階で、当該ノードＮ０１の子ノードであるノードＮ０２およびノードＮ０３を対応付ける二分木データ木Ｄ０１上のノードも定まる。すなわち、二分木データ木Ｄ０１のノードｎ０２に二分木パターンＰ０１のノードＮ０２が対応付けられると共に、二分木データ木Ｄ０１のノードｎ０３に二分木パターンＰ０１のノードＮ０３が対応付けられる。
【００１７】
その上で、二分木データ木Ｄ０１及び二分木パターンＰ０１の間で各ノードのラベルが照合される。すなわち、ノードＮ０１及びノードｎ０１の間でラベルが一致し、ノードＮ０２及びノードｎ０２の間でラベルが一致し、かつノードＮ０３及びノードｎ０３の間でラベルが一致するか否かが照合される。図２に示す例では、ノードＮ０１及びノードｎ０１は、いずれもラベルが「Ａ」であるので一致し、ノードＮ０２及びノードｎ０２も、互いのラベルが「Ｂ」であるので一致し、さらに、ノードＮ０３及びノードｎ０３も、互いのラベルが「Ｃ」であるので一致する。この場合、二分木データ木Ｄ０１における二分木パターンＰ０１の出現位置Ｃ１−１として、二分木データ木Ｄ０１のノードｎ０１、ノードｎ０２及びノードｎ０３が得られる。
【００１８】
このようなノード間の対応付けおよびラベルの照合が繰り返される。図２の例で言えば、二分木パターンＰ０１の根に対応するノードＮ０１を二分木データ木Ｄ０１のノードｎ０２、ノードｎ０３、・・・、ノードｎ０９に対応付ける探索処理が残り８回繰り返される。
【００１９】
例えば、二分木パターンＰ０１の根に対応するノードＮ０１が二分木データ木Ｄ０１のノードｎ０２またはノードｎ０３に対応付けられる場合、ノードＮ０１の子ノードであるノードＮ０２およびノードＮ０３に対応付ける二分木データ木Ｄ０１上のノードが存在する。その一方で、二分木データ木Ｄ０１及び二分木パターンＰ０１の間で各ノードのラベルが一致しない。これらの場合、二分木パターンＰ０１の出現位置が探索結果として得られない。また、二分木パターンＰ０１の根に対応するノードＮ０１が二分木データ木Ｄ０１のノードｎ０４、ノードｎ０５、ノードｎ０７〜ノードｎ０９に対応付けられる場合、ノードＮ０１の子ノードであるノードＮ０２およびノードＮ０３に対応付ける二分木データ木Ｄ０１上のノードがそもそも存在しない。これらの場合にも、二分木パターンＰ０１の出現位置が探索結果として得られない。
【００２０】
一方、二分木パターンＰ０１の根に対応するノードＮ０１が二分木データ木Ｄ０１のノードｎ０６に対応付けられる場合、二分木パターンＰ０１の出現位置Ｃ１−２が探索結果として得られる。すなわち、ノードＮ０１の子ノードであるノードＮ０２およびノードＮ０３に対応付ける二分木データ木Ｄ０１上のノードとして、ノードｎ０８およびノードｎ０９が存在する。さらに、二分木データ木Ｄ０１及び二分木パターンＰ０１の間で各ノードのラベルが一致する。すなわち、図２に示す通り、ノードＮ０１及びノードｎ０６は、いずれもラベルが「Ａ」であるので一致し、ノードＮ０２及びノードｎ０８も、互いのラベルが「Ｂ」であるので一致し、さらに、ノードＮ０３及びノードｎ０９も、互いのラベルが「Ｃ」であるので一致する。この場合、二分木データ木Ｄ０１における二分木パターンＰ０１の出現位置Ｃ１−２として、二分木データ木Ｄ０１のノードｎ０６、ノードｎ０８及びノードｎ０９が得られる。
【００２１】
このように二分木パターンＰ０１および二分木データ木Ｄ０１の間で計９回の対応付けが行われる。この結果、二分木データ木Ｄ０１における二分木パターンＰ０１の出現位置Ｃ１−１およびＣ１−２が得られる。
【００２２】
次に、二分木パターンＰ０２が生成された場合にも、上記の従来技術では、二分木データ木Ｄ０１の根に対応するノードｎ０１から下層へ向かって順番に二分木パターンＰ０２が二分木データ木Ｄ０１上で走査される。すなわち、二分木パターンＰ０２の根に対応するノードＮ０４を二分木データ木Ｄ０１のノードｎ０１、ノードｎ０２、ノードｎ０３、・・・、ノードｎ０９の順に対応付ける探索処理が計９回繰り返される。
【００２３】
このうち、二分木パターンＰ０２の根に対応するノードＮ０４が二分木データ木Ｄ０１のノードｎ０１に対応付けられる場合、ノードＮ０４の子ノードであるノードＮ０５およびノードＮ０６に対応付ける二分木データ木Ｄ０１上のノードが存在すると共に、ノードＮ０５の子ノードであるノードＮ０７およびノードＮ０８に対応付ける二分木データ木Ｄ０１上のノードが存在する。その一方で、二分木データ木Ｄ０１及び二分木パターンＰ０２の間で各ノードのラベルが一致しない。この場合、二分木パターンＰ０２の出現位置が探索結果として得られない。
【００２４】
また、二分木パターンＰ０２の根に対応するノードＮ０４が二分木データ木Ｄ０１のノードｎ０２、ノードｎ０４、ノードｎ０５〜ノードｎ０９に対応付けられる場合、ノードＮ０５の子ノードであるノードＮ０７およびノードＮ０８に対応付ける二分木データ木Ｄ０１上のノードが存在しない。これらの場合にも、二分木パターンＰ０２の出現位置が探索結果として得られない。
【００２５】
一方、二分木パターンＰ０２の根に対応するノードＮ０４が二分木データ木Ｄ０１のノードｎ０３に対応付けられる場合、二分木パターンＰ０２の出現位置Ｃ２−１が探索結果として得られる。すなわち、ノードＮ０４の子ノードであるノードＮ０５およびノードＮ０６に対応付ける二分木データ木Ｄ０１上のノードとして、ノードｎ０６およびノードｎ０７が存在すると共に、ノードＮ０５の子ノードであるノードＮ０７およびノードＮ０８に対応付ける二分木データ木Ｄ０１上のノードとして、ノードｎ０８およびノードｎ０９が存在する。さらに、二分木データ木Ｄ０１及び二分木パターンＰ０２の間で各ノードのラベルが一致する。すなわち、図２に示す通り、ノードＮ０４及びノードｎ０３、ノードＮ０５及びノードｎ０６、ノードＮ０６及びノードｎ０７、ノードＮ０７及びノードｎ０８、ノードＮ０８及びノードｎ０９の各々のノード間でラベルが一致する。この場合、二分木データ木Ｄ０１における二分木パターンＰ０２の出現位置Ｃ２−１として、二分木データ木Ｄ０１のノードｎ０３、ノードｎ０６、ノードｎ０７、ノードｎ０８及びノードｎ０９が得られる。
【００２６】
このように二分木パターンＰ０２および二分木データ木Ｄ０１の間で計９回の対応付けが行われる。この結果、二分木データ木Ｄ０１における二分木パターンＰ０２の出現位置Ｃ２−１が得られる。
【００２７】
以上のように、二分木パターン及び二分木データ木の間におけるノード間の対応付けの回数は、二分木データ木のサイズが大きくなるにしたがって増加し、ラベル照合の回数も二分木データ木のサイズ及び二分木パターンのノード数が多くなるにしたがって増加する。
【００２８】
このような状況の下、上記の従来技術では、新たな二分木パターンが生成される度に、二分木データ木及び二分木パターンの間でノード間の対応付けを二分木データ木上の全てのノードで行う必要がある。
【００２９】
すなわち、二分木パターンＰ０１及び二分木パターンＰ０２のパターンが生成される度に、二分木データ木Ｄ０１上で二分木データ木Ｄ０１の根に対応するノードｎ０１から下層のノードへ向かって二分木パターンＰ０１の根ノードＮ０１および二分木パターンＰ０２の根ノードＮ０４を９回ずつ対応付ける必要がある。ここで、図２には、あくまで要点を絞り込んで説明する側面から、ノード数が「９」である二分木データ木Ｄ０１が示されているが、実際には、探索される対象である二分木データ木のノード数は膨大な数にのぼることもある。そして、二分木データ木のサイズが大きくなるに連れて対応付けの回数も増大する。
【００３０】
さらに、上記の従来技術では、新たな二分木パターンが生成される度に、二分木データ木及び二分木パターンの間でラベルの照合を二分木パターンの全ノード数に対応する回数にわたって行う必要がある。
【００３１】
すなわち、二分木パターンＰ０１または二分木パターンＰ０２に含まれる各ノードが二分木データ木Ｄ０１に対応付けられる度に、二分木パターンＰ０１または二分木パターンＰ０２が有する全てのノードの数に対応する回数分、ラベルの照合を行う必要がある。例えば、二分木パターンＰ０１には、ノードＮ０１〜ノードＮ０３の３つのノードが含まれる。このため、二分木パターンＰ０１のノードＮ０１〜ノードＮ０３と、ノードＮ０１〜ノードＮ０３が対応付けられた二分木データ木Ｄ０１上の３つのノードとの間で３回のラベル照合が行われる。また、二分木パターンＰ０２には、ノードＮ０４〜ノードＮ０８の５つのノードが含まれる。このため、二分木パターンＰ０２のノードＮ０４〜ノードＮ０８と、ノードＮ０４〜ノードＮ０８が対応付けられた二分木データ木Ｄ０１上の５つのノードとの間で５回のラベル照合が行われる。
【００３２】
つまり、上記の従来技術では、新たな二分木パターンが生成される度に、ローラ作戦の要領で二分木パターンの探索が行われるので、探索の処理量が増大する。それ故、上記の従来技術では、特定の二分木パターンの探索の高速化に限界がある。
【００３３】
このようにローラ作戦の要領で二分木パターンの探索を行うのを避ける観点から、先行して生成される二分木パターンと、後続して生成される二分木パターンとの間で生じる差分に絞り込んで二分木パターンの探索を実行する課題解決のアプローチが有効であると考えられる。
【００３４】
図３は、二分木パターン間の包含関係の一例を示す図である。図３には、図２に示す二分木パターンＰ０１および二分木パターンＰ０２が示されると共に、互いのラベルの配列が共通する部分がハッチングで示されている。図３に示すように、二分木パターンＰ０２は、二分木パターンＰ０１が持つノードＮ０１、ノードＮ０２及びノードＮ０３との間でラベルの配列が一致するノードＮ０５、ノードＮ０７及びノードＮ０８を部分木として有する。このため、二分木パターンＰ０２は、二分木パターンＰ０１を包含していることがわかる。このような包含関係を利用して、二分木パターンＰ０１及び二分木パターンＰ０２の差分となるノードＮ０４及びノードＮ０６に絞り込んで二分木データ木Ｄ０１に対する二分木パターンＰ０２の探索を実行できれば、探索の処理量を削減することが期待できる。
【００３５】
しかしながら、上記の課題解決のアプローチを採用する場合、次のような創作の困難性がある。例えば、ある二分木パターンが新たに生成された場合、新たに生成された二分木パターンが包含する二分木パターンがそもそも過去に生成されているとは限らない。また、過去に生成された二分木パターンの集合の中に互いが包含関係にある二分木パターンが存在するとしても、膨大な集合の中から包含関係にある二分木パターンを探索するのには、膨大なコストが発生する。このように包含関係のある二分木パターンの探索に膨大なコストを掛けたのでは、二分木データ木における二分木パターンの探索のコストを削減できたとしても本末転倒となる。結局のところ、上記の従来技術のように、新たな二分木パターンが生成される度に、ローラ作戦の要領でノード間の対応付けやラベルの照合を行った方が効率的になりがちである。
【００３６】
（２）課題解決のアプローチの一側面
そこで、本実施例に係る探索装置１０では、上記の課題解決のアプローチを採用するために、子ノードとして右子および左子を含む株と呼ばれる二分木の最小構造を特定の順序で付け加えることで二分木パターンを一意に列挙する二分木の生成アルゴリズムを二分木パターンの生成に用いる点に優位性がある。
【００３７】
この二分木の生成アルゴリズムについての詳細は後述するが、二分木の生成アルゴリズムにしたがって二分木パターンが生成される場合、１つ前に生成された二分木パターンに新たな株を接続するという手順が繰り返されることにより、新たな二分木パターンが生成される。このため、新たに生成される二分木パターンは、その１つ前に生成されていた二分木パターンを包含するという包含関係も受け継ぎつつ、二分木パターンの拡張を繰り返すことができる。それ故、一部の二分木パターンだけにしか包含関係が現れないといった事態が起こらないので、二分木パターンの探索を二分木パターン間の差分に絞り込むパフォーマンスを向上できる。
【００３８】
さらに、本実施例に係る探索装置１０は、二分木パターンが生成される度に、当該二分木パターンの木構造のうち次の二分木パターンの生成時に新規の株の接続が他の株よりも優先される優先株、すなわち後述の最右列株または最右下株の右子および左子が二分木データ木上で出現する位置を当該二分木パターンの識別情報に対応付けて保存する。このように次の二分木パターンの生成に備えて優先株の右子および左子が二分木データ木上で出現する位置を保存するのは、次に生成される二分木パターンと二分木データ木との間で対応付ける二分木データ木上のノードの位置を絞り込むためである。以下、次の二分木パターンの生成に備えて保存する、優先株の右子および左子が二分木データ木上で出現する位置のことを「優先株の子ノード出現位置」と記載することがある。これによって、次の二分木パターンの生成時に次の二分木パターンを二分木データ上で走査してノード間の対応付けを行わずともよいので、ノード間の対応付けの回数を削減できる。
【００３９】
その後、二分木パターンが新たに生成された場合、本実施例に係る探索装置１０は、１つ前に生成された二分木パターンに追加された新規の株の右子および左子と、次の二分木パターンの生成に備えて保存されていた優先株の子ノード出現位置の右子および左子との間でラベルを照合する。これによって、新たに生成された二分木パターンが有する全てのノードから新規の株の右子および左子の２つのノードにラベルの照合を実行するノードを絞り込むことができる。この結果、ラベルの照合の回数を削減できる。
【００４０】
図４は、二分木データ木と二分木パターンの対応付けの一例を示す図である。図４には、図２と同様の表現でノード、リンクおよびラベルが示されることとする。図４に示すように、上記の二分木の生成アルゴリズムにしたがって株と呼ばれる二分木の最小構造を特定の順序で追加することにより、二分木パターンＰ１１、二分木パターンＰ１２の順にパターンが列挙される。
【００４１】
まず、ラベル「Ａ」が割り当てられた親のノードＮ１１と、ラベル「Ｂ」が割り当てられた左子のノードＮ１２と、ラベル「Ｃ」が割り当てられた右子のノードＮ１３との３つのノードを持つ株ｂ１１が二分木パターンＰ１１として生成される。このように二分木パターンＰ１１が最初に生成された場合、二分木パターンＰ１１には株ｂ１１しか存在しないので、株ｂ１１が優先株に対応する。この二分木パターンＰ１１が生成された後、二分木データ木Ｄ１１の根に対応するノードｎ１１から下層へ向かって順番に二分木パターンＰ１１が二分木データ木Ｄ１１上で走査される。すなわち、二分木パターンＰ１１の根に対応するノードＮ１１を二分木データ木Ｄ１１のノードｎ１１、ノードｎ１２、ノードｎ１３、・・・、ノードｎ１９に対応付ける処理が９回繰り返される。
【００４２】
例えば、二分木パターンＰ１１の根に対応するノードＮ１１が二分木データ木Ｄ１１のノードｎ１１に対応付けられる場合、二分木パターンＰ１１の出現位置Ｃ１１−１が探索結果として得られる。すなわち、ノードＮ１１の子ノードであるノードＮ１２およびノードＮ１３に対応付ける二分木データ木Ｄ０１上のノードとして、ノードｎ１２およびノードｎ１３が存在する。さらに、二分木データ木Ｄ１１及び二分木パターンＰ１１の間で各ノードのラベルが一致する。すなわち、図４に示す通り、ノードＮ１１及びノードｎ１１は、いずれもラベルが「Ａ」であるので一致し、ノードＮ１２及びノードｎ１２も、互いのラベルが「Ｂ」であるので一致し、さらに、ノードＮ１３及びノードｎ１３も、互いのラベルが「Ｃ」であるので一致する。この場合、二分木データ木Ｄ１１における二分木パターンＰ１１の出現位置Ｃ１−１として、二分木データ木Ｄ１１のノードｎ１１、ノードｎ１２及びノードｎ１３が得られる。
【００４３】
これと同様に、二分木パターンＰ１１の根に対応するノードＮ１１が二分木データ木Ｄ１１のノードｎ１６に対応付けられた場合にも、二分木パターンＰ１１の出現位置Ｃ１１−２として、二分木データ木Ｄ１１のノードｎ１６、ノードｎ１８及びノードｎ１９が得られる。
【００４４】
この他の場合、ノードＮ１１の子ノードであるノードＮ１２およびノードＮ１３に対応付ける二分木データ木Ｄ１１上のノードが存在しないか、あるいは存在しても二分木データ木Ｄ１１及び二分木パターンＰ１１の間で各ノードのラベルが一致しないので、二分木パターンＰ１１の出現位置が探索結果として得られない。
【００４５】
このような二分木パターンＰ１１の探索に加えて、当該二分木パターンＰ１１の優先株ｂ１１の右子および左子が二分木データ木Ｄ１１上で出現する位置、すなわち優先株ｂ１１の子ノード出現位置が保存される。あくまで一例として、二分木パターンＰ１１に対応付けて、優先株ｂ１１の左子のノードが二分木データ木Ｄ１１上で出現する位置、すなわちノードｎ１２およびノードｎ１８が優先株ｂ１１の左子出現位置として保存される。さらに、二分木パターンＰ１１に対応付けて、優先株ｂ１１の右子のノードが二分木データ木Ｄ１１上で出現する位置、すなわちノードｎ１３およびノードｎ１９が優先株ｂ１１の右子出現位置」として保存される。
【００４６】
二分木パターンＰ１１の生成に続いて、二分木パターンＰ１２が生成される。例えば、二分木パターンＰ１２は、１つ前に生成された二分木パターンＰ１１の優先株ｂ１１の左子に、ラベル「Ｂ」の親のノードＮ１１、ラベル「Ｂ」の左子のノードＮ１２およびラベル「Ｃ」の右子のノードＮ１３の３つのノードを持つ新規の株ｂ１２が接続されることにより生成される。
【００４７】
ここで、二分木パターンＰ１２の探索では、当該二分木パターンＰ１２と二分木データ木Ｄ１１との間でラベルの照合を実行する二分木データ木Ｄ１１上のノードの位置が、１つ前の二分木パターンＰ１１が生成された段階で次の二分木パターンＰ１２の生成に備えて保存されていた優先株の子ノード出現位置の右子および左子に絞り込まれる。このとき、二分木パターンＰ１１の拡張時には、二分木パターンＰ１１の優先株ｂ１１の左子に新規の株ｂ１２が接続されている。このため、優先株ｂ１１の子ノード出現位置のうち、優先株ｂ１１の左子出現位置が参照される。
【００４８】
その上で、１つ前に生成された二分木パターンＰ１１に追加された新規の株ｂ１２の右子および左子と、二分木パターンＰ１１が生成された段階で保存されていた優先株ｂ１１の左子出現位置の右子および左子との間でノードを対応付ける。ここで、優先株ｂ１１の左子出現位置は、上述の通り、ノードｎ１２およびノードｎ１８の２箇所である。このため、上記の従来技術であれば、二分木パターンＰ１２の根に対応するノードＮ１１を二分木データ木Ｄ１１のノードｎ１１、ノードｎ１２、ノードｎ１３、・・・、ノードｎ１９に対応付ける処理が９回繰り返されるところ、本実施例では、新規の株ｂ１２の右子および左子をノードｎ１２の右子および左子とノードｎ１８の右子および左子とに対応付ける２回で済む。それ故、本実施例は、上記の従来技術に比べて、ノード間の対応付けの回数を７回削減できる。
【００４９】
これら優先株ｂ１１の左子出現位置のうちノードｎ１２には、右子および左子が存在する。このため、新規の株ｂ１２の右子のノードＮ１４および左子のノードＮ１５と、ノードｎ１２の右子のノードｎ１４および左子のノードｎ１５とが対応付けられる。その上で、ノードＮ１４およびノードｎ１４の間でラベルが一致し、かつノードＮ１５およびノードｎ１５の間でラベルが一致する否かが照合される。図４に示す例では、ノードＮ１４及びノードｎ１４は、いずれもラベルが「Ｃ」であるので一致し、さらに、ノードＮ１５及びノードｎ１５も、互いのラベルが「Ｄ」であるので、２つともラベルが一致する。この場合、二分木パターンＰ１１及び二分木パターンＰ１２の差分、すなわち新規の株ｂ１２の左子および右子の出現位置Ｃ２−１として、二分木データ木Ｄ１１のノードｎ１４及びノードｎ１５が得られる。これはあくまで差分の出現位置であるので、二分木パターンＰ１２全体の出現位置が出力される場合、二分木パターンＰ１１の出現位置Ｃ１−１および差分の出現位置Ｃ２−１を出力することとすればよい。なお、優先株ｂ１１の左子出現位置のうちノードｎ１８には、右子および左子が存在しないので、二分木パターンＰ１１及び二分木パターンＰ１２の差分の出現位置は探索結果として得られない。
【００５０】
ここで、上記の従来技術であれば、二分木パターンＰ１２には、ノードＮ１１〜ノードＮ１５の５つのノードが含まれるので、ノードＮ１１〜ノードＮ１５と、ノードＮ１１〜ノードＮ１５が対応付けられた二分木データ木Ｄ１１上の５つのノードとの間で５回のラベル照合が行われる。その一方で、本実施例では、二分木パターンＰ１２が有する全てのノードの数に対応する５回分、ラベルの照合を行わずともよく、新規の株ｂ１２および優先株ｂ１１の間で互いの右子および左子の２つのノードのラベルを２回照合すればよい。それ故、本実施例は、上記の従来技術に比べて、ラベルの照合の回数を３回削減できる。
【００５１】
以上のように、本実施例に係る探索装置１０によれば、ノード間の対応付けの回数およびラベルの照合の回数を削減できるので、特定の二分木パターンの探索を高速化することが可能である。
【００５２】
［探索装置１０の構成］
図１に示すように、探索装置１０は、インタフェース部１１と、記憶部１３と、制御部１５とを有する。図１には、データの授受の関係を表す実線が示されているが、説明の便宜上、最小限の部分について示されているに過ぎない。すなわち、各処理部に関するデータの入出力は、図示の例に限定されず、図示以外のデータの入出力、例えば処理部及び処理部の間、処理部及びデータの間、並びに、処理部及び外部装置の間のデータの入出力が行われることとしてもかまわない。
【００５３】
インタフェース部１１は、探索装置１０および外部装置を接続する処理部である。
【００５４】
一側面として、インタフェース部１１は、探索装置１０および周辺装置、例えば図示しない入力部や出力部などの間でデータを伝送したり、また、探索装置１０および外部のコンピュータの間でデータを通信したりする。
【００５５】
記憶部１３は、制御部１５で実行されるＯＳ（Operating  System）を始め、上記の探索処理を実現する探索プログラム、例えばアプリケーションプログラムやミドルウェアなどの各種プログラムに用いられるデータを記憶する記憶デバイスである。
【００５６】
一実施形態として、記憶部１３は、探索装置１０における補助記憶装置として実装することができる。例えば、記憶部１３には、ＨＤＤ（Hard  Disk  Drive）、光ディスクやＳＳＤ（Solid  State  Drive）などを採用できる。なお、記憶部１３は、必ずしも補助記憶装置として実装されずともよく、探索装置１０における主記憶装置として実装することもできる。この場合、記憶部１３には、各種の半導体メモリ素子、例えばＲＡＭ（Random  Access  Memory)やフラッシュメモリを採用できる。
【００５７】
記憶部１３は、制御部１５で実行されるプログラムに用いられるデータの一例として、二分木データ木１３ａとを記憶する。このようなデータ以外にも、記憶部１３には、他の電子データが記憶されることとしてもかまわない。例えば、記憶部１３は、上記の二分木の生成アルゴリズムにしたがって生成する二分木パターンの最大のサイズ、例えば株の数や階層の深さなどを二分木パターンの生成条件として記憶することができる。また、記憶部１３は、二分木データ木に対する探索を継続する階層の深さなどを二分木パターンの探索条件として記憶することもできる。
【００５８】
二分木データ木１３ａは、ラベル付き二分木のデータである。この二分木データ木１３ａは、リスト形式、テーブル形式、あるいはＸＭＬ等のマークアップ言語で表現されるデータであってかまわない。あくまで例として、ディープラーニング等の機械学習により学習された決定木を始め、バイナリツリーソート等に用いられる二分探索木、ＸＭＬ文書などが挙げられる。
【００５９】
制御部１５は、探索装置１０の全体制御を行う処理部である。
【００６０】
一実施形態として、制御部１５は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などのハードウェアプロセッサにより実装することができる。ここでは、プロセッサの一例として、ＣＰＵやＭＰＵを例示したが、汎用型および特化型を問わず、任意のプロセッサ、例えばＧＰＵ（Graphics  Processing  Unit）やＤＳＰ（Digital  Signal  Processor）の他、ＧＰＧＰＵ（General-Purpose  computing  on  Graphics  Processing  Units）により実装することができる。この他、制御部１５は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによって実現されることとしてもかまわない。
【００６１】
制御部１５は、図示しない主記憶装置として実装されるＲＡＭ（Random  Access  Memory）のワークエリア上に、上記の探索プログラムを展開することにより、下記の処理部を仮想的に実現する。
【００６２】
図１に示すように、制御部１５は、受付部１５ａと、生成部１５ｂと、探索部１５ｃと、出力部１５ｄとを有する。
【００６３】
受付部１５ａは、二分木パターンの探索リクエストを受け付ける処理部である。
【００６４】
一側面として、受付部１５ａは、探索装置１０がスタンドアローンで動作する場合、図示しない入力部からインタフェース部１１を介して、二分木パターンの探索リクエストを受け付けることができる。他の側面として、受付部１５ａは、探索装置１０が図示しないクライアント端末と接続された状態でクライアントサーバシステムとして動作する場合、図示しないクライアント端末からインタフェース部１１を介して、二分木パターンの探索リクエストを受け付けることができる。
【００６５】
この二分木パターンの探索リクエストの受付時には、受付部１５ａは、各種の設定を併せて受け付けることもできる。例えば、受付部１５ａは、記憶部１３に二分木データ木１３ａとして保存された複数の二分木データ木の中から、特定の二分木パターンを探索する対象とする二分木データ木の指定を受け付けることができる。この他、受付部１５ａは、後述の生成部１５ｂが上記の二分木の生成アルゴリズムにしたがって生成する二分木パターンの最大のサイズ、例えば株の数や階層の深さなどを二分木パターンの生成条件として受け付けることもできる。また、受付部１５ａは、二分木パターンを探索する二分木データ木の階層の深さなどを二分木パターンの探索条件として受け付けることもできる。
【００６６】
生成部１５ｂは、二分木パターンを生成する処理部である。
【００６７】
一実施形態として、生成部１５ｂは、上記の二分木の生成アルゴリズムにしたがって、子ノードとして右子および左子を含む株と呼ばれる二分木の最小構造を特定の順序で付け加えることで二分木パターンを一意に列挙する。このような二分木の生成アルゴリズムの一例として、特願２０１８−０１８７２６号に記載の技術を用いることができる。
【００６８】
ここで、上記の二分木の生成アルゴリズムで用いる「株」の一例を図５に示す。図５は、株の一例を示す図である。図５に示すように、株ｂ１１は、ラベル「Ａ」が割り当てられた親ノードＮ１１と、ラベル「Ｂ」が割り当てられた左子のノードＮ１２及びラベル「Ｃ」が割り当てられた右子のノードＮ１３との３個のノードを有する。これら左子のノードＮ１２及び右子のノードＮ１３には、それぞれ１つだけ株を接続することができる。
【００６９】
例えば、生成部１５ｂは、上記の二分木の生成アルゴリズムにしたがって、二分木パターンに含まれる最右株列上の右子、または、最右下株の左子に新規の株を追加する二分木パターンの拡張を繰り返すことにより、二分木パターンを列挙する。このように株の拡張を繰り返しながら列挙された一連の二分木パターンの間には、先行して列挙された二分木パターンが後続して列挙される二分木パターンに包含されるという包含関係が構築される。
【００７０】
ここで言う「最右株列」とは、二分木パターンにおいて、他の株に接続されていないルートの株から右子および左子の両方に株が接続されていない末端の株へ辿り着くまで、右子のノードに接続された株または右子のノードに株がない場合に左子のノードに接続された株を辿った系列のことを指す。また、「最右下株」とは、最右株列に属する株のうち、左子及び右子のいずれの子ノードにも株が接続されていない末端の株のことを指す。
【００７１】
図６は、二分木パターンの一例を示す図である。図６には、上記の二分木の生成アルゴリズムにしたがって生成された二分木パターンＰ１３が示されている。図６に示すように、二分木パターンＰ１３を辿って最右株列を識別する場合、ルートの株ｂ６１から最右株列の探索が開始される。ルートの株ｂ６１の右子のノードには、株ｂ６２が接続されているので、株ｂ６１の次に株ｂ６２を辿る。そして、株ｂ６２の右子のノードには、株が接続されていないので、株ｂ６２の次には、株ｂ６２の左子のノードに接続された株ｂ６３を辿る。この株ｂ６３の右子および左子のいずれにも株が接続されていないので、最右株列の探索は終了となる。このように探索された株ｂ６１、株ｂ６２および株ｂ６３の系列が最右株列Ｌ６０と識別される。さらに、最右株列Ｌ６０に属する株ｂ６１、株ｂ６２および株ｂ６３のうち、左子及び右子のいずれの子ノードにも株が接続されていない末端の株ｂ６３が最右下株と識別される。これら最右株列Ｌ６０や最右下株ｂ６３が上記の優先株に対応する。
【００７２】
探索部１５ｃは、二分木データ木における特定の二分木パターンを探索する処理部である。
【００７３】
ここで、あくまで一例として、探索部１５ｃが読み出し及び書き込みのアクセスが可能なメモリ（不図示）のワークエリア上で下記のデータを管理しつつ、二分木パターンの探索に使用する。このように二分木パターンの探索に用いるデータの１つとして、「二分木データ木Ｄ」、「二分木パターンＴ」、「二分木パターンＴ．Ｓ」、「最右下株の左子出現位置リストＴ．ｌ」および「最右下株の右子出現位置リストＴ．ｒ」などが挙げられる。
【００７４】
ここで言う「二分木データ木Ｄ」とは、一連の二分木パターンを探索する対象とする二分木データ木を指す。例えば、二分木データ木Ｄは、二分木パターンの探索リクエストの受付時などに、記憶部１３に二分木データ木１３ａとして保存された複数の二分木データ木の中から指定を受け付けることによりワークエリア上に保存される。なお、二分木データ木Ｄは、必ずしも二分木データ木１３ａの中から指定されずともよく、外部からインタフェース部１１を介して受け付けることとしてもよい。
【００７５】
また、「二分木パターンＴ」及び「二分木パターンＴ．Ｓ」は、いずれも上記の二分木の生成アルゴリズムにしたがって生成される一連の二分木パターンの１つであるが、上記の二分木の生成アルゴリズムにより列挙される順列は異なる。ここで、末尾のラベル「Ｔ」及び「Ｔ．Ｓ」は、新規の株Ｓが追加される前後２つの二分木パターンのうちいずれの二分木パターンを指すのかを区別する側面から付与される。
【００７６】
また、「最右下株の左子出現位置リストＴ．ｌ」および「最右下株の右子出現位置リストＴ．ｒ」は、二分木パターンＴの最右下株の左子または右子が二分木データ木Ｄ上で出現する位置のリストを指す。例えば、二分木データ木Ｄ上の位置は、二分木データ木Ｄに含まれるノードごとに採番されるノードの識別情報で表現することができる。
【００７７】
このようなデータ管理の下、探索部１５ｃは、生成部１５ｂにより二分木パターンＴ．Ｓが生成される度に、二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌ及び右子出現位置リストＴ．Ｓ．ｒの出力を得ることを目的の１つとして、以下のような処理を実行する。すなわち、探索部１５ｃは、二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌおよび右子出現位置リストＴ．Ｓ．ｒを空のリストとして初期化する。
【００７８】
まず、探索部１５ｃは、二分木パターンＴに追加された新規の株Ｓの位置が下記の３つのうちいずれのノードであるかを識別する。すなわち、上記の二分木の生成アルゴリズムに従えば、（Ａ）二分木パターンＴの最右下株の左子、（Ｂ）二分木パターンＴの最右下株の右子、（Ｃ）二分木パターンＴの最右株列に属する株の右子のいずれかに新規の株Ｓが追加される。
【００７９】
（Ａ）二分木パターンＴの最右下株の左子
ここで、新規の株Ｓが二分木パターンＴの最右下株の左子に追加された場合、探索部１５ｃは、二分木パターンＴの最右下株の左子出現位置リストＴ．ｌからノードｖを取り出す。その上で、探索部１５ｃは、最右下株の左子出現位置リストＴ．ｌから取り出されたノードｖの左子ｖ．ｌと右子ｖ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとを照合する。このとき、ノードｖの左子ｖ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖの右子ｖ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、探索部１５ｃは、ノードｖの左子ｖ．ｌを二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに追加すると共に、ノードｖの右子ｖ．ｒを二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに追加する。
【００８０】
（Ｂ）二分木パターンＴの最右下株の右子
また、新規の株Ｓが二分木パターンＴの最右下株の左子に追加された場合、探索部１５ｃは、二分木パターンＴの最右下株の右子出現位置リストＴ．ｒからノードｖを取り出す。その上で、探索部１５ｃは、最右下株の右子出現位置リストＴ．ｒから取り出されたノードｖの左子ｖ．ｌと右子ｖ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとを照合する。このとき、ノードｖの左子ｖ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖの右子ｖ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、探索部１５ｃは、ノードｖの左子ｖ．ｌを二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに追加すると共に、ノードｖの右子ｖ．ｒを二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに追加する。
【００８１】
（Ｃ）二分木パターンＴの最右株列に属する株の右子
また、新規の株Ｓが二分木パターンＴの最右株列に属する株の右子に追加された場合、探索部１５ｃは、二分木パターンＴの最右下株の左子出現位置リストＴ．ｌからノードｖを取り出す。ここで、分岐Ｃに該当する場合、新規の株Ｓが最右下株の左子（または右子）ではなく、最右株列に属する株のうち最上段の株の右子に新規の株Ｓが追加されるのは上記の二分木の生成アルゴリズムから明らかである。このため、二分木パターンＴの最右下株の左子（または右子）から、二分木パターンＴの最右株列に属する最上段の株の右子までの段差ｈが求められる。この段差ｈにしたがって、探索部１５ｃは、最右下株の左子出現位置リストＴ．ｌから取り出されたノードｖのｈ段上のノードｖｈの左子ｖｈ．ｌと右子ｖｈ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとを照合する。このとき、ノードｖｈの左子ｖｈ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖｈの右子ｖｈ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、探索部１５ｃは、ノードｖｈの左子ｖｈ．ｌを二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに追加すると共に、ノードｖｈの右子ｖ．ｒｈを二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに追加する。
【００８２】
なお、複数のノードｖが最右下株の左子出現位置リストＴ．ｌまたは右子出現位置リストＴ．ｒに登録されている場合、複数のノードｖを順番に取り出して上記のラベル照合や上記のリスト登録等の処理を順番に実行するか、あるいは複数のノードｖを一度に取り出して処理を並列して実行することができるのは言うまでもない。
【００８３】
出力部１５ｄは、二分木パターンの探索結果を出力する処理部である。
【００８４】
一実施形態として、出力部１５ｄは、探索部１５ｃによる二分木パターンの探索の結果、二分木パターンごとに得られる左子出現位置リストＴ．Ｓ．ｌおよび右子出現位置リストＴ．Ｓ．ｒに基づいて各種の表示出力や音声出力を行うことができる。例えば、出力部１５ｄは、二分木データ木Ｄにおける二分木パターンＴ．Ｓの出現位置を表示することができる。このように二分木パターンＴ．Ｓの出現位置を表示する場合、左子出現位置リストＴ．Ｓ．ｌおよび右子出現位置リストＴ．Ｓ．ｒにしたがって新規の株Ｓ、すなわち二分木パターンＴ．Ｓと１つ前に生成された二分木パターンＴとの差分の出現位置を表示することもできるし、二分木パターンＴ．Ｓ全体の出現位置を二分木データ木Ｄ上に表示させることもできる。この他、出力部１５ｄは、二分木データ木Ｄ上に二分木パターンＴ．Ｓが出現する回数を表示することもできる。
【００８５】
このような二分木パターンの探索結果の出力は、各種のユースケースで有用である。あくまで例示として、二分木データ木が「決定木」である場合、二分木パターンの探索結果が出力されることにより、二分木パターンと同じ構造の部分木が二分木データ木上で何度出現しているかなどの情報を与えることができる。このような情報は、あくまで一側面として、決定木がどのように機能しているかを知る手がかりになる。したがって、決定木の検証や監査に有用な情報を提供できる。
【００８６】
［動作例］
ここで、一例として、上記の二分木の探索アルゴリズムの動作例を図７を用いて説明する。図７は、二分木の探索アルゴリズムの動作例を示す図である。図７には、図４に示す二分木データ木Ｄ１１と、二分木パターンＰ１１及び二分木パターンＰ１２とが示されている。なお、図７においても、図２と同様の表現でノード、リンクおよびラベルが示されることとする。
【００８７】
図７に示すように、上記の二分木の生成アルゴリズムにしたがって株と呼ばれる二分木の最小構造を特定の順序で追加することにより、二分木パターンＰ１１、二分木パターンＰ１２の順にパターンが列挙される。
【００８８】
例えば、二分木パターンＰ１２が生成された段階では、探索部１５ｃがメモリ上で管理するデータは、次の通りとなる。すなわち、二分木データ木「Ｄ」の記憶領域には、探索の対象とされる二分木データ木Ｄ１１が格納される。二分木パターン「Ｔ．Ｓ」の記憶領域には、新たに生成された二分木パターンＰ１２が格納される。二分木パターン「Ｔ」の記憶領域には、二分木パターンＰ１２の１つ前に生成された二分木パターンＰ１１が格納される。さらに、新規の株「Ｓ」の記憶領域には、二分木パターンＰ１１に追加される株ｂ１２が格納される。
【００８９】
ここで、二分木パターンＰ１１には、株が１つ、すなわち株ｂ１１しか存在しない。このため、株ｂ１１は、最右列株に属する株であり、なおかつ最右下株でもある。よって、二分木パターンＰ１１が生成された段階で、二分木パターン「Ｔ」の最右下株の左子出現位置リスト「Ｔ．ｌ」の記憶領域および二分木パターン「Ｔ」の最右下株の右子出現位置リスト「Ｔ．ｒ」の記憶領域に次のデータを格納できる。すなわち、二分木パターン「Ｔ」の最右下株の左子出現位置リスト「Ｔ．ｌ」の記憶領域には、二分木パターンＰ１１の最右下株である株ｂ１１の左子のノードＮ１２が二分木データ木Ｄ１１上で出現するノードｎ１２及びノードｎ１８が格納される。さらに、二分木パターン「Ｔ」の最右下株の右子出現位置リスト「Ｔ．ｒ」の記憶領域には、二分木パターンＰ１１の最右下株である株ｂ１１の右子のノードＮ１３が二分木データ木Ｄ１１上で出現するノードｎ１３及びノードｎ１９が格納される。
【００９０】
このようなデータ管理の下、二分木パターンＴ．Ｓの探索が実行される。すなわち、新規の株Ｓ（＝株ｂ１２）が二分木パターンＴ（＝二分木パターンＰ１１）の最右下株ｂ１１の左子のノードＮ１２に取り付けられているので、上記の分岐Ａに該当する。この場合、二分木パターンＴ（＝二分木パターンＰ１１）の最右下株ｂ１１の左子出現位置リストＴ．ｌには、ノードｎ１２及びノードｎ１８が格納されているので、これらがノード「ｖ」として１つずつ取り出される。
【００９１】
例えば、左子出現位置リストＴ．ｌ（＝ノードｎ１２、ノードｎ１８）からノードｖとしてノードｎ１２が取り出された場合を説明する。この場合、左子出現位置リストＴ．から取り出されたノードｖ（＝ノードｎ１２）の左子ｖ．ｌ（＝ノードｎ１４）及び右子ｖ．ｒ（＝ノードｎ１５）のラベルと、新規の株Ｓ（＝株ｂ１２）の左子（＝ノードＮ１４）及び右子（＝ノードＮ１５）のラベルとが照合される。このとき、ノードｖ（＝ノードｎ１２）の左子ｖ．ｌ（＝ノードｎ１４）のラベル（＝Ｃ）が新規の株Ｓ（＝株ｂ１２）の左子（＝ノードＮ１４）のラベル（＝Ｃ）と一致する。さらに、ノードｖ（＝ノードｎ１２）の右子ｖ．ｒ（＝ノードｎ１５）のラベル（＝Ｄ）が新規の株Ｓ（＝株ｂ１２）の右子（＝ノードＮ１５）のラベル（＝Ｄ）と一致する。これら両者のラベルが一致する場合、ノードｖ（＝ノードｎ１２）の左子ｖ．ｌ（＝ノードｎ１４）が二分木パターンＴ．Ｓ（＝二分木パターンＰ１２）の左子出現位置リストＴ．Ｓ．ｌの記憶領域に登録される。さらに、ノードｖ（＝ノードｎ１２）の右子ｖ．ｒ（＝ノードｎ１５）が二分木パターンＴ．Ｓ（＝二分木パターンＰ１２）の右子出現位置リストＴ．Ｓ．ｒに登録される。
【００９２】
一方、左子出現位置リストＴ．ｌ（＝ノードｎ１２、ノードｎ１８）からノードｖとしてノードｎ１８が取り出された場合を説明する。この場合、左子出現位置リストＴ．から取り出されたノードｖ（＝ノードｎ１８）には、左子ｖ．ｌ及び右子ｖ．ｒが存在しない。よって、二分木パターンＴ．Ｓ（＝二分木パターンＴ．Ｓ）の右子出現位置リストＴ．Ｓ．ｒには、登録が実行されない。
【００９３】
この結果、二分木パターンＴ．Ｓ（＝二分木パターンＰ１２）の左子出現位置リストＴ．Ｓ．ｌ（＝ノードｎ１４）および右子出現位置リストＴ．Ｓ．ｒ（＝ノードｎ１５）が得られる。これによって、二分木データ木Ｐ１２の出現位置として、二分木データ木Ｐ１１及び二分木データ木Ｐ１２の差分、すなわち拡張部分である株ｂ１２の左子および右子を二分木データ木Ｄ１１上で表示することができる。
【００９４】
［処理の流れ］
図８は、実施例１に係る探索処理の手順を示すフローチャートである。この処理は、一例として、生成部１５ｂにより二分木パターンＴ．Ｓが生成された場合に開始される。図８に示すように、探索部１５ｃは、二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌおよび右子出現位置リストＴ．Ｓ．ｒを空のリストとして初期化する（ステップＳ１０１）。
【００９５】
ここで、新規の株Ｓが二分木パターンＴの最右下株の左子に追加された場合（ステップＳ１０２Ａ）、探索部１５ｃは、下記の通り、ラベルの照合結果に応じて二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌ及び右子出現位置リストＴ．Ｓ．ｒを更新する（ステップＳ１０３Ａ）。
【００９６】
ステップＳ１０３Ａでは、次のような処理が実行される。すなわち、二分木パターンＴの最右下株の左子出現位置リストＴ．ｌからノードｖが取り出される。その上で、最右下株の左子出現位置リストＴ．ｌから取り出されたノードｖの左子ｖ．ｌと右子ｖ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとが照合される。このとき、ノードｖの左子ｖ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖの右子ｖ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、ノードｖの左子ｖ．ｌが二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに登録されると共に、ノードｖの右子ｖ．ｒが二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに登録される。
【００９７】
また、新規の株Ｓが二分木パターンＴの最右下株の左子に追加された場合（ステップＳ１０２Ｂ）、探索部１５ｃは、下記の通り、ラベルの照合結果に応じて二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌ及び右子出現位置リストＴ．Ｓ．ｒを更新する（ステップＳ１０３Ｂ）。
【００９８】
ステップＳ１０３Ｂでは、次のような処理が実行される。すなわち、二分木パターンＴの最右下株の右子出現位置リストＴ．ｒからノードｖが取り出される。その上で、最右下株の右子出現位置リストＴ．ｒから取り出されたノードｖの左子ｖ．ｌと右子ｖ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとが照合される。このとき、ノードｖの左子ｖ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖの右子ｖ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、ノードｖの左子ｖ．ｌが二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに登録されると共に、ノードｖの右子ｖ．ｒが二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに登録される。
【００９９】
また、新規の株Ｓが二分木パターンＴの最右株列に属する株の右子に追加された場合（ステップＳ１０２Ｃ）、探索部１５ｃは、下記の通り、ラベルの照合結果に応じて二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌ及び右子出現位置リストＴ．Ｓ．ｒを更新する（ステップＳ１０３Ｃ）。
【０１００】
ステップＳ１０３Ｃでは、次のような処理が実行される。すなわち、二分木パターンＴの最右下株の左子出現位置リストＴ．ｌからノードｖが取り出される。ここで、分岐Ｃに該当する場合、新規の株Ｓが最右下株の左子（または右子）ではなく、最右株列に属する株のうち最上段の株の右子に新規の株Ｓが追加されるのは上記の二分木の生成アルゴリズムから明らかである。このため、二分木パターンＴの最右下株の左子（または右子）から、二分木パターンＴの最右株列に属する最上段の株の右子までの段差ｈが求められる。この段差ｈにしたがって、最右下株の左子出現位置リストＴ．ｌから取り出されたノードｖのｈ段上のノードｖｈの左子ｖｈ．ｌと右子ｖｈ．ｒのラベルと、新規の株Ｓの左子と右子のラベルとが照合される。このとき、ノードｖｈの左子ｖｈ．ｌのラベルが新規の株Ｓの左子のラベルと一致し、かつノードｖｈの右子ｖｈ．ｒのラベルが新規の株Ｓの右子のラベルと一致する場合、ノードｖｈの左子ｖｈ．ｌが二分木パターンＴ．Ｓの左子出現位置リストＴ．Ｓ．ｌに登録されると共に、ノードｖｈの右子ｖ．ｒｈが二分木パターンＴ．Ｓの右子出現位置リストＴ．Ｓ．ｒに登録される。
【０１０１】
これらステップＳ１０３Ａ〜ステップＳ１０３Ｃでは、複数のノードｖが最右下株の左子出現位置リストＴ．ｌまたは右子出現位置リストＴ．ｒに登録されている場合、複数のノードｖを順番に取り出して上記のラベル照合や上記のリスト登録等の処理を順番に実行するか、あるいは複数のノードｖを一度に取り出して処理を並列して実行することができるのは言うまでもない。
【０１０２】
その後、出力部１５ｄは、ステップＳ１０３Ａ〜ステップＳ１０３Ｃのいずれかの結果として得られる左子出現位置リストＴ．Ｓ．ｌおよび右子出現位置リストＴ．Ｓ．ｒに基づいて各種の表示出力や音声出力を行い（ステップＳ１０４）、処理を終了する。
【０１０３】
［効果の一側面］
上述してきたように、本実施例に係る探索装置１０は、対象の二分データ木から特定の二分木パターンを探索する際に、二分木の最小単位である株を追加しつつ列挙した二分木パターンを用いて、追加部分のノードの出現位置のみ探索を行う。したがって、本実施例に係る探索装置１０によれば、ノード間の対応付けの回数およびラベルの照合の回数を削減できるので、特定の二分木パターンの探索を高速化することが可能である。
【実施例２】
【０１０４】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１０５】
［二分木の生成アルゴリズム］
上記の実施例１では、あくまで一例として、上記の二分木の生成アルゴリズムが「最右株列」および「最右下株」に基づいて新規の株を追加する拡張手順について説明したが、実施の形態はこれに限られない。例えば、上記の二分木の生成アルゴリズムは、ルート株から、左子に接続された株又は左子に株がない場合に右子に接続された株を辿る、すなわち「左子」と「右子」とを読み替えて、「最左株列」および「最左下株」に基づいて新規の株を追加する拡張手順を行うこととしてもかまわない。
【０１０６】
［分散および統合］
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されておらずともよい。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、受付部１５ａ、生成部１５ｂ、探索部１５ｃまたは出力部１５ｄを探索装置１０の外部装置としてネットワーク経由で接続するようにしてもよい。また、受付部１５ａ、生成部１５ｂ、探索部１５ｃまたは出力部１５ｄを別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記の探索装置１０の機能を実現するようにしてもよい。また、記憶部１３に記憶される二分木データ木１３ａの全部または一部を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記の探索装置１０の機能を実現するようにしてもかまわない。
【０１０７】
［探索プログラム］
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図９を用いて、上記の実施例と同様の機能を有する探索プログラムを実行するコンピュータの一例について説明する。
【０１０８】
図９は、実施例１及び実施例２に係る探索プログラムを実行するコンピュータのハードウェア構成例を示す図である。図９に示すように、コンピュータ１００は、操作部１１０ａと、スピーカ１１０ｂと、カメラ１１０ｃと、ディスプレイ１２０と、通信部１３０とを有する。さらに、このコンピュータ１００は、ＣＰＵ１５０と、ＲＯＭ１６０と、ＨＤＤ０１７０と、ＲＡＭ１８０とを有する。これら１１０〜１８０の各部はバス１４０を介して接続される。
【０１０９】
ＨＤＤ０１７０には、図９に示すように、上記の実施例１で示した受付部１５ａ、生成部１５ｂ、探索部１５ｃ及び出力部１５ｄと同様の機能を発揮する探索プログラム１７０ａが記憶される。この探索プログラム１７０ａは、図１に示した受付部１５ａ、生成部１５ｂ、探索部１５ｃ及び出力部１５ｄの各構成要素と同様、統合又は分離してもかまわない。すなわち、ＨＤＤ０１７０には、必ずしも上記の実施例１で示した全てのデータが格納されずともよく、処理に用いるデータがＨＤＤ０１７０に格納されればよい。
【０１１０】
このような環境の下、ＣＰＵ１５０は、ＨＤＤ０１７０から探索プログラム１７０ａを読み出した上でＲＡＭ１８０へ展開する。この結果、探索プログラム１７０ａは、図９に示すように、探索プロセス１８０ａとして機能する。この探索プロセス１８０ａは、ＲＡＭ１８０が有する記憶領域のうち探索プロセス１８０ａに割り当てられた領域にＨＤＤ０１７０から読み出した各種データを展開し、この展開した各種データを用いて各種の処理を実行する。例えば、探索プロセス１８０ａが実行する処理の一例として、図８に示す処理などが含まれる。なお、ＣＰＵ１５０では、必ずしも上記の実施例１で示した全ての処理部が動作せずともよく、実行対象とする処理に対応する処理部が仮想的に実現されればよい。
【０１１１】
なお、上記の探索プログラム１７０ａは、必ずしも最初からＨＤＤ０１７０やＲＯＭ１６０に記憶されておらずともかまわない。例えば、コンピュータ１００に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に探索プログラム１７０ａを記憶させる。そして、コンピュータ１００がこれらの可搬用の物理媒体から探索プログラム１７０ａを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１００に接続される他のコンピュータまたはサーバ装置などに探索プログラム１７０ａを記憶させておき、コンピュータ１００がこれらから探索プログラム１７０ａを取得して実行するようにしてもよい。
【０１１２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１１３】
（付記１）対象の二分木データ木における、特定の二分木パターンの探索プログラムであって、
コンピュータに、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う、
処理を実行させる探索プログラムであり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索プログラム。
【０１１４】
（付記２）付記１に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の末端の株の右子若しくは左子である場合、前記最右株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【０１１５】
（付記３）付記２に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の株であって末端の株以外である場合、前記最右株列上で前記末端よりも上の階層に接続された株の右子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【０１１６】
（付記４）付記３に記載の探索プログラムであって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索プログラム。
【０１１７】
（付記５）付記１に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の末端の株の右子若しくは左子である場合、前記最左株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【０１１８】
（付記６）付記５に記載の探索プログラムであって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の株であって末端の株以外である場合、前記最左株列上で前記末端よりも上の階層に接続された株の左子が前記登録済二分木パターンで出現するノードの位置で探索される探索プログラム。
【０１１９】
（付記７）付記６に記載の探索プログラムであって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索プログラム。
【０１２０】
（付記８）対象の二分木データ木における、特定の二分木パターンの探索方法であって、
コンピュータが、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解し、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う、
処理を実行する探索方法であり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索方法。
【０１２１】
（付記９）付記８に記載の探索方法であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の末端の株の右子若しくは左子である場合、前記最右株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索方法。
【０１２２】
（付記１０）付記９に記載の探索方法であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の株であって末端の株以外である場合、前記最右株列上で前記末端よりも上の階層に接続された株の右子が前記登録済二分木パターンで出現するノードの位置で探索される探索方法。
【０１２３】
（付記１１）付記１０に記載の探索方法であって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索方法。
【０１２４】
（付記１２）付記８に記載の探索方法であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の末端の株の右子若しくは左子である場合、前記最左株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索方法。
【０１２５】
（付記１３）付記１２に記載の探索方法であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の株であって末端の株以外である場合、前記最左株列上で前記末端よりも上の階層に接続された株の左子が前記登録済二分木パターンで出現するノードの位置で探索される探索方法。
【０１２６】
（付記１４）付記１３に記載の探索方法であって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索方法。
【０１２７】
（付記１５）対象の二分木データ木における、特定の二分木パターンの探索装置であって、
前記特定の二分木パターンを、所定の手順により複数の二分木ユニットの組み合わせに分解する分解部と、
前記複数の二分木ユニットの中に、先頭からの二分木ユニットの組み合わせであって、前記対象の二分木データ木における位置が対応づけられた登録済二分木パターンが存在する場合、前記登録済二分木パターンの位置を利用して、前記特定の二分木パターンの探索を行う探索部と、
を有する探索装置であり、
前記所定の手順では、
最小の二分木であり、根と左子及び右子の２つの子とを有する株から、前記根が他の株に接続されていない親株の前記左子及び右子の２つの子のうち少なくともいずれかに、所定の拡張手法により他の株の前記根を接続する形で拡張した、株の木構造を生成し、
前記株の木構造を構成する株それぞれを二分木に展開することにより、前記株の木構造から二分木を生成し、
前記所定の拡張手法は、
接続対象の株が、前記株の木構造のうち、前記親株から右子に接続された株、若しくは右子に株が接続されていない場合において左子に接続された株を辿って得られる株の系列である最右株列上の株であって、右子にも左子にも株が接続されていない末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最右株列上の株であって、末端の株以外である場合は、当該接続対象の株の右子にのみ新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記親株から左子に接続された株、若しくは左子に株が接続されていない場合において右子に接続された株を辿って得られる株の系列である最左株列上の末端の株である場合は、当該接続対象の株の右子若しくは左子に新たな株を接続して拡張し、
接続対象の株が、前記株の木構造のうち、前記株の木構造の最左株列上の株であって、末端の株以外である場合は、当該接続対象の株の左子にのみ新たな株を接続して拡張する、
ことを特徴とする探索装置。
【０１２８】
（付記１６）付記１５に記載の探索装置であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の末端の株の右子若しくは左子である場合、前記最右株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索装置。
【０１２９】
（付記１７）付記１６に記載の探索装置であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最右株列上の株であって末端の株以外である場合、前記最右株列上で前記末端よりも上の階層に接続された株の右子が前記登録済二分木パターンで出現するノードの位置で探索される探索装置。
【０１３０】
（付記１８）付記１７に記載の探索装置であって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索装置。
【０１３１】
（付記１９）付記１５に記載の探索装置であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の末端の株の右子若しくは左子である場合、前記最左株列上の末端の株の右子若しくは左子が前記登録済二分木パターンで出現するノードの位置で探索される探索装置。
【０１３２】
（付記２０）付記１９に記載の探索装置であって、
前記特定の二分木パターンは、前記新たな株が前記登録済二分木パターンに接続された位置が前記最左株列上の株であって末端の株以外である場合、前記最左株列上で前記末端よりも上の階層に接続された株の左子が前記登録済二分木パターンで出現するノードの位置で探索される探索装置。
【０１３３】
（付記２１）付記２０に記載の探索装置であって、
前記特定の二分木パターンは、前記ノードが有する右子及び左子と、前記新たな株の右子及び左子との間でラベルが一致するか否かを照合することにより探索される探索装置。
【符号の説明】
【０１３４】
１０    探索装置
１１    インタフェース部
１３    記憶部
１３ａ  二分木データ木
１５    制御部
１５ａ  受付部
１５ｂ  生成部
１５ｃ  探索部
１５ｄ  出力部
【図１】
2020077236.tif 000003
【図２】
2020077236.tif 000004
【図３】
2020077236.tif 000005
【図４】
2020077236.tif 000006
【図５】
2020077236.tif 000007
【図６】
2020077236.tif 000008
【図７】
2020077236.tif 000009
【図８】
2020077236.tif 000010
【図９】
2020077236.tif 000011