(58)【調査した分野】(Int.Cl.,DB名)
前記グラフの前記圧縮表現を生成することが、前記グラフにおいて、クリーク擬似頂点によって前記発見されたクリークのセット内の各クリークを置き換えることをさらに備える、請求項1に記載の方法。
コンピュータによって実行されたときに前記コンピュータにグラフの表現を圧縮する方法を実行させる命令を記憶する持続性コンピュータ可読記憶媒体において、前記方法が、
頂点及びエッジを含むグラフを表すデータ構造を持続性記憶媒体に記憶することと、
前記グラフ内の最大クリークを特定することであって、前記最大クリークが前記グラフ内の頂点の完全に接続された最大残存サブセット又は最大残存クリークへの近似であることと、
前記特定されたクリークを発見されたクリークのセットに追加することと、
前記グラフから前記特定されたクリークを除去することと、
前記特定された最大クリークのサイズが停止基準未満であること又は前記グラフ内に頂点が残存していないことの判定に応答して、
前記発見されたクリークのセット内のクリークを順序付けることと、
前記発見されたクリークのセット内のクリークに属している頂点のセットを順序付けることと、
前記発見されたクリークの順序付けられたセット及び前記順序付けられた頂点のセットに基づいて前記グラフの圧縮表現を生成することと、
前記持続性記憶媒体に前記グラフの圧縮表現を記憶することと
を備える、持続性コンピュータ可読記憶媒体。
前記グラフの前記圧縮表現を生成することが、前記グラフにおいて、クリーク擬似頂点によって前記発見されたクリークのセット内の各クリークを置き換えることをさらに備える、請求項5に記載の持続性コンピュータ可読記憶媒体。
前記グラフの前記圧縮表現を生成することが、前記グラフにおいて、クリーク擬似頂点によって前記発見されたクリークのセット内の各クリークを置き換えることをさらに備える、請求項9に記載のコンピュータシステム。
【発明を実施するための形態】
【0013】
図面において、同様の参照符号は同じ図要素を指している。
【0014】
以下の説明は、当業者が実施形態を作製して使用するのを可能とするように提示され、特定の用途及びその要件の文脈において提供される。開示された実施形態に対する様々な変更は、当業者にとって容易に明らかであり、本願明細書において定義される一般的な原理は、本開示の精神及び範囲から逸脱することなく他の実施形態及び用途に適用されることができる。それゆえに、本発明は、示された実施形態に限定されるものではなく、本願明細書において開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0015】
概要
本発明の実施形態は、グラフを符号化するためにその後に使用される大きなクリークを特定することによって高速並列グラフ圧縮を実行するという問題を解決する。システムはまた、正確で高速でヒューリスティックなクリーク発見方法を提供することができる。これらの方法は、1億ノードもの多数の実世界グラフにわたってグラフサイズにおいてほぼ線形にランタイムでスケーリングすることが本発明者らによって観察されている。動作中において、システムは、グラフの頂点及びエッジを示すデータを取得する。システムは、グラフ内の最大クリークを特定するためにクリーク発見方法を実行する。そして、システムは、グラフからクリークを除去し、発見されたクリークのセットにクリークを追加し、発見されたクリークのセットに基づいてグラフの圧縮表現を生成する。
【0016】
システムは、コンピューティング技術と、グラフを含む任意の計算を実行するコンピュータの能力とを向上させる。本願明細書において開示されるシステム及び方法は、事実上全てのグラフ計算において使用されるグラフプリミティブ演算の計算速度を大幅に向上させることができ、それにより、一般にグラフ計算を改善することができる。同様に、システムは、グラフをコンパクトに表現することができるため、キャッシュを改善することができ、グラフ計算の全体的な性能を大幅に向上させることができる。さらに、例えばCPUからGPUへの入力/出力コストを削減することができる。そのようなグラフ圧縮技術の多くの用途及び利点がある。例えば、システムは、かなり大きなグラフ計算を記憶して処理するためのGPUなどの並列コンピューティングアーキテクチャの能力を向上させることができ、又は、グラフデータの視覚化を改善することができる。
【0017】
図1Aは、クリークを含むグラフの例を示している。示されるように、グラフ100は、ノードとも称される102などの頂点と、リンク又は接続部とも称される104などのエッジとを含むことができる。
図1Bは、グラフ100における2つのクリークの特定を表している。クリークは、完全に接続されたグラフ内の頂点のサブセットとして定義される。すなわち、クリーク内の各頂点は、グラフ100内の2つのクリーク106及び108について、
図1Bに示されるように、クリーク内の全ての他の頂点に対するエッジを有する。本発明の実施形態は、実世界のグラフが大抵の場合に大きなサイズの多くのクリークを形成するという観察に基づいて、GraphZIPと称されるグラフ圧縮及び符号化フレームワークを提供する。システムは、永続的に記憶され且つメモリ内の双方のグラフ符号化を提供し、グラフを表現して記憶するのに必要な空間、グラフを使用するためのI/Oトラフィック、及びグラフを含むアルゴリズムの実行に必要な計算量を削減する。
【0018】
システムアーキテクチャ
図2は、実施形態にかかるグラフ圧縮方法を利用するグラフ計算システム200の例示的なアーキテクチャを示すブロック図を表している。グラフ計算システム200は、複数のプロセッサを使用して、グラフの頂点を分割して符号化されたグラフ上で圧縮又は他の計算を実行することができる。グラフ計算システム200は、推薦を生成するなどの様々な用途を容易とするためにグラフプリミティブ演算を実行することができる。標準システムにおいて、システム200は、グラフの全ての頂点及びエッジを記憶する。しかしながら、本願明細書において開示された方法を使用して、システム200は、グラフの圧縮表現を利用し、それにより、記憶及び性能を改善する。
【0019】
グラフ計算システム200は、サーバ206に結合された記憶装置204にインストールされたグラフ管理モジュール202を含むことができる。本発明の様々な実装形態は、任意数のサーバ及び記憶装置を含むことができることに留意されたい。様々な実装において、グラフ管理モジュール202は、本願明細書に記載された技術を実行するためにグラフ符号化モジュール又はグラフ計算システム200の他の要素を含むことができる。システム200は、頂点及びエッジ又はグラフ符号化を記述するデータを受信し、そのようなデータを記憶装置204に記憶することができる。システム200は、グラフ管理モジュール202についてのコード、頂点、エッジ及びグラフ符号化についてのデータ208を記憶装置204から読み出すことができる。システム200は、頂点、サブグラフ又は計算を動的に分割し、割り当てられた頂点、サブグラフ又は計算において動作するプロセッサ210A−210Hなどのプロセッサにそれらを割り当てることができる。
【0020】
記憶及び計算省力特徴
図3は、本発明のいくつかの実施形態にかかる
図1Bにおいて特定された2つのクリークの符号化を示している。本発明の実施形態において、システムは、グラフからクリークを除去することによってメモリ又は永久記憶装置のいずれかにグラフを記憶するのに必要な空間量を大幅に削減する。例えば、システムは、各クリークCに属している全ての頂点が連続的に順序付けられるように頂点を並べ替えることによってグラフを表すことができる。さらに、いくつかの実施形態において、システムは、例えば、グラフ内の頂点の順序付けの終了時に順序付けられることができるクリークを表す擬似頂点のセットとしてクリークを別個に記憶することができる。これは、
図3に概略的に示されており、クリーク擬似頂点302及び304は、それぞれ、
図1Bからのクリーク106及び108を表している。
【0021】
そして、実際の頂点は、各クリークC
1及びC
2に属している実際の頂点の各サブセットがクリークC
1及びC
2を表す擬似頂点の順序に一致するように順序付けられることができる。例えば、C
1及びC
2が擬似頂点の順序における最初の2つのクリークである場合、順序における第1の頂点は、(v
k+1,・・・,v
k+m)∈C
2が後に続く(v
1,・・・,v
k)∈C
1である。ここで、k=|C
1|であり且つm=|C
2|である。これは
図3に示され、頂点(v
1,・・・,v
5)は、クリーク106を表す擬似頂点302に関連付けられており、頂点(v
6,・・・,v
9)は、クリーク108を表す擬似頂点304に関連付けられている。これらの実施形態において、定義によってクリークが完全に接続されるように知られていることから、クリーク内のエッジを表す必要はもはやない。
【0022】
これらの実施形態において、クリーク内の個々の頂点を表すことも不要である。代わりに、システムは、例えば1からkまでの全てのインデックスがクリークC
1に関連付けられているなど、クリークに関連付けられた頂点インデックスの範囲を単に表すことができる。これは、グラフ100並びにクリーク106及び108の符号化を表す表1によって示されている。実際のグラフは、多くの大きなクリークを有する傾向があることから、そのような表現は、表からわかるように、かなりの記憶装置及びメモリを節約する。
【0023】
同様に、グラフ上で実行される事実上全ての計算は、グラフプリミティブとして知られる基本的な演算を利用する。本システム及び方法は、そのようなグラフプリミティブの計算上の複雑さを大幅に低減することができ、したがって、それらを高速化することができる。そのようにすることにより、システムは、全体的なグラフ計算を大幅に高速化することができる。
【0025】
例えば、頂点が所定のクリークCに属しているかどうかを検査することは、クリーク全体にわたるバイナリ探索を行うことにより、クリークのサイズが時間の対数、すなわちO(log|C|)をとることができる。本発明の実施形態において、同じ探索は、開示された方法にかかる圧縮符号化における頂点のインデックスがクリークCに関連付けられた範囲内であるかどうかを単に検査することによって一定時間、すなわちO(1)をとることができる。例えば、頂点v
3がクリーク106に属しているかどうかを検査するために、それは、表1における圧縮表現の第1の行を検査するために十分であろう。表1が示すように、1は、グラフ100内の第1のクリーク106に属している第1の頂点インデックスであり、6は、グラフ100内の第2のクリーク108の第1のインデックスであり、そのため、1から5までの範囲のインデックスを有する全ての頂点は、クリーク106に属している。したがって、インデックス3を有する頂点v
3は、クリーク106に属している。
【0026】
同様に、システムは、グラフ及びそのクリークをよりコンパクト且つ効率的に表現することができるため、一般にキャッシュ及び性能を向上させることができる。例えば、2つの頂点が接続されているかどうかを検査することなどのグラフプリミティブは、頻繁に実行される必要がある。したがって、本発明の実施形態にかかる圧縮されたクリーク又は同様の情報の符号化は、キャッシュメモリに記憶されることができる。特に、表1の右側列に示されるものなどのクリークの非常に効率的な表現がキャッシュされることができる。キャッシュ性能を向上させることにより、システムは、グラフ計算の全体的な性能を大幅に改善することができる。さらに、例えばCPUからGPUへの入力/出力コストもまた低減されることができる。
【0027】
そのようなグラフ圧縮技術の多くの用途及び利点がある。例えば、GPUなどの並列コンピューティングアーキテクチャは、メモリが限られており、したがって、本願明細書において開示された方法によって著しく大きなグラフを処理することができる。非常に重要なことに、本方法は、大きなデータに対して効率的であり、共有及び分散メモリアーキテクチャの双方について容易に並列化される。グラフ圧縮方法は、数十億以上エッジを有する巨大データに対して非常にスケーラブルであり、CPU、GPU及び分散アーキテクチャにおける実装に容易に対応することができる。
【0028】
本方法はまた、推薦システム、リンク予測、相関分析、グラフ/データクラスタリング及びロール発見などの用途にも有益であり得る。本方法はまた、上述した時間及び空間の改善を超えて様々な用途を有する。例えば、大きなクリークは、他の重要な構造的特性を明らかにするために組み合わせることができるため、グラフデータをより良好に視覚化するために本方法を使用することができる。
【0029】
一般化されたECSC表現
本発明の実施形態において、システムは、一般化エッジベース圧縮疎列(ECSC)符号化を利用することができる。符号化は、従来のECSC符号化とは異なり、元のグラフ内のクリークを表す擬似頂点を含むことから一般化される。
【0030】
行列としての従来のグラフ符号化は、頂点インデックスによってインデックス付けされ、1という要素は、行番号及び列番号によってインデックス付けされた頂点間のエッジを示し、ゼロはそのようなエッジを表さない。この行列符号化において、対角線はゼロであり、行列はもちろん対称である。従来のECSC符号化は、このグラフ行列に圧縮疎列(CSC)行列符号化を適用する。CSCは、行インデックス配列内のそのような各要素についての行インデックスを符号化することによって非ゼロ行列要素の位置を符号化し、新たな列を開始する行インデックス配列内の各要素のインデックスを保持する列ポインタ配列を符号化する。
【0031】
ECSC符号化は、上述したように符号化された隣接者の配列を含む。それはまた、エッジID配列、(隣接者配列からの)非固有エッジインデックス配列を含む。隣接者配列における重複エッジは、エッジマップ配列へのポインタとして機能する固有エッジIDが割り当てられる。これは、2つの重要な特徴を提供する。まず、エッジIDは、CSCからエッジマップ配列内のそれらの固有位置に重複エッジをマッピングする射影関数であることに留意されたい。さらに、エッジIDはまた、特定のエッジの頂点が連続的に記憶されてO(1)の時間にアクセスされることができるエッジマップ配列を指す。この機能は、CSCを使用する際の柔軟性を提供するとともに、O(1)における固有エッジ及びそれらの頂点へのランダムアクセスも提供する。エッジ−CSCは、O(|E|)時間をとって構築するために効率的であることに留意されたい。ここで、|E|は、エッジの数(ディスク又はCSCからの読み取り時)である。
【0032】
本発明の実施形態において、システムは、一般化されたECSC符号化を利用することができる。一般化されたECSCにおいて、クリーク擬似頂点又はクリーク頂点と称される新たな頂点種類が導入されることがある。直感的に、クリーク頂点は、グラフG内のクリークCを表す。システムは、クリーク及び頂点の順序を使用することができ、クリーク頂点(クリーク擬似頂点)の最小インデックス(又はID)は、v
n+1から開始する。ここで、v
nは任意の実際の頂点の最大IDである。すなわち、グラフ内の頂点のセットは、V={v
1,・・・v
n,v
n+1,・・・}である。ここで、v
1からv
nは、実際の頂点であり、v
n+1及び順序における全ての後続頂点は、クリーク頂点である。このように、アルゴリズムがインデックスnを把握している限り、それは、頂点がクリーク頂点であるか否かを迅速に判定することができる。後者の場合、後続イテレータは、クリークの定義を調べ、その後、正しい後続生成のためにそのクリーク内の全てのノードにわたって反復する。通常の頂点の隣接者がクリーク頂点である場合、イテレータは、クリーク頂点の隣接者を検索しなければならない。
【0033】
上述した一般化されたECSC符号化は、特殊なケースとして元のECSC表現、すなわち、グラフ内にクリーク(それゆえに擬似頂点)が存在しない場合を含む。しかしながら、1つ以上のクリークが存在する場合、提案されたクリーク圧縮技術は、グラフを記憶するために必要な空間を削減することが保証される。
【0034】
図4は、本発明の実施形態にかかる、一般化されたECSC表現によるグラフ100内の頂点及びクリークの例示的な符号化400を表している。
図4は、
図3に示される直観的符号化をより詳細に示している。
図4の第1の行における頂点リスト402によって示されるように、システムは、グラフ100内の9つの頂点を表すために9つの実際の頂点(v
1,・・・v
9)による符号化を使用することができる。さらに、頂点リスト402は、それぞれクリーク106及び108を表す2つのクリーク擬似頂点v
10及びv
11を含む。
【0035】
図4の次行は、リスト402における各頂点について、ポインタターゲットの配列406内の隣接頂点のインデックスを示すポインタ配列404を表している。したがって、例示的な符号化は、グラフ100を符号化するために使用される9つの実際の頂点及び2つの擬似頂点について、合計11個のポインタを記憶しなければならない。
【0036】
最後に、
図4の最後の行は、本発明の実施形態における符号化によってリスト402内の頂点に関連付けられた実際の頂点又は擬似頂点を表すポインタターゲット406の配列を示している。
図4からわかるように、実際の頂点(v
1,・・・v
4)は、クリーク106を表すクリーク擬似頂点v
10による符号化によって関連付けられる。実際の頂点v
5は、クリーク108に属している実際の頂点v
6と関連付けられ、同様に、頂点v
6は、頂点v
5と関連付けられる。実際の頂点(v
7,v
8,v
9)は、クリーク108を表すクリーク擬似頂点v
11による符号化によって関連付けられる。最後に、クリーク擬似頂点v
10及びv
11は、各クリーク106及び108に含まれる最初に順序付けられた実際の頂点であるv
1及びv
6と関連付けられる。ポインタターゲット配列406における最後のエントリは、クリーク108に含まれるものの後の最初に順序付けられた頂点であるv
10であることに留意されたい。
【0037】
グラフ圧縮方法
図5は、本発明の実施形態にかかるグラフを圧縮する方法を示すフローチャート500を表している。動作中において、システムは、グラフの頂点及びエッジを示すグラフデータ及び停止基準を取得する(動作502)。そして、システムは、最大クリークを発見するためにクリーク発見方法を実行する(動作504)。最大クリークは、グラフ内の最大残存クリーク又は最大残存クリークに対する近似値として定義される。最大残存クリークに対する近似は、大きな残存クリークとすることができ、又は、クリークに近い頂点の大きなセット(すなわち、完全に接続される必要がある僅かな割合のエッジを欠いている密に接続された頂点のセット)とすることができる。
【0038】
いくつかの実施形態において、クリーク発見方法は、正確であり、所定のグラフ内に正確な最大クリークを配置することができる。いくつかの実施形態において、クリーク発見方法は、近似又はヒューリスティックとすることができる。入力としてのグラフを考えると、クリーク発見方法は、正確で近似的な又はヒューリスティックな最大クリークを出力として返すことができる。正確なクリーク発見方法を提供する実施形態において、システムは、グラフの無損失圧縮を提供することができるが、これは、一般に、より高い計算コストを有する。ヒューリスティックなクリーク発見方法を提供する実施形態において、システムは、一般により低い計算コストを有する若干の損失を有する圧縮を提供することができる。正確なクリーク発見を提供する実施形態において、システムはまた、例えば、システムがより大きなクリークを発見して除去することができるため、より良好な圧縮比を提供することもできる。
【0039】
次に、システムは、発見された最大クリークを発見されたクリークのセットに追加することができる(動作506)。発見されたクリークのセットは、これまでにシステムによって発見されたクリークについてのラベルを符号化することができる。システムはまた、発見されたクリークに属している頂点を追跡することもできる。いくつかの実施形態において、システムは、グラフの頂点を並べ替えることができる。例えば、システムは、発見されたクリークの順序に一致するように発見されたクリークに属している頂点を並べ替えることができる。
【0040】
いくつかの実施形態において、システムは、次に、グラフから発見された最大クリークを除去することができる(動作508)。システムは、全ての頂点がグラフから除去されたかどうか、又は、発見された最大クリークが停止基準δよりも小さいかどうかを検査することができる(動作510)。そうである場合、システムは、符号化スキームによって使用するために発見されたクリークのセット及び発見されたクリークに属している頂点を返すことができる(動作512)。頂点がグラフ内に残存しており、発見された最大クリークが少なくとも停止基準と同じサイズである場合、システムは、動作504に戻ることができる。すなわち、システムは、その後の最大クリーク(グラフから以前に発見されたクリークを除去した後の正確な又は近似した最大残存クリーク)を発見するためにクリーク発見方法を実行することができる。
【0041】
停止基準δは、クリークが大幅な圧縮を提供するのに十分なサイズであるかどうかを判定するために発見されたクリークのサイズと比較される数である。一般に、クリークが大きいほど、本発明の実施形態にしたがってクリークを除去することによって及び/又はクリークを符号化することによってより多くの圧縮が提供される。サイズ|C|>2のクリークは、空間及び入力/出力コストを削減することができ且つグラフ計算の性能を向上させることができるため有益であり、それゆえに、システムは、クリークがサイズ|C|=3以上であるのを必要とすることがある。同等に、システムは、少なくとも3まで停止基準δを設定することができる。停止基準δはまた、圧縮方法500のグラフの圧縮と計算コストとの間のバランスを提供することができる。一般に、グラフ内の最大クリークは、最大圧縮を提供する。それゆえに、δを小さく設定することは、方法500の追加の計算コストにおいて追加の圧縮を提供する。
【0042】
図6は、本発明の実施形態にかかる実際のデータセットにおけるクリーク特定を示している。この図は、本発明者らによる実際のグラフデータについて実行されたいくつかのヒューリスティック且つ正確なクリーク発見方法についての方法400の発見されたクリークのサイズ対反復数を表している。実験において、本発明者らはまた、グラフの半分以上において正確な方法と同じ最大クリークサイズを見出すためにヒューリスティックなクリーク発見方法を観察した。さらに、本発明者らは、正確な圧縮よりも2−3倍高速な良好な圧縮を提供するためにヒューリスティックな方法を観察した。本発明者らは、システムが疎グラフ並びに密グラフの双方を圧縮するのに有効であることを観察した。
【0043】
2つのクリークが著しく重複している場合、圧縮された符号化において双方を使用する利点はほとんどないことに留意されたい。しかしながら、数個のみの頂点と重複するクリークを可能とすることにより、これらのクリークを発見して著しい重複がないのを保証するために追加の計算コストを犠牲にして空間のさらなる削減を可能とすることができる。したがって、方法500のステップ508におけるように発見されたクリークを全体的に除去する代わりに、いくつかの実施形態において、システムは、クリークが許容量以上に重複するかどうかを判定するために重複閾値割合θを使用することができる。いくつかの実施形態において、システムは、重複するクリークが許容されるかどうかを判定するためにθに対してスコアリング関数を比較することができる。例えば、|C
1∩C
2|/|C
1∪C
2|などのスコアリング関数がθに対して比較されることができる。
【0044】
クリークを発見する方法
ステップ504において実行されるクリーク発見方法は、正確であるか、近似であるか又はヒューリスティックとすることができる。いくつかの実施形態において、本方法は、グラフ若しくはサブグラフと関連付けられたk−コア数又は縮退に基づいて又はk−カラーリングに基づいて頂点を順序付けることができる。いくつかの実施形態において、システムは、グリーディカラーリング又は隣接又は距離−2カラーリングから独立したセットを取得することができる。いくつかの実施形態において、正確なクリーク発見方法は、ヒューリスティック方法に由来することができる最大クリークについての初期の推測を使用する分岐限定方法である。
【0045】
いくつかの実施形態において、ヒューリスティックなクリーク発見方法は、グラフ内の頂点についてのk−コア数を取得し且つk−コア数を減少させるためにグラフ頂点を介してステッピングすることによって進行する。各頂点が十分に大きなコア数を有する場合、システムは、各頂点を含む候補クリークを形成することができる。システムは、各頂点の隣接者を調べ且つ十分に大きなコア数を有するそれらの隣接者を特定することによって候補クリークを探索することができる。いくつかの実施形態において、システムは、コア数がこれまで発見された最大クリークの又は他の候補クリークのサイズを超えているかどうかを判定することにより、頂点又はその隣接者が十分に大きなk−コア数を有するかどうかを判定することができる。
【0046】
システムは、十分に大きなコア数を有する隣接者を介して進むことができ、各隣接者が候補クリーク内の全ての頂点に接続されている場合、候補クリークに対して各隣接者を追加することができる(すなわち、候補クリークが、隣接者の追加によってクリークを残す)。隣接者を介して進んだ後、システムは、候補クリークを発見されたクリークのセットに追加することができる。システムはまた、そのサイズがこれまでに発見された最大クリークを超えている場合、候補クリークを最大クリークとして指定することもできる。
【0047】
いくつかの実施形態において、正確なクリーク発見方法は、グラフ内の頂点についてのk−コア数を計算することによって進行する。そして、システムは、グラフ内の近似最大クリークを特定するために上述したヒューリスティックなクリーク発見方法を使用することができる。そして、システムは、近似最大クリークのサイズよりも小さいコア数を有する頂点をグラフから除去することができる。そして、システムは、グラフ内に残存している最小の縮小次数を有する頂点を特定することができる。縮小された頂点の次数は、任意の他の頂点が除去された後の頂点の次数を指す。システムは、特定された頂点に基づいて分岐方法を実行することができ、候補最大クリークの成長をもたらすことができる。そして、システムは、特定された頂点をグラフから除去するか又はそれらを枝刈りしたものとしてマーキングすることができ、グラフから頂点を定期的に明示的に除去することができる。最後に、システムは、残存頂点を介して停止することができ、特定、分岐及び除去ステップを繰り返すことができる。いくつかの実施形態において、システムは、グラフが空になるまでこれらのステップを繰り返すことができる。最後に、システムは、グラフ内の最大クリークとして候補最大クリークを特定することができる。
【0048】
特定された頂点に対する分岐方法は、頂点の縮小した隣接グラフ(すなわち、まだグラフから枝刈りされていない頂点及び全てのその隣接者に対応するサブグラフ)を特定することによって進めることができる。特定された縮小した隣接グラフのサイズが候補最大クリークよりも大きい場合、分岐は、この縮小した隣接グラフ内の最大コア数を求めることによって進めることができる。そして、分岐方法は、縮小した隣接グラフから候補最大クリークのサイズよりも小さいコア数を有する任意の頂点を除去することができる。そして、分岐方法は、縮小した隣接サブグラフのカラーリングについての多数の色を取得することができる。いくつかの実施形態において、このカラーリングは、グリーディ又はヒューリスティックなカラーリングとすることができる。
【0049】
色数が候補最大クリークのサイズよりも大きい場合、分岐方法は、頂点を介して進むことができ、縮小した隣接サブグラフから各頂点を除去することができ、候補クリークにそれを追加することができる。この候補クリークが最大でない場合、分岐方法は、さらに分岐することができる。この候補クリークが最大であり且つ以前に特定された最大クリークよりも大きい場合、分岐方法は、新たな最大クリークとして候補クリークを特定することができる。
【0050】
クリーク発見及びグラフ圧縮の並列化
いくつかの実施形態において、ステップ504において使用されるクリーク発見方法は、並列に実行されることができる。クリーク発見方法が直列に実行される場合、発見されたクリークは、後続のクリークを探索する前に除去されることができ、そのため、重複するクリークの危険性はない(すなわち、頂点を共有する)。しかしながら、並列において、システムは、異なるプロセッサによって発見されたクリークが重複しない(すなわち、頂点を共有しない)ことを確実にするために追加の方法を使用することができる。目的は、任意の各頂点について、各頂点を探索することによって発見された最大クリークが後続の頂点の探索から発見されたクリークと非重複であるように頂点の順序付けを取得することである。これは、2つの頂点が並列に探索された場合、双方のプロセッサが固有である非重複クリークを発見することを保証する。
【0051】
いくつかの実施形態において、システムは、独立したセット又はカラークラス{S
1,・・・,S
k}を発見するためにグリーディカラーリングなどのk−カラーリングを実行することができる。同じカラークラスにおける2つの頂点は、接続されることができないため、同じカラークラスS
iにおける頂点を中心とする異なるクリークは、非重複であるべきである。これは、同じカラークラス内のクリークが並列に発見されるのを可能とする。
【0052】
いくつかの実施形態において、システムは、最大クリークが典型的にはこれらの頂点から生じるため、最大のk−コアにおける頂点の最大数を含む独立したセットを選択する。そして、システムは、選択された独立したセット内の各頂点についての最大クリークを発見し、クリークのセットに追加することができる。
【0053】
しかしながら、発見後、クリークは、グラフから最初に「暗黙的に」除去されることができるか又は単に枝刈りとしてマーキングされた後に「明示的に」除去されることができることに留意されたい。したがって、固有の非重複クリークの強力な保証を提供するために、いくつかの実施形態において、システムは、プロセッサに頂点を割り当てるために距離−2カラーリングとも称される隣接カラーリングを使用することができる。隣接カラーリングにおいて、任意の2つの隣接頂点には、異なる色が割り当てられ、その隣接者にもまた、互いに異なる色が割り当てられる。したがって、同じカラークラスにおける2つの頂点は非隣接であり、それらの隣接者もまた、非重複且つ非隣接である。独立したセットは、それらの隣接が重複しないことを意味する隣接−独立セットと称される。
【0054】
図7は、クリークを発見してグラフを圧縮する方法500に対する例示的な並列変更例700を示している。本方法の多くの変形例が可能であり、多くのステップが必要とされず、用途領域、制約及びデータに依存することができることに留意されたい。
【0055】
動作中において、システムはグラフG、停止基準δを受信する(動作702)。無向グラフを考えると、システムは、各カラークラスが非隣接である頂点を含むように、k−カラーリング又は隣接カラーリングを取得することができる(動作704)。そして、システムは、第1の順序付けられたカラークラスがいくつかの関数(最大次数、三角形の数、k−コアの和など)を最大化するように、カラークラスを順序付けることができる(動作706)。そして、システムは、そのカラークラスから選択されることになる次の頂点がいくつかの関数(最大次数など)を最大化するように、独立した各カラークラス内の頂点を順序付けることができる。そして、システムは、順次独立した各セットにわたってサイクルすることができ、そのセットから順次次の頂点を選択することができる(動作708)。そして、システムは、選択された頂点の隣接を取得することができる。そして、システムは、高速ヒューリスティックなクリークファインダーへの入力として隣接を使用することができ、最大クリークを取得することができる(動作710)。そして、システムは、探索から取得されたクリークを除去することができる(すなわち、クリークの頂点は、全ての独立したセットから除去されることができる)。この除去は、枝刈りされた頂点の配列におけるクリークの頂点をマーキングすることによって簡単に行うことができ(動作712)、O(1)時間で検査されることができる。そして、システムは、順次次のカラークラスから頂点を選択することによって上記ステップを繰り返すことができる。システムは、頂点が各カラークラスから選択されるまで、これを繰り返すことができる(動作714)。その後、単一のプロセッサは、枝刈りされた配列を使用してグラフを縮小することができ、この更新されたグラフをプロセッサに対して送信することができる(動作716)。各クリークが発見された後、それは、発見されたクリークのセットに追加されることができる(又は単一のプロセッサによって記憶媒体に書き込むことができる)。このプロセスは、停止基準δよりも大きいクリークがこれ以上存在しない場合に停止する。終了すると、発見されたクリークのセットは、メモリ内のグラフを効率的に表すために又は記憶装置にグラフを記憶するために使用されることができる。
【0056】
例示的な装置
図8は、いくつかの実施形態にかかる、グラフ圧縮を容易とする例示的な装置800を示すブロック図を表している。装置800は、有線又は無線通信チャネルを介して互いに通信することができる複数のモジュールを備えることができる。装置800は、1つ以上の集積回路を使用して実現されることができ、
図8に示されるものよりも少ない又は多いモジュールを含むことができる。さらに、装置800は、コンピュータシステムに内蔵されることができ、又は、他のコンピュータシステム及び/又は装置と通信することができる別個の装置として実現されることができる。具体的には、装置800は、クリーク発見モジュール802と、クリーク及び頂点順序付けモジュール804と、グラフ符号化モジュール806と、グラフプリミティブコンピューティングモジュール808と、グラフカラーリングモジュール810とを備えることができる。装置800はまた、
図8には示されていない追加のモジュールを含むことができることに留意されたい。
【0057】
いくつかの実施形態において、クリーク発見モジュール802は、大きなクリークを発見することができる。クリーク及び頂点順序付けモジュール804は、クリークを順序付けることができ、及び/又は、クリーク順序付けに一致するように頂点を順序付けることができる。グラフ符号化モジュール806は、グラフ、圧縮グラフ又はクリークの表現を符号化することができる。グラフプリミティブコンピューティングモジュール808は、グラフの圧縮表現にしたがって、頂点がクリークに属しているかどうかを検査することなど、グラフプリミティブを計算することができる。グラフカラーリングモジュール810は、グラフ又はサブグラフのk−カラーリング、グリーディカラーリング及び/又は隣接カラーリングを取得することができる。
図2に示されたグラフ管理モジュール202は、
図8に示された様々なモジュールの任意の及び全ての機能を提供してもよいことに留意されたい。
【0058】
例示的なシステム
図9は、いくつかの実施形態にかかる例示的なグラフ圧縮コンピュータシステム902を示している。いくつかの実施形態において、コンピュータシステム902は、サーバとすることができる。いくつかの実施形態において、システム902は、プロセッサ904と、メモリ906と、記憶装置908とを含む。いくつかの実施形態において、904は、プロセッサのセットを含むことができる。記憶装置908は、本発明の実施形態にかかるグラフ圧縮を利用することができるアプリケーション934及び936などの多数のアプリケーションと、オペレーティングシステム916とを記憶することができる。記憶装置908はまた、クリーク発見モジュール920と、クリーク及び頂点順序付けモジュール922と、グラフ符号化モジュール924と、グラフプリミティブコンピューティングモジュール926と、グラフカラーリングモジュール928とを含むGraphZIPグラフ圧縮システム918を記憶する。システム902は、グラフ圧縮システム918に対してアクセス可能なメモリ部に頂点及びエッジデータを生成してコピーすることができる。動作中において、GraphZIPグラフ圧縮システム918などの1つ以上のアプリケーションは、記憶装置908からメモリ906にロードされ、その後、プロセッサセット904によって実行される。プログラムの実行中において、プロセッサセット904は、上述した機能を実行する。システム902は、任意のディスプレイ910、キーボード912及びポインティングデバイス914に結合されることができる。
【0059】
いくつかの実施形態において、クリーク発見モジュール920は、大きなクリークを発見することができる。クリーク及び頂点順序付けモジュール922は、クリークを順序付けることができる、及び/又は、クリークの順序付けと一致するように頂点を順序付けることができる。グラフ符号化モジュール924は、グラフ、圧縮グラフ又はクリークの表現を符号化することができる。グラフプリミティブコンピューティングモジュール926は、グラフの圧縮表現にしたがって、頂点がクリークに属しているかどうかを検査することなどグラフプリミティブを計算することができる。グラフカラーリングモジュール928は、グラフ又はサブグラフのk−カラーリング、グリーディカラーリング及び/又は隣接カラーリングを取得することができる。
図2に示されたグラフ管理モジュール202は、
図9に示された様々なモジュールの任意の及び全ての機能を提供してもよいことに留意されたい。
【0060】
この詳細な説明に記載されたデータ構造及びコードは、典型的には、コンピュータシステムによって使用するためのコード及び/又はデータを記憶することができる任意の装置又は媒体とすることができるコンピュータ可読記憶媒体上に記憶される。コンピュータ可読記憶媒体は、限定されるものではないが、揮発性メモリ、不揮発性メモリ、ディスクドライブ、磁気テープ、CD(コンパクトディスク)、DVD(ディジタル多用途ディスク又はディジタルビデオディスク)などの磁気及び光記憶装置、又は、現在知られているか又は今後開発されるコンピュータ可読媒体を記憶することができる他の媒体を含む。
【0061】
詳細な説明のセクションに記載された方法及びプロセスは、上述したようにコンピュータ可読記憶媒体に記憶することができるコード及び/又はデータとして具現化されることができる。コンピュータシステムがコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを読み取って実行すると、コンピュータシステムは、コンピュータ可読記憶媒体内に記憶されたデータ構造及びコードとして具現化される方法及びプロセスを行う。
【0062】
さらにまた、本願明細書に記載される方法及びプロセスは、ハードウェアモジュール又は装置に含まれることができる。これらのモジュール又は装置は、限定されるものではないが、特定用途向け集積回路(ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、特定の時間に特定のソフトウェアモジュール又はコードの一部を実行する専用又は共有プロセッサ、及び/又は、現在知られているか又は後に開発される他のプログラマブル論理デバイスを含むことができる。ハードウェアモジュール又は装置が起動される場合、それらは、それらの内部に含まれる方法及びプロセスを実行する。