(57)【要約】【課題】動的なネットワークにおいて、索引の動的更新や、過去のネットワークに関するクエリへの回答を可能にする索引付けを行うことができるネットワーク管理装置、ネットワーク管理方法及びプログラムを提供する。【解決手段】ネットワーク管理装置１００は、頂点と、頂点間を結ぶエッジと、を含むネットワークを管理する。ネットワーク・索引記憶部１１０は、複数の頂点、各頂点について他の頂点との間の距離情報を保持するラベル、２つの頂点を端点とするエッジ、を保持する。索引更新部１２０は、新たなエッジが生成された場合、新たなエッジの両端の頂点から幅優先探索を実施することにより、少なくとも一部の頂点のラベルを更新する。【選択図】図１
2015184704.tif 000002
【特許請求の範囲】
【請求項１】
頂点と、前記頂点間を結ぶエッジと、を含むネットワークを管理するためのネットワーク管理装置であって、
複数の前記頂点と、
前記頂点それぞれについて、他の前記頂点との間の距離情報を保持するラベルと、
２つの前記頂点を端点とする前記エッジと、を保持するネットワーク・索引記憶部と、
新たな前記エッジが生成された場合、前記新たなエッジの両端の前記頂点から幅優先探索を実施することにより、少なくとも一部の前記頂点の前記ラベルを更新する索引更新部と、を含む
ネットワーク管理装置。
【請求項２】
前記索引更新部は、
前記幅優先探索により到達した前記頂点それぞれについて、前記新たなエッジにより、他の前記頂点との間に、従来の最短経路より短い新たな最短経路が形成されたか否かを判定し、
前記新たな最短経路が形成されている場合に、前記到達した頂点のラベルを更新する
請求項１記載のネットワーク管理装置。
【請求項３】
前記索引更新部は、
前記新たな最短経路が形成されていない場合に、前記到達した頂点で前記幅優先探索を中止する
請求項２記載のネットワーク管理装置。
【請求項４】
前記索引更新部は、
他の前記頂点との間の距離情報と、時刻情報と、を前記ラベルに追加することにより、前記ラベルを更新する
請求項１乃至３いずれか１項記載のネットワーク管理装置。
【請求項５】
頂点と、前記頂点間を結ぶエッジと、を含むネットワークを管理するためのネットワーク管理装置であって、
複数の頂点と、
前記頂点それぞれについて、他の前記頂点との間の距離情報と、時刻情報と、を保持するラベルと、
２つの前記頂点を端点とするエッジと、を保持するネットワーク・索引記憶部と、
２つの前記頂点と、前記時刻情報と、が与えられた場合に、前記時刻情報が示す時点の前記ネットワークにおける、前記２つの頂点間の最短距離を出力するクエリ処理部と、を含む
ネットワーク管理装置。
【請求項６】
頂点と、前記頂点間を結ぶエッジと、を含み、前記頂点にはそれぞれ他の前記頂点との間の距離情報を保持するラベルが定義されているネットワークを管理するためのネットワーク管理方法であって、
新たな前記エッジが生成された場合、前記新たなエッジの両端の前記頂点から幅優先探索を実施することにより、少なくとも一部の前記頂点の前記ラベルを更新する索引更新ステップを有する
ネットワーク管理方法。
【請求項７】
頂点と、前記頂点間を結ぶエッジと、を含み、前記頂点にはそれぞれ時刻情報及び他の前記頂点との間の距離情報を保持するラベルが定義されているネットワークを管理するためのネットワーク管理方法であって、
２つの前記頂点と、前記時刻情報と、が与えられた場合に、前記時刻情報が示す時点の前記ネットワークにおける、前記２つの頂点間の最短距離を出力するクエリ処理ステップを有する
ネットワーク管理方法。
【請求項８】
請求項６又は７いずれか１項記載の方法ををコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はネットワーク管理装置、ネットワーク管理方法及びプログラムに関し、特に動的なネットワークにおいて、索引の動的更新や、過去のネットワークに関するクエリへの回答を可能にする索引付け技術に関する。
【背景技術】
【０００２】
従来より、複数の頂点と頂点間を結ぶエッジ（枝）とから構成されるネットワークにおいて、各頂点に索引（インデックス）を付与することにより、種々のクエリに対する回答を効率よく求める手法が種々提案されている。
【０００３】
例えば、特許文献１及び特許文献２には、複数のデータ（頂点に相当）間にリンク（エッジに相当）が設定されたネットワークにおいて、各データに予め所定のインデックスを付与することにより、入力データに類似するデータを効率よく出力可能とした検索データ管理装置が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−０９０３５１号公報
【特許文献２】特開２０１１−０９０３５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、近年、ネットワーク内の任意の２頂点間の最短距離を要求するクエリに回答するための索引付け手法が注目されている。例えば、ソーシャルネットワーク上の２人のユーザの最短距離は、２人の親密さを示す指標と考えられる。また、１以上のリンク（エッジ）で結ばれた２つのウェブページ間の距離は、ウェブページ同士の関連性を示す指標となる。このような２つの情報間の距離を効率的に求めることができれば、様々なサービスの提供が可能となる。例えば、ソーシャルネットワークのユーザに対しては、そのユーザに関連があると推測される他のユーザやコンテンツを、頂点間の距離に基づいて推薦することができるであろう。また、あるウェブページに関連する他のウェブページを、頂点間の距離に基づいてランキングして提示することも可能であろう。これらを効率よく実現するためには、適切な索引をネットワークに付与することが必要である。
【０００６】
特に、例えばソーシャルネットワークやウェブページのような、現実世界のネットワークのほとんどは、動的に頂点やエッジが追加される。すなわち、時間の経過に従って新たな頂点やエッジが追加されてゆく、動的なネットワークである。そのため、ネットワークに対する索引付け手法もまた、このような動的なネットワークに対応した、効率性及び拡張性を有するものであることが求められる。
【０００７】
しかしながら、上記特許文献１及び特許文献２は、かかる課題に対応するものでない。すなわち、そもそも、クエリとして２点が与えられたときに、その２点間の最短距離を効率よく回答することに資するような索引付け手法を提示するものでない。
【０００８】
また、２点間の最短距離を求めるための索引付け手法として、従来より幾つかの手法が提案されてきた。しかしなら、かかる手法はいずれも静的なネットワークを対象とするものであった。すなわち、その手法は、動的に頂点やエッジが追加された場合、その変化を逐次、必要な範囲で索引に反映させるというものではなく、ネットワーク全体の索引付けをはじめからやり直すというものであった。このような索引の更新手法は、実行に非常に大きなコストを要するものであるため、動的ネットワークの変化に対応した動的な索引の更新を行うことは実質的に困難であった。
【０００９】
加えて、従来の索引付け手法はいずれも、現在すなわちクエリ発行時点のネットワークにおける２点間の最短距離を求めることはできても、過去の任意の時点のネットワークにおける２点間の最短距離を求めることはできなかった。これは、従来の索引及び索引付け手法は、動的な索引更新を念頭に置いておらず、そもそも時間の概念を織り込んでいないためである。
【００１０】
本発明は、このような問題点を解決するためになされたものであり、動的なネットワークにおいて、索引の動的更新や、過去のネットワークに関するクエリへの回答を可能にする索引付けを行うことができるネットワーク管理装置、ネットワーク管理方法及びプログラムを提供することを目的とする。
【００１１】
その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本発明に係るネットワーク管理装置は、頂点と、前記頂点間を結ぶエッジと、を含むネットワークを管理するためのネットワーク管理装置であって、複数の前記頂点と、前記頂点それぞれについて、他の前記頂点との間の距離情報を保持するラベルと、２つの前記頂点を端点とする前記エッジと、を保持するネットワーク・索引記憶部と、新たな前記エッジが生成された場合、前記新たなエッジの両端の前記頂点から幅優先探索を実施することにより、少なくとも一部の前記頂点の前記ラベルを更新する索引更新部と、を含むものである。
【００１３】
また、本発明に係るネットワーク管理方法は、頂点と、前記頂点間を結ぶエッジと、を含み、前記頂点にはそれぞれ他の前記頂点との間の距離情報を保持するラベルが定義されているネットワークを管理するためのネットワーク管理方法であって、新たな前記エッジが生成された場合、前記新たなエッジの両端の前記頂点から幅優先探索を実施することにより、少なくとも一部の前記頂点の前記ラベルを更新する索引更新ステップを有するものである。
【００１４】
これらの発明においては、索引更新部が、新たなエッジの追加により更新が必要になったラベルのみを更新するので、索引の更新処理の効率を大幅に向上させることができる。これにより、ネットワークの動的な変化に追従する、索引の動的な更新を実用化できる。
【００１５】
本発明に係る他のネットワーク管理装置は、頂点と、前記頂点間を結ぶエッジと、を含むネットワークを管理するためのネットワーク管理装置であって、複数の頂点と、前記頂点それぞれについて、他の前記頂点との間の距離情報と、時刻情報と、を保持するラベルと、２つの前記頂点を端点とするエッジと、を保持するネットワーク・索引記憶部と、２つの前記端点と、前記時刻情報と、が与えられた場合に、前記時刻情報が示す時点の前記ネットワークにおける、前記２つの端点間の最短距離を出力するクエリ処理部と、を含むものである。
【００１６】
本発明に係る他のネットワーク管理装置は、頂点と、前記頂点間を結ぶエッジと、を含むネットワークを管理するためのネットワーク管理装置であって、複数の頂点と、前記頂点それぞれについて、他の前記頂点との間の距離情報と、時刻情報と、を保持するラベルと、２つの前記頂点を端点とするエッジと、を保持するネットワーク・索引記憶部と、２つの前記端点が与えられた場合に、前記２つの端点間の最短距離が変化した時点を示す前記時刻情報を出力するクエリ処理部と、を含むものである。
【００１７】
また、本発明に係る他のネットワーク管理方法は、頂点と、前記頂点間を結ぶエッジと、を含み、前記頂点にはそれぞれ時刻情報及び他の前記頂点との間の距離情報を保持するラベルが定義されているネットワークを管理するためのネットワーク管理方法であって、２つの前記端点と、前記時刻情報と、が与えられた場合に、前記時刻情報が示す時点の前記ネットワークにおける、前記２つの端点間の最短距離を出力するクエリ処理ステップを有するものである。
【００１８】
本発明に係る他のネットワーク管理方法は、頂点と、前記頂点間を結ぶエッジと、を含み、前記頂点にはそれぞれ時刻情報及び他の前記頂点との間の距離情報を保持するラベルが定義されているネットワークを管理するためのネットワーク管理方法であって、２つの前記端点が与えられた場合に、前記２つの端点間の最短距離が変化した時点を示す前記時刻情報を出力するクエリ処理ステップを有するものである。
【００１９】
これらの発明においては、ネットワーク・索引記憶部１がラベル内に時刻情報を保持するので、クエリ処理部は、過去のある時点における２点間の最短距離クエリや、２点間の最短距離の変遷を示す変化点クエリに回答することができる。
【００２０】
また、本発明は、上記ネットワーク管理方法ををコンピュータに実行させるためのプログラムを含む。
【発明の効果】
【００２１】
本発明により、動的なネットワークにおいて、索引の動的更新や、過去のネットワークに関するクエリへの回答を可能にする索引付けを行うことができるネットワーク管理装置、ネットワーク管理方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施の形態１のネットワーク管理装置１００の構成を示すブロック図である。
【図２】本発明の実施の形態１のネットワーク管理装置１００の動作の概要を示す図である。
【図３】本発明の実施の形態１のネットワーク管理装置１００の動作を示すフローチャートである。
【図４】本発明の実施の形態１のネットワーク管理装置１００の動作の一例としてのアルゴリズムを示す図である。
【図５】本発明の実施の形態２のネットワーク管理装置１００の動作の一例としてのアルゴリズムを示す図である。
【図６】従来のネットワーク管理装置の動作の一例としてのアルゴリズムを示す図である。
【発明を実施するための形態】
【００２３】
はじめに、本発明の理解を容易にするため、従来の索引付け手法と、最短距離クエリの処理手法について概略を説明する。
【００２４】
（2-hop cover）
まず、従来より2-hop coverとして知られている、基本的な索引構造と、その索引を利用した最短距離クエリの処理手法について説明する。
【００２５】
2-hop coverにおいては、ネットワーク内の各頂点vに対応させて、ラベルL(v)を保持させる。このラベルL(v)は、(u,δuv)なる情報を複数含むことができる。ここでuは他の頂点のＩＤ、δuvはvからuまでの距離を表す。すなわち、各頂点vに、他の頂点uと、uからvまでの距離と、の情報を持たせるのである。ここで距離とは、２つの頂点間のホップ数をいう。つまり、ある頂点から他の頂点に到達するために経由することが必要なエッジの数をいう。
【００２６】
なお、ラベルL(v)を構成する個々の(u,δuv)を、以下、ラベルエントリと呼ぶ。また、ネットワーク内のすべてのラベルの集合を、索引（インデックス）と呼ぶ。
【００２７】
かかる索引を付与されたネットワークにおいて、最短距離クエリに対する回答を求めるためには、以下の計算を実行すればよい。
QUERY(s,t,L)=min{δvs+δvt|(v,δvs)∈L(s),(v,δvt)∈L(t)}
すなわち、頂点sに対応するラベルL(s)のラベルエントリとして、頂点vとsとの距離δvsが保持されているとする。また、頂点tに対応するラベルL(t)のラベルエントリとして、頂点vとtとの距離δvtが保持されているとする。このとき、s,t間の距離は、δvs+δvtで表される。つまり、s,t間の距離は、L(s),L(t)がラベルエントリとして共通に保持しているvを媒介として、s,v間の距離とv,t間の距離の和として表される。このようにして求められる幾つかのs,t間の距離のうち、最短距離をクエリの回答とする。なお、L(s)とL(t)が共通に保持している頂点がひとつもない場合、QUERY(s,t,L)=∞とする。
【００２８】
この手法によれば、ラベルエントリを頂点によりソートした形で保持しているという前提において、例えばマージソートのようなアルゴリズムを利用することにより、QUERY(s,t,L)を時間計算量O(|L(s)|+|L(t)|)で処理することが可能である。
【００２９】
（naive landmark labeling）
naive landmark labelingは、2-hop coverのラベルを各頂点に付与するための具体的な手法の１つである。naive landmark labelingでは、ネットワーク内の全ての頂点から幅優先探索（ＢＦＳ）を行い、到達した各頂点に対して順次ラベルを付与していく。以下、naive landmark labelingによる索引付けの過程を具体的に説明する。
【００３０】
初期状態として、索引L0は空であるものとする。すなわち、どの頂点についてもラベルの内容は空であるものとする。
【００３１】
naive landmark labelingを実行する情報処理装置は、ネットワーク内の全ての頂点v1,v2,...,vnに順に着目していく。ある頂点に着目したならば、その頂点を基点としてＢＦＳを開始し、到達した頂点にはラベルを付与していく。k番目の頂点vkを基点としてＢＦＳを開始し、到達した頂点においてラベルを付与する際の処理は以下のとおりである。
【００３２】
vkからＢＦＳにより到達可能な全ての頂点uに対し、ラベルLk(u)をLk-1(u)∪{(vk,d(vk,u))}と設定する。すなわち、既にuにラベルが付与されているならばそれにラベルエントリを追加する形で、vkからuまでの距離を示すラベルエントリ(vk,d(vk,u))を付与する。なお、vkからＢＦＳにより到達不可能な頂点uについては、ラベルの更新を行わない。すなわち、Lk(u)=Lk-1(u)となる。vkから到達可能な全ての頂点を網羅したならば、vkを基点とするＢＦＳは終了する。続いて、次の頂点vk+1からのＢＦＳを実行する。
【００３３】
ネットワーク内の全ての頂点からのＢＦＳが終了すると、ネットワークに対する索引付けは完了となる。つまり、このネットワークにおいては、任意の頂点s,t間の距離QUERY(s,t,Ln)=d(s,t)を求めることができることになる。しかしながら、naive landmark labelingは必ずしも効率的とは言い難い索引付け手法である。具体的には、ネットワーク全体に索引付けを行うために要する時間計算量はθ(mn)、必要な空間計算量はθ(n2)となる。ここでn,mはそれぞれ頂点の数|V|、エッジの数|E|を表す。これらの値は、頂点やエッジの数が大きくなるほど増大する。よって、naive landmark labelingは、動的ネットワークの管理には最適とはいえない索引付け手法である。
【００３４】
（pruned landmark labeling）
pruned landmark labelingは、上述のnaive landmark labelingを基礎としつつも、枝刈りと呼ばれる手法を取り入れることにより、索引を作成する処理の効率向上を図った手法である。以下、pruned landmark labelingによる索引付け過程を具体的に説明する。
【００３５】
pruned landmark labelingを実行する情報処理装置は、ネットワーク内の全ての頂点v1,v2,...,vnに順に着目していく。ある頂点に着目したならば、その頂点を基点として枝刈り処理を含むＢＦＳ（以下、枝刈りＢＦＳ）を開始し、到達した頂点にはラベルを付与していく。k番目の頂点vkを基点として枝刈りＢＦＳを開始し、到達した頂点においてラベルを更新する際の処理は以下のとおりである。
【００３６】
vkからＢＦＳで到達した頂点uについて、以下の処理を行う。まず、vk,u間の最短距離QUERY(vk,u,L'k-l)を計算する。このクエリの処理に使用される索引は、k-1番目までの枝刈りＢＦＳにより作成された索引L'k-1である。計算の結果、QUERY(vk,u,L'k-l)≦δである場合、頂点uを枝刈りする。すなわち、頂点uに対し新たなラベルエントリを付加せず、ここでＢＦＳを停止する。つまり、L'k(u)=L'k-1(u)となる。計算結果が上記以外である場合は、naive landmark labelingと同様に、頂点uに対しラベルエントリL'k(u)=L'k-1(u)∪{(vk,d(vk,u))}を追加する。また、vkから到達不可能な頂点uについては、naive landmark labelingと同様に、L'k(u)=L'k-1(u)と設定する。
【００３７】
図５に、このpruned landmark labelingを情報処理装置で実行するための具体的なアルゴリズムを示す。このアルゴリズムは、pruned landmark labelingを実行するにあたり、ネットワークGに含まれる頂点のうち、k番目に着目する頂点vkから枝刈りＢＦＳを行ってラベリングを行う処理を示している。この処理には、k-1番目の頂点まで同様の処理を行った結果作成された索引L'k-lが用いられる（１行目）。まず、キューQに、頂点vkを投入する。このvkからＢＦＳが開始される（２行目）。
【００３８】
３行目で用意されている配列P[vk]は、vkから他の頂点までの距離を格納するための配列である。初期値として、vkとvk間の距離は０、vkと他の頂点間の距離は∞と設定する。４行目で用意されている配列L'k[v]は、k番目の頂点vkに着目して枝刈りＢＦＳを行った結果作成されるラベルである。この段階ではまだ枝刈りＢＦＳが実行されていないので、初期値であるL'k-1[v]（k-1番目の頂点までについて枝刈りＢＦＳを実行した結果作成されたラベル）が格納されている。
【００３９】
vkからの枝刈りＢＦＳを開始する。キューQに格納されている頂点を１つ取り出す。ここで取り出した頂点をuとする（５−６行目）。vkからuまでの距離QUERY(vk,u,L'k-l)を、索引L'k-lを用いて計算する。ここで、計算結果QUERY(vk,u,L'k-l)が、vkから見たuの距離P|u|以下であれば、uのラベルを更新することなく、枝刈りＢＦＳを停止する（７行目）。
【００４０】
一方、vkから見たuの距離P|u|のほうが、索引L'k-lを用いて計算したvkからuまでの距離QUERY(vk,u,L'k-l)よりも小さいのであれば、従来より短い経路を発見したことになるから、uのラベルを更新する。すなわち、頂点uのラベルL'k[u]にvk,u間の距離を保存する（９行目）。
【００４１】
かかる後、枝刈りＢＦＳの到達先、つまりラベルの更新対象をuに隣接する頂点にも拡大してゆく。まず、uに隣接する頂点NG(u)の１つwに着目し、wが未だ枝刈りＢＦＳによって訪問されていない頂点であれば（P[w]=∞）、続く処理を行う（１０行目）。wはuの隣接頂点であるから、vkから見たwの距離を、vkから見たuの距離P|u|+1とおく（１１行目）。この頂点wを、キューQに追加する。（１２行目）。同様の処理を、uの隣接兆店すべてについて行う。これにより、この後uの隣接頂点からの枝刈りＢＦＳが行われてゆくことになる（１３行目）。
【００４２】
このように、pruned landmark labeling では、vkから見た最短距離が発見されない場合には、そこから先のＢＦＳを中止する（枝刈りする）。これにより、naive landmark labelingに比べ、効率的に索引を作成することができる。そして、このpruned landmark labelingによって構築された索引と、naive landmark labelingによって構築された索引とは、最短距離探索クエリに対して同じ回答を出力する。
【００４３】
＜実施の形態１＞
（Online Incremental Update）
本発明の実施の形態１は、上述のpruned landmark labelingを前提とした、索引の更新手法に関するものである。すなわち、ネットワークに頂点又はエッジが１つ追加された際に、その変化を即座に索引に反映させる方法に関するものである。この索引更新手法をOnline Incremental Updateと呼ぶ。はじめに、このOnline Incremental Updateの概念について説明する。
【００４４】
なお、本実施の形態では、ネットワークに変更が生じる場面として、頂点の追加とエッジの追加とを考える。このうち、新たな頂点が追加された場合は、単に新たなラベルを索引に追加する処理を行えば、索引を更新できる。一方、新たなエッジが追加された場合は、以下の一連の処理により索引を更新する処理を行う。なお、新たな頂点と新たなエッジが追加された場合は、まず頂点の追加処理を行い、次いでエッジの追加処理を行う。複数のエッジが同時に追加された場合は、エッジを１つずつ順に追加する処理を行う。よって、以下の説明では、主にエッジの追加に焦点を当てて説明する。
【００４５】
ネットワークにエッジが追加された際に、その変化を索引に反映させる最も簡単な方法は、naive landmark labeling処理と全く同様に、全ての頂点からＢＦＳを再度実施し、ラベルを更新することである。これにより、新たに追加されたエッジが索引に反映され、最短距離クエリに対する正しい回答が得られるようになる。
【００４６】
しかし、次の２つの事実に注目すれば、さらに効率よく索引を更新することができることがわかる。（１）ネットワークの変化すなわちエッジが１つ追加されたことによって、頂点vkから頂点uまでの距離が変化した場合、vk,u間の最短距離は、新しいエッジ(a,b)を通過するはずである。ここで、vkからみてaよりbのほうが距離が遠いものとする。すなわち、dτ-1(vk,a)≦dτ-1(vk,b)であるものとする。（２）vkと、u≠a,bと、の間の距離が変化したとき、vkとwとの間の距離も変化したのであれば、vkからみてwはbの先に存在するはずである。
【００４７】
これらの事実から、ネットワークの変更を効率よく索引に反映するには、以下のような手順を踏めばよいことが分かる。まず、両端点a,bのラベルを参照し、これらのラベルに含まれる頂点vkを抽出する。つぎに、全てのvkについて、vkからみた枝刈りＢＦＳを再開する。ここで、枝刈りＢＦＳは、エッジの端点から再開すべきことに留意されたい。枝刈りＢＦＳで到達した頂点uとvkとの距離が以前より短くなっていれば、それはエッジの追加によりuとvkとの間に最短距離が作られたことを意味しているので、uのラベルを更新する。そして、vkからみてuの先にある頂点に向けて、さらに枝刈りＢＦＳの範囲を広げてゆく。一方、頂点uとvkとの距離が以前の距離以上であれば、それはエッジの追加によるuとvkとの最短距離への影響はないことを意味しているので、uのラベルは更新しない。また、そこで枝刈りＢＦＳを停止する。すなわち、頂点uから先については枝刈りＢＦＳをせず、ラベルの更新も行わない。
【００４８】
図２の模式図を用いて、この処理についてより具体例に説明する。いま、ネットワーク（ａ）に新たなエッジa,b（一点鎖線）が１つ追加され、ネットワーク（ｂ）が作成されたものとする。このエッジの追加を反映すべく、ラベルの更新を行ってゆく。まず、vkに注目し、vkからみた枝刈りＢＦＳを、新たなエッジの端点bから再開する。エッジの追加によりvk,bの最短距離が生成されているので、まずb自身のラベルエントリ(vk,d(vk,b))が更新される。次いで、ラベルの更新処理がbの隣接頂点u1,u2,u3,u4に伝播し、u1,u2,u3,u4のラベルエントリが、vkとの新たな距離に更新されてゆく。その後、枝刈りＢＦＳは頂点z1,z2に到達するが、これらの頂点から先は、エッジの追加によってもvkとの距離が変化していない。したがって、ラベルエントリの更新の必要がない。よって、ここで枝刈りＢＦＳは停止され、vkを基点にしたラベルの更新処理が終了する。同様の処理が、全ての頂点を基点として順次実行される。なお、ここでは端点bについての処理のみ説明したが、同様の処理を端点aについても実行することができる。但し、この例では、端点aから再開した枝刈りＢＦＳはすぐに停止するであろう。
【００４９】
つづいて、図１のブロック図を用いて、Online Incremental Updateを実行するためのネットワーク管理装置１００の具体的な構成について説明する。
【００５０】
ネットワーク管理装置１００は、ネットワーク・索引記憶部１１０、索引更新部１２０、ネットワーク更新部１３０、クエリ処理部１４０を有する。
【００５１】
ネットワーク管理装置１００は、データ及び制御プログラムを記憶する記憶装置と、制御プログラムに基づき所定の処理を実行する制御装置とを含む情報処理装置であり、典型的にはパーソナルコンピュータやサーバコンピュータ等である。なお、ネットワーク管理装置１００は必ずしも物理的に単一の装置である必要はなく、複数のハードウェアにより分散処理を行うコンピュータシステムであってもよい。
【００５２】
ネットワーク・索引記憶部１１０は、ネットワークに係る情報を保持する記憶部である。具体的には、ネットワークに含まれる各頂点と、各頂点のラベル、及び各頂点をリンクしてなるエッジにかかる情報を保持する。典型的には、ネットワーク・索引記憶部１１０は、頂点vに対応付けて、ラベルL(v)、およびvを端点とするエッジの情報を保持できる。但し、ラベルと頂点、頂点とエッジが相互に参照可能であれば、ネットワーク・索引記憶部１１０はどのようなデータ構造を有していても良い。例えば、ラベルと頂点に関するデータと、頂点とエッジに関するデータとを、異なるデータベースに格納していても良い。
【００５３】
索引更新部１２０は、後述のネットワーク更新部１３０によってネットワークに頂点又はエッジが追加された際に、索引を更新する処理を行う。
【００５４】
ネットワーク更新部１３０は、ネットワークに頂点又はエッジを追加する処理を行う。
【００５５】
クエリ処理部１４０は、ネットワークに対するクエリに回答する処理を行う。例えば、少なくとも２点s,tを引数とする最短距離クエリを入力し、s,t間の最短距離を計算して出力する。
【００５６】
なお、本実施の形態におけるネットワーク・索引記憶部１１０、索引更新部１２０、ネットワーク更新部１３０、及びクエリ処理部１４０は、ネットワーク管理装置１００の制御装置及び記憶装置の協働により実現される論理的な記憶部又は処理部である。
【００５７】
つづいて、図３のフローチャートを用いて、Online Incremental Updateを実行する際のネットワーク管理装置１００の動作について説明する。
【００５８】
Ｓ１０１：
ネットワーク更新部１３０が、ネットワークに新たなエッジを追加する。すなわち、ネットワーク・索引記憶部１１０に、新たなエッジの情報を追加する。この情報には、少なくともエッジの両端点の頂点ＩＤが含まれる。以下、エッジの両端点がaおよびbである場合を例として説明する。
【００５９】
Ｓ１０２：
索引更新部１２０が、エッジの両端点aおよびbに付与されているラベルを参照し、各々のラベルに含まれている全てのラベルエントリを抽出する。ここで、aから抽出されたラベルエントリを(vk,d(vk,a))、bから抽出されたラベルエントリを(vk,d(vk,b)と一般化して表現する。
【００６０】
Ｓ１０３：
索引更新部１２０は、Ｓ１０２で抽出した頂点vkの１つに注目する。以下、本実施の形態では１つのvkにかかる処理のみを説明するが、Ｓ１０２で複数の頂点が抽出されている場合は、抽出された全ての頂点に対して、同様の処理を実行すれば良い。
【００６１】
索引更新部１２０は、vkからみた枝刈りＢＦＳを、エッジの端点aおよびbから開始する。すなわち、vkからみて、エッジを渡った先にある端点を根ノードとして、階層が深くなる方向に（つまりエッジから遠ざかる方向に）ＢＦＳを進めてゆく。エッジの渡り方には２方向あるから、vkからみた枝刈りＢＦＳの処理も２系統存在することになる。つまり、エッジの端点aから開始し、端点bから遠ざかる方向に進める枝刈りＢＦＳと、エッジの端点bから開始し、端点aから遠ざかる方向に進める枝刈りＢＦＳと、の２つである。
【００６２】
索引更新部１２０は、まず根ノードであるエッジの端点aおよびbを、枝刈り又はラベル更新の要否の判定対象とする。以下、本実施の形態では端点bにかかる処理のみを説明するが、端点aについても同様の処理を実行すれば良い。
【００６３】
Ｓ１０４〜Ｓ１０５：
索引更新部１２０は、枝刈り又はラベル更新の要否の判定対象である頂点について、以下の判定を行う。まず、vkから、新たなエッジを経由して、判定対象の頂点に至るまでの距離が計算される。他方、現在の索引を用いた、vkから判定対象の頂点までの最短距離が計算される。ここで、前者の距離が、後者の距離よりも小さい場合、索引更新部１２０は、判定対象の頂点について、ラベルを更新すべきと判断する。その理由は、新たなエッジによって、vkから判定対象の頂点までの最短距離が短縮されており、最短距離クエリに正確に回答するためには、現在の索引を更新する必要があるからである。この場合、索引更新部１２０は、Ｓ１０６〜Ｓ１０７の処理を行う。
【００６４】
一方、上記以外の場合、索引更新部１２０は、判定対象の頂点について、ラベルの更新を不要と判断する。その理由は、新たなエッジによっては、vkから判定対象の頂点までの最短距離が変更されないからである。この場合、判定対象の頂点から先の（vkからみて深い）頂点についても、新たなエッジによっては、vkからの最短距離が変更されないと考えられる。よって、索引更新部１２０は、この判定対象の頂点をもって枝刈りＢＦＳを停止し、Ｓ１０８に遷移する。
【００６５】
Ｓ１０６：
索引更新部１２０は、現在の索引の更新を行う。具体的には、判定対象の頂点のラベルのうち、vkからの距離を示すラベルエントリを、新たなエッジを経由した際のvkからの距離を用いて更新する。
【００６６】
Ｓ１０７：
索引更新部１２０は、判定対象の頂点に隣接する頂点を抽出し、新たな判定対象の頂点とする。なお、抽出する頂点は１つである必要はなく、複数であって良い。
【００６７】
Ｓ１０８：
判定対象の頂点が残っていれば、その頂点にかかるＳ１０４以降の処理を再度実行する。判定対象の頂点が複数残っている場合は、全ての判定対象の頂点に対する処理が終わるまで、Ｓ１０４以降の処理を繰り返し実行する。
【００６８】
Ｓ１０９：
索引更新部１２０は、Ｓ１０２で抽出した全ての頂点vkについて、Ｓ１０３以降の処理を実行する。 
【００６９】
図４に、図３のフローチャートにかかる処理を具体的に実現するためのアルゴリズムの一例を示す。このアルゴリズムは、ネットワークGに、頂点aおよびbを両端とするエッジが新たに追加した場合の、索引Mの更新処理を示す。言うまでもなく、索引Mとは、現在の（更新を行う前の）索引である（１行目）。
【００７０】
エッジの一方の端点aに保存されているラベルM(a)と、他方の端点bに保存されているラベルM(b)と、に含まれるすべての頂点vkを抽出する（２行目）。そして、各vkについて、vkからみた枝刈りＢＦＳを再開する。この枝刈りＢＦＳは、aおよびbから、それぞれ開始する（３〜４行目）。
【００７１】
枝刈りＢＦＳの詳細は以下の通りである。まず、枝刈り又はラベル更新の要否の判定対象である頂点(u,δru)を格納するためのキューQを用意する（５行目）。初期値として、エッジの端点を投入する。例えば、bを判定対象とする場合は、(b,d(vk,a)+1)をQに格納する。ここでd(vk,a)+1は、エッジを経由した場合の、vkからbまでの距離を示している（６行目）。
【００７２】
次に、キューQから頂点を１つ取出し（８行目）、現在の索引Mを使用したvkからその頂点までの距離であるPREFIXALQUERY(vk,v,M,k)を計算する。もしこの値が、エッジを経由した場合のvkからこの頂点までの距離δ以下であれば、この頂点に対するラベル更新は行わず、この頂点で枝刈りＢＦＳを停止する（９〜１０行目）。
【００７３】
一方、PREFIXALQUERY(vk,v,M,k)＞δであれば、この頂点のラベルを更新する。すなわち、この頂点のvkにかかるラベルエントリを、エッジを経由した場合の距離を用いて更新する。つまり、現在のラベルに、(vk,δ)を追加する。そして、枝刈りＢＦＳを続行するため、この頂点の隣接頂点をキューQについかする。これにより、これらの隣接頂点についても、７行目以下の処理が実施され、ラベル更新又は枝刈りが行われる。これにより、必要な範囲にまでラベル更新が伝播される。
【００７４】
本実施の形態においては、ネットワークに新たなエッジが追加された際、索引更新部１２０が、エッジの端点から枝刈りＢＦＳを再開する。これにより、ラベルの更新処理を必要な範囲内のみで行うことができ、索引更新に要する時間計算量、空間計算量を抑制することができる。
【００７５】
具体的には、|L(v)|=O(l)、本手法における枝刈りＢＦＳにより到達する頂点の数をO(s)（l,sは整数）とすれば、枝刈りＢＦＳはO(l)回実行されるので、全体の時間計算量はO(l2s)と見積もることができる。発明者の実験によれば、数百万の頂点を有する大規模ネットワークにおいても、ミリ秒単位で索引の更新を行うことが可能であった。これは、最初から索引を再構築する静的な索引更新手法に比べ、数桁速い処理時間である。
【００７６】
＜実施の形態２＞
（過去のネットワークに対するクエリ）
実施の形態１では、現在のネットワークに対し変化が生じた場合の、索引の効率的な更新手法について説明した。実施の形態２では、経時変化するネットワークを分析する際に、過去のある時点のネットワークに対し、最短距離クエリを発行できるようなスキームを開示する。また、ある２点間の距離が変化した時刻を問うクエリに回答できるようなスキームも合わせて開示する。以降、これらのクエリをまとめて履歴クエリと呼ぶ。
【００７７】
（Historical 2-Hop Cover）
はじめに、この履歴クエリに対応できるような索引のデータ構造を開示する。これは、従来の2-Hop Coverを拡張したものであり、Historical 2-Hop Coverと称する。
【００７８】
Historical 2-Hop Coverにおいては、各頂点vのラベルL(v)を、データ組(u,τ,δuv)のセットとして定義する。ここで、uは他の頂点、τは時刻、δuvはvからuまでの距離を表す。すなわち、ラベルエントリ(u,τ,δuv)は、ある時刻τにおいて、頂点vが、他の頂点uに対し距離δuvに位置していることを示している。ここで、時刻τとは、典型的には、ネットワークに頂点又はエッジが追加される度にインクリメントされる序数である。換言すれば、ネットワークの世代を示す数値である。なお、時刻τは、ネットワークの変遷における１時点を特定できる指標であればどのようなものであっても良い。例えば、日時等を含むタイムスタンプであっても良い。
【００７９】
この手法によれば、ラベルエントリを頂点uによりソートし、さらに、共通の頂点uを含むラベルエントリを距離に従ってソートした形で保持しているという前提において、例えばマージソートのようなアルゴリズムを利用することにより、時間τにおける頂点s,t間の最短距離を問うクエリを時間計算量O(|L(s)|+|L(t)|)で処理することが可能である。
【００８０】
（最短距離クエリ）
次に、Historical 2-Hop Coverに基づいて索引付けされたネットワークにおいて、過去の時刻τにおける頂点s,t間の最短距離を問うクエリに回答する手法について説明する。基本的には、通常の2-Hop Coverにおける場合と同様の処理を行うが、本手法は以下の点で相違する。
【００８１】
ネットワーク管理装置１００のクエリ処理部１４０は、s及びtのラベルを参照する際、クエリで指定されたτと同じ時刻か、τよりも古くかつτに最も近い時刻か、を含むラベルエントリのみを参照する。すなわち、τよりも新しい時刻を含むラベルエントリを無視する必要がある。その余の処理については、通常の2-Hop Coverと同様に実行して良い。
【００８２】
（変化点クエリ）
ある２点s,t間の距離が変化した時刻を問うクエリを変化点クエリと称する。Historical 2-Hop Coverに基づいて索引付けされたネットワークにおいて、変化点クエリに回答するための処理について説明する。
【００８３】
ネットワーク管理装置１００のクエリ処理部１４０は、はじめに、２点s,t間の距離の変化点の候補を抽出する。このため、クエリ処理部１４０はまず、頂点s及び頂点tのラベルエントリのうち、任意の頂点uを共有するラベルエントリ(u,τs,δs)∈L(s)、(u,τt,δt)∈L(t)のペアを抽出する。なお、このペアの数は限定されない。次に、クエリ処理部１４０は、これらのペアの中から、例えばマージソートのようなアルゴリズムを使用して、 (τ,δ)=(max{τs,τt},δs+δt)を抽出する。さらに、クエリ処理部１４０は、抽出したこれらのペアを時刻τでソートする。最後に、不要なペアを削除する。つまり、もし(τi,δi)と(τi+1,δi+1)とが連続したペアであって、τi≦τi+1かつδi≦δi+1であれば、後者のペアを削除する。
【００８４】
（索引付け）
Historical 2-Hop Coverに基づいて索引付けされたネットワークにおいても、上述のPruned Landmark Labeling又は実施の形態１のOnline Incremental Update Algorithmを用いて、索引の付与や動的な索引更新を行うことが可能である。
【００８５】
図６に、Historical 2-Hop Coverに基づいて索引付けされたネットワークにおける、Pruned Landmark Labelingを用いた索引付けアルゴリズムの一例を示す。通常の2-Hop Coverに基づいて索引付けされたネットワークにおけるPruned Landmark Labelingを用いた索引付け（図５）との違いは以下の通りである。ある頂点について、枝刈りの停止や、ラベルの更新の判断を行う際に、指定の時刻τに関するラベルのみを参照する。また、頂点のラベルを更新する際には、過去のラベルを削除したり、上書きすることなくに残しておく。そして、その頂点に追加するラベルエントリには、現在の時刻、すなわちネットワーク内のラベルに格納されているあらゆる時刻よりも新しい時刻を含ませる。
【００８６】
本実施の形態においては、索引更新部１２０が、時刻τを含むラベルを頂点に付与する。また、クエリ処理部１４０は、ラベル内の時刻τを参照して、最短距離クエリや変化点クエリに回答する。これにより、特定の時刻における２点間距離を得ることが可能となる。また、ネットワークの経時変化に伴う、頂点間の距離の変遷が分かるようになる。
【００８７】
従来、頂点間の距離の変遷をプロットすることは不可能であった。その理由は、頂点やエッジの追加に伴う索引の動的更新技術がそもそも確立されておらず、頂点やエッジが追加される時刻に注目されることがなかったためである。まして、頂点やエッジが追加されるタイミングで、ラベルに時刻情報を付与することは行われていなかった。しかし、本実施の形態では、実施の形態１のラベルの動的更新手法を応用し、これを実現した。
【００８８】
本実施の形態により、ネットワークの変遷に関する様々な新たな知見を得ることが期待される。例えば、ネットワークの経時変化に伴う頂点間の距離の変遷に注目することにより、現実世界の様々なネットワークの性質や特徴の解明を試みることができよう。
【００８９】
＜その他の実施の形態＞
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の実施の形態では、種々の索引付け手法及びクエリ処理手法を提示したが、発明の主旨を逸脱しない範囲内において、これらを任意に組み合わせて利用することができる。
【００９０】
また、上述の実施の形態では、本発明を主にハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００９１】
１００  ネットワーク管理装置
１１０  ネットワーク・索引記憶部
１２０  索引更新部
１３０  ネットワーク更新部
１４０  クエリ処理部
【図１】
2015184704.tif 000003
【図２】
2015184704.tif 000004
【図３】
2015184704.tif 000005
【図４】
2015184704.tif 000006
【図５】
2015184704.tif 000007
【図６】
2015184704.tif 000008