JP6520362B2 - 生成方法、装置、及びプログラム - Google Patents

生成方法、装置、及びプログラム Download PDF

Info

Publication number
JP6520362B2
JP6520362B2 JP2015094400A JP2015094400A JP6520362B2 JP 6520362 B2 JP6520362 B2 JP 6520362B2 JP 2015094400 A JP2015094400 A JP 2015094400A JP 2015094400 A JP2015094400 A JP 2015094400A JP 6520362 B2 JP6520362 B2 JP 6520362B2
Authority
JP
Japan
Prior art keywords
vertex
shortest path
vertices
path tree
root
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015094400A
Other languages
English (en)
Other versions
JP2016048540A (ja
Inventor
康男 山根
康男 山根
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015094400A priority Critical patent/JP6520362B2/ja
Priority to US14/823,380 priority patent/US9892532B2/en
Publication of JP2016048540A publication Critical patent/JP2016048540A/ja
Application granted granted Critical
Publication of JP6520362B2 publication Critical patent/JP6520362B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/206Drawing of charts or graphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/12Shortest path evaluation
    • H04L45/124Shortest path evaluation using a combination of metrics
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/48Routing tree calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/177Editing, e.g. inserting or deleting of tables; using ruled lines
    • G06F40/18Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/22Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks comprising specially adapted graphical user interfaces [GUI]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Mining & Analysis (AREA)

Description

本発明は、生成方法、生成装置、及び生成プログラムに関する。
近年、SNS(Social Networking Service)、顧客関係管理、ネットワーク管理、バイオエンジニアリング、輸送などの分野で、ネットワーク的データを活用するアプリケーションが増えてきている。ネットワーク的データは、各要素と、要素間の関係とを表すデータである。例えば、インターネット、通信網、交通網、輸送網などのいわゆるネットワークや、人間関係、分子間の関係などを表すデータがある。
また、ネットワーク的データは、各要素に対応する頂点(vertex)と、関係する要素間に対応する頂点間を結ぶ辺(edge)とを含むグラフで表すことができる。例えば、人間関係を表すネットワーク的データのグラフは、一人の人間を一つの要素として頂点で表し、人間同士の関係を、頂点間を結ぶ辺として表すことができる。
なお、グラフGに含まれる頂点の集合をV、辺の集合をEとすると、グラフGは、G=(V,E)と表すことができる。また、グラフにおいて、1つの辺で結ばれた2つの頂点は、「隣接している(adjacent)」という。また、頂点の列v,v,・・・,vにおいて、任意のi(1≦i≦n)に対して、頂点vi−1と頂点vとが隣接している場合、この頂点の列を経路(パス)と呼び、その長さはnである。また、頂点vを経路の「始点」、頂点vを経路の「終点」と呼ぶ。また、2頂点間の経路のうち、長さが最も短い経路を最短経路といい、2頂点間の最短経路の長さを距離という。
また、上記のようなグラフには、辺に向きがない無向グラフと、辺に向きがある有向グラフとがある。例えば、道路が全て両方向から通行可能であれば、道路網を無向グラフで表現できる。しかし、一方通行の道路を含む道路網は、有向グラフでないと表現できない。なお、上記の各定義は、無向グラフを前提にしている。
また、上記のようなネットワーク的データのグラフには、各辺に重みが付与された重み付きグラフと、各辺に重みが付与されていない重みなしグラフとがある。例えば、線路網は、各駅を頂点に対応させ、隣り合う駅同士に対応する頂点間を辺で結び、駅間の距離に応じた重みを各辺に付与することで、重み付きグラフとして表現できる。一方、人間関係を表すネットワーク的データにおいて、関係の有無のみに着目し、関係の親密さは問わない場合、人間関係は重みなしグラフで表現できることになる。なお、重みは正の値だけではなく、負の値も付与することが可能である。
一方、ネットワーク的データの中からビジネス、経営、研究などに重要な情報を抽出するなどのデータ分析に対するニーズが高まっている。ネットワーク的データを表すグラフに対するデータ分析も同様にニーズがある。例えば、グラフにおいて、2頂点間の最短経路を求めることは、グラフに対するデータ分析として重要である。
以下に重みなし無向グラフが有効な3つの例を挙げる。例えば、人間関係を表すネットワーク的データでは、SNSにおいて友人関係にある人間同士や、社内でメールのやり取りを行なっている人間同士などを辺で結んだグラフが考えられる。このグラフ中に頂点として表されているある人から、その人とは直接の関係はない別の人にアクセスしたい場合を考える。この場合、グラフにおいて、二人を表す頂点間の最短経路がわかれば、最も少ない手間で、経路上に存在する頂点に対応する知人を通して、目的とする人にコンタクトを取ることができる。
また、コンピュータネットワークを表すグラフでは、頂点間の最短経路がわかれば、頂点に対応する装置間において、通信回数が最小の経路で通信を行なうことが可能となる。
また、例えば、ルービックキューブ(登録商標)の各局面を頂点、1つの回転で遷移できる局面同士を辺で結ぶグラフを考える。この場合、ある局面に対応する頂点から、最終局面(全ての面が1色のみの状態)に対応する頂点までの最短経路は、最適(最小手数の)解を示すことになる。
従来、上述のようなグラフ内の頂点間の最短経路を求める技術として、グラフにおける頂点間の最短経路を最短経路木として表現する方法、重みつきグラフの最短経路を求める各方式、及び重みなしグラフの最短経路を求める各方式が提案されている。
まず、最短経路を最短経路木として表現する方法について説明する。ある頂点vからv以外の全ての頂点への最短経路は、最短経路木として表現することが可能であることが知られている。
ここで、グラフに含まれる一部の頂点及び辺を含むグラフを部分グラフという。部分グラフの頂点の集合は元のグラフの頂点の部分集合であり、部分グラフの辺の集合も元のグラフの辺の集合の部分集合となる。また、部分グラフ内の任意の2頂点について、一方から他方への経路がある場合、その部分グラフは連結であるという。また、始点と終点とが一致した経路を閉路という。
上記の定義によれば、木とは、閉路を含まない連結部分グラフということができる。一般的に、木に含まれる頂点数をnとした場合、木に含まれる辺の数はn−1である。また、木は、ある頂点を一番上に、それに繋がる頂点(群)をその下に、さらにその頂点(群)に繋がる頂点をその下に、・・・というように、木を逆にしたような形に書くことができる。この場合、一番上の頂点を「根」と呼ぶ。また、その頂点より下に頂点が存在しない頂点を「葉」と呼ぶ。また、ある頂点vのすぐ下に繋がる頂点wを頂点vの子、頂点vを頂点wの親と呼ぶ。さらに、葉から根までの距離のうち最大のものを木の深さと呼ぶ。なお、木においては、葉から根までの経路はユニークに決まる。
上記の頂点vから全ての頂点への最短経路を表す最短経路木を「頂点vを根とする最短経路木」と呼び、T(v)と表す。言い換えれば、最短経路木T(v)においては、T(v)に含まれる任意の頂点wに対して、頂点vから頂点wへのT(v)における経路が最短経路になるということである。なお、頂点vから頂点wへのT(v)における経路は、木の性質からユニークになることが知られている。
この最短経路木において、頂点vからある頂点wまでの最短経路を求めるには、頂点wからその親を辿って、頂点vまで到達する際に、辿った頂点を頂点wから頂点vまで順にリストとして記録しておき、そのリストを逆向きに見ればよい。最短経路木は、頂点の重複がないため、最短経路を表現する方法として非常に有効である。
重み付きグラフの最短経路を求める方式としては、例えば、ある単一の頂点から全頂点への最短経路を求めるダイクストラ(Dijkstra)法が知られており、その計算量(オーダー)は、最大でO(|E|+|V|log|V|)である。なお、|A|は、集合Aに含まれる要素数を表す。すなわち、|E|は辺の数、|V|は頂点の数である。ダイクストラ法による単一の頂点毎の最短経路の計算を、全頂点対全頂点の最短経路の計算に適用すると、計算量は最大でO(|V|(|E|+|V|log|V|))となる。
また、重み付きグラフの最短経路を求める別の方式として、全頂点の各々から、全頂点への最短経路を全て求めるワーシャルフロイド(Warshall-Floyd)法が知られており、その計算量は、最大でO(|V|)である。
また、重み付きグラフの最短経路を求める別の方式として、ある単一の頂点から全頂点への最短経路を求めるベルマンフォード(Bellman-Ford)法が知られている。ベルマンフォード法は、グラフが疎な場合(辺の数が頂点の数に比べて比較的少ない場合)、ダイクストラ法より最短経路を求める計算が遅いと言われるが、重みが負の場合でも経路を求めることができるという利点がある。ベルマンフォード法の計算量は、最大でO(|E||V|)である。ベルマンフォード法による単一の頂点毎の最短経路の計算を、全頂点対全頂点の最短経路の計算に適用すると、計算量は最大でO(|E||V|)となる。
重みなしグラフの最短経路を求める方式としては、幅優先で隣接頂点リストを辿って最短経路を求める幅優先探索方式が存在する。隣接頂点リストとは、ある頂点に隣接する頂点のリストである。また、頂点vに繋がる辺の数を頂点vの次数と呼ぶ。すなわち、隣接頂点リストに含まれる頂点数が次数である。幅優先探索の計算量は、最大でO(|E|+|V|)である。幅優先探索方式による単一の頂点に対する最短経路の計算を、全頂点対全頂点の最短経路に適用した場合の最大の計算量は、O(|E||V|+|V|)となる。なお、最短経路木は、幅優先探索を重みなしグラフに適用することで自然に形成される。
以上述べてきた方式は、重みなしの有向グラフにも無向グラフにも適用可能である。以下の2方式は、重みなし無向グラフの最短経路の計算に適用可能な方式であり、全頂点対全頂点の最短経路問題を行列によらず解く方式、及び行列により解く方式が提案されている。行列によらず解く方式の最大の計算量は以下のとおりである。
a)|E|> |V|(log|V|)の場合、
O(|E||V|/log|V|)
b)|E|> |V|loglog|V|の場合、
O(|E||V|loglog|V|/log|V|)
c)|E|<=|V|loglog|V|の場合、
O(|V|2(loglog|V|)2/log|V|)
また、行列により解く方式では、計算量は最大でO(|V|2.376)であることが報告されている。
「全域木−Wikipedia」[online]、2014年7月1日検索、インターネット<URL:http://ja.wikipedia.org/wiki/%E5%85%A8%E5%9F%9F%E6%9C%A8> 「ダイクストラ法−Wikipedia」[online]、2014年7月1日検索、インターネット<URL:http://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%82%AF%E3%82%B9%E3%83%88%E3%83%A9%E6%B3%95> 「幅優先探索−Wikipedia」[online]、2014年7月1日検索、インターネット<URL:http://ja.wikipedia.org/wiki/%E5%B9%85%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2> T.M.Chan, All-Pairs Shortest Paths for Unweighted Undirected Graphs in o(mn) Time, SODA '06 Proceedings of the seventeenth annual ACM-SIAM symposium on Discrete algorithm, 2006 R. Seidel, On the all-pairs-shortest-path problem in unweighted undirected graphs. J. Comput. Sys. Sci.,51:400-403, 1995. Z. Galil and O. Margalit, All pairs shortest distances for graphs with small integer length edges. Inf. Comput., 134:103-139, 1997. Z. Galil and O. Margalit, All pairs shortest paths for graphs with small integer length edges. J. Comput. Sys. Sci., 54:243-254, 1997.
しかしながら、従来技術においては、頂点間の最短経路を表現する最短経路木として、特定の頂点を根とする最短経路木を生成している。最短経路木の生成では、他の頂点の隣接頂点の情報を集約した上で、最短経路を選択しながら、最短経路木を生成していく。この処理を全ての頂点に対して行った場合には、計算量が増加してしまう。また、他の最短経路を計算する従来技術でも、上述したように、全頂点対全頂点の最短経路を全て計算する場合には、計算量が増加してしまう。
本発明は、一つの側面として、グラフに含まれる各頂点を根とする最短経路木生成のための計算量を削減することを目的とする。
一つの態様では、複数の頂点と頂点間を結ぶ辺とで表された重みなしグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する。この際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する。
一つの側面として、グラフに含まれる各頂点を根とする最短経路木生成のための計算量を削減することができる、という効果を有する。
頂点vを根とする最短経路木と、頂点vからの距離に応じた同心円を示す図である。 2つの頂点v、wの深さ0の最短経路木を示す図である。 2つの頂点v、wの深さ1の最短経路木及び環を示す図である。 2つの頂点v、wの深さ2の最短経路木及び環を示す図である。 2つの頂点v、wの深さ3の最短経路木及び環を示す図である。 グラフの一例を示す図である。 同心円状幅優先探索方式における初期化後の頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 同心円状幅優先探索方式において、深さ1まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 同心円状幅優先探索方式において、深さ2まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 同心円状幅優先探索方式における最短経路木生成を実行するための生成装置の機能ブロック図である。 同心円状幅優先探索方式における最短経路木生成処理のメイン処理の一例を示すフローチャートである。 同心円状幅優先探索方式における深さkの処理の一例を示すフローチャートである。 同心円状幅優先探索方式における頂点vを根とする深さkの最短経路木生成処理の一例を示すフローチャートである。 頂点の一例を示す図である。 深さ3の最短経路木の生成の途中段階を示す図である。 隣接最短経路木の活用を説明するための図である。 第1及び第2実施形態に係る生成装置の機能ブロック図である。 隣接最短経路木の活用を説明するための図である。 第1及び第2実施形態に係る生成装置として機能するコンピュータの一例を示す概略ブロック図である。 無向グラフの一例を示す図である。 第1実施形態における初期化後の頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態における頂点vを根とする深さkの最短経路木生成処理の一例を示すフローチャートである。 第1実施形態における頂点vを根とする深さ1の最短経路木生成処理の一例を示すフローチャートである。 第1実施形態における頂点vを根とする深さ2以上の最短経路木生成処理の一例を示すフローチャートである。 第1実施形態において、深さ1まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態において、深さ1まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態において、深さ2まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態において、深さ2まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態において、深さ3まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第1実施形態において、深さ3まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 頂点vから到達可能な有向グラフの一例を示す図である。 無向グラフと見て非連結な有向グラフの一例を示す図である。 全ての頂点から到達不可能な有向グラフの一例を示す図である。 第2実施形態における最短経路木生成処理のメイン処理の一例を示すフローチャートである。 有向グラフの一例を示す図である。 第2実施形態における初期化後の頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態における深さkの処理の一例を示すフローチャートである。 第2実施形態における頂点vを根とする深さ1の最短経路木生成処理の一例を示すフローチャートである。 第2実施形態において、深さ1まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態において、深さ1まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態における頂点vを根とする深さ2以上の最短経路木生成処理の一例を示すフローチャートである。 第2実施形態において、深さ2まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態において、深さ2まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態において、深さ3まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。 第2実施形態において、深さ3まで最短経路木が生成された段階での頂点オブジェクト及びt−頂点オブジェクトの一例を示す図である。
以下、図面を参照して本発明に係る実施形態の一例を詳細に説明する。以下の各実施形態では、頂点と、頂点間を結ぶ辺とで構成されたグラフに含まれる各頂点について、他の頂点との最短経路を表現する最短経路木を生成する。
特に、実施形態では、最短経路を求める問題として、より具体的に、重みなしグラフにおける各頂点から、距離d以内に存在する全ての頂点の各々までの最短経路を求めることを目的とする。距離d以内としているのは、アプリケーションによっては、各頂点から、グラフに含まれる全ての頂点の各々までの最短経路を必要としない場合も想定されるため、アプリケーションに応じた範囲で最短経路を求める趣旨である。例えば、人間関係のネットワーク的データを表すグラフの例で、直接の関係を有さない人にアクセスするための最短経路を求めるようなアプリケーションの場合、自身から距離3までに存在する人を目的の人として設定できれば十分な場合がある。このような場合にはd=3と設定することで、より距離の遠い頂点までの最短経路の計算を省略することができる。
なお、後述するように、距離dとして大きな値を設定することにより、グラフに含まれる全頂点の各々から、他の全頂点の各々への最短経路を求める場合も含まれることになる。また、重みなしグラフの最短経路を求める問題は、辺に付与された重みが全て「1」である重み付きグラフの最短経路問題とも考えられる。すなわち、実施形態で求める最短経路は、重み付きグラフの最短経路問題の特別な場合とも考えられる。
また、以下で説明する各実施形態の基礎となる方式、及び第1実施形態については、無向グラフを前提に説明する。有向グラフ特有の内容については、第2実施形態で詳しく説明する。
<同心円状幅優先探索方式>
まず、実施形態の詳細を説明する前に、以下の各実施形態の基礎となる方式として、幅優先探索と、最短経路木による経路管理と、同心円による頂点管理とを組み合わせた方式について説明する。ここでは、この方式を「同心円状幅優先探索方式」と呼ぶ。以下では、説明に用いている図が示すように、連結な無向グラフの場合を説明する。しかし、隣接頂点リストをその頂点から出て行く辺に繋がる頂点のリストにすること、及び第2実施形態で示す改良を施すことで、有向グラフの方式に書き換えることは容易である。
「幅優先探索」とは、上述したように、重みなしグラフの最短経路を求めるための手法であり、幅優先で隣接頂点リストを辿って最短経路を求める方式である。「最短経路木による経路管理」とは、幅優先探索により自然に生成された最短経路木の情報を、頂点毎に管理することである。「同心円による頂点管理」とは、頂点毎に、その頂点から距離kの位置を、距離k毎の同心円として管理し、同心円上に存在する頂点の集合を、距離kに対応付けたリスト[k]として管理することである。本実施形態では、重みなしグラフを扱うため、隣接する頂点間の距離は全て「1」とする。従って、リスト[k]は、根となる頂点からk番目の同心円の頂点の集合を表す。なお、リスト[0]は、根となる頂点のみからなる。
図1に、頂点vを根とする最短経路木と、頂点vを中心とし、頂点vと他の頂点との距離に応じた同心円を重ねて表した図を示す。図1では、頂点を黒点で、最短経路木の辺を実線で、元のグラフに含まれる辺のうち、最短経路木に含まれない辺を破線で、同心円を一点破線で表している。頂点、最短経路木の辺、元のグラフの辺、及び同心円の表記方法は、特に断らない限り、他の図においても同様である。
同心円状幅優先探索方式による最短経路木の生成の概要は以下のとおりである。
1)各頂点vを根とする深さ0の最短経路木T(v)は、頂点vのみからなる
2)各頂点vを根とする最短経路木T(v)を、同心円状(幅優先的)に拡張しながら生成する
3)頂点v毎に、最短経路木T(v)の葉に相当する頂点に隣接する全ての頂点から、次に最短経路木T(v)に含める頂点を探索する。
3)の処理を深さk=1,2,・・・,dに対して順に繰り返すことで、上記2)の「同心円状に拡張」が実現される。なお、3)の処理の途中でも、全ての頂点を根とする最短経路木の各々が、グラフに含まれる全ての頂点を含んでいることが判明した場合は、それ以上処理を続ける必要はないため、上記処理を終了する。
また、以下では、頂点vから距離kの位置を、図1に示すような同心円Rで表し、各同心円状に存在する頂点の集合を「環」という。同心円状幅優先探索方式では、最短経路木の根となる頂点を中心に、同心円状に拡張しながら最短経路木を生成するため、環R、R、Rは、この順で設定される。
図2〜図5に、2つの頂点v、wの深さ0から深さ3までの最短経路木、及び深さに応じて設定された環を概略的に示す。図2〜図5では、2頂点v、wについてのみ示しているが、他の頂点についても同様に最短経路木が生成される。このようにして、深さ0から順に深さ1、深さ2、深さ3、・・・と最短経路木を生成していく。
次に、同心円状幅優先探索方式で管理するデータのデータ構造について説明する。同心円状幅優先探索方式では、頂点を表すデータ構造体である頂点オブジェクト、及び最短経路木を構成する頂点を表すデータ構造体であるt−頂点オブジェクトを管理する。なお、以下では、頂点オブジェクトが示す頂点を単に「頂点」といい、t−頂点オブジェクトが示す頂点を「t−頂点」という。
頂点オブジェクトは、以下の属性を有する。
・id・・・頂点vを識別するための頂点識別子。例えば、1以上|V|以下のユニークな整数
・adj_vertices・・・頂点vに隣接する頂点のリスト(隣接頂点リスト)
・sptree_depth・・・現段階での最短経路木の深さ。最短経路木内で、頂点vからの距離が最大の頂点までの距離でもある。
・sptree・・・頂点vを根とする最短経路木の根。頂点vに対応するt−頂点オブジェクトが登録される。
・sptree_closure・・・頂点vを根とする最短経路木に含まれる頂点の頂点識別子をキーとするハッシュ表。キーに対応するハッシュ表の値には、キーが示す頂点識別子で識別される頂点に対応するt−頂点オブジェクトが登録される。
・ring[k]・・・頂点vからの距離がkである頂点の集合(上述した「環」)に含まれる各頂点に対応するt−頂点オブジェクトを配列したリスト
なお、sptree_closureは、頂点識別子がidである頂点が最短経路木内に既に存在するか否かを判定するために使われる。また、sptree_closureは、頂点識別子idに対応する頂点を求め、頂点vから頂点識別子idに対応する頂点までの最短経路を求める場合にも用いられる。この場合、次に述べるt−頂点オブジェクトのparent属性を辿って、頂点識別子idに対応する頂点から頂点vまでの経路を求め、その経路を頂点vから逆に辿ることで、頂点vから頂点識別子idに対応する頂点までの最短経路を求めることになる。
t−頂点オブジェクトは、上述したように、最短経路木を構成するt−頂点を表すデータ構造体(オブジェクト)である。「t−」はtreeの意味である。頂点vを根とする最短経路木T(v)における頂点間の繋がりは、根となる頂点が異なる毎に異なるため、頂点オブジェクトとは別に、t−頂点オブジェクトとして管理するものである。また、最短経路木の頂点として管理すべき属性は、頂点オブジェクトの全ての属性を必要としないため、頂点オブジェクトとは別に、t−頂点オブジェクトとして管理するものである。
t−頂点オブジェクトは、以下の属性を有する。
・vertex・・・t−頂点オブジェクトに対応する頂点オブジェクト
・children・・・最短経路木における子のt−頂点を表すt−頂点オブジェクトのリスト。子がない場合は空
・parent・・・最短経路木における親のt−頂点を表すt−頂点オブジェクト
以下、図6に示すグラフを用いて、頂点オブジェクト及びt−頂点オブジェクトについてより具体的に説明する。
図7に、図6に示すグラフに基づいて、初期化(詳細は後述)の結果作成されたデータ構造を示す。この状態は、最短経路木が深さ0まで求まった状態である。100Aは頂点vの頂点オブジェクト、100Bは頂点vの頂点オブジェクト、100Cは頂点vの頂点オブジェクトである。また、101Aはt_v11のt−頂点オブジェクト、101Bはt_v22のt−頂点オブジェクト、101Cはt_v33のt−頂点オブジェクトである。なお、同心円状幅優先探索方式における頂点オブジェクトを区別なく説明する場合には、単に「頂点オブジェクト100」と表記し、t−頂点オブジェクトを区別なく説明する場合には、単に「t−頂点オブジェクト101」と表記する。
ここで、頂点オブジェクト100及びt−頂点オブジェクト101に関する図中及び説明内での表記について説明する。図中の空欄は、属性に対応する値が存在しないことを意味し、説明中では「NIL」で表す。すなわち、図中の空欄は、NILが設定されていることを意味するが、図を簡明にするため空欄としている。また、[x,x,x]は、要素x1、、xがこの順で配列されたリストを表す。[x]は、単一の要素xからなるリストを、[]は空のリストを表す。また、{(x,y),(x,y),(x,y)}は、3つのペアからなるハッシュ表(連想記憶)を表し、各ペア(x,y)は、キーxに対応する値がyであることを表す。そして、このハッシュ表を用いれば、ハッシュ表に含まれるペア数によらず、キーxから一定の時間でyにアクセスし、yを取り出せるものとする。{(x,y)}は1つのペア(x,y)からなるハッシュ表を表す。
t_vijは、頂点vを根とする最短経路木に含まれるt−頂点のうち、頂点vに対応するt−頂点である。例えば、t_v22は、頂点vを根とする最短経路木に含まれるt−頂点であり、かつ頂点vに対応するもの、すなわち、v自身を表すものである。従って、頂点vの頂点オブジェクト100Bにおけるsptreeが「t_v22」となっているのは、頂点vを根とする最短経路木の根をt−頂点オブジェクトで表すとt_v22、すなわち頂点v自身であることを表している。なお、t_v22のt−頂点オブジェクト101Bのparentが空欄になっているのは、最短経路木の根が頂点vであり、木の根には親がないためである。
次に、図8に、図6のグラフにおいて、深さ1まで最短経路木が生成された段階での頂点オブジェクト100及びt−頂点オブジェクト101を示す。101Dはt_v12のt−頂点オブジェクト、101Eはt_v21のt−頂点オブジェクト、101Fはt_v23のt−頂点オブジェクト、101Gはt_v32のt−頂点オブジェクトである。図8に示すように、頂点vを根とする最短経路木について、t−頂点を表すt−頂点オブジェクト101E、101B、101Fの3つが生成されている。すなわち、頂点vを根とする最短経路木は、深さ1の段階で、図6に示すグラフの全ての頂点を含んでおり、最短経路木の生成が完了している。一方、頂点v及び頂点vの各々を根とする最短経路木は、深さ1の段階では、未だ図6に示すグラフの全ての頂点を含んでおらず、最短経路木の生成が完了していない。このように、根となる頂点によって、最短経路木の深さは異なる。
次に、図9に、図6のグラフにおいて、深さ2まで最短経路木が生成された段階での頂点オブジェクト100及びt−頂点オブジェクト101を示す。101Hは頂点t_v13のt−頂点オブジェクト、101Iは頂点t_v31のt−頂点オブジェクトである。図9に示すように、深さ2の段階で、図6に示すグラフに含まれる頂点の全てについて、各頂点を根とする最短経路木の生成が完了している。
同心円状幅優先探索方式による最短経路木の生成は、例えば、図10に示す生成装置110により実行することができる。生成装置110は、図1に示すように、初期化部112と生成部114とを含む。初期化部112は、グラフに含まれる各頂点及び各辺の情報に基づいて、各頂点の頂点オブジェクト100を初期化すると共に、深さ0までの最短経路木を表すt−頂点のt−頂点オブジェクト101を生成する。生成部114は、深さ1、深さ2、・・・と順次最短経路木を拡張し、頂点オブジェクト100及びt−頂点オブジェクト101を生成又は更新する。
次に、図11〜図13を参照して、同心円状幅優先探索方式による最短経路木生成処理の流れを説明する。図11はメイン処理、図12は深さkの処理、図13は頂点vを根とする深さkの最短経路木生成処理の一例を示すフローチャートである。また、最短経路木生成処理に応じたデータ構造の変化を、図7〜図9に示した深さ毎の頂点オブジェクト100及びt−頂点オブジェクト101を参照しながら説明する。なお、以下では、頂点vの頂点オブジェクト100の属性Xを「v.X」と表記し、t_vのt−頂点オブジェクト101の属性Xを「t_v.X」と表記する。
図11に示す同心円状幅優先探索方式による最短経路木生成処理におけるメイン処理のステップS10で、初期化部112が、G=(V,E)で表されるグラフGのデータを受け付ける。以下では、グラフGが図6に示すグラフ、すなわち、V=[v,v,v]、E=[v_v,v_v]の場合について説明する。なお、頂点のデータvのiは、各頂点を識別するための頂点識別子であり、1〜|V|のユニークな値とする。ここでは、i=1,2,3である。辺のデータEは、辺の両端の頂点を連結して表される。以下では、グラフGに含まれる頂点は、頂点識別子をインデクスとする配列Vertex[]で管理される。
初期化部112は、受け付けたグラフGのデータに基づいて、各頂点の頂点オブジェクト100を初期化する。具体的には、初期化部112は、頂点vの頂点識別子をv.idに登録する。また、初期化部112は、頂点vを一端とする辺の他端の頂点を抽出し、頂点vの隣接頂点リストとして、v.adj_verticesに登録する。また、初期化部112は、v.sptree_depthに、最短経路木の現段階での深さとして「0」を登録する。そして、初期化部112は、頂点vに対応するt−頂点オブジェクト101を生成し、t_v.vertexにvを登録し、t_v.childrenに[]を設定し、t_v.parentにNILを設定する。また、初期化部112は、v.sptreeに、生成したt−頂点オブジェクトt_vを登録する。また、初期化部112は、v.sptree_closureに、キーをv.id、値をt_vとするペア(v.id,t_v)を含むハッシュ表を登録する。また、初期化部112は、v.ring[0]に、t_vを含むリストを登録する。
この初期化の処理により、図7に示す頂点オブジェクト100A、100B、100C、及びt−頂点オブジェクト101A、101B、101Cが生成される。
次に、ステップS20で、生成部114が、変数c及び変数kの各々に0を設定する。変数cは、最短経路木に含まれる頂点の数が|V|に等しくなったもの、すなわち、グラフGに含まれる全ての頂点を含み、これ以上は拡張できない最短経路木の数をカウントするための変数である。変数kは、最短経路木の深さを示す変数である。次に、ステップS30で、生成部114が、変数kを1インクリメントし、次に、ステップS40で、生成部114が、変数kが、最短経路木を生成する深さとして予め設定された値d以下か否かを判定する。変数kがd以下の場合には、処理はステップS50へ移行する。
なお、全頂点から全頂点への最短経路を求めたい場合は、d=|V|−1とすればよい。これは、ある頂点から最も遠いところにある頂点までの距離は高々d=|V|−1だからである。すなわち、頂点vから、残りの|V|−1個の頂点を直線状に並べたグラフにおける、頂点vから最も遠い頂点までの距離は|V|−1である。仮に、d=|V|−1に設定しても、全ての頂点が直線状に接続されたグラフ以外は、後述する変数cの働きにより、変数kが|V|−1に達する前に最短経路木の生成は終了する。
ステップS50では、生成部114が、図12に示す深さkの処理を実行する。
図12のステップS51で、生成部114が、v.idに対応する変数idに0を設定し、次に、ステップS52で、idを1インクリメントする。次に、ステップS53で、生成部114が、変数idが、グラフGに含まれる頂点の数|V|以下か否かを判定することにより、全ての頂点について深さkの処理が終了したか否かを判定する。変数idが|V|以下の場合には、処理はステップS54へ移行する。
ステップS54では、生成部114が、頂点の配列Vertex[]から、頂点識別子がidである頂点Vertex[id]を抽出し、処理対象の頂点vに設定する。
次に、ステップS55で、生成部114が、v.sptree_closureに登録されている頂点の数が|V|未満か否かを判定することにより、頂点vを根とする最短経路木の生成が完了しているか否かを判定する。v.sptree_closureに登録されている頂点の数が|V|未満の場合には、頂点vを根とする最短経路木の生成は未完了であると判定して、処理はステップS56へ移行する。v.sptree_closureに登録されている頂点の数が|V|に達している場合には、頂点vを根とする最短経路木の生成は完了していると判定して、処理はステップS52に戻る。
ステップS56では、生成部114が、図13に示す頂点vを根とする深さkの最短経路木生成処理を実行する。
図13のステップS561で、生成部114が、v.sptree_depthにkを設定すると共に、属性としてv.ring[k]を追加し、v.ring[k]に空のリスト[]を設定する。次に、ステップS562で、生成部114が、v.ring[k−1]に、後段の処理が未処理の頂点が存在するか否かを判定する。未処理の頂点が存在する場合には、処理はステップS563へ移行し、未処理の頂点が存在しない場合には、図12に示す深さkの処理に戻る。
ステップS563では、生成部114が、v.ring[k−1]に存在する未処理の頂点のうち、v.ring[k−1]の先頭に一番近い頂点を抽出し、t_wに設定する。次に、ステップS564で、生成部114が、t_w.vertexに登録された頂点オブジェクトを抽出し、頂点wに設定する。例えば、k=1、id=1の場合、v.ring[0]からt_v11が抽出される。そして、t_v11.vertexに登録された頂点オブジェクトvが抽出され、頂点vが頂点wに設定される。
次に、ステップS565で、生成部114が、w.adj_verticesに、後段の処理が未処理の頂点が存在するか否かを判定する。未処理の頂点が存在する場合には、処理はステップS566へ移行し、未処理の頂点が存在しない場合には、処理はステップS562に戻る。
ステップS566では、生成部114が、w.adj_verticesに存在する未処理の頂点のうち、w.adj_verticesの先頭に一番近い頂点を抽出し、xに設定する。例えば、上記のk=1、id=1の例の場合、頂点wである頂点vの頂点オブジェクト101Aのv.adj_verticesに登録されている頂点vが頂点xとして設定される。
次に、ステップS567で、生成部114が、v.sptree_closureに登録されたハッシュ表に、頂点xの頂点識別子、すなわちx.idに登録されている頂点識別子をキーとするペアが登録されているか否かを判定する。登録されていない場合には、処理はステップS568へ移行し、登録されている場合には、頂点xは既に頂点vを根とする深さkの最短経路木に含まれていると判定して、処理はステップS565に戻る。
ステップS568では、生成部114が、頂点xに対応するt_xのt−頂点オブジェクト101を生成する。そして、生成部114が、t_x.vertexにxを登録し、t_x.childrenに空のリスト[]を設定し、t_x.parentに、t_wを登録する。また、生成部114は、t_w.childrenに登録されたリストの末尾に、t_xを追加する。また、生成部114は、v.sptree_closureに登録されたハッシュ表に、キーをx.id、値をt_xとするペアを追加し、v.ring[k]に登録されたリストの末尾に、t_xを追加する。
例えば、上記のk=1、id=1の例の場合、頂点xとして抽出された頂点vに対応するt_v12のt−頂点オブジェクト101Dが生成され、t_v12.vertexにvが登録され、t_v12.parentにt_v11が登録される。また、t_v11.childrenに登録されたリストの末尾に、t_v12が追加される。そして、v.sptree_closureに登録されたハッシュ表に、ペア(2,t_v12)が追加され、v.ring[1]に登録されたリストの末尾に、t_v12が追加される。これにより、図8に示すように、t−頂点オブジェクト101Dが生成されると共に、頂点オブジェクト100Aが更新され、またt−頂点オブジェクト101Aが更新される。
次に、ステップS569で、生成部114が、v.sptree_closureに登録されたハッシュ表に含まれるペア数、すなわち最短経路木T(v)に含まれる頂点の数が|V|に達したか否かを判定する。これにより、頂点vを根とする最短経路木T(v)の生成が完了したか否かを判定する。v.sptree_closureに登録されている頂点の数が|V|未満の場合には、頂点vを根とする最短経路木の生成は未完了であると判定して、処理はステップS565に戻る。v.sptree_closureに登録されている頂点の数が|V|に達している場合には、頂点vを根とする最短経路木の生成が完了したと判定して、処理は図12に示す深さkの処理に戻る。
次に、図12のステップS57で、上記ステップS56で、頂点vを根とする最短経路木が完成したか否か、すなわち、v.sptree_closureに登録されている頂点が|V|に等しいか否かを判定する。図13に示すステップS569で肯定判定されて本ステップへ移行した場合には、生成部114は、頂点vを根とする最短経路木が完成したと判定して、処理はステップS58へ移行する。図13に示すステップS562で否定判定されて本ステップへ移行した場合には、生成部114は、頂点vを根とする最短経路木が未完成であると判定して、処理はステップS52に戻る。
ステップS58では、生成部114が、変数cを1インクリメントし、次のステップS59で、変数cが|V|に達したか否かを判定する。最短経路木生成処理のループの途中でも、グラフに含まれる全ての頂点を根とする最短経路木の生成が、全て完了する場合がある。そこで、本ステップが肯定判定となる場合には、それ以上処理を続ける必要がないため、メイン処理に戻って、最短経路木生成処理全体を終了する。否定判定の場合には、処理はステップS52に戻る。
ステップS52〜S59の処理を繰り返し、ステップS53で否定判定されると、深さkの処理を終了して、図11に示すメイン処理に戻り、ステップS30に戻る。ステップS30〜S50の処理を繰り返し、ステップS40で、変数kがdを超えたと判定されると、目的の深さまでの最短経路木の生成が終了したと判定し、メイン処理を終了する。
図8は、k=1についての深さkの処理が終了した段階での頂点オブジェクト100及びt−頂点オブジェクト101である。また、図9は、k=2についての深さkの処理が終了した段階での頂点オブジェクト100及びt−頂点オブジェクト101である。
図14及び図15に示すより複雑なグラフを用いて、頂点とt−頂点との関係を示す。図14は、頂点オブジェクトが示す頂点によって表されたグラフ、図15は、t−頂点オブジェクトが示すt-頂点によって表された、頂点vを根とする最短経路木を示すグラフである。頂点v,w,x,x,xの各々と、t−頂点t_v,t_w,t_x,t_x,t_xの各々とが対応する。図15は、深さk=3の最短経路木T(v)の生成の途中段階を示している。具体的には、頂点vを根とする深さ3の最短経路木の生成処理(図13参照)のステップS563で、最初にt_wが抽出され、ステップS566からS568で、頂点wに隣接する頂点x,x,xをこの順に調べて、それぞれに対応するt_x,t_x,t_xを示すt−頂点オブジェクトが順に生成されたところを表している。この時点で、v.ring[3]に登録されたリストに含まれるt−頂点はt_x,t_x,t_xである。
<実施形態の概要>
上記の同心円状幅優先探索方式では、最短経路木を拡張する際、生成済みの最短経路木における葉に相当する頂点に隣接する全ての頂点を探索して、頂点vを根とする最短経路木に含めるか否かを調べている。したがって、同心円状幅優先探索方式では、aを各頂点に繋がる辺の数の平均とすると、頂点毎にa回調べる必要がある。
一方、以下の各実施形態では、同心円状幅優先探索方式を基礎とし、既に生成されている最短経路木を活用して、隣接する全頂点を探索する代わりに、活用する最短経路木の子だけを探索することで、隣接頂点へのアクセス回数を削減する。
詳細は後述するが、実施形態では、頂点vを根とする最短経路木T(v)を生成する際、頂点vに隣接する頂点を根とする最短経路木を活用する。仮に、頂点vに隣接する頂点の数が1つ、すなわち活用する最短経路木が1つであれば、本実施形態により頂点毎の隣接頂点へのアクセス回数は、a回からおおよそ1回に削減できることが期待できる。というのは、一般に頂点の数がnの木は、n−1個の辺を持ち、従って、1つの頂点当たりの探索すべき辺の数は、平均的には(n−1)/nで、おおよそ1となるからである。ただし、一般には隣接頂点は複数であり、従って活用する最短経路木も複数となるため、a回から1回に削減することはできないが、大幅な削減が期待できる。なお、説明は省略するが、よく知られているように、無向グラフではa=2|E|/|V|(第2実施形態で説明する有向グラフの場合は、各頂点から出る辺の数の平均をaとすると、a=|E|/|V|)である。
上述したように、頂点vを根とする最短経路木T(v)を生成する場合、活用する最短経路木は、頂点vに隣接する頂点をw,w,・・・,wとすると、T(w),T(w),・・・,T(w)である。以下では、これらの最短経路木を、「頂点vの隣接最短経路木」と呼ぶ。
頂点vに隣接する頂点の任意の一つを頂点wとすると、同心円状幅優先探索方式に従って最短経路木を生成していくと、T(w)には、T(v)よりも距離が1先の頂点にアクセスしている部分がある。本実施形態では、この部分を活用する。
図16に、頂点vを根とする最短経路木T(v)と、頂点vを中心とする同心円状の環を示す。ここで、頂点vから距離1にある頂点vを根とする最短経路木T(v)を生成する場合に、T(v)がどのように活用されるかを説明する。なお、頂点vに隣接する頂点には他にv、v、wがあるので、T(v)は、T(v)、T(v)、及びT(w)も活用して生成されるが、ここでは、T(v)をどのように活用するかという点に着目して説明する。
T(v)が深さ3まで生成されており、頂点vからの距離が3の環に含まれる頂点wからさらに最短経路木を拡張していく場合を考える。同心円状幅優先探索方式では、頂点wに隣接する頂点w,w,・・・,wの全てを探索しなければならない。しかし、T(v)では、頂点wの子は頂点wのみであるので、頂点wからT(v)を拡張する際は、頂点wのみを探索すればよい。すなわち、この例では隣接頂点へのアクセス回数が7回から1回に削減されることになる。
なお、上述のように頂点vから距離3の位置の頂点wからT(v)を拡張する際には、頂点vの隣接最短経路木を活用することによる隣接頂点へのアクセス回数の削減効果があるが、頂点vから距離1の位置では本実施形態の削減効果はない。頂点vからの距離1の位置の頂点vからT(v)を拡張する際にT(v)を利用しても、頂点vの子は、頂点vに隣接する全ての頂点v、w、w、wだからである。本実施形態によるアクセス回数の削減効果が現れるのは、頂点vからの距離が2以上の頂点からT(v)を拡張する場合、すなわちkが3以上の場合である。
以下、各実施形態について詳細に説明する。なお、各実施形態は、上述した同心円状幅優先探索方式を基礎とするため、主に、同心円状幅優先探索方式と異なる点について説明し、同心円状幅優先探索方式と同様の部分については、詳細な説明を省略する。また、第1実施形態の説明は、同心円状幅優先探索方式の説明と同様、連結な無向グラフを前提とする。ただし、第2実施形態で示す改良を施すことで、非連結グラフに適用できるようにすることは容易である。
<第1実施形態>
図17に示すように、第1実施形態に係る生成装置10は、初期化部12と生成部14とを含む。初期化部12は、グラフに含まれる各頂点及び各辺の情報に基づいて、各頂点の頂点オブジェクトを初期化すると共に、深さ0までの最短経路木を表すt−頂点オブジェクトを生成する。生成部14は、深さ1、深さ2、・・・と順次最短経路木を拡張し、頂点オブジェクト及びt−頂点オブジェクトを生成又は更新する。初期化部12及び生成部14が最短経路木を生成する際、同心円状幅優先探索方式の場合と異なり、上述したように、既に作成されている隣接最短経路木を活用する。
ここで、初期化部12及び生成部14により生成又は更新されるt−頂点オブジェクトについて、同心円状幅優先探索方式におけるt−頂点オブジェクト101と異なる点を説明する。なお、頂点オブジェクトについては、同心円状幅優先探索方式における頂点オブジェクト100と同様である。本実施形態におけるt−頂点オブジェクトには、属性originalが加えられる。originalには、t−頂点オブジェクトに対応する、活用する隣接最短経路木におけるt−頂点オブジェクトが登録される。以下、より詳細に説明する。
図18に、頂点vを根とする最短経路木T(v)、及び頂点vに隣接する頂点wを根とする最短経路木T(w)を示す。図18において、T(v)の辺は実線で、T(w)の辺は破線で示している。T(v)を生成する際にT(w)を活用するとする。例えば、頂点xからさらにT(w)の辺を辿って、頂点yにアクセスし、頂点yに対応するt−頂点オブジェクトt_yを生成し、T(v)に加えることを考える。このとき、T(w)の頂点yに対応するt−頂点オブジェクトt_y’にアクセスしているはずである。このt_y’をt_yのoriginalとする。
生成装置10は、例えば図19に示すコンピュータ40で実現することができる。コンピュータ40はCPU41、一時記憶領域としてのメモリ42、及び不揮発性の記憶部43を備える。また、コンピュータ40は、入出力装置48が接続される入出力インターフェース(I/F)44を備える。また、コンピュータ40は、記録媒体49に対するデータの読み込み及び書き込みを制御するread/write(R/W)部45、及びインターネット等のネットワークに接続されるネットワークI/F46を備える。CPU41、メモリ42、記憶部43、入出力I/F44、R/W部45、及びネットワークI/F46は、バス47を介して互いに接続される。
記憶部43はHDD(Hard Disk Drive)、SSD(solid state drive)、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部43には、コンピュータ40を生成装置10として機能させるための生成プログラム50が記憶される。CPU41は、生成プログラム50を記憶部43から読み出してメモリ42に展開し、生成プログラム50が有するプロセスを順次実行する。
生成プログラム50は、初期化プロセス52と、生成プロセス54とを有する。CPU41は、初期化プロセス52を実行することで、図17に示す初期化部12として動作する。また、CPU41は、生成プロセス54を実行することで、図17に示す生成部14として動作する。これにより、生成プログラム50を実行したコンピュータ40が、生成装置10として機能することになる。
なお、生成プログラム50により実現される機能は、例えば半導体集積回路、より詳しくはASIC(Application Specific Integrated Circuit)等で実現することも可能である。
次に、第1実施形態に係る生成装置10の作用について説明する。なお、生成装置10で実行される最短経路木生成処理について、上述した同心円状幅優先探索方式における最短経路木の生成処理と同様な処理については、詳細な説明を省略する。あわせて、図21及び図25〜図30を参照して、第1実施形態における最短経路木生成処理に応じたデータ構造の変化を説明する。
まず、同心円状幅優先探索方式と同様に、図11に示すメイン処理から、最短経路木の生成処理を開始する。
図11のステップS10で、初期化部12が、G=(V,E)で表されるグラフGのデータを受け付ける。以下では、グラフGが図20に示すグラフ、すなわち、V=[v,v,v,v]、E=[v_v,v_v,v_v]の場合について説明する。初期化部12は、同心円状幅優先探索方式における初期化処理に加え、t_v.originalにNILを設定する。図21に、初期化終了時点、すなわち深さ0の最短経路木まで生成された段階の頂点オブジェクト及びt−頂点オブジェクトを示す。
60Aは頂点vの頂点オブジェクト、60Bは頂点vの頂点オブジェクト、60Cは頂点vの頂点オブジェクト、60Dは頂点vの頂点オブジェクトである。また、61Aはt_v11のt−頂点オブジェクト、61Bはt_v22のt−頂点オブジェクト、61Cはt_v33のt−頂点オブジェクト、61Dはt_v44のt−頂点オブジェクトである。なお、第1実施形態における頂点オブジェクトを区別なく説明する場合には、単に「頂点オブジェクト60」と表記し、t−頂点オブジェクトを区別なく説明する場合には、単に「t−頂点オブジェクト61」と表記する。
図21に示すように、t−頂点オブジェクト61に属性「original」が追加されている点が、図7に示す同心円状幅優先探索方式の場合と異なる。
同心円状幅優先探索方式とは、図11及び図12の処理は同じである。ただし、図12の頂点vを根とする深さkの最短経路木生成処理の内容が異なるため、以下図22〜図24を参照して、第1実施形態における頂点vを根とする深さkの最短経路木生成処理について説明する。なお、同心円状幅優先探索方式における頂点vを根とする深さkの最短経路木生成処理と同一の処理については、同一符号を付して詳細な説明を省略する。
図22のステップS600で、生成部14が、深さを示す変数kが1か否かを判定する。kが1の場合には、処理はステップS610へ移行し、図23に示す頂点vを根とする深さ1の最短経路木生成処理を実行した後、図12に示す深さkの処理に戻る。一方、kが1ではない場合、すなわち、kが2以上の場合には、処理はステップS620へ移行し、図24に示す頂点vを根とする深さ2以上の最短経路木生成処理を実行した後、図12に示す深さkの処理に戻る。
次に、図23のステップS611で、生成部14が、v.sptree_depthに1を設定すると共に、属性としてv.ring[1]を追加し、v.ring[1]に空のリスト[]を設定する。また、生成部14が、v.ring[0]に登録されているt−頂点をt_vに設定する。
なお、同心円状幅探索方式における頂点vを根とする深さkの最短経路木生成処理では、上記ステップS611に相当するステップS561の後に、v.ring[k−1]からt_wを抽出し、t_w.vertexから頂点wを取得する必要がある。しかし、k=1の場合、t_w=t_vであり、t_vに対応する頂点vもステップS54の処理で判明しているため、頂点wを取得する処理は不要である。
次に、ステップS612で、生成部14が、v.adj_verticesに、後段の処理が未処理の頂点が存在するか否かを判定する。未処理の頂点が存在する場合には、処理はステップS613へ移行し、未処理の頂点が存在しない場合には、頂点vを根とする深さ1の最短経路木生成処理を終了し、図22に戻る。
ステップS613では、生成部14が、v.adj_verticesに存在する未処理の頂点のうち、v.adj_verticesの先頭に一番近い頂点を抽出し、xに設定する。例えば、id=1の場合、頂点vの頂点オブジェクト60Aのv.adj_verticesに登録されている頂点オブジェクトvが抽出され、頂点vが頂点xに設定される。
次に、ステップS614で、生成部14が、頂点xに対応するt_xのt−頂点オブジェクト61を生成する。そして、生成部14が、t_x.vertexに「x」を登録し、t_x.childrenに空のリスト[]を設定し、t_x.parentに、t_vを登録し、t_x.originalにx.sptreeに登録されたt−頂点オブジェクトを登録する。また、生成部14は、t_v.childrenに登録されたリストの末尾に、t_xを追加する。また、生成部14は、v.sptree_closureに登録されたハッシュ表に、キーをx.id、値をt_xとするペアを追加する。また、生成部14は、v.ring[1]に登録されたリストの末尾に、t_xを追加する。
例えば、上記のid=1の例の場合、頂点xとして抽出された頂点vに対応するt_v12のt−頂点オブジェクト61E(図25参照)が生成される。そして、t_v12.vertexにvが登録され、t_v12.parentにt_v11が登録され、t_v12.originalにv.sptreeに登録されたt_v22が登録される。また、t_v11.childrenに登録されたリストの末尾に、t_v12が追加される。また、v.sptree_closureに登録されたハッシュ表に、ペア(2,t_v12)が追加され、v.ring[1]に登録されたリストの末尾に、t_v12が追加される。
これにより、図25に示すように、t−頂点オブジェクト61Eが生成され、頂点オブジェクト60Aおよびt−頂点オブジェクト61Aが更新される。なお、図25及び図26は、k=1についての深さkの処理が終了した段階での頂点オブジェクト60及びt−頂点オブジェクト61である。k=1についての深さkの処理で、t_v12のt−頂点オブジェクト61E、t_v21のt−頂点オブジェクト61F、t_v23のt−頂点オブジェクト61Gが生成される。さらに、t_v32のt−頂点オブジェクト61H、t_v34のt−頂点オブジェクト61I、t_v43のt−頂点オブジェクト61Jも生成される。
なお、k=1の場合、v.sptree_closureには、t_vしか登録されておらず、t_vに隣接する頂点は全て未登録であるので、v.sptree_closureにx.idが存在するか否かの判定は不要である。
次に、図24に示す頂点vを根とする深さ2以上の最短経路木生成処理のステップS561及びS562を経て、処理はステップS563へ移行する。ステップS563では、生成部14が、v.ring[k−1]に存在する未処理の頂点のうち、v.ring[k−1]に登録されたリストの先頭に一番近い頂点を抽出し、t_wに設定する。
次に、ステップS621で、生成部14が、t_wのt−頂点オブジェクト61のt_w.originalに登録されたt−頂点オブジェクトをt_w_originalに設定する。
次に、ステップS622で、生成部14が、t_w_original.childrenに、後段の処理が未処理のt−頂点が存在するか否かを判定する。未処理のt−頂点が存在する場合には、処理はステップS623へ移行し、未処理のt−頂点が存在しない場合には、処理はステップS562に戻る。
ステップS623では、生成部14が、t_w_original.childrenに存在する未処理のt−頂点のうち、t_w_original.childrenの先頭に一番近いt−頂点を抽出し、t_x_originalに設定する。同心円状幅優先探索方式では、頂点vを根とする最短経路木を拡張する際、生成済みの最短経路木の葉に相当する頂点に隣接する頂点を全て探索する。一方、本実施形態では、本ステップにおいて、頂点vに隣接する頂点を根とする最短経路木の子のみを探索する。
例えば、k=2、id=1の場合、v.ring[1]からt_wとしてt_v12が抽出される。そして、t_v12.originalからt_w_originalとしてt_v22が抽出される。さらに、t_v22.childrenの先頭からt_v21が抽出される。
次に、ステップS624で、生成部14が、t_x_original.vertexに登録されている頂点オブジェクトを頂点xに設定する。
次に、ステップS567で、生成部14が、v.sptree_closureに登録されたハッシュ表にx.idに登録されている頂点識別子をキーとするペアが登録されているか否かを判定する。登録されていない場合には、処理はステップS625へ移行し、登録されている場合には、処理はステップS622に戻る。
ステップS625では、生成部14が、頂点xに対応するt_xのt−頂点オブジェクト61を生成する。そして、生成部14が、t_x.vertexにxを登録し、t_x.childrenに空のリスト[]を設定し、t_x.parentに、t_wを登録し、t_x.originalにt_x_originalを登録する。また、生成部14は、t_w.childrenに登録されたリストの末尾に、t_xを追加する。また、生成部14は、v.sptree_closureに登録されたハッシュ表に、キーをx.id、値をt_xとするペアを追加する。また、生成部14は、v.ring[k]に登録されたリストの末尾に、t_xを追加する。
例えば、上記のk=2、id=1の例で、t_v22.childrenの2番目のt_v23がt_w_originalとして抽出されたとする。この場合、t_v23.vertexに登録されている頂点vが頂点xに設定される。v.sptree_closureに登録されたハッシュ表には、「3」をキーとするペアは登録されていないので、頂点vに対応するt_v13のt−頂点オブジェクト61K(図27参照)が生成される。
具体的には、t_v13.vertexにxであるvが登録され、t_v13.childrenに空のリスト[]が設定され、t_v13.parentにt_wであるt_v12が登録され、t_v13.originalにt_v23が登録される。また、t_v12.childrenに登録されたリストの末尾に、t_v13が追加される。そして、v.sptree_closureに登録されたハッシュ表にペア(3,t_v13)が追加され、v.ring[2]に登録されたリストの末尾に、t_v13が追加される。
図27及び図28は、k=2についての深さkの処理が終了した段階での頂点オブジェクト60及びt−頂点オブジェクト61である。k=2についての深さkの処理により、t_v13のt−頂点オブジェクト61K、t_v24のt−頂点オブジェクト61L、t_v31のt−頂点オブジェクト61M、t_v42のt−頂点オブジェクト61Nが生成される。また、図29及び図30は、k=3についての深さkの処理が終了した段階での頂点オブジェクト60及びt−頂点オブジェクト61である。k=3についての深さkの処理により、t_v14のt−頂点オブジェクト61O、t_v41のt−頂点オブジェクト61Pが生成される。
第1実施形態による隣接頂点へのアクセス回数の削減効果は、k=3以上の最短経路木を生成する際に表れる。図20のグラフについて、頂点vを根とする深さ3の最短経路木を生成する場合を例に説明する。すなわち、k=3、id=1の場合である。この場合、v.ring[2]にt_v13が登録されているので、t_v13をさらに先に延ばしていくことになる。その際、同心円状幅優先探索方式では、t_v13に対応する頂点vの隣接頂点、すなわち、v.adj_verticesに登録されている頂点v、vを探索する。すなわち、2つの頂点にアクセスすることになる。
一方、第1実施形態では、t_v13から先に延ばして次のt−頂点を探索する際、既に生成されている最短経路木を活用する。ここで、t_v13.originalに登録されているt_v23は、t_v13がv.ring[2]に追加されたk=2の段階で、既に生成済みの最短経路木に含まれるt−頂点であり、かつt_v13と同一の頂点vに対応するt−頂点である。従って、t_v13の次のt−頂点を、t_v23から先に延びた次のt−頂点に絞り込むことができる。そこで、t_v23の子のみ、すなわち、t_v23.childrenに登録されているt_v24のみを探索する。これにより、この例では、同心円状幅優先探索では2回必要な隣接頂点へのアクセス回数を1回に削減することができる。
以上説明したように、第1実施形態に係る生成装置によれば、グラフに含まれる各頂点を根とする最短経路木を深さ方向に拡張しながら生成する際に、隣接する全ての頂点を探索するのではなく、既に生成済みの最短経路木の子のみを探索する。これにより、隣接する全ての頂点を探索する場合に生じる処理の重複や、冗長な経路についての探索を排除し、最短経路木生成のための計算量を削減することができる。
<第2実施形態>
次に、第2実施形態について説明する。なお、第2実施形態において、第1実施形態と同様の部分については、詳細な説明を省略する。
第1実施形態では、重みなし無向グラフを対象とする場合について説明したが、第2実施形態では、重みなし有向グラフ、すなわち頂点間の辺に向きがあるグラフを対象とする場合について説明する。有向グラフにおいても、2頂点間の最短経路を求めることは、グラフに対するデータ分析として重要である。
例えば、Twitter(登録商標)のように、一方のユーザが他方のユーザをフォローする形式でユーザ間のつながりが形成されるSNSにおける人間関係のネットワーク的データは、有向グラフにより表現することができる。このような有向グラフにおいて、各ユーザに対応する頂点毎に、距離d以内の最短経路を求めることで、ユーザ毎にフォロー関係による結びつきの強い人を同定することができる。
また、例えば、ルービックキューブ(登録商標)は通常右向きにも、左向きにも回転できるが、ここでは右向きにしか回転してはいけないという規則を付け加えることにする。この場合、ルービックキューブ(登録商標)の各局面を頂点とし、ある局面から右回転で別の局面に遷移する状態を、ある局面に対応する頂点から、別の局面に対応する頂点へ向かう辺で結んだ有向グラフで、局面間の遷移の状態を表現することができる。この有向グラフにおいて、ある局面に対応する頂点から、最終局面(全ての面が1色のみの状態)に対応する頂点までの最短経路は、最適(最小手数の)解を示すことになる。
また、有向グラフでは、頂点間を結ぶ辺に向きがあることから、無向グラフの場合と「隣接」の定義が異なる。有向グラフでは、図31に示すように、1つの辺eで頂点vから 頂点wへ結ばれている場合、頂点wは頂点vから隣接している(adjacent)、又は、頂点vは頂点wへ隣接しているという。また、この辺eは、頂点vから出る、頂点wに入るという。
上記の隣接の定義に従い、有向グラフでは、頂点の列v,v,・・・,vにおいて、任意のi(1≦i≦n)に対して、頂点vが頂点vi−1から隣接している場合、この頂点の列を経路(パス)と呼ぶ。また、有向グラフにおける頂点vの隣接頂点リストは、頂点vから隣接する頂点からなるリストをいう。また、頂点vから出る辺の数を頂点vの出次数と呼ぶ。すなわち、頂点vの出次数は、頂点vの隣接頂点リストに含まれる頂点の個数である。同様に、頂点vに入る辺の数を頂点vの入次数と呼ぶ。
また、第2実施形態では、有向グラフを無向グラフと見た場合、すなわち、辺の向きに関係なく見た場合に、部分グラフ内の任意の2頂点について、一方から他方への経路がある場合、その部分グラフは連結であるという。例えば、図31に示す有向グラフの場合、「無向グラフと見て連結」、又は単に「連結」であるという。一方、図32に示すように、無向グラフとして見た場合にグラフが連結でない場合、「無向グラフと見て非連結」、又は単に「非連結」であるという。
また、第2実施形態では、部分グラフ内のある頂点vから、その部分グラフ内の任意の頂点への経路が存在する場合、部分グラフは「頂点vから到達可能である」という。図31に示す有向グラフは、頂点vから他の全ての頂点へ到達可能な有向グラフの例である。なお、頂点wから頂点vへは隣接していないため、頂点wからは到達可能ではない。他の頂点w、w、wについても同様である。また、図33は、どの頂点からも到達可能ではない有向グラフの例である。
また、第2実施形態では、ある頂点vから到達可能で、そのグラフを無向グラフとして見た場合に閉路を含まない部分グラフを「木」と呼ぶ。また、第2実施形態では、「最短経路木」は、ある頂点vから到達可能な頂点v以外の全ての頂点への最短経路を表現する木である。なお、無向グラフを前提とした場合における最短経路木については、頂点vから全ての頂点への最短経路を表現する木と定義した。しかし、ここで説明する有向グラフを対象とする第2実施形態は、連結でないグラフにも適用可能である。そこで、上記のように「最短経路木はある頂点vから“到達可能な”頂点v以外の全ての頂点への最短経路を表現する木」と定義している。すなわち、無向グラフを前提とした場合の最短経路木の定義にはない“到達可能な”が加わっている。なお、無向グラフに関する第1実施形態を有向グラフと同様に、非連結なグラフに適用できるよう修正することは容易である。
図17に示すように、第2実施形態に係る生成装置210は、初期化部212と生成部214とを含む。初期化部212及び生成部214は、有向グラフを対象とする点、及び最短経路木生成処理の終了判定の方法が異なる点を除いて、第1実施形態における初期化部12及び生成部14と同様である。
生成装置210は、例えば図19に示すコンピュータ40で実現することができる。コンピュータ40の記憶部43には、コンピュータ40を生成装置210として機能させるための生成プログラム250が記憶される。CPU41は、生成プログラム250を記憶部43から読み出してメモリ42に展開し、生成プログラム250が有するプロセスを順次実行する。
生成プログラム250は、初期化プロセス252と、生成プロセス254とを有する。CPU41は、初期化プロセス252を実行することで、図17に示す初期化部212として動作する。また、CPU41は、生成プロセス254を実行することで、図17に示す生成部214として動作する。これにより、生成プログラム250を実行したコンピュータ40が、生成装置210として機能することになる。
なお、生成プログラム250により実現される機能は、例えば半導体集積回路、より詳しくはASIC等で実現することも可能である。
次に、第2実施形態に係る生成装置210の作用について説明する。なお、生成装置210で実行される最短経路木生成処理について、同心円状幅優先探索方式による最短経路木生成処理及び第1実施形態における最短経路木生成処理と同様な処理については、同一符号を付して、詳細な説明を省略する。
図34に示すメイン処理のステップS210で、初期化部212が、G=(V,E)で表されるグラフGのデータを受け付ける。以下では、グラフGが図35に示すグラフ、すなわち、V=[v,v,v,v]、E=[v→v,v→v,v→v,v→v]の場合について説明する。なお、v→vは、頂点vから出て頂点vに入る辺を表す。初期化部212は、第1実施形態における最短経路木生成処理のメイン処理のステップS10と同様の初期化処理を実行する。なお、第2実施形態では、有向グラフを対象とするため、頂点vの隣接頂点リストv.adj_verticesには、頂点vから隣接する頂点、すなわち、頂点vから出た辺が入る頂点が登録される。図36に、初期化終了時点、すなわち深さ0の最短経路木まで生成された段階の頂点オブジェクト及びt−頂点オブジェクトを示す。
260Aは頂点vの頂点オブジェクト、260Bは頂点vの頂点オブジェクト、260Cは頂点vの頂点オブジェクト、260Dは頂点vの頂点オブジェクトである。また、261Aはt_v11のt−頂点オブジェクト、261Bはt_v22のt−頂点オブジェクト、261Cはt_v33のt−頂点オブジェクト、261Dはt_v44のt−頂点オブジェクトである。
次に、ステップS211で、その頂点を根とする最短経路木の生成処理が未完の頂点を管理するためのリストUf_Verticesに、配列Vertex[]に含まれる全ての頂点を追加する。次に、ステップS220で、生成部214が、最短経路木の深さを示す変数kに0を設定する。次に、ステップS30で、生成部214が、変数kを1インクリメントし、次に、ステップS40で、生成部214が、変数kが、最短経路木を生成する深さとして予め設定された値d以下か否かを判定する。変数kがd以下の場合には、処理はステップS250へ移行する。
なお、全頂点の各々から到達可能な全頂点への最短経路を求めたい場合は、第1実施形態と同様に、d=|V|−1とすればよい。d=|V|−1に設定しても、全ての頂点が直線状に接続されたグラフ以外は、リストUf_Verticesが[](空リスト)になれば、変数kが|V|−1に達する前に最短経路木の生成は終了するため、効率的にも問題ない。
ステップS250では、生成部214が、図37に示す深さkの処理を実行する。
図37のステップS251で、生成部214が、頂点vを根とする最短経路木の生成が完了した頂点を管理するためのリストF_Verticesに空のリスト[]を設定する。
次に、ステップS252で、生成部214が、リストUf_Verticesに、後段の処理が未処理の頂点が存在するか否かを判定する。未処理の頂点が存在する場合には、処理はステップS253へ移行する。
ステップS253では、生成部214が、リストUf_Verticesに存在する未処理の頂点の中から、Uf_Verticesの一番先頭に近い頂点を抽出し、処理対象の頂点vに設定する。次に、ステップS254で、生成部214が、図22に示す頂点vを根とする深さkの最短経路木生成処理を実行する。なお、第2実施形態における頂点vを根とする深さkの最短経路木生成処理では、ステップS610の頂点vを根とする深さ1の最短経路木生成処理、及びステップS620の頂点vを根とする深さ2以上の最短経路木生成処理の各々が第1実施形態と異なる。
まず、図38を参照して、第2実施形態における頂点vを根とする深さ1の最短経路木生成処理について説明する。
ステップS2611で、生成部214が、v.ring[0]に登録されているt−頂点をt_vに設定する。次に、ステップS612で、生成部214が、v.adj_verticesに、後段の処理が未処理の頂点が存在するか否かを判定する。未処理の頂点が存在する場合には、処理はステップS2612へ移行する。
ステップS2612では、生成部214が、v.sptree_depthが0か否かを判定する。v.sptree_depthが0の場合には、処理はステップS2613へ移行し、v.sptree_depthが0ではない場合には、処理はステップS613へ移行する。
ステップS2613では、生成部214が、v.sptree_depthに1を設定すると共に、属性としてv.ring[1]を追加し、v.ring[1]に空のリスト[]を設定する。
次に、ステップS613で、生成部214が、v.adj_verticesに存在する未処理の頂点のうち、v.adj_verticesの先頭に一番近い頂点を抽出し、頂点xに設定する。次に、ステップS614で、生成部214が、第1実施形態と同様に、頂点xに対応するt−頂点オブジェクトt_xを生成すると共に、付随する処理を行ない、処理はステップS612に戻る。ステップS612で、未処理の頂点が存在しないと判定された場合には、頂点vを根とする深さ1の最短経路木生成処理を終了し、図37に示す深さkの処理に戻る。
次に、ステップS255で、生成部214が、上記ステップS254で、頂点vを根とする最短経路木が完成したか否かを判定する。具体的には、生成部214は、上記ステップS254の処理の前後で、v.sptree_depthが変化していない場合、又は、v.sptree_closureに登録された頂点の数が|V|の場合に肯定判定する。ステップS255が肯定判定の場合には、処理はステップS256へ移行し、生成部214が、頂点vをリストF_Verticesに追加する。ステップS255が否定判定の場合には、処理はステップS252に戻る。
図39及び図40に、頂点vを根とする深さ1の最短経路木生成処理を終了した段階での頂点オブジェクト260及びt−頂点オブジェクト261を示す。頂点vがvの場合には、上記ステップS254の処理の前後で、v.sptree_depthが0から変化していないため、上記ステップS255で肯定判定され、上記ステップS256で、頂点vがリストF_Verticesに追加される。
上記ステップS252で、リストUf_Verticesに、後段の処理が未処理の頂点が存在しないと判定された場合には、処理はステップS257へ移行する。ステップS257では、生成部214が、リストUf_Verticesに登録されている頂点から、リストF_Verticesに登録されている頂点を除く。
次に、ステップS258で、生成部214が、リストUf_Verticesが空になったか否かを判定する。リストUf_Verticesが空になった場合には、全ての頂点について、各頂点を根とする最短経路木の生成が完了したことを表しているため、最短経路木生成処理を終了する。一方、リストUf_Verticesに未だ頂点が存在している場合には、処理は図34に示すメイン処理のステップS30へ移行する。
次に、図41を参照して、図22のステップS620で実行される頂点vを根とする深さ2以上の最短経路木生成処理について説明する。
第1実施形態における頂点vを根とする深さ2以上の最短経路木生成処理と同様のステップS562、S563、S621〜S624の処理を経て、ステップS567で肯定判定されると、処理はステップS2621へ移行する。
ステップS2621では、生成部214が、v.sptree_depthがk−1か否かを判定する。v.sptree_depthがk−1の場合には、処理はステップS561へ移行し、v.sptree_depthがk−1ではない場合には、処理はステップS625へ移行する。
ステップS561では、生成部214が、v.sptree_depthにkを設定すると共に、属性としてv.ring[k]を追加し、v.ring[k]に空のリスト[]を設定する。
以下、第1実施形態と同様に、ステップS625及びS569の処理が実行され、ステップS562で否定判定されると、処理は図37に示す深さkの処理に戻る。
図42及び図43に、k=2についての深さkの処理が終了した段階での頂点オブジェクト及びt−頂点オブジェクトを示す。k=1についての深さkの処理が終了した段階(図39及び図40)から、t_v13のt−頂点オブジェクト261K、t_v24のt−頂点オブジェクト261L、及びt_v13のt−頂点オブジェクト261Kが生成されている。また、図44及び図45に、k=3についての深さkの処理が終了した段階での頂点オブジェクト及びt−頂点オブジェクトを示す。k=2についての深さkの処理が終了した段階(図42及び図43)から、t_v14のt−頂点オブジェクト261Oが生成されている。
k=3、id=1の場合、v.ring[2]にt_v13が登録されているので、t_v13をさらに先に延ばしていくことになる。その際、同心円状幅優先探索方式では、t_v13に対応する頂点vの隣接頂点(v、v)を探索することになる。一方、第2実施形態では、t_v13から先に延ばして次のt−頂点を探索する際、第1実施形態の場合と同様に、既に生成されている最短経路木を活用するため、隣接頂点へのアクセス回数を削減することができる。
以上説明したように、第2実施形態に係る生成装置によれば、有向グラフに対しても、第1実施形態と同様に、本発明を適用して、同様の効果を得ることができる。なお、無向グラフにおける隣接する頂点間の辺は、一方の頂点から出て他方の頂点へ入る辺であると共に、他方の頂点から出て一方の頂点へ入る辺であると捉えることができる。すなわち、無向グラフは、両方向へのリンクを持つ有向グラフであると捉えることができる。従って、無向グラフを対象とする第1実施形態は、有向グラフを対象とする第2実施形態の特別な場合であるといえる。
なお、第1実施形態に比べ、第2実施形態は改良が施されている。例えば、前述の非連結グラフへの適用や、Uf_Verticesリストなどを使うことによる不要な処理の削減である。これらのことは上記のことから、第1実施形態にも容易に適用可能である。
また、第1及び第2実施形態は、単純で分かり易い幅優先探索方式を利用した上述の同心円状幅優先探索方式を基礎としており、その分かり易さ及び単純性を引き継いでいる。
以下に、第1実施形態により最短経路木を生成した際の計算量を、グラフの形状毎に示す。なお、下記の6)を除いて計算量は実験的に求めたものであり、したがって、最大の計算量ではなく、平均計算量というべき計算量である。
1)完全グラフ O(|V|
2)完全二部グラフ O(|V|
3)2次元格子 O(|V|
4)超立方体 O(|V|
5)ランダムグラフ O(|V|2.25〜2.3
6)各部が|V|/4個の頂点からなる完全四部グラフ O(|V|
ランダムグラフでは、辺の数を|V|から|V|/2まで変化させて、すなわちO(|E|)をO(|V|)からO(|V|)まで変化させて測定した。上述のように、ここでの計算量は平均計算量というべきものであるため、従来技術との単純な比較は困難であるが、計算量の削減効果は示されている。6)では、O(|V|)と計算量を要しているが、このような形態のグラフは、道路網などの通常のグラフでは現れにくい形態である。
第2実施形態のように、有向グラフを対象とした場合でも、第1実施形態の場合と同様、又はそれ以上の計算量削減効果を得ることができると考えられる。なぜなら、上述したように、無向グラフは、両方向へのリンクを持つ有向グラフと捉えることができるため、有向グラフを対象とした場合の計算量は、無向グラフを対象とした場合の計算量以下となることが推測されるからである。
なお、上記各実施形態では、生成プログラム50、250が記憶部43に予め記憶(インストール)されている態様を説明したが、CD−ROMやDVD−ROM等の記憶媒体に記録された形態で提供することも可能である。
以上の各実施形態に関し、更に以下の付記を開示する。
(付記1)
コンピュータに、
複数の頂点と頂点間を結ぶ辺とで表されたグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する
ことを含む処理を実行させる生成方法。
(付記2)
前記第2の最短経路木に含まれる頂点の子を探索することにより生成された前記第1の最短経路木に含まれる頂点に、前記第2の最短経路木に含まれる頂点の子を示す属性を付与し、
前記属性が付与された頂点が前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点となった際に、前記子に相当する頂点を示す属性が示す頂点を、前記第2の最短経路木に含まれる頂点とする
付記1記載の生成方法。
(付記3)
前記グラフが重みなし有向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点から出た辺が入る頂点とする付記1又は付記2記載の生成方法。
(付記4)
前記グラフが重みなし無向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点と辺で結ばれた頂点とする付記1又は付記2記載の生成方法。
(付記5)
頂点についての属性を表す第1のオブジェクトと、最短経路木に含まれる頂点としての属性を表す第2のオブジェクトとを対応付けて管理する付記1〜付記3のいずれか1項記載の生成方法。
(付記6)
前記第1のオブジェクトは、属性として、頂点の識別子、前記識別子が示す頂点に隣接する頂点、前記識別子が示す頂点を根とする生成済みの最短経路木の深さ、対応する第2のオブジェクト、前記生成済みの最短経路木に含まれる頂点、及び前記識別子が示す頂点からの距離毎の前記生成済みの最短経路木に含まれる頂点を含み、
前記第2のオブジェクトは、属性として、対応する頂点、最短経路木における親及び子、並びに前記第2の最短経路木に含まれる頂点の子を示す属性を含む
付記5記載の生成方法。
(付記7)
複数の頂点と頂点間を結ぶ辺とで表されたグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する生成部を含む生成装置。
(付記8)
前記生成部は、前記第2の最短経路木に含まれる頂点の子を探索することにより生成された前記第1の最短経路木に含まれる頂点に、前記第2の最短経路木に含まれる頂点の子を示す属性を付与し、前記属性が付与された頂点が前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点となった際に、前記子に相当する頂点を示す属性が示す頂点を、前記第2の最短経路木に含まれる頂点とする付記7記載の生成装置。
(付記9)
前記グラフが重みなし有向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点から出た辺が入る頂点とする付記7又は付記8記載の生成装置。
(付記10)
前記グラフが重みなし無向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点と辺で結ばれた頂点とする付記7又は付記8記載の生成装置。
(付記11)
前記生成部は、頂点についての属性を表す第1のオブジェクトと、最短経路木に含まれる頂点としての属性を表す第2のオブジェクトとを対応付けて管理する付記7〜付記10のいずれか1項記載の生成装置。
(付記12)
前記第1のオブジェクトは、属性として、頂点の識別子、前記識別子が示す頂点に隣接する頂点、前記識別子が示す頂点を根とする生成済みの最短経路木の深さ、対応する第2のオブジェクト、前記生成済みの最短経路木に含まれる頂点、及び前記識別子が示す頂点からの距離毎の前記生成済みの最短経路木に含まれる頂点を含み、
前記第2のオブジェクトは、属性として、対応する頂点、最短経路木における親及び子、並びに前記第2の最短経路木に含まれる頂点の子を示す属性を含む
付記11記載の生成装置。
(付記13)
コンピュータに、
複数の頂点と頂点間を結ぶ辺とで表されたグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する
ことを含む処理を実行させるための生成プログラム。
(付記14)
前記第2の最短経路木に含まれる頂点の子を探索することにより生成された前記第1の最短経路木に含まれる頂点に、前記第2の最短経路木に含まれる頂点の子を示す属性を付与し、
前記属性が付与された頂点が前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点となった際に、前記子に相当する頂点を示す属性が示す頂点を、前記第2の最短経路木に含まれる頂点とする
付記13記載の生成プログラム。
(付記15)
前記グラフが重みなし有向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点から出た辺が入る頂点とする付記13又は付記14記載の生成プログラム。
(付記16)
前記グラフが重みなし無向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点と辺で結ばれた頂点とする付記13又は付記14記載の生成プログラム。
(付記17)
頂点についての属性を表す第1のオブジェクトと、最短経路木に含まれる頂点としての属性を表す第2のオブジェクトとを対応付けて管理する付記13〜付記16のいずれか1項記載の生成プログラム。
(付記18)
前記第1のオブジェクトは、属性として、頂点の識別子、前記識別子が示す頂点に隣接する頂点、前記識別子が示す頂点を根とする生成済みの最短経路木の深さ、対応する第2のオブジェクト、前記生成済みの最短経路木に含まれる頂点、及び前記識別子が示す頂点からの距離毎の前記生成済みの最短経路木に含まれる頂点を含み、
前記第2のオブジェクトは、属性として、対応する頂点、最短経路木における親及び子、並びに前記第2の最短経路木に含まれる頂点の子を示す属性を含む
付記17記載の生成プログラム。
10、210 生成装置
12、212 初期化部
14、214 生成部
40 コンピュータ
41 CPU
42 メモリ
43 記憶部
50、250 生成プログラム
60、260 頂点オブジェクト
61、261 t−頂点オブジェクト

