(57)【要約】  システムおよび方法が、いくつかのエッジによって相互に接続されたいくつかのノードを有するグラフの形の情報を体系化し、また処理するために、提供される。アレイＥは、ノードの決定された順番の形の少なくとも１つの隣接ノードを有するグラフのノードについての隣接ノードをリストアップしている。それぞれのノードについてのアレイＥの中でリストアップされた最後の隣接ノードについてのアレイＥの中の位置は、ノードの決定された順番に基づいて、アレイＶにおける対応するエントリとしてリストアップされる。様々な態様においては、アレイＥとアレイＶとを使用して、グラフの１つまたは複数の与えられたノードの次数または隣接ノードを含めて、グラフについての情報を決定する。本明細書において開示される本システムおよび本方法は、グラフのノードについての相対的なランクを決定するために適用可能である。
2017530477.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ個のエッジによって相互に接続されるＮ個のノードを有するグラフを処理するための装置であって、前記装置は、
プロセッサと、
前記プロセッサに通信するように接続されたメモリと
を備えており、前記メモリは、１つまたは複数のデータ構造と、前記プロセッサによる実行のすぐ後に、
前記メモリにおいて、少なくとも１つの隣接ノードを有する前記グラフの前記Ｎ個のノードのうちのそれぞれのノードについての隣接ノードであって、前記隣接ノードは、前記グラフの前記Ｎ個のノードに割り当てられる決定された順番の形の少なくとも１つの隣接ノードを有する前記グラフの前記それぞれのノードについてのアレイＥの中にリストアップされる、隣接ノードをリストアップするためのＭ個のエントリを有するアレイＥを生成し、また
前記メモリにおいて、前記決定された順番の形で、前記グラフの前記Ｎ個のノードに対応しているＮ個のエントリを有するアレイＶを生成し、また前記対応するノードについてのアレイＥの中にリストアップされる最後の隣接ノードのアレイＥの中の位置をそれぞれ示すように、アレイＥの中にリストアップされる少なくとも１つの隣接ノードを有する前記グラフの前記ノードに対応しているアレイＶのエントリを入力する
ように前記プロセッサを構成する１つまたは複数の実行可能な命令と、を記憶するように構成されている、装置。
【請求項２】
前記１つまたは複数の実行可能な命令は、さらに、
エントリの直前の値が、アレイＶへと入力されたどのような隣接ノードも有していない前記グラフのノードに対応している、アレイＶの前記エントリのうちの少なくとも１つを入力する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項３】
前記１つまたは複数の実行可能な命令は、さらに、
ゼロという値を有するどのような隣接ノードも有していない前記グラフのノードに対応している、アレイＶの前記エントリのうちの少なくとも１つを入力する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項４】
前記１つまたは複数の実行可能な命令は、さらに、
アレイＶの１つまたは複数の入力されたエントリから前記グラフの前記Ｎ個のノードのうちの与えられたノードｉの次数を決定する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項５】
前記１つまたは複数の実行可能な命令は、さらに、
前記与えられたノードｉの前記次数としてアレイＶから値Ｖ［ｉ］−Ｖ［ｉ−１］を計算する
ように、前記プロセッサを構成する、請求項４に記載の装置。
【請求項６】
前記１つまたは複数の実行可能な命令は、さらに、
Ｖ［ｉ］−Ｖ［ｉ−１］＝０という決定に基づいて、前記与えられたノードｉが、アレイＶからのどのような隣接ノードも有していないことを決定する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項７】
前記１つまたは複数の実行可能な命令は、さらに、
Ｖ［ｉ］−Ｖ［ｉ−１］＞＝１という決定に基づいて、前記グラフの前記与えられたノードｉが、アレイＶからの少なくとも１つの隣接ノードを有することを決定する
ように、前記プロセッサを構成する、請求項５に記載の装置。
【請求項８】
前記１つまたは複数の実行可能な命令は、さらに、
Ｅ［Ｖ［ｉ−１］＋１］から出発して、Ｅ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めてアレイＥにおけるエントリを計算することにより、アレイＶおよびアレイＥを使用して前記グラフの前記Ｎ個のノードのうちの与えられたノードｉの隣接ノードを決定する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項９】
前記１つまたは複数の実行可能な命令は、さらに、
Ｅ［Ｖ［ｉ−１］＋１］から、Ｅ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めてアレイＥにおけるエントリを探索することにより、前記グラフの前記Ｎ個のノードの第１の与えられたノードが、前記グラフの前記Ｎ個のノードの与えられたノードｉの隣接ノードであるかどうかを決定する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【請求項１０】
前記１つまたは複数の実行可能な命令は、さらに、
アレイＥおよびアレイＶを利用して、前記グラフの前記Ｎ個のノードのうちの１つまたは複数のノードについての相対的なランクを決定する
ように、前記プロセッサを構成する、請求項１に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ分析のためのシステムおよび方法を対象としている。より詳細には、本開示は、多数の相互に接続されたノードを有するグラフを表すデータセットからの情報を体系化し、また抽出するためのシステムおよび方法を対象としている。
【背景技術】
【０００２】
本節は、本明細書において開示されるシステムおよび方法についてのよりよい理解を容易にする際に、助けとなり得る態様を導入している。したがって、本節の陳述は、この観点から読まれるべきであり、また何が先行技術の中にあるか、または何が先行技術の中にないかについての承認として理解され、または解釈されるべきではない。
【０００３】
オンライン相互作用における急激な増大に部分的に起因した、アクセス可能なデータの量における最近の激増は、グラフィカルなやり方で情報を示すように、多数の研究コミュニティと、ビジネス・コミュニティと、マーケティング・コミュニティとを導いてきている。グラフィカル・モデル（例えば、ソーシャル・ネットワーク・モデル、コール・データ・モデルなど）は、生データの間の関係または相互接続についての直感的なビューを提供することができるが、どのようにして様々なエンティティ（例えば、加入者、グループ、人々、オブジェクト、マシン、データなど）が、グラフからの他のエンティティと相互作用するか、または関連しているかを決定することは、通常非常に多数の計算を実行することを必要とする。多数のグラフィカル・モデルが、さらに多くの接続によって相互に接続される極めて多数のノード（またはエンティティ）を含むことができるので、グラフィカル・モデルによって表されるデータから関連のある情報を取り出すための時間とコンピュータによる努力とを低減させるためのスケーラブルなシステムおよび方法についての必要性が、存在している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
システムおよび方法が、いくつかのエッジによって相互に接続されたいくつかのノードを表すグラフの形の情報を体系化し、また処理するために、提供される。アレイＥは、ノードの決定された順番の形の少なくとも１つの隣接ノードを有するグラフのノードについての隣接ノードをリストアップしている。それぞれのノードについてのアレイＥの中でリストアップされた最後の隣接ノードについてのアレイＥの中の位置は、ノードの決定された順番に基づいて、アレイＶにおける対応するエントリとしてリストアップされる。様々な態様において、アレイＥとアレイＶとは、生成され、またアレイＥとアレイＶとを使用して、グラフの１つまたは複数の与えられたノードの次数または隣接ノードを含む、グラフについての関連のある情報を決定する。本明細書において開示される本システムおよび本方法は、グラフのノードについての相対的なランキングを決定するためのシステムなどにおける様々なコンテキストとアプリケーションとにおいて適用可能であるように考えられる。
【課題を解決するための手段】
【０００５】
一態様においては、Ｍ個のエッジによって相互に接続されたＮ個のノードを有するグラフを処理するためのシステムおよび方法は、プロセッサを使用して、少なくとも１つの隣接ノードを有するグラフのＮ個のノードのうちのそれぞれのノードについての隣接ノードをリストアップするためのＭ個のエントリを有するアレイＥを生成するステップを含んでおり、そこでは、隣接ノードは、グラフのＮ個のノードに割り当てられた決定された順番における少なくとも１つの隣接ノードを有するグラフのそれぞれのノードについてのアレイＥの中でリストアップされる。本システムおよび本方法は、プロセッサを使用して、決定された順番において、グラフのＮ個のノードに対応しているＮ個のエントリを有するアレイＶを生成するステップと、対応するノードについてのアレイＥの中でリストアップされた最後の隣接ノードの、アレイＥの中の位置をそれぞれ示すために、アレイＥの中でリストアップされた少なくとも１つの隣接ノードを有するグラフのノードに対応している、アレイＶのエントリを入力するステップとをさらに含む。
【０００６】
一態様においては、本システムおよび本方法は、どのような隣接ノードも有していない、グラフのノードに対応している、アレイＶのエントリのうちの少なくとも１つを入力するステップを含んでおり、エントリの直前の値が、アレイＶへと入力される。
【０００７】
一態様においては、本システムおよび本方法は、ゼロの値を有するどのような隣接ノードも有していない、グラフのノードに対応しているアレイＶのエントリのうちの少なくとも１つを入力するステップを含んでいる。
【０００８】
一態様においては、本システムおよび本方法は、アレイＶの１つまたは複数の入力されたエントリからグラフのＮ個のノードのうちの与えられたノードｉの次数を決定するステップを含んでいる。一態様においては、アレイＶの１つまたは複数の入力されたエントリから与えられたノードｉの次数を決定するステップは、与えられたノードｉの次数として、アレイＶから値Ｖ［ｉ］−Ｖ［ｉ−１］を計算するステップをさらに含んでいる。
【０００９】
一態様においては、本システムおよび本方法は、与えられたノードｉが、Ｖ［ｉ］−Ｖ［ｉ−１］＝０という決定に基づいて、アレイＶからのどのような隣接ノードも有していないことを決定するステップを含んでいる。
【００１０】
一態様においては、本システムおよび本方法は、グラフの与えられたノードｉが、Ｖ［ｉ］−Ｖ［ｉ−１］＞＝１という決定に基づいて、アレイＶからの少なくとも１つの隣接ノードを有することを決定するステップを含んでいる。
【００１１】
一態様においては、本システムおよび本方法は、アレイＶとアレイＥとを使用して、Ｅ［Ｖ［ｉ−１］＋１］から出発して、Ｅ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めて、アレイＥにおけるエントリを計算することにより、グラフのＮ個のノードのうちの与えられたノードｉの隣接ノードを決定するステップを含んでいる。
【００１２】
一態様においては、本システムおよび本方法は、グラフのＮ個のノードのうちの第１の与えられたノードが、Ｅ［Ｖ［ｉ−１］＋１］から、Ｅ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めて、アレイＥにおけるエントリを探索することにより、グラフのＮ個のノードのうちの与えられたノードｉの隣接ノードであるかどうかを決定するステップを含んでいる。
【００１３】
一態様においては、本システムおよび本方法は、グラフのＮ個のノードのうちの１つまたは複数のノードについて相対的なランクを決定するためにアレイＥとアレイＶとを利用するステップを含んでいる。
【００１４】
これらの実施形態および他の実施形態は、添付図面を参照して、本明細書における以下の詳細な説明を考慮すると、明らかになるであろう。
【図面の簡単な説明】
【００１５】
【図１】本開示の一態様に従って、相互に接続されたノードのグラフィカル・モデルの一例を示す図である。
【図２】図１に示される相互に接続されたノードの隣接ノードと次数とを示す図である。
【図３】本開示の様々な態様に従って、Ｎ個のノードと、Ｍ個の相互接続とを有するグラフを処理するための流れ図の一例を示す図である。
【図４】本開示の一態様に従って、割り当てられた順番に基づいて、隣接ノードを示すためのアレイＥを示す図である。
【図５ａ】図１のノードの異なるタイプの相互接続に基づいて、アレイＥについての代替的な実施形態を示す図である。
【図５ｂ】図１のノードの異なるタイプの相互接続に基づいて、アレイＥについての代替的な実施形態を示す図である。
【図６】本開示の一態様に従って、アレイＥの隣接ノードの位置を示すアレイＶを示す図である。
【図７】本開示の様々な態様を実装するための装置の一例を示す図である。
【発明を実施するための形態】
【００１６】
本開示の様々な態様が、添付の図面を参照して以下で説明され、これらの図面においては、同様な番号は、それらの図の説明全体を通して、同様な要素のことを意味している。本説明とそれらの図面とは、単に本開示の原理を示しているにすぎない。当業者なら、本明細書においては明確に説明されても、または示されてもいないが、それらの原理を実施し、また本開示の精神および範囲の内部に含められる様々な構成を考案することができるようになることが、理解されるであろう。
【００１７】
本明細書において使用されるように、用語「論理和（ｏｒ）」は、それ以外の方法（例えば、「排他的論理和（ｏｒ  ｅｌｓｅ）」または「代替的な形の論理和（ｏｒ  ｉｎ  ｔｈｅ  ａｌｔｅｒｎａｔｉｖｅ）」）で示されていない限り、非排他的論理和（ｎｏｎ−ｅｘｃｌｕｓｉｖｅ  ｏｒ）のことを意味している。さらに、本明細書において使用されるように、複数の要素の間の関係を説明するために使用される単語は、それ以外の方法で示されていない限り、直接の関係、または介在する要素の存在を含むように、広く解釈されるべきである。例えば、ある要素が、別の要素に対して、「接続され」ている、または「結合され」ていると称されるときに、その要素は、他の要素に対して直接に接続され、または結合されることもあり、あるいは介在する要素が、存在していてもよい。対照的に、ある要素が、別の要素に、「直接に接続され」ている、または「直接に結合され」ていると称されるときには、介在する要素は、存在していない。同様に、「間に（ｂｅｔｗｅｅｎ）」、「隣接して（ａｄｊａｃｅｎｔ）」などの単語は、同様なやり方で、解釈されるべきである。
【００１８】
本開示は、グラフのエンティティおよび相互接続に関する様々なタイプの情報を決定し、また抽出するために使用され得るデータセットの集まりへと複数の相互に接続されたノードのグラフを処理するための態様を説明している。本明細書において開示されるそれらの態様は、任意の数のノードと相互接続とを有するグラフに対して適用可能であり、またとりわけ、多数のノードと相互接続と（例えば、何千個、何百万個、もしくは何十億個のノードまたは相互接続）を含むグラフのために適用可能である。
【００１９】
図１は、４つの相互に接続されたノード（または頂点）１１０１、１１０２、１１０３、および１１０４（一括してノード１１０と称される）を含むグラフ１００の非常に簡略化された例を示すものである。グラフ１００のノード１１０１、１１０２、１１０３、および１１０４は、単方向のパスまたはエッジ１１５１、１１５２、１１５３、および１１５４（一括して、エッジ１１５と称される）を経由して直接的に、または間接的に相互に接続される。少ないノード１１０とエッジ１１５とだけが、本開示の原理の理解を助けるために、グラフ１００の中に示されるが、実際には、グラフは、多数の（例えば、何千個の、何百万個の、または何十億個のノード１１０またはエッジ１１５を含むことができることが、理解されるであろう。さらに、グラフ１００は、全体グラフとすることができ、あるいはより大きな１つまたは複数のグラフのサブセットとすることができる。
【００２０】
様々な実施形態においては、グラフ１００のノード１１０は、１つまたは複数のタイプのエンティティ（例えば、加入者、グループ、人々、オブジェクト、マシン、データなど）を表すことができ、またエッジ１１５は、グラフ１００の様々なエンティティの間の関係を表すことができる。いくつかの例として、１つの非限定的な実施形態においては、グラフ１００は、電気通信サービス・プロバイダのコール・データ・レコードのモデルとすることができる。この場合には、ノード１１０は、電気通信サービス・プロバイダのユーザまたは加入者（またはユーザ機器）を表すことができ、また単方向のエッジ１１５は、加入したユーザ（またはユーザ機器）のうちの特定の加入したユーザ（またはユーザ機器）から他の加入したユーザ（またはユーザ機器）へのコールを表すことができる。別の非限定的な実施形態においては、グラフ１００は、インターネット・サービス・プロバイダまたは検索プロバイダによって収集され、または生成されるウェブ・データのモデルとすることができる。この場合には、ノード１１０は、例えば、１つまたは複数のサーバにおいてホストされる異なるウェブページ（またはウェブサイト）を表すことができ、また単方向エッジ１１５は、１つのウェブページ（またはウェブサイト）から別のウェブページ（またはウェブサイト）へのハイパーテキスト・マークアップ・リンクを表すことができる。
【００２１】
さらに別の非限定的な実施形態においては、グラフ１００は、ソーシャル・ネットワーク・プロバイダのソーシャル・ネットワーク・データをモデル化することができる。この場合には、ノード１１０は、ソーシャル・ネットワークの様々なユーザまたは加入者を表すことができ、また単方向のエッジ１１５は、１人の加入者と他の加入者との間の社会的な（または他の）関係を表すことができる。グラフ１００の特定の例は、本開示の様々な態様を示すように参照される可能性があるが、本開示は、グラフ、エンティティ、または相互接続の特定の実施形態だけに限定されないことが、理解されるであろう。
【００２２】
グラフ１００などのグラフに関しての基本的な興味についての１つの共通のコンピュータによる問い合わせは、ある与えられたノードが、別の与えられたノードの隣接ノードであるかどうかである（また逆もまた同様である）。一般に、第１のノードは、その第１のノードが、どのような介在するノードもトラバースすることなく、第２のノードから到達され得る場合に、第２のノードの隣接ノードである。それゆえに、ノード１１０２が、どのような介在するノードもトラバースすることなく、ノード１１０１から（単方向のエッジ１１５１を経由して）直接に到達され得るただ１つのノードであるので、ノード１１０１は、単一の隣接ノードを、すなわち、ノード１１０２を有することが、図１の簡単な例から分かる可能性がある。同様に、ノード１１０２は、２つの隣接ノードを、すなわち、ノード１１０３と、ノード１１０４とを有しており、また最後に、ノード１１０３は、１つの隣接ノードを、すなわち、ノード１１０４を有することが、図１において分かる可能性がある。
【００２３】
明確にまた完全にするために、図１の例に示されるようなノード１１０４は、グラフ１００の他のノードが、１１０４から到達され得ないので、どのような隣接ノードも有してはいないことに注意すべきである。さらに、ノード１１０２は、ノード１１０１の隣接ノードであるが、その逆は、真ではなく、ノード１１０１が、ノード１１０２から到達され得ないので、ノード１１０１は、ノード１１０２の隣接ノードではない。他の実施形態においては、グラフ１００のノード１１０１や１１０２など、グラフの２つのノードは、それらの２つのノードが、当業者によって理解されることになるように、例えば、双方向のエッジを経由して、または２つの相反する単方向のエッジによって互いに直接に相互に接続される場合には、互いの隣接ノードになることに注意すべきである。
【００２４】
グラフ１００などのグラフに関しての興味についての別の共通のコンピュータによる問い合わせは、与えられたノードの次数についての決定である。一般に、ノードの次数は、ノートから別のノードへのエッジ（またはパス）の数である。それゆえに、図１の例においては、グラフのノード１１０１から別のノードへの単一の直接のパスまたはエッジ１１５１が存在しているので、ノード１１０１の次数は、１である。同様に、グラフのノード１１０２から他のノードへの２つの直接のパス１１５２および１１５３が存在しているので、ノード１１０２の次数は、２である。グラフのノード１１０３から別のノードへの単一の直接のパス１１５４が、存在しているので、ノード１１０３の次数は、１である。最後に、グラフのノード１１０４から他のノードへのパスが存在していないので、ノード１１０４の次数は、ゼロである。
【００２５】
図２は、図１のグラフ１００についてのノード１１０のそれぞれについての隣接ノードと次数とをとりまとめているテーブル２００を示すものである。図１の簡略化された例について計算することは比較的より簡単であるが、例えば、動的問い合わせに応じて、多数のノード（例えば、数百万個または数十億個の）あるいはさらにより多数でさえもの相互接続（例えば、数百万個または数十億個の数十倍の）を含むグラフの中の隣接ノードまたは次数を計算し、また決定することは、かなりの長さの時間と、かなりの量のリソース（例えば、プロセッサ速度、メモリなど）とを必要とするささいではない、計算集約的なタスクである。大規模の、または分散型の現代のコンピュータでさえも、１０億個のノード、１００億個のエッジよりも多くを有するグラフからの望ましい情報と、メモリの中の補助的な情報（エッジの重みなど）とを効率的に体系化し、また処理するというやりがいのある課題に直面している。
【００２６】
システムおよび方法が、従来よりも大規模なグラフの中の情報を効果的に処理するためのアルゴリズムとデータ構造とを開発する進行中の課題と必要性とが、存在している。本開示は、グラフの中のエッジの数に比例したメモリ・サイズの要件を低減させること、ノード、隣接ノード、およびグラフ構造についての効率的な問い合わせを可能にすること、グラフを通して効率的な複数の反復を提供することなど、いくつかの利点を提供することができる、グラフの中の情報を体系化し、また処理するためのシステムおよび方法を説明している。
【００２７】
図３は、本開示の態様に従って、Ｎ個のノードと、Ｍ個のエッジとを有するグラフの中で情報を体系化し、また処理するためのデータセットの集まりを構築するための例示のプロセス３００を示すものである。プロセス３００の特定の適用もまた、図１のグラフ１００に関連して説明され、このグラフは、４つのノード（Ｎ＝４）と、４つのエッジ（Ｍ＝４）とを含んでいる。
【００２８】
一態様においては、プロセス３００は、Ｎ−ノードのグラフのＮ個のノードについての順番を決定し、または割り当てるためのステップ３０５を含んでいる。グラフのノードに割り当てられる順番は、いくつかのやり方で決定される可能性がある。一実施形態においては、グラフのＮ個のノードのうちのそれぞれは、１からＮまでの固有の順番を割り当てられることもある。この実施形態は、図１のグラフ１００（Ｎ＝４）について例証されており、ここで、ノード１１０１は、第１のノードまたはノード「１」として指定され、ノード１１０２は、第２のノードまたはノード「２」として指定され、ノード１１０３は、第３のノードまたはノード「３」として指定され、またノード１１０４は、最後のノードまたはノード「４」として指定される。割り当てられた順番もまた、図２のテーブル２００の中に示される。
【００２９】
他の実施形態においては、割り当てられた順番は、ノードによって表されるエンティティの１つまたは複数の属性値に基づいて、Ｎ個のノードを辞書編集的観点から順序づけることによるなど、他の適切な手段によって決定される（またはあらかじめ決定される）こともある。例えば、グラフのノードが、ウェブページを表し、また単方向のエッジが、１つのウェブページから他のウェブページへのリンクを表すことを仮定すると、各ノード（またはウェブページ）は、それぞれのウェブページの固有のユニフォーム・リソース・ロケーション（「ＵＲＬ：ｕｎｉｆｏｒｍ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｉｏｎ」）、ウェブページの名前（またはタイトル）、またはそれぞれのウェブページの任意の他のタイプの属性（または同様な属性）の値に基づいて、割り当てられた順番を用いて指定されることもある。
【００３０】
任意の適切な方法が、ノードについての順番を決定するために使用されることもあるが、以下でより明らかになることになる理由のために、割り当てられた順番における第１のノードは、隣接ノードを有していないノード（グラフ１００のノード１１０４など）とは対照的に、隣接ノードを有しているノード（グラフ１００のノード１１０１など）であることが、好ましい可能性がある。しかしながら、これは、以下でさらに説明されるように、プロセス３００のために必要でもなく、また限定でもない。
【００３１】
ステップ３１０において、プロセスは、ステップ３０５において決定されるノードの順番の形で、隣接ノードを有するグラフのノードについての隣接ノードを示しているエントリを有するアレイＥ［１，２，．．．，Ｍ］を生成するステップを含んでいる。この態様に従って、アレイＥが、隣接ノードを有しているグラフのノードについてエントリを含むだけなので、アレイＥは、グラフの中で表されるＭ個のエッジに対応しているＭ個のエントリを有している。
【００３２】
図４は、ステップ３１０において、図１のグラフ１００についてのアレイＥを生成する一例としてアレイ４００を示すものである。図４に見られるように、アレイ４００は、グラフ１００のエッジ、すなわち、１１５１、１１５２、１１５３、および１１５４、の数（Ｍ＝４）に対応する４つのエントリを含んでいる。アレイ４００のエントリは、ステップ３０５において決定されるノードの順番の形で、少なくとも１つの隣接ノードを有しているグラフ１００のノードのそれぞれについて、すなわち、ノード１１０１、１１０２、および１１０３についての隣接ノードを示している。隣接ノードを有していないノード（例えば、グラフ１００のノード１１０４）では、アレイ４００の中に記録されるエントリが存在していないことに注意すべきである。
【００３３】
アレイ４００のエントリは、ステップ３０５において決定されるノードの順番に基づいて、順序づけられる。それゆえに、アレイ４００の第１の位置においては、指定された順番の形の第１のノード（ノード「１」）、すなわち、ノード１１０１についての隣接ノードが、アレイ４００の中へと入力される。ノード１１０１は、１つの隣接ノード、すなわち、ノード１１０２だけを有しているので、ノード１１０２を示す単一のエントリが、アレイ４００の第１のインデックス付けされたエントリ（Ｅ［１］＝「１１０２」）の中に配置される。
【００３４】
継続して、指定された順番における第２のノード（ノード「２」）、ノード１１０２の隣接ノードが、アレイ４００へと入力される。ノード１１０２は、２つの隣接ノード、ノード１１０３と１１０４とを有しているので、ノード１１０２の２つの隣接ノードを示している２つのエントリ（Ｅ［２］＝「１１０３」、Ｅ［３］＝「１１０４」）が、アレイ４００の第２のインデックス付けされた位置と、第３のインデックス付けされた位置との中に配置される。これらの２つの隣接ノードがアレイ４００の第２の位置と第３の位置との中に示される順番は、必ずしもアレイ４００の中に示されるように、指定された順序である必要はないが、以下でさらに説明されるように隣接ノードについて探索するときに、ある種の効率を提供することができることに、ここで注意すべきである。
【００３５】
次に、指定された順番における第３のノード（ノード「３」）、ノード１１０３の隣接ノードは、アレイ４００の次の使用可能な位置から出発して、入力される。ノード１１０３は、単一の隣接ノード、すなわち、ノード１１０４を有しているので、隣接ノードを示している単一のエントリ（Ｅ［４］＝「１１０４」）は、アレイ４００の第４の位置へと配置される。
【００３６】
アレイ４００のすべてのエントリが、ステップ３０５の指定されたノードの順番に入力されているので、またはより顕著には、指定された順番の中の最後に残っているノード（ノード「４」）、ノード１１０４が、どのような隣接ノードも有していないので、アレイ４００の生成は、完了される。
【００３７】
上記の説明は、グラフの中の相互接続の数またはタイプに応じて原理的に変化しないが、アレイＥによって示される隣接ノード（およびエントリの数）は、変化することができることに注意すべきである。例えば、図５ａは、グラフ１００のエッジ１１５のそれぞれが、図１に示される単方向のエッジの代わりに双方向のエッジ（２つの相反する単方向のエッジに等価）であることを仮定して、図１のグラフ１００についてステップ３１０において、生成され得るアレイＥの代替的な一実施形態を示すものである。同様に、図５ｂは、図１に既に示されている単方向のエッジに追加して、ノード１１０１からノード１１０２への、グラフ１００における追加の並列の単方向のエッジの存在を仮定して、ステップ３１０において生成され得るアレイＥの別の実施形態を示すものである。
【００３８】
図３のプロセス３００に戻ると、ステップ３１５は、Ｎ個のエントリを有しているアレイＶ［１，２，．．．，Ｎ］を生成するステップを含んでおり、ここでそれぞれのＮ個のエントリのうちのそれぞれは、ステップ３０５の指定された順番におけるグラフ１００のＮ個のノードのうちのそれぞれ１つに対応しており、またここでエントリは、隣接ノードを有しているグラフのそれぞれのノードについてアレイＥの中にリストアップされる隣接ノードのうちの最後の隣接ノードの位置を示している。隣接ノードを有していない（またはアレイＥの中にエントリを有していない）グラフのノードについてのそれぞれのエントリは、アレイＶの直前のエントリの値で、またはそのような先行するエントリが存在していない場合にはゼロで、入力される。
【００３９】
図６は、ステップ３１５における図１のグラフ１００についてのアレイＶを生成する一例としてアレイ６００を示すものである。理解を助けるために、図４のアレイ４００（アレイＥ）はまた、図６において再び示される。図６に示されるように、アレイ６００は、グラフ１００のノードの数（Ｎ＝４）に対応している４つのエントリを含んでいる。アレイ６００における４つのエントリのうちのそれぞれは、グラフ１００のそれぞれのノードに対応しており、またステップ３０５において指定される同じノードの順番の中に、すなわち、ノード「１」、ノード「２」、ノード「３」、およびノード「４」の中に入力される。
【００４０】
それゆえに、ノード１１０１が、ステップ３０５において決定されるノードの順番において第１のノードまたはノード「１」として指定されたので、アレイ６００の第１のエントリ｛Ｖ［１］）は、ノード１１０１に対応している。アレイＥにおけるノード１１０１についての隣接ノード・リストの最後の隣接ノードの終了位置が、アレイ４００における第１の位置（Ｅ［１］）であるので、「１」が、ノード１１０１についてのアレイ６００の第１のエントリ（Ｖ［１］＝「１」）へと記録される。
【００４１】
次に、ノード１１０２が、ステップ３０５において決定されるノードの順番における第２のノードまたはノード「２」として指定されたので、アレイ６００の第２のエントリ（Ｖ［２］）は、ノード１１０２に対応している。アレイＥにおけるノード１１０２の隣接ノード・リストの最後の隣接ノードの終了位置が、アレイ４００における第３の位置（Ｅ［３］）に対応しているので、「３」が、アレイ６００におけるノード１１０２についての第２のエントリ（Ｖ［２］＝「３」）へと入力される。
【００４２】
次に、ノード１１０３が、ステップ３０５において決定されるノードの順番における第３のノードまたはノード「３」として指定されたので、アレイ６００の第３のエントリ（Ｖ［３］）は、ノード１１０３に対応している。ノード１１０３の隣接ノード・リストが、アレイ６００における第４の位置（Ｅ［４］）においてリストアップされる最後の隣接ノードで終了するので、「４」が、アレイ６００におけるノード１１０３についての第３のエントリ（Ｖ［３］＝「４」）へと記録される。
【００４３】
次に、ノード１１０４が、ステップ３０５において決定されるノードの順番における最後のノードまたはノード「４」として指定されたので、アレイ６００の最後の、また第４のエントリ（Ｖ［４］）は、ノード１１０４に対応している。ノード１１０４が、ステップ３１０において、どのような隣接ノードも有しておらず、またそれゆえにアレイ４００の中にリストアップされる隣接ノードを有していないものと決定されたので、アレイ６００における直前のエントリの値は、ノード１１０４に対応しているエントリにおいて、使用され、または反復される。したがって、先行するエントリＶ［３］が、「４」という値を有しているので、「４」はまた、アレイ６００におけるノード１１０４についての第４のエントリ（Ｖ［４］＝「４」）へと記録される。
【００４４】
ステップ３０５におけるノードの順番の決定中に、隣接ノードを有していないノード（例えば、グラフ１００のノード１１０４）が、ノードの順番における第１のノードであるように指定される場合に、特別な場合が、ステップ３１５の開始時に発生する可能性がある。この状況においては、ステップ３１５においてはまだ、アレイＶにおいて先行するエントリが、存在していないことになるので、またステップ３１０において、アレイ４００の中でリストアップされる隣接ノードもまた存在していないことになるので、ゼロが、ステップ３１５においてアレイ６００の第１の位置（Ｖ［１］＝「０」）に入力されることもあり、またアレイ６００の残りのエントリを入力するプロセスは、上記で説明されるようにステップ３１５において、継続する可能性がある。
【００４５】
アレイＶのすべてのそれぞれのエントリが、ステップ３１５において、グラフのそれぞれのノードについて入力された後に、アレイＶは、完了される。
【００４６】
ステップ３２０とステップ３２２とにおいて、本明細書において開示されるプロセスに従ってグラフのために構築されるアレイＥとアレイＶとは、グラフに関する情報を決定するために使用される。
【００４７】
一実施形態においては、グラフの中の様々なノードについてのノードの次数は、ステップ３２０においてアレイＶを使用して計算される。ステップ３０５の指定された順番におけるＮ−ノードのグラフについての特定のノードｉ（ｉ∈１．．．Ｎ）についてのノードの次数は、ｉ≧２の場合にＶ［ｉ］−Ｖ［ｉ−１］を、またｉ＝１の場合にＶ［ｉ］を計算することにより、アレイＶから決定される可能性がある。
【００４８】
図６のアレイ６００（アレイＶ）と一緒に、図１のグラフ１００の例を継続すると、ステップ３２０において、ノード１１０１（ｉ＝１）についてのノードの次数は、Ｖ［１］＝「１」であるので、１（一）としてアレイ６００から（例えば、問い合わせに応じて）決定される可能性がある。ノード１１０２（ｉ＝２）についてのノードの次数は、Ｖ［２］−Ｖ［１］＝３−１＝「２」であるので、２（二）としてアレイ６００からステップ３２０において決定されることもある。ノード１１０３（ｉ＝３）についてのノードの次数は、Ｖ［３］−Ｖ［２］＝４−３＝「１」であるので、１（一）としてアレイ６００からステップ３２０において決定されることもある。最後に、ノード１１０４（ｉ＝４）についてのノードの次数は、Ｖ［４］−Ｖ［３］＝４−４＝「０」であるので、０（ゼロ）として図６のアレイ６００からステップ３２０において決定されることもある。アレイＶを使用して算出されるノードの次数は、図２において示されるようなグラフのノードのそれぞれについてのノードの次数に正確にマッチすることが、分かる可能性がある。
【００４９】
別の実施形態においては、与えられたノードの隣接ノードは、ステップ３２２において、アレイＶおよび／またはアレイＥを使用して（例えば、問い合わせに応じて）決定されることもある。例えば、ステップ３２０において説明されるようにゼロという次数を有するように決定される、ステップ３０５の指定された順番におけるＮ−ノードのグラフの与えられたノードｉ（ｉ∈１．．．Ｎ）は、隣接ノードを有していないノードとして効率的に識別される可能性がある。
【００５０】
代わりに、ステップ３２０において、ゼロよりも大きな次数を有するように決定される（またはそれ以外の方法で、ゼロよりも大きな次数を有することが知られている）ステップ３０５の指定された順番における、Ｎ−ノードのグラフの与えられたノードｉ（ｉ∈１．．．Ｎ）では、そのようなノードについての隣接ノードは、Ｅ［Ｖ［ｉ−１］＋１］から出発して、ｉ＞＝２の場合のＥ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めてエントリとして、またＥ［１］（すなわち、アレイＥにおける第１のエントリ）から出発して、ｉ＝１の場合のＥ［Ｖ［ｉ］］まで、またＥ［Ｖ［ｉ］］を含めてエントリとして、アレイＥから決定されることもある。
【００５１】
例えば、問い合わせが、グラフ１００のノード１１０１の隣接ノードについて受信されることを仮定する。図６のアレイ４００（アレイＥ）とアレイ６００（アレイＶ）とを使用して、ノード１１０１（ノード「１」）（ｉ＝１）の隣接ノードは、Ｅ［１］から出発して、Ｅ［Ｖ［１］］まで、またＥ［Ｖ［１］］を含めてアレイＥにおいてリストアップされるすべてのノードとしてステップ３２２において決定されることもある。アレイＶから、Ｖ［１］＝「１」であることが、分かる可能性がある。それゆえに、ノード「１」の隣接ノードは、Ｅ［１］から、Ｅ［１］まで、またＥ［１］を含めてリストアップされるノードであり、あるいは簡単にＥ［１］＝ノード「２」（ノード１１０２）である。
【００５２】
第２の例として、問い合わせは、グラフ１００のノード１１０２（またはノード「２」）の隣接ノードについてのものであることを仮定する。この場合にも図６においてアレイ４００（アレイＥ）とアレイ６００（アレイＶ）とを使用して、ノード「２」（ｉ＝２）の隣接ノードは、エントリＥ［Ｖ［１］＋１］から出発して、エントリＥ［Ｖ［２］］まで、またエントリＥ［Ｖ［２］］を含めてアレイＥの中でリストアップされるノードとしてステップ３２２において決定されることもある。アレイＶから、Ｖ［１］＝「１」であり、またＶ［２］＝「３」であることが、決定される可能性がある。アレイＥから、Ｅ［２］から出発して、Ｅ［３］まで、またＥ［３］を含めてアレイＥにおいてリストアップされる連続した隣接ノードは、ノード「３」およびノード「４」（またはノード１１０３およびノード１１０４）であることが、分かる可能性がある。それゆえに、ノード「３」および「４」は、ノード「２」の隣接ノードとして決定される。
【００５３】
このアプローチをまた使用して、第１のノードが、第２のノードの隣接ノードであるかどうかを（または等価的に、第２のノードから第１のノードへの直接のパスまたはエッジが存在しているかどうかを）決定することもできる。例えば、問い合わせが、ノード「１」がノード「２」の隣接ノードであるかどうかを（またはノード「２」からノード「１」への有向エッジが存在しているかどうかを）決定するために受信されることを仮定する。ノード「１」が、ステップ３２２において決定されるように、Ｅ［２］（ノード「３」）から出発して、Ｅ［３］（ノード「４」）まで、またＥ［３］（ノード「４」）を含めてエントリの中にリストアップされないので、ノード「１」は、ノード「２」の隣接ノードではないことが、結論づけられる可能性がある。
【００５４】
本明細書において開示される本システムおよび本方法の様々な態様は、グラフを処理するための、とりわけ、数千個または数百万個のノードまたはエッジを含む大規模なグラフを処理するためのいくつかの利点をもたらすことができる。例えば、グラフについての様々な与えられたノードの次数は、アレイＶを使用した一定の数の計算を用いて、決定されることもある。他の実施形態においては、グラフについてのノードの最大ノード次数や、グラフについてのノードの次数の分布など、他の決定もまた、アレイＶから効率的に決定される可能性もある。さらに、グラフについての与えられたノードが、グラフについての別の与えられたノードの隣接ノードであるかどうかを決定するステップ（ｌｏｇ２Δ量の時間内に達成され得るバイナリ・オペレーションで、ここでΔは、グラフの最大ノード次数である）、またはグラフについての与えられたノードの隣接ノードを決定するステップは、アレイＥについてのエントリの焦点を当てられた、また関連のあるサブセットだけを（エントリのより大規模な組またはすべての組とは対照的に）検査することにより、達成される可能性がある。
【００５５】
本明細書において開示される様々な実施形態は、いくつかのコンテキストにおいて適用可能である。例えば、グラフのノードにランク付け（またはスコア付け）をして、いくつかの判断基準に関して、他のノードよりも比較的により重要であるノードを決定することが、多くの場合に望ましい。グラフのノードが、ウェブページ（またはウェブサイト）を表し、またノードを相互に接続するエッジが、１つのウェブページから別のウェブページへの有向ハイパーリンクを表す場合には、グラフのノードは、ランキング・アルゴリズムを使用して、グラフの他のノードからグラフの特定のノードに対する有向エッジの数に基づいて、ウェブサイトの相対的な人気を評価して、ランク付けされることもある。グラフの多数の他のノードから直接的にまたは間接的に到達可能であるノードは、グラフのより少ない（または何もない可能性のある）他のノードによって到達可能である別のノードよりも人気があるものと見なされる可能性がある。
【００５６】
類似した（または他の）ランキングの考慮は、ノードがソーシャル・ネットワークのユーザ（または他のエンティティ）を表すことができ、またエッジがソーシャル・ネットワーク・グラフの他のユーザ（またはエンティティ）に対するユーザ（またはエンティティ）の接続（または関係）を表すことができるソーシャル・ネットワーク・グラフなど、他のタイプの情報を表すグラフに対して適用される可能性がある。
【００５７】
ランキング・アルゴリズム（ウェブページ（またはウェブサイト）をランク付けし、またはスコア付けするために、グーグル社（Ｇｏｏｇｌｅ  Ｉｎｃ．）によって開発されたよく知られているページランク（ＰａｇｅＲａｎｋ）アルゴリズムなど）は、一般的に、最初のランクから出発する（例えば、グラフの各ノードは、最初に等しいランクを有することが仮定されることもある）こと、および次いで調整されたランクが、最終的な調整されたランキングへと収束するまで、グラフのノードのランクを繰り返して調整することにより、グラフのノードをランク付けする。グラフのそれぞれの各ノードに関連する最初のランクは、それぞれのノードの隣接ノードのうちのそれぞれに対して公平に配信される。これは、それぞれの各ノードについての調整されたランクをもたらし、このランクは、次いで、隣接ノードに対してそれぞれのノードの調整されたランクを配信する配信ステップを繰り返し行うことにより、さらに調整される。ランキング・プロセスは、（一般的に、いくつかの反復の後に）隣接ノードに対する配信の後にそれぞれのノードについてもたらされる調整されたランクが、収束するときに、それぞれのノードについての最終的なランキングで終了することができる（例えば、それらのノードの調整されたランクは、いくつかの反復の後に所定のしきい値よりも少ない反復または変化の結果として、さらに変化することはない）。
【００５８】
したがって、いくつかの実施形態においては、本明細書において開示される本システムおよび本方法は、ランキング・プロセスの一部分として、１つまたは複数のノードに関連する隣接ノードまたはノードの次数を、例えば、決定するために、グラフのノードをランク付けし、またはスコア付けするためのシステムおよび方法を補完することができ、あるいはシステムおよび方法へと統合されることもある。本明細書において開示される本システムおよび本方法は、類似したやり方でグラフを処理するための任意の他のシステムおよび方法へと一般に統合される可能性もあり、または任意の他のシステムおよび方法を補完することができる。
【００５９】
図７は、本開示の様々な態様（例えば、プロセス３００の１つまたは複数のステップ）を実装するために適切なコンピューティング装置７００の高レベル・ブロック図を示すものである。単一のブロックの形で示されているが、他の実施形態においては、本装置７００は、並列アーキテクチャと分散型アーキテクチャとを使用して実装される可能性もある。したがって、例えば、プロセス３００の例の中に示されるこれらのステップなど、様々なステップは、特定の実装形態に基づいて、逐次的に、並列に、または異なる順序で、装置７００を使用して、実行されることもある。装置７００は、様々な入出力デバイス７０４およびメモリ７０６と通信するように相互に接続されたプロセッサ７０２（例えば、中央演算処理装置（「ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ」）を含んでいる。
【００６０】
プロセッサ７０２は、汎用中央演算処理装置（「ＣＰＵ」）など、任意のタイプのプロセッサ、または埋め込まれたマイクロコントローラやデジタル信号プロセッサ（「ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ」）などの専用マイクロプロセッサとすることができる。入出力デバイス７０４は、プロセッサ７０２の制御の下で動作し、また例えば、ネットワーク・アダプタ、データ・ポートや、キーボード、キーパッド、マウス、ディスプレイなど、様々なユーザ・インターフェース・デバイスなどの装置７００へとデータを入力し、または装置７００からデータを出力するように構成された任意の周辺デバイスとすることができる。
【００６１】
メモリ７０６は、例えば、一時的なランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）や、リード・オンリー・メモリ（ＲＯＭ：ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、ハード・ディスク・ドライブ・メモリ、コンパクト・ディスク・ドライブ・メモリ、光メモリなどの非一時的メモリなどの電子的情報を記憶するために適切な任意のタイプのメモリとすることができる。メモリ７０６は、データ（例えば、グラフ１００、アレイＶ、アレイＥ、または他のデータ）と、プロセッサ７０２による実行のすぐ後に、装置７００が、本明細書において上記で説明される機能または態様（例えば、プロセス３００の１つまたは複数のステップ）を実施し、または実行するように、構成し、またはさせることができる命令とを含むことができる。さらに、装置７００は、オペレーティング・システム、問い合わせマネージャ、デバイス・ドライバや、メモリ７０６に記憶され、またプロセッサ７０２によって実行される１つまたは複数のネットワーク・プロトコルなど、コンピューティング・システムにおいて一般的に見出される他のコンポーネントを含むこともできる。
【００６２】
装置７００の特定の一実施形態が、図７に示されるが、本開示に従う様々な態様は、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙｓ）、あるいはハードウェアまたはソフトウェアの任意の他の組合せを使用して、実装される可能性もある。例えば、本明細書において開示されるグラフおよびデータセット（例えば、アレイＶ、Ｅ）は、ソフトウェア、ハードウェア、またはそれらの組合せを使用して実装されるプログラマブル・プロセッサ（例えば、ＣＰＵまたはＦＰＧＡ）によってアクセスされ、また操作され得る様々なタイプのデータ構造（例えば、リンクされたリスト）に記憶されることもある。
【００６３】
本明細書における態様は、特定の実装形態を参照して説明されてきているが、これらの実施形態は、本開示の原理とアプリケーションとについての単に実例となるものにすぎないことを理解すべきである。したがって、非常に多数の修正が、実例となる実施形態に対して行われ得ること、および他の構成が、本開示の精神および範囲を逸脱することなく考案され得ることを理解すべきである。
【図１】
2017530477.tif 000003
【図２】
2017530477.tif 000004
【図３】
2017530477.tif 000005
【図４】
2017530477.tif 000006
【図５ａ】
2017530477.tif 000007
【図５ｂ】
2017530477.tif 000008
【図６】
2017530477.tif 000009
【図７】
2017530477.tif 000010
【国際調査報告】
2017530477.tif 000011
2017530477.tif 000012