(57)【要約】【課題】グラフの探索を効率的かつ正確に実現する。【解決手段】本発明のグラフ描画システムは、ノードの集合およびエッジの集合で構成されるグラフを描画するグラフ描画システムであって、入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、前記閉路内の同一のノードに到達した場合または前記閉路内の隣接するノードに到達した場合に、前記閉路での探索を終了するグラフ探索部１と、探索終了後のノードの集合およびエッジの集合に基づいて、グラフを描画するグラフ描画部３、を備える。【選択図】図３
2015070526.tif 000002
【特許請求の範囲】
【請求項１】
ノードの集合およびエッジの集合で構成されるグラフを描画するグラフ描画システムであって、
入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、前記閉路内の同一のノードに到達した場合または前記閉路内の隣接するノードに到達した場合に、前記閉路での探索を終了するグラフ探索部と、
探索終了後のノードの集合およびエッジの集合に基づいて、グラフを描画するグラフ描画部と、を備えることを特徴とするグラフ描画システム。
【請求項２】
隣接する２つのノードを特定する情報を含むグラフ構成情報データベースを更に備え、
前記グラフ探索部は、前記グラフ構成情報データベースを参照して、前記幅優先探索を実行することを特徴とする請求項１記載のグラフ描画システム。
【請求項３】
ネットワークに接続され、ネットワーク上のノードを特定する情報を収集し、前記収集した情報を前記グラフ構成情報データベースに記録するグラフ構成情報収集部を更に備えることを特徴とする請求項２記載のグラフ描画システム。
【請求項４】
ノードの集合およびエッジの集合で構成されるグラフを描画するグラフ描画システムのプログラムであって、
始点およびホップ数を入力する処理と、
前記入力された始点およびホップ数に基づいて、幅優先探索を実行する処理と、
前記幅優先探索で、閉路における２方向からの探索が、前記閉路内の同一のノードに到達した場合または前記閉路内の隣接するノードに到達した場合に、前記閉路での探索を終了する処理と、
探索終了後のノードの集合およびエッジの集合に基づいて、グラフを描画する処理と、の一連の処理を、コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノードの集合およびエッジの集合で構成されるグラフを描画する技術に関する。
【背景技術】
【０００２】
従来から、グラフを描画する技術分野においては、ある制約下で始点と終点間の最適経路を探索する技術が提案されている。例えば、特許文献１記載の技術では、現在位置から探索範囲を特定し、該当探索範囲の地図データを読み込んで格納し、探索開始点および探索終了点を決定する。また、現在日時を取得し、出発地から目的地までの走行予定時間帯を決定し、その時間帯において、格納されている地図データの各ノードおよびリンクが通行可能か否かを判定し、地図データ上に規制の有無を書き込む。書き込まれた地図データに基づいて、探索開始点から探索終了点までの経路を選出する。
【０００３】
また、グラフを探索する技術として、「幅優先探索」が知られている。図７は、従来の幅優先探索の一例を示す図である。以下、本明細書では、点ａの隣接点を訪問することを、「ａを展開する」と呼称する。この幅優先探索は、始点に隣接している点を順次展開し、隣接する頂点が無くなったら、最初に展開した点に戻り、その点の隣接点を順次展開する。そして、この処理を繰り返し、戻るべき点が無くなった時点で、探索を終了する。図７では、例えば、始点をノードＡとし、ホップ数を３とした場合、ノードＦとＧに到達したことを示している。
【０００４】
しかし、この幅優先探索では、グラフに「閉路」が含まれていると、同じ点を何度も展開することになるため、探索が無限に続いてしまう問題がある。図８は、グラフに閉路がある場合に、単に幅優先探索を行なうと、既に展開したノードを重複して展開してしまう例を示している。図８の例では、「ノードＡ、ノードＢ、ノードＤ、ノードＣ」という探索と、「ノードＡ、ノードＣ、ノードＤ、ノードＢ」という探索において、ノードＤとＢおよびノードＤとＣとの間で重複した展開をしている。
【０００５】
そこで、展開した点を記憶することで、幅優先探索の欠点を補うことが提案されている。図９は、既に展開したノードを記憶する幅優先探索の例を示している。この手法では、展開済みの点を記憶しておき、展開しようとする点が展開済み点か否かを確認することで、同じ点を重複して展開することを回避している。図９の例では、「ノードＡ、ノードＢ、ノードＤ、ノードＣ」という探索と、「ノードＡ、ノードＣ、ノードＤ、ノードＢ」という探索において、ノードＤとＢおよびノードＤとＣとの間では重複した展開がされないようになっている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２５０９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来は、ユーザが要求する範囲内のグラフを高速に描画するために、グラフを効率的に探索する手法は、提案されていない。また、幅優先探索では、展開点を記憶したとしても、グラフの規模が大きくなると（グラフの点の数が多くなると）、非常に多くの展開済み点を記憶する必要があり、かつ、展開済み点か否かの確認に非常に時間がかかる。
【０００８】
本発明は、このような事情に鑑みてなされたものであり、グラフの探索を効率的かつ正確に実現することができるグラフ描画システムおよびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
（１）上記の目的を達成するため、本発明は、以下のような手段を講じた。すなわち、本発明のグラフ描画システムは、ノードの集合およびエッジの集合で構成されるグラフを描画するグラフ描画システムであって、入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、前記閉路内の同一のノードに到達した場合または前記閉路内の隣接するノードに到達した場合に、前記閉路での探索を終了するグラフ探索部と、探索終了後のノードの集合およびエッジの集合に基づいて、グラフを描画するグラフ描画部と、を備えることを特徴とする。
【００１０】
このように、入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、閉路内の同一のノードに到達した場合または閉路内の隣接するノードに到達した場合に、閉路での探索を終了するので、重複した展開を回避することができ、グラフ描画のためのグラフ探索を効率的かつ正確に実現することが可能となる。
【００１１】
（２）また、本発明のグラフ描画システムは、隣接する２つのノードを特定する情報を含むグラフ構成情報データベースを更に備え、前記グラフ探索部は、前記グラフ構成情報データベースを参照して、前記幅優先探索を実行することを特徴とする。
【００１２】
このように、隣接する２つのノードを特定する情報を含むグラフ構成情報データベースを更に備え、グラフ構成情報データベースを参照して、幅優先探索を実行するので、ネットワークトポロジを形成するために必要な最小限の情報でグラフ探索を実行することが可能となる。その結果、処理負荷の軽減と処理速度の向上を図ることが可能となる。
【００１３】
（３）また、本発明のグラフ描画システムは、ネットワークに接続され、ネットワーク上のノードを特定する情報を収集し、前記収集した情報を前記グラフ構成情報データベースに記録するグラフ構成情報収集部を更に備えることを特徴とする。
【００１４】
このように、ネットワークに接続され、ネットワーク上のノードを特定する情報を収集し、収集した情報をグラフ構成情報データベースに記録するので、ネットワークからリアルタイムに収集した構成情報を、グラフ構成情報データベースに反映させることが可能となる。
【００１５】
（４）また、本発明のプログラムは、ノードの集合およびエッジの集合で構成されるグラフを描画するグラフ描画システムのプログラムであって、始点およびホップ数を入力する処理と、前記入力された始点およびホップ数に基づいて、幅優先探索を実行する処理と、前記幅優先探索で、閉路における２方向からの探索が、前記閉路内の同一のノードに到達した場合または前記閉路内の隣接するノードに到達した場合に、前記閉路での探索を終了する処理と、探索終了後のノードの集合およびエッジの集合に基づいて、グラフを描画する処理と、の一連の処理を、コンピュータに実行させることを特徴とする。
【００１６】
このように、入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、閉路内の同一のノードに到達した場合または閉路内の隣接するノードに到達した場合に、閉路での探索を終了するので、重複した展開を回避することができ、グラフ描画のためのグラフ探索を効率的かつ正確に実現することが可能となる。
【発明の効果】
【００１７】
本発明によれば、重複した展開を回避することができ、グラフ描画のためのグラフ探索を効率的かつ正確に実現することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】２つの探索が、閉路内の同じ点に到達した場合の例を示す図である。
【図２】２つの探索が、閉路内の隣接する点に到達した場合の例を示す図である。
【図３】本実施形態に係るグラフ描画システムの概略構成を示すブロック図である。
【図４】グラフ構成情報データベースが記録している情報の一例を示す図である。
【図５】本実施形態に係るグラフ描画システムの動作を示すフローチャートである。
【図６】図４で示されたグラフの構成情報のデータベースに基づいたグラフ探索の一例を示す図である。
【図７】従来の幅優先探索の一例を示す図である。
【図８】グラフに閉路がある場合に、重複して展開してしまう例を示している。
【図９】既に展開したノードを記憶する幅優先探索の例を示している。
【発明を実施するための形態】
【００１９】
本発明の実施形態に係るグラフ描画システムは、始点ｓとホップ数ｋが与えられたときに、幅優先探索に閉路での探索の終了処理を付加した探索アルゴリズムを用いる。閉路での探索の終了処理は、以下の２つの条件下でそれぞれ異なる。
【００２０】
［第１の条件］２つの探索が、閉路内の同じ点に到達した場合
［第２の条件］２つの探索が、閉路内の隣接する点に到達した場合
以下、２つの探索の終了処理について説明する。
【００２１】
図１は、２つの探索が、閉路内の同じ点に到達した場合の例を示す図である。図１において、ｃは一度しか展開せず、ｃを展開するときは、ｃの親であるａ、ｂは展開しない。すなわち、ｃの展開元の点をｃの「親集合」として記憶し、ｃを一度だけ展開する。ｃを展開するときは、隣接点がｃの親集合に含まれるかどうか確認する。隣接点がｃの親集合に含まれない場合は、ｃから隣接点へ展開する。隣接点がｃの親集合に含まれる場合は、ｃから隣接点へ展開しない。図１では、ｃの隣接点ａ、ｂはｃの親集合なので、ｃはｄへのみ展開する。
【００２２】
図２は、２つの探索が、閉路内の隣接する点に到達した場合の例を示す図である。図２において、ｃを展開するとき、隣接点としてｄが含まれている場合、ｃからｄへ展開した後で、ｄは展開しない。また、ｄからｃへ展開しない。ｄを展開するとき、隣接点としてｃが含まれている場合、ｄからｃへ展開した後で、ｃは展開しない。また、ｄからｃへ展開しない。なお、先にｃからｄへ展開したら、ｄからｃへは展開しない。同様に、先にｄからｃへ展開したら、ｃからｄへは展開しない。
【００２３】
すなわち、ｃを展開するときは、同じｈｏｐ数で到達した展開予定点集合に隣接点が含まれるかどうか確認する。同じｈｏｐ数で到達した展開予定点集合に隣接点が含まれる場合は、ｃから隣接点へ訪問した後で、隣接点は展開しない。また、隣接点からｃへ訪問しない。一方、同じｈｏｐ数で到達した展開予定点集合に隣接点が含まれない場合は、通常の幅優先探索に従い、隣接点への訪問と隣接点の展開を行なう。
【００２４】
図２では、ｃの隣接点ｄは展開予定点集合に含まれるので、ｃからｄへ訪問した後で、ｄは展開しない。また、ｄからｃへ訪問しない。
【００２５】
図３は、本実施形態に係るグラフ描画システムの概略構成を示すブロック図である。ここでは、ネットワークトポロジのグラフ描画を例にとって説明する。このグラフ描画システムにおいて、グラフ探索部１は、入力された始点およびホップ数に基づいて、幅優先探索を実行する。閉路においては、２方向からの探索が、閉路内の同一のノードに到達した場合、または閉路内の隣接するノードに到達した場合に、閉路での探索を終了する。グラフの探索には、既知情報として、図４で示されるようなグラフ構成情報データベース５を用いる。グラフ構成情報データベース５は、２点間の隣接のみを表している。これは、ネットワークトポロジを形成するために必要最小限な情報である。
【００２６】
グラフ描画部３は、グラフ探索部１での探索が終了した後、ノードの集合およびエッジの集合に基づいて、グラフを描画する。すなわち、グラフ探索部１が取得したグラフの情報は、グラフ描画部３に順次送信され、最終的に、始点とホップ数で指定された範囲内のグラフの描画が得られる。グラフ構成情報データベース５は、ネットワーク上の隣接する２つのノードを特定する情報を含む。グラフ探索部１は、グラフ構成情報データベース５を参照して、幅優先探索を実行する。グラフ構成情報収集部７は、ネットワーク９に接続され、リアルタイムでネットワーク９上のノードを特定する情報を収集し、収集した情報をグラフ構成情報データベース５に記録する。
【００２７】
図５は、本実施形態に係るグラフ描画システムの動作を示すフローチャートである。また、図６は、図４で示されたグラフの構成情報のデータベースに基づいたグラフ探索の一例を示す図である。
【００２８】
まず、開始点ｓ、ホップ数ｎを入力する（ステップＳ１）。ここでは、現在のホップ数をｋ＝１とする（ステップＳ１）。次に、（ｓ，Ｐｓ）を展開予定点集合Ｆに入れる（ステップＳ２）。Ｐｓはｓの親集合を表し、空集合である。次に、ｋは３以下であり、かつ始点をｓ、ホップ数を３とする（ステップＳ３、Ｓ４）。次に、ｋがｎ以上であるかどうかを判断し（ステップＳ５）、ｋがｎより大きい場合は、終了する。一方、ｋがｎ以下である場合は、Ｆが空集合であるかどうかを判断する（ステップＳ６）。ここでは、Ｆは空集合ではないので、Ｆに含まれる要素を未展開点集合Ｏに含め、Ｆ、展開済み点集合Ｃを空集合とする（ステップＳ７）。
【００２９】
次に、Ｏが空集合であるかどうかを判断する（ステップＳ８）。Ｏは空集合ではないので、Ｏに含まれるｓ、Ｐｓを取り出す（ステップＳ９）。次に、図４より、ｓの隣接点集合Ｎ＝｛ａ，  ｂ｝を取得する（ステップＳ１０）。次に、Ｎが空集合であるかどうかを判断し（ステップＳ１１）、Ｎは空集合ではないので、Ｎからａを取り出す（ステップＳ１２）。
【００３０】
次に、ｎがＰに含まれるかどうかを判断し（ステップＳ１３）、ｎがＣに含まれるかどうかを判断し（ステップＳ１４）、ｎがＯに含まれるかどうかを判断する（ステップＳ１５）。ａはＰｓ、Ｃ、Ｏに含まれない、かつ、Ｆにはａを含む要素は含まれないので、Ｐａ＝｛ｓ｝として、（ａ，Ｐａ）をＣに入れる（ステップＳ１６）。（ｓ，ａ）の情報をグラフ描画部へ送信する（ステップＳ２０）。上記のステップＳ１１からステップＳ１６、ステップＳ２０の処理をｂに対しても行なう。
【００３１】
次に、ステップＳ１１、８において、Ｎは空集合で、かつ、Ｏが空集合なので、ｋをインクリメントし、ｋ＝２とする。ｋ＝３でｋは３以下であり、かつ、Ｆ＝｛（ａ，Ｐａ），（ｂ，Ｐｂ）｝でＦは空集合ではないので、Ｆに含まれる要素をＯに含め、Ｆを空集合とする。ステップＳ８からステップＳ１６、ステップＳ２０の処理を（ａ，Ｐａ）、（ｂ，Ｐｂ）に対して行なう。
【００３２】
次に、ステップＳ４からステップＳ７において、ｋ＝３でｋは３以下であり、かつ、Ｆ＝｛（ｃ，Ｐｃ），（ｄ，Ｐｄ）｝でＦは空集合ではないので、Ｆに含まれる要素をＯに含め、Ｆを空集合とする（Ｐｃ＝｛ａ｝、Ｐｄ＝｛ｂ｝）。次に、Ｏが空集合であるかどうかを判断し（ステップＳ８）、Ｏは空集合ではないので、Ｏに含まれるｃ、Ｐｃを取り出す（ステップＳ９）。図４より、Ｎ＝｛ａ，ｄ，ｅ｝を取得する（ステップＳ１０）。次に、Ｎが空集合であるかどうかを判断し（ステップＳ１１）、Ｎは空集合ではないので、Ｎからａを取り出す（ステップＳ１２）。次に、ステップＳ１３において、ａはＰｃに含まれるので、ｃからａへ展開しない。
【００３３】
ステップＳ１１において、Ｎは空集合ではないので、Ｎからｄを取り出す（ステップＳ１２）。ステップＳ１３からステップＳ１６において、ｄはＰｃ、Ｃに含まれないが、Ｏに含まれるので、Ｃにｃを入れる。ステップＳ２０おいて、（ｃ，ｄ）の情報をグラフ描画部へ送信する。
【００３４】
ステップＳ１１において、Ｎは空集合ではないので、Ｎからｅを取り出す（ステップＳ１２）。ステップＳ１３からステップＳ１９において、ｅはＰｃ、Ｃ、Ｏに含まれない、かつ、Ｆにはｅを含む要素は含まれないので、Ｐｅ＝｛ｃ｝として、（ｅ，Ｐｅ）をＦに入れる。（ｃ，ｅ）の情報をグラフ描画部へ送信する（ステップＳ２０）。
【００３５】
ステップＳ８において、Ｏは空集合ではないので、Ｏに含まれるｄ、Ｐｄを取り出す（ステップＳ９）。図４より、Ｎ＝｛ｂ，ｃ｝を取得する（ステップＳ１０）。ステップＳ１１において、Ｎは空集合ではないので、Ｇよりｂを取り出す（ステップＳ１２）。ステップＳ１３において、ｂはＰｄに含まれるので、ｄからｂへ展開しない。ステップＳ１１において、Ｎは空集合ではないので、Ｎからｃを取り出す（ステップＳ１２）。ステップＳ１３〜ステップＳ１４において、ｃはＰｄに含まれないが、Ｃに含まれるので、ｄからｃへ展開しない。ステップＳ１１において、Ｎは空集合で、かつ、ステップＳ８において、Ｏが空集合なので、ｋをインクリメントし、ｋ＝４とする（ステップＳ４）。ステップＳ５において、ｋは３より大きい値であるため、終了する。
【００３６】
以上説明したように、本実施形態によれば、入力された始点およびホップ数に基づいて、幅優先探索を実行し、閉路における２方向からの探索が、閉路内の同一のノードに到達した場合または閉路内の隣接するノードに到達した場合に、閉路での探索を終了するので、重複した展開を回避することができ、グラフ描画のためのグラフ探索を効率的かつ正確に実現することが可能となる。
【符号の説明】
【００３７】
１  グラフ探索部
３  グラフ描画部
５  グラフ構成情報データベース
７  グラフ構成情報収集部
９  ネットワーク
【図１】
2015070526.tif 000003
【図２】
2015070526.tif 000004
【図３】
2015070526.tif 000005
【図４】
2015070526.tif 000006
【図５】
2015070526.tif 000007
【図６】
2015070526.tif 000008
【図７】
2015070526.tif 000009
【図８】
2015070526.tif 000010
【図９】
2015070526.tif 000011