Claims (6)

  1. コンピュータに、
    複数の頂点と頂点間を結ぶ辺とで表された重みなしグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する
    ことを含む処理を実行させる生成方法。
  2. 前記第2の最短経路木に含まれる頂点の子を探索することにより生成された前記第1の最短経路木に含まれる頂点に、前記第2の最短経路木に含まれる頂点の子を示す属性を付与し、
    前記属性が付与された頂点が前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点となった際に、前記子に相当する頂点を示す属性が示す頂点を、前記第2の最短経路木に含まれる頂点とする
    請求項1記載の生成方法。
  3. 前記グラフが重みなし有向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点から出た辺が入る頂点とする請求項1又は請求項2記載の生成方法。
  4. 前記グラフが重みなし無向グラフの場合、前記第1の根に相当する頂点に隣接する頂点を、前記第1の根に相当する頂点と辺で結ばれた頂点とする請求項1又は請求項2記載の生成方法。
  5. 複数の頂点と頂点間を結ぶ辺とで表された重みなしグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する生成部を含む生成装置。
  6. コンピュータに、
    複数の頂点と頂点間を結ぶ辺とで表された重みなしグラフにおいて、各頂点を第1の根とし、前記第1の根からの距離がNの第1の最短経路木を生成する際、前記第1の根からの距離がN−1の前記第1の最短経路木に含まれる頂点であって、前記第1の根に相当する頂点に隣接する頂点を第2の根とする第2の最短経路木に含まれる頂点の子を探索する
    ことを含む処理を実行させるための生成プログラム。
