(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024172295
(43)【公開日】2024-12-12
(54)【発明の名称】探索装置、探索方法及びプログラム
(51)【国際特許分類】
G06F 16/28 20190101AFI20241205BHJP
【FI】
G06F16/28
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2023089910
(22)【出願日】2023-05-31
【新規性喪失の例外の表示】特許法第30条第2項適用申請有り 発行日 2023年2月27日 刊行物 第15回データ工学と情報マネジメントに関するフォーラム(予稿集) URL:https://www.db.info.gifu-u.ac.jp/data/deim2023/ URL:https://event.dbsj.org/deim2023/
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和2年度、国立研究開発法人科学技術振興機構、戦略的創造研究推進事業「超高速な多モーダルIoTデータ統合処理基盤」委託研究、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(71)【出願人】
【識別番号】504171134
【氏名又は名称】国立大学法人 筑波大学
(74)【代理人】
【識別番号】110001634
【氏名又は名称】弁理士法人志賀国際特許事務所
(72)【発明者】
【氏名】藤原 靖宏
(72)【発明者】
【氏名】塩川 浩昭
(72)【発明者】
【氏名】真次 彰平
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175KA12
(57)【要約】
【課題】与えられたグラフにおける最大の「k-plex」を探索する速度を向上させることが可能である探索装置、探索方法及びプログラムを提供する。
【解決手段】探索装置は、グラフにおける1以上の部分グラフのうちの最大の部分グラフのサイズを決定する決定部と、いずれの部分グラフにも含まれないノードをグラフから削除する削除部と、ノードが削除されたグラフにおいて、サイズの部分グラフを探索する探索部とを備える。探索部は、ノードが削除されたグラフにおけるノード対を併合し、ノード対が併合されたグラフにおいて、サイズの部分グラフを探索する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定する決定部と、
いずれの前記部分グラフにも含まれないノードを前記グラフから削除する削除部と、
前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索する探索部と
を備える探索装置。
【請求項2】
前記探索部は、前記ノードが削除された前記グラフにおけるノード対を併合し、前記ノード対が併合された前記グラフにおいて、前記サイズの前記部分グラフを探索する、請求項1に記載の探索装置。
【請求項3】
探索装置が実行する探索方法であって、
グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定するステップと、
いずれの前記部分グラフにも含まれないノードを前記グラフから削除するステップと、
前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索するステップと
を含む探索方法。
【請求項4】
コンピュータに、
グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定する手順と、
いずれの前記部分グラフにも含まれないノードを前記グラフから削除する手順と、
前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索する手順と
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、探索装置、探索方法及びプログラムに関する。
【背景技術】
【0002】
ソーシャルネットワークにおけるユーザの行動分析に用いられる技術の一つとして、最大の密部分グラフをソーシャルネットワークのモデルとしてのグラフから抽出する技術がある。その最も代表的な技術として、与えられたグラフにおける最大のクリークを探索する技術がある。クリークとは、ノードの集合における任意の2ノードの間にエッジが存在するという部分グラフである。したがって、クリークは、頑健な密部分グラフの一つである。最大クリーク探索は幅広い分野で応用されているが、最大クリーク探索には二つの問題点がある。
【0003】
実世界のソーシャルネットワークにはスケールフリー性があることから、ソーシャルネットワークにおけるコミュニティ(部分グラフ)が多様な密度を持つという点が、第1の問題点である。その結果として、最大クリーク探索の既存技術では、実世界のソーシャルネットワークにおけるコミュニティを正確に発見することが困難である。
【0004】
最大クリーク探索の既存技術では、実世界のソーシャルネットワークにおけるコミュニティの密度及びサイズに対して非常に密度が高く且つ非常に小さい部分グラフが同定されてしまうという点が、第2の問題点である。その結果として、最大クリーク探索の既存技術では、実世界のソーシャルネットワークにおけるコミュニティを正確に発見することが困難である。
【0005】
これらの問題を解決する技術として、最大の「k-plex」を探索する技術がある(非特許文献1参照)。「k-plex」(k-網)は、一般化されたクリークである。具体的には、「k-plex」は、n個のノードから構成された部分グラフの各ノードが、その部分グラフにおける「n-k」個以上のノードに隣接するという、部分グラフ(密部分グラフ)である。ここで、「k」は、正の整数である。「k-plex」は密度及びサイズのバランスに優れているので、実世界のソーシャルネットワークにおける大きな密部分グラフを最大のk-plexの探索によって抽出することが可能である。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】B. Balasundaram, S. Butenko, I. V. Hicks, and S. Sachdeva, "Clique Relaxations in Social Network Analysis: The Maximum k-plex Problem", Operations Research, 2007.
【発明の概要】
【発明が解決しようとする課題】
【0007】
与えられたグラフにおける最大の「k-plex」を見つけるという問題はNP困難問題(Non-deterministic Polynomial Time Hard Problem)であることが知られている。具体的には、最大の「k-plex」の探索において、素朴なアルゴリズムが用いられた場合、「O(2|VG||VG|)」という計算時間が必要である。ここで、「VG」は、グラフ「G」におけるノードの集合を表す。また、「|VG|」は、「VG」に含まれるノードの個数を表す。
【0008】
しかしながら、近年のソーシャルネットワークのサイズは巨大である。このため、最大の「k-plex」の探索には、数日程度の計算時間を要することがある。このように、与えられたグラフにおける最大の「k-plex」を探索する速度を向上させることができないという問題がある。
【0009】
上記事情に鑑み、本発明は、与えられたグラフにおける最大の「k-plex」を探索する速度を向上させることが可能である探索装置、探索方法及びプログラムを提供することを目的としている。
【課題を解決するための手段】
【0010】
本発明の一態様は、グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定する決定部と、いずれの前記部分グラフにも含まれないノードを前記グラフから削除する削除部と、前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索する探索部とを備える探索装置である。
【0011】
本発明の一態様は、上記の探索装置が実行する探索方法であって、グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定するステップと、いずれの前記部分グラフにも含まれないノードを前記グラフから削除するステップと、前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索するステップとを含む探索方法である。
【0012】
本発明の一態様は、コンピュータに、グラフにおける1以上の部分グラフのうちの最大の前記部分グラフのサイズを決定する手順と、いずれの前記部分グラフにも含まれないノードを前記グラフから削除する手順と、前記ノードが削除された前記グラフにおいて、前記サイズの前記部分グラフを探索する手順とを実行させるためのプログラムである。
【発明の効果】
【0013】
本発明により、与えられたグラフにおける最大の「k-plex」を探索する速度を向上させることが可能である。
【図面の簡単な説明】
【0014】
【
図1】実施形態における、探索装置の構成例を示す図である。
【
図2】実施形態における、与えられたグラフの例を示す図である。
【
図3】実施形態における、不毛ノードが1回削除されたグラフの例を示す図である。
【
図4】実施形態における、不毛ノードが2回削除されたグラフの例を示す図である。
【
図5】実施形態における、第1アルゴリズムが実行された収束グラフの例を示す図である。
【
図6】実施形態における、第1アルゴリズムが更に実行された収束グラフの例を示す図である。
【
図7】実施形態における、第1アルゴリズムの手順例を示す図である。
【
図8】実施形態における、第1アルゴリズムの手順例を示すフローチャートである。
【
図9】実施形態における、第2アルゴリズムの手順例を示す図である。
【
図10】実施形態における、第2アルゴリズムの手順例を示すフローチャートである。
【
図11】実施形態における、第3アルゴリズムの手順例を示す図である。
【
図12】実施形態における、第3アルゴリズムの手順例を示すフローチャートである。
【
図13】実施形態における、探索装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0015】
本発明の実施形態について、図面を参照して詳細に説明する。
以下では、数式又は関数(以下「数式等」という。)において文字の上に付されている記号は、文字の前に記載される。例えば、数式等において文字の上に付されている記号「^」は、以下では文字「G」の前に「^G」のように記載される。
【0016】
図1は、実施形態における、探索装置1の構成例を示す図である。探索装置1は、与えられたグラフにおける最大の「k-plex」を探索する装置である。探索装置1は、決定部11と、削除部12と、探索部13と、判定部14とを備える。探索部13と判定部14とは、一体でもよい。
【0017】
決定部11は、探索の対象とされる「k-plex」のサイズ(探索サイズ)を決定する。例えば、決定部11は、探索の対象とされる「k-plex」のサイズを、予め定められたサイズを初期値(例えば、空集合)として、探索処理のイテレーション(繰り返し)ごとに大きくする。
【0018】
削除部12は、「k-plex」に含まれることのないノードを、与えられたグラフから削除する。探索部13は、「k-plex」に含まれることのないノードが削除されたグラフにおいて、決定されたサイズの「k-plex」を探索する。判定部14は、「k-plex」の探索を継続するか否かを判定する。「k-plex」の探索を継続すると判定された場合、決定部11は、探索の対象とされる「k-plex」のサイズを更新する。「k-plex」の探索を継続しないと判定された場合、判定部14は、最大の「k-plex」の探索結果を、所定の情報処理装置(不図示)に出力する。
【0019】
まず、探索の対象とされる「k-plex」について説明する。
以下では、重み付きでない無向グラフであって、エッジによってノードが連結された無向グラフ「G=(VG,EG)」が、探索の対象とされる。ここで、「VG」は、グラフ「G」のノードの集合を表す。「EG」は、グラフ「G」のエッジの集合を表す。
【0020】
以下では、「dG(u)」は、グラフ「G」のノード「u」の次数を表す。「G[VS]」は、部分ノードの集合「VS⊆VG」を含むグラフ「G」における誘導部分グラフ(induced subgraph)を表す。「G-v」は、ノード「v」に接続するエッジと、そのノード「v」とがグラフ「G」から除かれたグラフを表す。すなわち、「G-v=G[VG|{v}]」である。
【0021】
最大の「k-plex」の探索とは、グラフ「G」における最大の「k-plex」を見つけることである。「k-plex」は、一般化されたクリークであって、部分グラフ(密部分グラフ)である。ここで、「k-plex」では、n個のノードから構成された部分グラフの各ノードが、その部分グラフにおける「n-k」個以上のノードに隣接する。「k-plex」は、以下のように定義される。
【0022】
定義「1」(k-plex)
グラフ「G」と、正の整数「k」とが与えられた場合に、部分ノードの集合「VS」における全てのノード「v∈VS」に対して、誘導部分グラフ「G[VS]⊆G」が「dG[VS](v)≧|VS|-k」を満たす場合、誘導部分グラフ「G[VS]」は、「k-plex」である。
【0023】
誘導部分グラフ「G[VS]」が「k-plex」である場合、各ノード「v∈VS」は、少なくとも「|VS|-k」個のノードに隣接する。最大の「k-plex」の探索という問題は、上記の定義「1」を用いて、以下のように定義される。
【0024】
問題「1」(最大の「k-plex」の探索)
グラフ「G」と、正の整数「k」とが与えられた場合に、最大の「k-plex」の探索という問題は、グラフ「G」における最大の「k-plex」を探索するという問題である。すなわち、最大の「k-plex」の探索という問題は、部分ノードの集合「VS」が最大となる誘導部分グラフ「G[VS]⊆G」を見つけるという問題である。
【0025】
正の整数「k」が1である場合、上記の問題「1」は、最大のクリークを探索する問題と等価である。最大の「k-plex」の探索はNP困難であることから、大規模なソーシャルネットワークに対する効率的な探索手法は重要である。
【0026】
次に、探索方法の概要について説明する。
削除部12は、最大の「k-plex」に含まれていないノードを、与えられたグラフにおいて検出する。削除部12は、検出されたノードを、与えられたグラフから削除する。これによって、グラフにおける探索空間のサイズが小さくなる。
【0027】
また、最大の「k-plex」に共に含まれることのないノードの集合は、安全に併合されることが可能である。以下、安全に併合されることが可能なノードを、「安全併合ノード」(safe-to-merge node)という。
【0028】
探索部13は、削除部12によってノードが削除されたグラフにおいて、安全併合ノードに隣接するノードのみを探索(走査)することによって、探索空間のサイズを縮小する。これによって、探索部13は、最大の「k-plex」を、短時間でグラフから抽出する。
【0029】
特にソーシャルネットワークは、スケールフリー性を持つ(参考文献1「Michalis Faloutsos, Petros Faloutsos, and Christos Faloutsos, On Power-Law Relationships of the Internet Topology, SIGCOMM Computer Communication Review, 1999.」)。このため、ソーシャルネットワークでは、最大の「k-plex」に含まれていないノードの次数が小さいことが多い。したがって、実世界のソーシャルネットワークのグラフ(モデル)の探索において、探索装置1はグラフのサイズを効果的に削減することが可能である。
【0030】
与えられたグラフから削除されたノードは最大の「k-plex」に含まれていないので、最大の「k-plex」を探索部13は常に正確に見つけることができる。また、探索の品質を落とすことなく、最大の「k-plex」を探索部13は効率的且つ正確にグラフから抽出することができる。
【0031】
次に、ノードの削除について説明する。
上述の安全併合ノードが定義されるために、まず、定義「2」、定義「3」及び定義「4」が導入される。
【0032】
定義「2」((α,k)-plex)
誘導部分グラフ「G[VS]」は、グラフ「G」の「(α,k)-plex」である。ここで、「α」は、誘導部分グラフ「G[VS]⊆G」のサイズ「|VS|」を表す。また、「(α,k)-plex」は、サイズ「α」の「k-plex」を表す。
【0033】
図2は、実施形態における、与えられたグラフの例を示す図である。与えられたグラフにおいて、複数の「(α,k)-plex」が、部分グラフのサイズ「α」ごとに存在し得る。例えば、部分グラフ101「G[{v
1,v
2,v
3,v
4,v
5,v
6}]」は、上記の定義「2」を満たす「(6,3)-plex」である。これに対して、部分グラフ102「G[{v
4,v
5,v
6,v
7,v
8,v
9}]」も、上記の定義「2」を満たす「(6,3)-plex」である。
【0034】
以下、いずれの「(α,k)-plex」にも含まれないノードを、「不毛ノード」(unfruitful node)という。不毛ノードは、定義「2」に基づいて、定義「3」のように定義される。削除部12は、与えられたグラフから、不毛ノードを削除する。
【0035】
定義「3」(不毛ノード)
不毛ノード「UG」は、「α」及び「k」に対して、「UG={v∈VG|dG(v)<α-k}」を満たす。
【0036】
定義「3」の通り、不毛ノード「U
G」の次数は、「α-k」よりも小さい。定義「2」及び定義「3」により、不毛ノード「U
G」は、いずれの「(α,k)-plex」にも含まれない。例えば、「d
G(v
11)=2<α-k=3」が成り立つので、ノード
図2に例示された「v
11」は、不毛ノード「U
G」である。不毛ノードはいずれの「(α,k)-plex」にも含まれないので、ノード「v
11」はグラフ「G」から削除可能である。しかし、ノード「v
11」の削除によって、ノード「v
11」に隣接していたノードの次数が小さくなるので、新たな不毛ノードがグラフ「G」に発生する。そこで、グラフ「G」における全ての不毛ノードが削除されたグラフが、収束グラフ(Converged Graph)として、定義「4」のように定義される。
【0037】
定義「4」(収束グラフ)
不毛ノードがグラフ「G」からi回削除されたグラフ「G(i)」は、「α」及び「k」に対して、式(1)のように定義される。
【0038】
【0039】
収束グラフ「^G」は、式(2)のように定義される。
【0040】
【0041】
ここで、定義「4」の通り、収束グラフ「^G」には不毛ノード「UG」が存在しないので、「UG(i)」は、空集合「φ」である。
【0042】
図3は、実施形態における、不毛ノードが1回削除されたグラフの例を示す図である。
図2に例示されたグラフ「G」において、「(6,3)-plex」に対する収束グラフ「^G」が探索される場合、
図2に例示されたグラフ「G」における不毛ノード「U
G」であるノード「v
11」が削除部12によって削除されたことにより、不毛ノードが1回削除されたグラフ「G
(1)」が、
図3のように得られる。定義「3」により、新たな不毛ノード「U
G(1)={v
10}」が、グラフ「G
(1)」に発生する。
【0043】
図4は、実施形態における、不毛ノードが2回削除されたグラフの例を示す図である。新たな不毛ノード「U
G」であるノード「v
10」が削除部12によって削除されたことにより、不毛ノードが2回削除されたグラフ「G
(2)」が、
図4のように得られる。グラフ「G
(2)」における全てのノードについて、ノードの次数「α-k」が3以下であることから、グラフ「G
(2)」には不毛ノードが存在しない。したがって、グラフ「G
(2)」は、与えられた「G」の収束グラフ「^G」である。
【0044】
次に、探索部13によって実行される探索について説明する。
定義「5」(安全併合ノード)
収束グラフにおいて隣接するノード「u∈^G」及びノード「v∈^G」が与えられた場合、「u∈U^G-v」且つ「v∈U^G-u」が成り立つ。また、「u∈U^G-v」且つ「v∈U^G-u」が成り立つ場合に限り、ノード「u」及びノード「v」は、安全併合ノードである。以下、ノード「u」及びノード「v」が安全併合ノードであることは、「u←→^Gv」と表記される。
【0045】
ノード「v」が収束グラフ「^G」から削除された場合にノード「u」が不毛ノードになることと、「u←→^Gv」が成り立つこととは同値であることを、定義「5」は示す。
【0046】
収束グラフにおいて、太線のエッジは、そのエッジの両端に接続された各ノードが安全併合ノードであることを示す。例えば、
図4において、ノード「v
8」が削除されたグラフ「G
-v8」においてノード「v
7」の次数が「2」となって、ノード「v
7」の次数が「α-k=3」よりも小さくなる。また、ノード「v
7」が削除されたグラフ「G
-v7」においてノード「v
8」の次数が「2」となって、ノード「v
8」の次数が「α-k=3」よりも小さくなる。このため、「(6,3)-plex」において隣接するノード「v
7」及びノード「v
8」のそれぞれは、安全併合ノードである。定義「5」について、以下に示す補題「1」が成り立つ。
【0047】
補題「1」
「u←→^Gv」が成り立つノード対(u,v)について、「(α,k)-plex」にノード「v」が含まれない場合、その「(α,k)-plex」にはノード「u」も含まれない。
【0048】
補題「1」の証明
背理法を用いて補題「1」を証明する。安全併合ノード「u←→^Gv」に対して、「(α,k)-plex」にノード「u」が含まれているが、その「(α,k)-plex」にノード「v」は含まれていないと仮定する。すなわち、「u(/∈)U^G-v」が成り立つと仮定する。しかし、定義「5」によれば「u←→^Gv⇒u∈U^G-v」が成り立つので、「u(/∈)U^G-v」が成り立つという仮定は正しくない。よって、補題「1」は正しい。
【0049】
安全併合ノードの対のうちの一方の安全併合ノードが「(α,k)-plex」に含まれていない場合、その「(α,k)-plex」には他方の安全併合ノードも含まれていないことを、補題「1」は示す。逆に、安全併合ノードの対のうちの一方のノードが「(α,k)-plex」に含まれている場合、その「(α,k)-plex」には他方の安全併合ノードも含まれていることを、補題「1」は示す。
【0050】
よって、「(α,k)-plex」に含まれていない安全併合ノードの対を探索部13が併合することによって、安全併合ノードが収束グラフから削除されることで、収束グラフのサイズを効率的に削減することができる。しかしながら、定義「5」に基づいて安全併合ノードが特定されるためには、定義「5」に基づく計算を全てのノード対について実行する必要がある。この計算には「O(|V^G|2)」という時間を要するので、安全併合ノードを見つけるための計算を全てのノード対について実行することは、効率的でない。
【0051】
次に、安全併合ノードを収束グラフから効率的に見つける方法の概要を説明する。
安全併合ノードを効率的に探索するために重要となる脆弱ノード(fragile node)について説明する。脆弱ノードは、以下の定義「6」のように定義される。
【0052】
定義「6」(脆弱ノード)
収束グラフ「^G」が与えられた場合、脆弱ノードの集合「F^G」は、式(3)のように定義される。
【0053】
【0054】
例えば
図4において、脆弱ノードの次数は、「α-k=3」である。したがって、脆弱ノードの集合「F
^G」は、「F
^G={v
1,v
2,v
3,v
7,v
8}」である。削除された安全併合ノードに隣接する脆弱ノードの次数が小さくなるので、隣接する安全併合ノードが削除された脆弱ノードは、不毛ノードとなる。
図4では、ノード「v
8」が収束グラフ「^G」から削除された場合、ノード「v
7」が脆弱ノードとなる。この逆も成り立つので、定義「5」によって、ノード「v
7」及びノード「v
8」は安全併合ノードである。このような性質は、以下に示す補題「2」として示される。
【0055】
補題「2」
脆弱ノードから構成された誘導部分グラフ「G[F^G]」に、「v1→v2→…→vN」というパスが存在する場合、「i∈{1,2,…,N-1}」について、「u←→^Gv」が成り立つ。
【0056】
補題「2」の証明
定義「6」によって、「d^G-vi(vi+1)=α-k-1」が成り立つ。ノード「vi」が収束グラフ「^G」から削除された場合、「(vi,vi+1)∈E^G」によって、「d^G-vi(vi+1)=α-k-1」が成り立つ。このため、定義「3」によって、「vi+1∈U^G-vi」が成り立つ。また、「d^G(vi)=α-k」が成り立つので、定義「5」によって、「u←→^Gv」が成り立つ。したがって、「vi∈U^G-vi+1」が成り立つ。
【0057】
脆弱ノードから構成される誘導部分グラフにおける連結された脆弱ノードの集合は安全併合ノードの集合であることを、補題「2」は示す。例えば
図4においてノード「v
1」、ノード「v
2」及びノード「v
3」は、脆弱ノードの集合「F
^G」に含まれている。また、誘導部分グラフ「G[F
^G]」にパス「v
1→v
2→v
3」が存在するので、「v
1←→
^Gv
2」且つ「v
2←→
^Gv
3」が成り立つ。探索部13は、脆弱ノードに基づいて、このようなパスを「O(|V
^G|)」という短い計算時間で探索する。このように、探索部13は、補題「2」に基づいて、安全併合ノードを効率的に見つける。
【0058】
次に、安全併合ノードを収束グラフから効率的に見つける方法の詳細を説明する。
探索部13は、補題「2」に基づいて、収束グラフにおける全ての安全併合ノードを列挙する。探索部13は、補題「1」に基づいて安全併合ノードを併合することによって、スーパーノードを生成する。これによって、収束グラフのサイズが削減される。以下、補題「1」に基づいて安全併合ノードを併合するアルゴリズムを、「第1アルゴリズム」(Algorithm 1)という。第1アルゴリズムを説明するために、スーパーノードが、定義「7」のように定義される。
【0059】
定義「7」(スーパーノード)
グラフ「^G」と、連結された安全併合ノード「M∈G[F^G]」の集合とが与えられた場合、連結された安全併合ノード「M」が併合された結果、スーパーノード「s」が生成される。ここで、「{v∈V^G|∀u∈M,(u,v)∈E^G}」に含まれているノードに、スーパーノード「s」は隣接する。以下、スーパーノード「s」の次数は、「d^G(s)=α-k」と表される。また、スーパーノード「s」のサイズ「|s|」は、連結された安全併合ノード「M」のサイズ「|M|」と等しい。連結された安全併合ノード「M」が併合されることによって、連結された安全併合ノード「M」と、連結された安全併合ノード「M」に接続するエッジとは、収束グラフ「^G」から削除される。
【0060】
スーパーノードは、安全併合ノード「M」の集合を単一ノードとして表現するための特別なノードである。また、併合された全ての安全併合ノード「M」が脆弱ノードであることから、スーパーノード「s」の次数は、常に「α-k」である。なお、併合された安全併合ノード「M」に接続していた各エッジがスーパーノード「s」に接続し直されるように、1個のノードと1個のスーパーノード「s」とが複数のエッジを用いて隣接することがある。
【0061】
図5は、実施形態における、第1アルゴリズムが実行された収束グラフの例を示す図である。
図4に例示された収束グラフ「^G」は、脆弱ノードの集合「F
^G={v
1,v
2,v
3,v
7,v
8}」を含む。
【0062】
そこで、探索部13は、ノード「v1」、ノード「v2」及びノード「v3」を併合することによって、スーパーノード「s123」を生成する。探索部13は、定義「7」に基づいて、エッジ(v1,v4)を第1のエッジ(s123,v4)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v2,v4)を第2のエッジ(s123,v4)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v3,v5)をエッジ(s123,v5)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v1,v6)を第3のエッジ(s123,v6)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v3,v6)を第4のエッジ(s123,v6)に置き換える。
【0063】
また、探索部13は、ノード「v7」及びノード「v8」を併合することによって、スーパーノード「s78」を生成する。探索部13は、定義「7」に基づいて、エッジ(v7,v4)をエッジ(s78,v4)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v8,v6)をエッジ(s78,v6)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v7,v9)を第5のエッジ(s78,v9)に置き換える。探索部13は、定義「7」に基づいて、エッジ(v8,v9)を第6のエッジ(s78,v9)に置き換える。
【0064】
図6は、実施形態における、第1アルゴリズムが更に実行された収束グラフの例を示す図である。
図5において隣接するスーパーノード「s
78」及びノード「v
9」は、いずれも安全併合ノードである。そこで、探索部13は、スーパーノード「s
78」及びノード「v
9」を併合することによって、スーパーノード「s
789」を生成する。
【0065】
図7は、実施形態における、第1アルゴリズムの手順例を示す図である。また、
図8は、実施形態における、第1アルゴリズムの手順例を示すフローチャートである。誘導部分グラフ「G[F
^G]」においてノード「u∈F
^G」及びノード「v∈F
^G」が連結されている場合、補題「2」によって、ノード「u」及びノード「v」は、いずれも安全併合ノードである。このような性質が、第1アルゴリズムにおいて利用される。
【0066】
探索部13は、脆弱ノードの集合「FG*」を、収束グラフから抽出する(第1アルゴリズムの第3行目)。探索部13は、補題「2」に基づいて、誘導部分グラフ「G[FG*]」のうちから、連結された安全併合ノードの集合「M」(連結成分)を、深さ優先探索によって探索する(第1アルゴリズムの第4行目)。探索部13は、定義「7」に基づいて、連結された安全併合ノードの集合「M」を、スーパーノード「s」に置き換える(第1アルゴリズムの第6-10行目)。スーパーノード「s」は常に脆弱ノードであることから、探索部13は、スーパーノード「s」を脆弱ノードの集合「FG*」に追加する(第1アルゴリズムの第11行目)。
【0067】
探索部13は、隣接するノードの集合「NG*(s)」を探索することによって、連結された安全併合ノードの集合「M」を更新する。ここで、「NG*(u)={v∈VG*|(u,v)∈EG*}」は、収束グラフ「G*」のノード「u」に隣接するノードの集合を表す。スーパーノード「s」に隣接する安全併合ノードをノードの集合「NG*」が含んでいる場合、探索部13は、スーパーノード「s」に隣接する安全併合ノードを、連結された安全併合ノードの集合「M」に追加する(第1アルゴリズムの第13-15行目)。
【0068】
スーパーノード「s」に隣接する安全併合ノードをノードの集合「N
G*」が含んでいない場合、探索部13は、次の連結成分「M」の探索に移行する(第1アルゴリズムの第16-17行目)。安全併合ノードが無くなった場合、探索部13は、
図7に例示された第1アルゴリズムの実行を終了する(第1アルゴリズムの第5-17行目)。
【0069】
次に、収束グラフ「^G」における全ての安全併合ノードを第1アルゴリズムを用いて併合するための計算時間について説明する。
補題「3」
第1アルゴリズムの実行に必要とされる計算時間(処理量)は、「O(|F^G|・(α-k)」である。
【0070】
補題「3」の証明
安全併合ノードの探索処理(第1アルゴリズムの第4行目、第12-17行目)と、エッジの再接続処理(第1アルゴリズムの第5-9行目)とを、第1アルゴリズムは含む。補題「2」に示されたように、安全併合ノードの探索について脆弱ノードから構成された誘導部分グラフ「G[F^G]」にパスが存在する場合、そのパスの各ノードは安全併合ノードである。
【0071】
そこで、探索部13は、誘導部分グラフ「G[F^G]」における連結成分を、深さ優先探索によって探索する。具体的には、探索部13は、収束グラフ「^G」における所定のノード(始点)から、深さ優先探索を開始する。ここで、探索部13は、隣接する脆弱ノードを再帰的に探索する。この探索が終了した際に探索が到達した全ての脆弱ノードは、安全併合ノードである。探索が到達していない各脆弱ノードを、順番に探索の始点とすることで、誘導部分グラフ「G[F^G]」における全ての安全併合ノードを探索部13は列挙する。
【0072】
探索部13は、このような探索を、「O(|F^G|・(α-k)」という計算時間(処理量)で実行する。なぜなら、収束グラフ「^G」において、ちょうど「α-k」個のノードに各脆弱ノードが隣接しているので、脆弱ノードの集合「F^G」とそれらの隣接ノードとに探索の対象を限定して、探索部13が深さ優先探索を実行するからである。
【0073】
エッジの再接続について、「M\{v}」のノードが削除された場合、定義「5」によって、各安全併合ノード「v∈M」は不毛ノードとなる。これによって、定義「3」によって、安全併合ノード「v」は、「^G\M」における「α-k」個未満のノードのみに隣接する。したがって、探索部13は、併合された各安全併合ノードに、「α-k」本未満のエッジを再接続する。
【0074】
補題「2」によって、併合されたノードの個数は、約「|F^G|」個である。このため、探索部13は、「O(|F^G|・(α-k)」という計算時間で、エッジを再接続する。したがって、第1アルゴリズムの実行に必要とされる計算時間は、「O(|F^G|・(α-k)」である。
【0075】
ソーシャルネットワークは、スケールフリー性を持つ。このため、ソーシャルネットワークでは、ノードの次数が小さいことが多い。スケールフリー性とは、次数「d」のノードの個数が「|VG|d-γ|」におおよそ比例するという性質である(参考文献1)。ここで、「γ」は、データの次数分布の偏りを表す正の定数である。ちょうど「d=α-k」個のノードに各脆弱ノードが隣接するので、第1アルゴリズムの計算時間「O(|F^G|)」は、「O(|V^G|(α-k)-γ)」と近似できる。したがって、探索部13は、第1アルゴリズムを用いて、「O(|V^G|/(α-k)(γ-1))」という時間で、収束グラフのサイズを削減する。つまり、探索部13は、第1アルゴリズムを用いて、実世界のソーシャルネットワークのノードの個数に対して、劣線形時間で応答する。
【0076】
次に、最大の「k-plex」を探索するアルゴリズム(第2アルゴリズム)について説明する。
図9は、実施形態における、第2アルゴリズムの手順例を示す図である。また、
図10は、実施形態における、第2アルゴリズムの手順例を示すフローチャートである。任意のk個のノードが「(k,k)-plex」であることは、自明である。このため、決定部11は、「k+1」をサイズ「α」の初期値と決定する(第2アルゴリズムの第2行目)。削除部12は、第2アルゴリズムにおけるイテレーションごとに、「α」及び「k」における収束グラフ「^G」を生成する(第2アルゴリズムの第5行目)。
【0077】
探索部13は、「(α,k)-plex」を収束グラフ「^G」から見つけるため、第2アルゴリズムにおけるイテレーションごとに、BRANCH関数を呼び出す(第2アルゴリズムの第7行目)。BRANCH関数の戻り値がない(戻り値が空集合である)場合、探索部13は、最大の「k-plex」として、前回の探索結果「(α-1,k)-plex」を判定部14に出力する(第2アルゴリズムの第9-10行目)。
【0078】
BRANCH関数の戻り値がある(戻り値が空集合でない)場合、決定部11がサイズ「α」を増加させる。探索部13は、最大の「k-plex」が見つかるまで、「(α,k)-plex」を繰り返し探索する(第2アルゴリズムの第3-14行目)。
【0079】
次に、第2アルゴリズムにおけるサブルーチン(第3アルゴリズム)について説明する。
図11は、実施形態における、第3アルゴリズムの手順例を示す図である。また、
図12は、実施形態における、第3アルゴリズムの手順例を示すフローチャートである。第3アルゴリズムは、「(α,k)-plex」を探索するアルゴリズムである。第3アルゴリズム(BRANCH関数)は、削減処理(第3アルゴリズムの第6行目)と、分岐処理(第3アルゴリズムの第8-15行目)とを含む。
【0080】
削減処理では、探索部13は、第1アルゴリズムのMERGE関数を用いて、グラフのサイズを削減する(第3アルゴリズムの第6行目)。削減処理の再帰後に収束グラフ「^G」のノードの個数「n」が「α」である場合、BRANCH関数は、グラフ「^G」を、戻り値「(α,k)-plex」とする。収束グラフ「^G」のノードの個数「n」が「α」未満である(ノードの個数が「α」でない)場合、BRANCH関数の戻り値はない(戻り値は空集合である)(第3アルゴリズムの第2-5行目)。
【0081】
分岐処理では、探索部13は、BRANCH関数においてBRANCH関数を再帰的に呼び出すことによって、「VG*」のノードを1個ずつ削除する。グラフ「Gcurr」が空集合でない場合、BRANCH関数は、グラフ「Gcurr」を、戻り値「(α,k)-plex」とする(第3アルゴリズムの第8-15行目)。
【0082】
次に、第2アルゴリズム及び第3アルゴリズムの効率性及び正確性について説明する。
定理「1」
第3アルゴリズムを含む第2アルゴリズムの実行に必要とされる計算時間(処理量)は、「O(τ(|V^G|+|F^G|(α-k)))」である。ここで、「τ」は、第3アルゴリズムを実行するためのBRANCH関数を第2アルゴリズムにおいて探索部13が呼び出した回数を表す。
【0083】
定理「1」の証明
探索部13は、BRANCH関数において、MERGE関数を呼び出す(第3アルゴリズムの第6行目)。第1アルゴリズムの計算時間は、補題「3」によって、「O(|F^G|・(α-k)」である。探索部13は、「(α,k)-plex」を求めるために、第3アルゴリズムにおけるイテレーションを、「|V^G|」回実行する(第3アルゴリズムの第8-15行目である)。したがって、第3アルゴリズムを含む第2アルゴリズムの実行に必要とされる計算時間は、「O(τ(|V^G|+|F^G|(α-k)))」である。
【0084】
スケールフリー性によって、第1アルゴリズムの計算時間「O(|F^G|)」は「O(|VG|/(α-k)(γ-1))」と近似されるので、定理「1」に基づいて導かれた計算時間「O(τ(|V^G|+|F^G|(α-k)))」は、「O(τ|VG|(1+1/(α-k)(γ-2)))」と近似できる。
【0085】
このような場合、実用的には、計算時間「O(1+1/(α-k)(γ-2))は「O(1)」と近似できるので、「O(τ|VG|)」という時間で、探索部13は探索処理を実行可能である。ここで、理論的には、BRANCH関数が呼び出された回数「τ」は「|VG*|」に依存する。探索の過程において「|VG*|」の値が動的に減少するので、実際の回数「τ」は、「|VG*|」の値よりも遥かに小さい。これによって、探索装置1が実行する探索方法は、ノードの個数に対して、おおよそ線形のスケーラビリティを持つ。
【0086】
定理「2」
探索部13は、最大の「k-plex」を、収束グラフから正確に抽出する。
【0087】
定理「2」の証明
削除部12は、収束グラフ「^G」を構築する(第2アルゴリズムの第5行目)。第2アルゴリズムの第3行目に示されたように、定義「4」に基づいて、収束グラフ「^G」の構築のために、削除部12は不毛ノードの削除のみを実行する。「(α,k)-plex」に不毛ノードが含まれないことは、定義「3」から明らかである。
【0088】
探索部13は、BRANCH関数を呼び出す(第2アルゴリズムの第7行目、第3アルゴリズムの第1-16行目)。第3アルゴリズムの第8-15行目に示されているように、探索部13は、収束グラフ「^G」においてノード「v∈^G」を逐次選択することによって、「(α,k)-plex」を収束グラフ「^G-v」から探索する。
【0089】
補題「1」に示されているように、スーパーノード「s」にノード「v」が含まれている場合、スーパーノード「s」における全てのノードは「^G-v」におけるいずれの「(α,k)-plex」にも含まれない。そのため、第3アルゴリズムにおいて直接的に分岐探索されないノード(第3アルゴリズムの第8行目)が存在しても、探索部13は、第2アルゴリズムにおけるイテレーションにおいて、全ての「(α,k)-plex」を探索できる。したがって、探索部13は、最大の「k-plex」を、収束グラフから正確に抽出する。
【0090】
以上のように、決定部11は、与えられたグラフにおける1以上の「k-plex」(部分グラフ)のうちの最大の「k-plex」のサイズを決定する。削除部12は、いずれの「k-plex」にも含まれない不毛ノードを、与えられたグラフから削除する。探索部13は、不毛ノードが削除されたグラフ(収束グラフ)において、サイズ「α」の「k-plex」を探索する。
【0091】
探索部13は、不毛ノードが削除されたグラフにおけるノード対(安全併合ノードの組み合わせ)を併合してもよい。探索部13は、ノード対が併合されたグラフにおいて、サイズ「α」の「k-plex」を探索してもよい。
【0092】
判定部14は、「k-plex」の探索を継続するか否かを判定する。例えば、判定部14は、探索の繰り返しごとにサイズ「α」を増加させ、サイズ「α」の「k-plex」がグラフにおいて見つからなくなった場合、「k-plex」の探索を終了すると判定してもよい。
【0093】
このように、探索装置1は、与えられたグラフにおける最大の「k-plex」に同時に含まることのないノード(安全統合ノード)の集合を効率よく探索することによって、与えられたグラフのサイズを削減する。これによって、与えられたグラフにおける最大の「k-plex」を探索する速度を向上させることが可能である。
【0094】
(ハードウェア構成)
図13は、実施形態における、探索装置1のハードウェア構成例を示す図である。探索装置1の各機能部のうちの一部又は全部は、CPU(Central Processing Unit)等のプロセッサ200が、不揮発性の記録媒体(非一時的な記録媒体)を有する記憶部300に記憶されたプログラムを実行することにより、ソフトウェアとして実現される。プログラムは、コンピュータ読み取り可能な記録媒体に記録されてもよい。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ROM(Read Only Memory)、CD-ROM(Compact Disc Read Only Memory)等の可搬媒体、コンピュータシステムに内蔵されるハードディスク、及び、ソリッドステートドライブ(Solid State Drive)等の記憶装置などの非一時的な記録媒体である。
【0095】
通信部400は、探索装置1による処理結果を外部装置(不図示)に送信する。通信部400は、通信回線を経由してプログラムを受信してもよい。表示部500は、探索装置1による処理結果を表示する。表示部500は、例えば、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイである。
【0096】
探索装置1の各機能部のうちの一部又は全部は、例えば、LSI(Large Scale Integrated circuit)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)又はFPGA(Field Programmable Gate Array)等を用いた電子回路(electronic circuit又はcircuitry)を含むハードウェアを用いて実現されてもよい。
【0097】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【産業上の利用可能性】
【0098】
本発明は、ソーシャルネットワークにおけるユーザの行動を分析する装置に適用可能である。
【符号の説明】
【0099】
1…探索装置、11…決定部、12…削除部、13…探索部、14…判定部、101…部分グラフ、102…部分グラフ、200…プロセッサ、300…記憶部、400…通信部、500…表示部