JP2015094400A 2014-08-25 2015-05-01 生成方法、装置、及びプログラム Active JP6520362B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015094400A JP6520362B2 (ja) 2014-08-25 2015-05-01 生成方法、装置、及びプログラム
US14/823,380 US9892532B2 (en) 2014-08-25 2015-08-11 Apparatus and method for generating a shortest-path tree in a graph

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2014170430 2014-08-25
JP2014170430 2014-08-25
JP2015094400A JP6520362B2 (ja) 2014-08-25 2015-05-01 生成方法、装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP2016048540A JP2016048540A (ja) 2016-04-07
JP6520362B2 true JP6520362B2 (ja) 2019-05-29

Family

ID=55348722

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015094400A Active JP6520362B2 (ja) 2014-08-25 2015-05-01 生成方法、装置、及びプログラム

Country Status (2)

Country Link
US (1) US9892532B2 (ja)
JP (1) JP6520362B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9721039B2 (en) * 2011-12-16 2017-08-01 Palo Alto Research Center Incorporated Generating a relationship visualization for nonhomogeneous entities
CN107126702B (zh) * 2017-04-20 2020-08-25 杭州游聚信息技术有限公司 一种3d游戏随机地图的生成方法
CN107330205B (zh) * 2017-07-05 2020-07-07 大连民族大学 复杂推移式活动隔断系统轨道布局优化设备
CN107274034B (zh) * 2017-07-05 2020-04-14 大连民族大学 复杂推移式活动隔断系统轨道布局优化方法
JP6973150B2 (ja) * 2018-02-13 2021-11-24 富士通株式会社 最短経路行列生成プログラム、装置、及び方法
CN112836078B (zh) * 2021-02-20 2021-10-22 山东省计算中心(国家超级计算济南中心) 一种图上最短路径安全查询方法、装置、系统及存储介质
US11595294B1 (en) * 2022-03-03 2023-02-28 Eci Telecom Ltd. Satisfying demands in data communication networks

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4873517A (en) * 1988-06-23 1989-10-10 International Business Machines Corporation Method for selecting least weight end node to end node route in a data communications network
US6252856B1 (en) * 1996-12-03 2001-06-26 Nortel Networks Limited Method and apparatus for minimizing calculations required to construct multicast trees
US7327683B2 (en) * 2000-03-16 2008-02-05 Sri International Method and apparatus for disseminating topology information and for discovering new neighboring nodes
US7362709B1 (en) * 2001-11-02 2008-04-22 Arizona Board Of Regents Agile digital communication network with rapid rerouting
JP2003271659A (ja) 2002-03-15 2003-09-26 Fuji Xerox Co Ltd 接続関係表示装置
US8595223B2 (en) 2004-10-15 2013-11-26 Microsoft Corporation Method and apparatus for intranet searching
KR101159342B1 (ko) 2004-10-15 2012-06-25 마이크로소프트 코포레이션 인트라넷 검색을 위한 방법 및 장치
WO2008077420A1 (en) * 2006-12-22 2008-07-03 Telecom Italia S.P.A. Dynamic routing of optical signals in optical networks
US8948046B2 (en) * 2007-04-27 2015-02-03 Aerohive Networks, Inc. Routing method and system for a wireless network
US20090063211A1 (en) * 2007-08-30 2009-03-05 Camilo Yamauchi Campo Finding a Shortest Waste Credit Path for a Manufacturing Process
CN101457253B (zh) * 2008-12-12 2011-08-31 深圳华大基因研究院 一种测序序列纠错方法、系统及设备
US9444720B2 (en) * 2009-05-05 2016-09-13 Ciena Corporation Method and apparatus for multicast implementation in a routed ethernet mesh network
JP2011007713A (ja) * 2009-06-29 2011-01-13 Internatl Business Mach Corp <Ibm> 多点対間最短経路探索方法およびシステム
CN102341802B (zh) 2009-06-30 2014-05-28 国际商业机器公司 图的相似度计算系统和方法
JP5001996B2 (ja) * 2009-11-12 2012-08-15 日本電信電話株式会社 経路計算装置、経路計算方法およびプログラム
JP5618268B2 (ja) 2010-06-10 2014-11-05 日本電信電話株式会社 ネットワーク設計方法及びプログラム
US9185027B2 (en) * 2011-07-29 2015-11-10 Telefonaktiebolaget L M Ericsson (Publ) Method and apparatus for resilient routing of control traffic in a split-architecture system
JP5170481B2 (ja) 2011-08-25 2013-03-27 国立大学法人京都大学 関係性グラフデータベースシステム
US8788438B2 (en) * 2011-11-22 2014-07-22 Telefonaktiebolaget L M Ericsson (Publ) Method performed in a computer system for aiding the assessment of an influence of a user in or interacting with a communication system by applying social network analysis, SNA, functions, a computer system, computer program and computer program product
CN103546381B (zh) * 2012-07-12 2017-06-09 华为技术有限公司 基于内部网关协议创建双向组播分发树的方法、装置及系统
US9467365B2 (en) * 2013-02-14 2016-10-11 Cisco Technology, Inc. Mechanism and framework for finding optimal multicast tree roots without the knowledge of traffic sources and receivers for fabricpath and TRILL
EP3075190B1 (en) * 2013-11-26 2017-09-13 Telefonaktiebolaget LM Ericsson (publ) Distributed routing in wireless networks
US9057746B1 (en) * 2014-11-26 2015-06-16 Sense Labs, Inc. Determining information about devices in a building using different sets of features

Also Published As

Publication number Publication date
JP2016048540A (ja) 2016-04-07
US9892532B2 (en) 2018-02-13
US20160055660A1 (en) 2016-02-25

Similar Documents

Publication Publication Date Title
JP6520362B2 (ja) 生成方法、装置、及びプログラム
CN105741175B (zh) 一种对在线社交网络中账户进行关联的方法
CN105765576B (zh) 使用数据结构处理搜索查询
CN115130021A (zh) 用于提供位置信息的装置、系统和方法
TWI652586B (zh) 基於社交網路的群組查找方法和裝置
CN111966912B (zh) 基于知识图谱的推荐方法、装置、计算机设备及存储介质
WO2008016495A2 (en) Determination of graph connectivity metrics using bit-vectors
CN108122168B (zh) 社交活动网络中种子节点筛选方法和装置
US20180096047A1 (en) Detecting clusters and relationships in large data sets
WO2018026874A1 (en) Learned data filtering
CN103942308A (zh) 大规模社交网络社区的检测方法及装置
US20190056235A1 (en) Path querying method and device, an apparatus and non-volatile computer storage medium
Yuan et al. RSkNN: kNN search on road networks by incorporating social influence
Cao et al. KORS: Keyword-aware optimal route search system
EP3053311B1 (en) Systems and methods for distance approximation in graphs
CN114730618A (zh) 用于设计期望有机分子的有机合成途径的系统和方法
CN114357105A (zh) 地理预训练模型的预训练方法及模型微调方法
US9674083B2 (en) Path calculation order deciding method, program and calculating apparatus
CN109155008A (zh) 利用知识引擎的特征集增强
Gharajeh T*: a weighted double-heuristic search algorithm to find the shortest path
CN112507710B (zh) 估计差分隐私保护数据中分词频度的方法及装置
Gayathri et al. ex-FTCD: A novel mapreduce model for distributed multi source shortest path problem
CN112001649B (zh) 一种风险数据挖掘方法、装置以及设备
JP5555238B2 (ja) ベイジアンネットワーク構造学習のための情報処理装置及びプログラム
EP3157209A1 (en) Route search apparatus and route search method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190311

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190402

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190415

R150 Certificate of patent or registration of utility model

Ref document number: 6520362

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150