JP6973150B2 - 最短経路行列生成プログラム、装置、及び方法 - Google Patents

最短経路行列生成プログラム、装置、及び方法 Download PDF

Info

Publication number
JP6973150B2
JP6973150B2 JP2018023307A JP2018023307A JP6973150B2 JP 6973150 B2 JP6973150 B2 JP 6973150B2 JP 2018023307 A JP2018023307 A JP 2018023307A JP 2018023307 A JP2018023307 A JP 2018023307A JP 6973150 B2 JP6973150 B2 JP 6973150B2
Authority
JP
Japan
Prior art keywords
shortest path
vertex
matrix
vertices
graph
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
JP2018023307A
Other languages
English (en)
Other versions
JP2019139576A (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 JP2018023307A priority Critical patent/JP6973150B2/ja
Priority to US16/272,216 priority patent/US20190251123A1/en
Publication of JP2019139576A publication Critical patent/JP2019139576A/ja
Application granted granted Critical
Publication of JP6973150B2 publication Critical patent/JP6973150B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/04Forecasting or optimisation specially adapted for administrative or management purposes, e.g. linear programming or "cutting stock problem"
    • G06Q10/047Optimisation of routes or paths, e.g. travelling salesman problem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2111/00Details relating to CAD techniques
    • G06F2111/10Numerical modelling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Business, Economics & Management (AREA)
  • Software Systems (AREA)
  • Human Resources & Organizations (AREA)
  • Computational Linguistics (AREA)
  • Economics (AREA)
  • Strategic Management (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Entrepreneurship & Innovation (AREA)
  • General Business, Economics & Management (AREA)
  • Tourism & Hospitality (AREA)
  • Quality & Reliability (AREA)
  • Operations Research (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Marketing (AREA)
  • Game Theory and Decision Science (AREA)
  • Development Economics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (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色のみの状態)に対応する頂点までの最短経路は、最適(最小手数の)解を示すことになる。
なお、グラフにおける2頂点間の最短経路を最短経路木(一次元配列)として表現する技術が存在する。経路木を用いて最短経路を表現する技術の一例として、通信網中の3つ以上のノード間の最短路を検出する装置が提案されている。この装置では、全てのノード、パス及び各パスの長さ、基本閉路及び指定ノードからなる通信網の経路情報を入力する。そして、この装置は、各指定ノード対の最短路により基準部分網を構成し、基準部分網中の指定ノード以外の中間ノードを検出し、基準部分網に含まれる閉路を所定の基本閉路に分解し、基本閉路中の中間ノードを検出する。また、この装置は、選択された中間ノードと指定ノードとにより比較部分網を構成し、基準部分網の最短木長と比較部分網の最短木長とを比較する。
特開平8−195807号公報
グラフにおける全頂点から全頂点への最短経路は、頂点毎に、その頂点から他の全頂点への最短経路を最短経路木(一次元配列)として表現し、グラフ全体の最短経路木群を最短経路行列(二次元配列)として表現することができる。全頂点から全頂点への最短経路を求めるには、多大な時間を要するため、各頂点間の最短経路を最短経路行列の形で予め求めておき、主記憶や二次記憶などの記憶部に格納しておく。そして、頂点を指定した最短経路の問い合わせを受け付けた場合に、記憶部から最短経路行列を読み出して、該当の最短経路を復元して応答するということが可能である。
例えば、鉄道網において、各駅への他の全駅からの最短経路を駅毎に求めておき、それを最短経路行列で表現し、最短経路行列を記憶部に記憶しておく。そして、ユーザから任意の二駅間の最短経路の問い合わせを受け付けた場合に、記憶部に記憶された最短経路行列から、該当の二駅間の最短経路木を読み出して、その最短経路木が示す最短経路を応答する。これにより、最短経路の問い合わせに対して高速に応答することができる。
ただし、駅の数をnとすると、単純な方式では、駅毎の最短経路木を保持するためにO(n)のメモリ量が必要であり、駅全体についての最短経路行列を保持するために必要なメモリ量は、O(n)となる。ここで、O(x)は、xの定数倍であること、すなわちxに比例している量であることを意味する。道路網などの頂点数が大きいグラフでは、最短経路行列のサイズ(データ量)は膨大なものになる。例えば、頂点数が1億個あるグラフについて、最短経路行列の1要素当たりのデータ量が4バイトであるとすると、最短経路行列は、40ペタ(=4×10×10)バイトのサイズを要することになる。
そこで、最短経路行列を記憶部に記憶する際、圧縮して記憶することでそのサイズを大幅に削減することが可能である。
しかし、従来技術を用いて生成された最短経路行列を圧縮して記憶しておいた場合、この圧縮された最短経路行列から、要求のあった2頂点間の最短経路を復元するには時間を要する。
開示の技術は、一つの側面として、グラフに含まれる各頂点間の最短経路を表す最短経路行列について、最短経路を高速に復元可能な最短経路行列を生成することを目的とする。
一つの態様では、複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与する。そして、前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する。
一つの側面として、グラフに含まれる各頂点間の最短経路を表す最短経路行列について、最短経路を高速に復元可能な最短経路行列を生成することができる、という効果を有する。
グラフの一例を示す図である。 最短経路木の一例を示す図である。 最短経路木を表す配列の一例を示す図である。 最短経路行列の一例を示す図である。 参考例に係る情報処理装置の機能ブロック図である。 参考例における最短経路行列生成処理の一例を示すフローチャートである。 参考例における最短経路復元処理の一例を示すフローチャートである。 実施形態に係る情報処理装置の機能ブロック図である。 幅優先探索アルゴリズムを説明するためのフローチャートである。 幅優先探索アルゴリズムを説明するためのグラフの一例である。 幅優先探索アルゴリズムによる最短経路行列の生成を説明するための図である。 実施形態に係る情報処理装置として機能するコンピュータの概略構成を示すブロック図である。 実施形態における最短経路行列生成処理の一例を示すフローチャートである。 表生成処理の一例を示すフローチャートである。 行列生成処理の一例を示すフローチャートである。 (k,m’)取得処理の一例を示すフローチャートである。 具体例を説明するためのグラフの一例を示す図である。 具体例におけるクラスタリング結果の一例を示す図である。 実施形態における最短経路行列の生成を説明するための図である。 実施形態における最短経路行列の生成を説明するための図である。 実施形態における最短経路復元処理の一例を示すフローチャートである。 比較方式と本方式とのアクセス回数の比較を説明するための図である。 比較方式と本方式とのアクセス回数の比較結果を示す図である。 クラスタリングの一例を示す図である。 分割数によるアクセス回数の比較結果を示す図である。 非連結なグラフの最短経路行列の生成を説明するための図である。
以下の実施形態では、頂点と、頂点間を接続する辺とで構成されたグラフに含まれる各頂点について、他の頂点の各々との最短経路を表現する最短経路行列を生成する。
まず、実施形態の詳細を説明する前に、最短経路行列の概要について説明する。
図1にグラフの一例を示す。図1において、頂点を黒丸で表し、頂点に併記した数字で頂点の識別番号(以下、「頂点番号」という)を表している。以下の各図においても同様である。なお、本明細書では、グラフのn個の頂点に1からnまでの頂点番号を付与して、各頂点を識別するものとする。以下、頂点番号xの頂点を「頂点x」と表記する。
図1に示すグラフにおいて、各頂点から頂点1への最短経路を考える。このグラフの最短経路は、図2に示すような最短経路木で表すことができる。
なお、一般的に、最短経路木に含まれる頂点数をnとした場合、最短経路木に含まれる辺の数はn−1である。また、最短経路木は、ある頂点を一番上に、それに繋がる頂点(群)をその下に、さらにその頂点(群)に繋がる頂点をその下に、・・・というように、木を逆にしたような形に書くことができる。この場合、一番上の頂点を「根」という。また、その頂点より下に頂点が存在しない頂点を「葉」という。また、ある頂点vのすぐ下に繋がる頂点wを頂点vの子、頂点vを頂点wの親という。
図2上図は、最短経路の終点である頂点1を根とする最短経路木であり、図2下図は、根を一番上にして表した最短経路木の例である。例えば、頂点6から頂点1への最短経路は、頂点6から順にその親を辿って頂点1に到達するまでに経由する頂点の列として求めることができる。
頂点1を根とする最短経路木は、図3に示すような配列として表現することができる。図3の例では、配列のi番目の要素には、頂点iから頂点1へ辿る際に次に辿るべき頂点の頂点番号、すなわち頂点iから頂点1への最短経路における頂点iの親の頂点番号が格納されている。頂点1は最短経路の終点であり、親は存在しないため、頂点1に対応する配列の要素には、親が存在しないことを示す値を格納する。その値としては、最短経路行列の値として取りえない値、例えば、最大の整数値とすることとし、ここでは、その値をEで表す。すなわち、Eが格納されている要素に対応する頂点は、最短経路の終点であることを示している。
図1に示すグラフに対して、全頂点から全頂点への最短経路木を示す配列を、頂点1に対応する配列から頂点8に対応する配列まで順に並べて二次元の配列として表現した最短経路行列を、図4に示す。このような最短経路行列から最短経路を復元する場合、その最短経路の長さをLとすると、L個の最短経路行列の要素にアクセスする必要がある。最短経路行列の要素へのアクセスにおおよそ比例したディスクの入出力回数を要するので、この最短経路行列へのアクセス回数を削減することができれば、ディスクの入出力回数を削減することができ、最短経路行列から高速に最短経路を復元することができる。
そこで、以下の実施形態では、最短経路行列の要素の値として、上述の親の頂点番号だけではなく、最短経路上に現れる長さ2以上の経路(以下、「中間経路」という)の識別情報を用いる。
なお、中間経路としては、最短経路上に現れる点(以下、「中間点」という)、辺(以下、「中間辺」という)も存在する。中間点は長さ0、中間辺は長さ1の中間経路と考えることができる。ただし、以下の実施形態では、詳細は後述するが、高速に最短経路を復元することを目的とするため、中間経路として、長さ2以上のものを対象とする。なお、以下では、説明を簡単にするため、図1に示すような重みなし無向グラフを例に説明する。重みなしであるため、各辺の長さを1と捉える。したがって、長さ2以上の経路とは、2以上の辺を含む経路を意味する。
<参考例>
次に、以下で詳述する実施形態の理解を助けるために、最短経路行列の要素の値として、中間点及び中間辺の識別情報を用いる場合を参考例として説明する。
図5に、参考例に係る情報処理装置100Rの機能ブロック図を示す。情報処理装置100Rは、付与部12R及び生成部14Rを含む最短経路行列生成部10Rと、復元部22Rを含む最短経路復元部20Rとを含む。
付与部12Rは、グラフに含まれる各頂点間の最短経路を求める。最短経路の求め方は、従来既知の手法を用いることができる。そして、付与部12Rは、最短経路上の中間経路である中間点及び中間辺の各々に、最短経路行列の要素の値として使用するための識別情報を付与する。上述したように、グラフのn個の頂点には、1からnまでの頂点番号が付与されているため、中間点の識別情報としては、この頂点番号をそのまま使用する。辺の識別情報は、通常、辺の両端の頂点の頂点番号の組で表される。この辺の識別情報を中間辺の識別情報として用いてもよい。ただし、この場合、1つの中間辺の識別情報のデータ量は、頂点番号2つ分のデータ量となるため、データ量の小さい識別情報を付与し直してもよい。本参考例では、 付与部12Rは、nを全頂点数として、中間辺の各々に対して、n+1、n+2、・・・という識別情報を付与するものとする。以下では、付与部12Rにより中間辺に付与される識別情報を「中間辺番号」という。
付与部12Rは、中間辺と、その中間辺に付与した中間辺番号とを対応付けて記憶した2つの中間経路表P、Pを生成する。Pは最短経路行列生成において、Pは最短経路行列復元において用いられる。なお、全ての中間辺に中間辺番号を付与する必要はなく、最短経路行列で用いる中間辺に対してのみ中間辺番号を付与して、中間経路表に記憶すればよい。これにより、中間経路表のサイズを抑えることができる。なお、中間経路表としては、ハッシュ表などのインデクス付表を用いることができる。以下では、中間経路表Pにおいて、両端が頂点k及び頂点kである中間辺に中間辺番号「x」を付与したことを表すレコードを、P[(k,k)]=xと表記する。Pは逆に中間辺番号に中間辺を対応させるので、P[x]=(k,k)となる。
生成部14Rは、グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、各要素に対応する行及び列に対応する頂点間の最短経路上の頂点(中間点を含む)の頂点番号、及び中間辺の中間辺番号を用いて、最短経路行列を生成する。
ここで、中間点の頂点番号を用いた最短経路行列の生成について考える。頂点iから頂点jへの最短経路、すなわち、頂点iから頂点jへの頂点の列を、σ[i,j]と表す。例えば、図1に示すグラフにおいて、頂点8から頂点1への最短経路、すなわちσ[8,1]は、8,7,5,3,1である。このことを、σ[8,1]=[8,7,5,3,1]と表記する。
また、最短経路行列をSで表した際、最短経路行列Sのi行j列の要素をS[i,j]と表記する。S[i,j]には、頂点iから頂点jへの最短経路における頂点iの親の頂点番号だけでなく、頂点iから頂点jへの最短経路上の中間点の頂点番号が格納される。例えば、図2に示すグラフの最短経路行列について、中間点を使用しない場合には、図4に示すように、S[8,1]=7である。生成部14Rは、これを、例えば、σ[8,1]の中間点を用いて、S[8,1]=3とすることができる。
具体的には、生成部14Rは、付与部12Rにより求められた最短経路σ[i,j]の情報から中間点を取得する。そして、生成部14Rは、取得した中間点の中から選択した中間点の頂点番号をS[i,j]の要素の値として格納する。頂点番号の選択方法としては、例えば、ランダムに選択したり、最も小さい頂点番号を選択したり、既に他の要素の値として選択されている頂点番号のうち、出現頻度が最も高い頂点番号を選択したりするなど、任意の方法を採用することができる。
中間点の場合と同様に、中間辺の中間辺番号を用いた最短経路行列の生成について考える。生成部14Rは、付与部12Rにより求められた最短経路σ[i,j]の情報から取得した中間点に、辺を構成する中間点の組が含まれる場合、その中間点の組で構成される中間辺の中間辺番号を、S[i,j]の要素の値として格納してもよい。具体的には、上記の中間点の場合と同様に、生成部14Rは、最短経路σ[i,j]の情報から中間辺を取得し、取得した中間辺の中から最短経路行列の要素の値として用いる中間辺を選択する。中間辺を選択する際には、付与部12Rが生成した中間経路表Pが参照される。そして、生成部14Rは、選択した中間辺の中間辺番号を中間経路表Pから取得して、S[i,j]の要素の値として格納する。
生成部14Rは、生成した最短経路行列Sを圧縮する。最短経路行列Sは、n画素×n画素の画像と同じデータ構造であるため、ロスレスの画像の圧縮アルゴリズムなどを用いて、圧縮することができる。生成部14Rは、圧縮した最短経路行列Sを、付与部12Rが生成した中間経路表Pと共に、行列データベース(DB)30Rに格納して、所定の記憶領域に記憶する。
なお、生成部14Rは、中間経路表Pも圧縮して、行列DB30Rに格納することもできる。中間経路表Pの圧縮には、既存の圧縮技術を用いることができる。例えば、インデクスとしてB−treeを使うのであれば、内部でキー順にソートされるので、キーのプレフィクスを圧縮することができる。また、どのような中間経路表にも使える単純な方法であるが、既存の情報圧縮技術を使って入出力におけるページ単位に圧縮することもできる。
復元部22Rは、始点及び終点を指定した最短経路の問い合わせを受け付けると、行列DB30Rに格納された最短経路行列S及び中間経路表Pを伸長を行いながら用いて、指定された始点及び終点に対応する頂点間の最短経路を復元する。
具体的には、指定された始点に対応する頂点がi(以下、「始点i」と表記する)、終点に対応する頂点がj(以下、「終点j」と表記する)の場合、すなわち、σ[i,j]を求める場合、復元部22Rは、最短経路行列Sから、S[i,j]の値kを取得する。まず、S[i,j]の値が中間点番号である場合について説明する。σ[i,j]は、σ[i,k]とσ[k,j]との和(2つの最短経路を頂点kで結合したもの)として求めることができる。復元部22Rは、σ[i,k]についても、その中間点として、S[i,k]の値kを取得し、σ[i,k]とσ[k,k]との和として求める。また、σ[k,j]についても同様に、S[k,j]の値kを取得し、σ[k,k]とσ[k,j]との和として求める。復元部22Rは、中間点で分割された最短経路が一つの経路として繋がるまで、上記の処理を再帰的に繰り返すことにより、全体の最短経路を求める。
また、復元部22Rは、S[i,j]から得られる値が中間辺の中間辺番号xの場合、中間経路表Pを参照して、P[x]=(k,k)から、その中間辺の両端の頂点の頂点番号k、kを特定する。そして、復元部22Rは、σ[i,j]として、上記と同様に、σ[i,k]とσ[k,j]とを、辺(k,k)で結合することにより復元する。
なお、長さ2以上の最短経路σ[i,j]において、中間点kが始点i又は終点jに一致すると、最短経路を復元できなくなる。例えば、k=iの場合、σ[i,j]は、σ[i,i]とσ[i,j]との和ということになり、当初と同じσ[i,j]が出てきてしまい、再帰処理が進まないためである。k=jの場合も同様である。したがって、σ[i,j]が長さ2以上の最短経路の場合、始点i、及び終点jを中間点とすることはできない。また、σ[i,j]が長さ1の最短経路の場合、すなわち、始点iと終点jとが隣接している場合も上記と同様に、中間点kが始点iに一致すると、最短経路を求めることができなくなる。k=jの場合は、親の頂点番号を用いる場合と同様であるため、問題ない。したがって、σ[i,j]が長さ1の最短経路の場合、始点iを中間点とすることはできない。
次に、参考例に係る情報処理装置100Rの作用について説明する。まず、情報処理装置100RにグラフG(G=(V,E))が入力され、最短経路行列の生成が指示されると、情報処理装置100Rの最短経路行列生成部10Rにおいて、図6に示す最短経路行列生成処理が実行される。そして、最短経路行列が生成されて行列DB30Rに格納された状態で、最短経路σ[i,j]の探索要求を受け付けると、情報処理装置100Rの最短経路復元部20Rにおいて、図7に示す最短経路復元処理が実行される。以下、参考例における最短経路行列生成処理及び最短経路復元処理の各々について詳述する。
まず、図6に示す最短経路行列生成処理のステップS1で、付与部12Rが、入力されたグラフGに含まれる各頂点(1,・・・,n)間の最短経路を求める。そして、最短経路上の中間辺の各々に中間辺番号(n+1,n+2,・・・)を付与する。付与部12Rは、中間辺(k,k)と、その中間辺に付与した中間辺番号(x)とを対応付けて格納した中間経路表(P[(k,k)]=x、P[x]=(k,k))を生成する。
次に、ステップS2で、生成部14Rが、グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値を、以下の手順で求める。まず、生成部14Rは、σ[i,j]の中間点の頂点番号を、付与部12Rが求めた最短経路の情報から取得する。そして、生成部14Rは、取得した中間点の頂点番号から、最短経路行列の要素の値として用いる頂点番号又は中間辺を選択する。そして、中間辺を選択した場合は付与部12Rが生成した中間経路表Pから中間辺番号を取得し、選択した頂点番号又は中間辺番号をS[i,j]の要素の値として格納する。
次に、ステップS3で、生成部14Rが、生成した最短経路行列Sを圧縮して、付与部12Rが生成した中間経路表Pと共に、行列DB30Rに格納して、所定の記憶領域に記憶する。そして、最短経路行列生成処理は終了する。
次に、図7に示す最短経路復元処理について説明する。
ステップS6で、復元部22Rが、受け付けた最短経路σ[i,j]の問い合わせについて、行列DB30Rに格納された最短経路行列Sから、S[i,j]の値kを取得する。kが中間点の頂点番号の場合、復元部22Rは、σ[i,k]とσ[k,j]との和として、σ[i,j]を求める。kが中間辺の中間辺番号の場合、復元部22Rは、中間経路表Pからkに対応する中間辺(k,k)を特定する。そして、復元部22Rは、σ[i,k]とσ[k,j]とを、中間辺(k,k)で結合することにより、σ[i,j]を求める。復元部22Rは、σ[i,k]、σ[k,j]、σ[i,k]、σ[k,j]等についても、中間点又は中間辺で分割された最短経路が一つの経路として繋がるまで、ステップS6及びS7の処理を再帰的に繰り返す。これにより、復元部22Rは、全体の最短経路σ[i,j]を復元し、復元した最短経路σ[i,j]を出力して、最短経路復元処理を終了する。なお、最短経路行列や中間経路表Pにアクセスする際には伸長処理を行う。
<実施形態>
以下、図面を参照して開示の技術に係る実施形態の一例を詳細に説明する。なお、本実施形態において、参考例と共通する内容については、詳細な説明を省略する。
上述したように、本実施形態では、中間経路として、長さ2以上の経路を対象とする。この理由について、上記の参考例を参照しながら説明する。
参考例では、最短経路行列の要素の値として、最短経路上の中間点の頂点番号、又は中間辺の中間辺番号を用いる場合について説明した。この場合、最短経路の復元時に、最短経路行列(の要素)及び中間経路表へのアクセス回数が多くなる。最短経路行列及び中間経路表へのアクセスが多くなると、最短経路の復元処理に時間を要してしまう。
例えば、図2のグラフにおける最短経路σ[8,1]=[8,7,5,3,1]の例で説明する。最短経路行列の要素の値として、親の頂点番号のみを用いる場合は、S[8,1]に頂点8の親である頂点7の頂点番号「7」が格納されているため、次に、S[7,1]にアクセスする。S[7,1]には、「5」が格納されているため、次に、S[5,1]にアクセスし、S[5,1]には、「3」が格納されているため、次に、S[3,1]にアクセスする。S[3,1]には終点である「1」が格納されているため、最短経路σ[8,1]は、この時点で[8,7,5,3,1]であることがわかり、S[1,1]にアクセスする必要はない。すなわち、最短経路行列へのアクセス回数はS[8,1]、S[7,1]、S[5,1]、及びS[3,1]の4回である。最短経路行列の要素の値として親の頂点番号のみを用いる場合は、一般に、長さLの最短経路を求めるために必要な最短経路行列へのアクセス回数は、L回である。
最短経路行列の要素の値として中間点の頂点番号を用いる場合は、最短経路行列へのアクセス回数が、中間点を入れる毎に1回増えてしまう。例えば、S[8,1]=5であったとする。この場合、σ[8,1]=σ[8,5]+σ[5,1]と計算できる。σ[8,5]及びσ[5,1]については、親を順次辿る方法で求めるとする。その場合、σ[8,5]及びσ[5,1]のそれぞれについて2回、最短経路行列へのアクセスが必要になる。すなわち、最短経路行列へのアクセスが全体で5回必要で、上記の親の頂点番号のみを用いた場合に比べ、1回増えることになる。さらに、σ[8,5]及びσ[5,1]についても中間点を使った場合は、最短経路行列へのアクセスがそれぞれ1回増えるため、全体で3回増えることになる。このように、最短経路行列の要素の値として中間点を用いる場合は、中間点1個に対し、最短経路行列へのアクセス回数が1回増えることになる。
次に、最短経路行列の要素の値として中間辺の中間辺番号を用いる場合を考える。S[8,1]=9で、「9」は、中間辺(5,3)の中間辺番号であるとする。したがって、σ[8,1]=σ[8,5]+[5,3]+σ[3,1]と計算できる。ここまでで、最短経路行列へ1回、中間経路表へ1回アクセスを要している。σ[8,5]及びσ[3,1]は、親を順次辿る方法で求める場合、σ[8,5]について2回、σ[3,1]について1回の最短経路行列へのアクセスが必要になる。したがって、全体で、最短経路行列へのアクセスが4回、中間経路表へのアクセスが1回必要になる。すなわち、上記の親の頂点番号のみを用いた場合に比べ、中間経路表へのアクセスが1回分増える。
一方、中間経路として、長さが2以上の経路を考える。S[8,1]=10で、「10」は、長さが2以上の[7,5,3]という中間経路を表しているものとする。したがって、σ[8,1]=σ[8,7]+[7,5,3]+σ[3,1]と計算できる。ここまでで、最短経路行列へ1回、中間経路表へ1回アクセスを要している。σ[8,7]及びσ[3,1]は、親を順次辿る方法で求める場合、σ[8,7]に1回、σ[3,1]に1回の最短経路行列へのアクセスが必要になる。したがって、全体で、最短経路行列へのアクセスが3回、中間経路表へのアクセスが1回必要になる。すなわち、上記の親の頂点番号のみを用いた場合に比べ、最短経路行列へのアクセスが1回減ったものの、中間経路表へのアクセスが1回増えたことになる。
最短経路行列へのアクセスと中間経路表へのアクセスとは、処理負荷が同じとは限らない。圧縮率の違いやデータの並びにより入出力回数が異なったり、CPUの処理負荷が異なったりする可能性があるためである。最短経路行列へのアクセスの方が、中間経路表へのアクセスより処理負荷が重い場合、中間経路長が2以上であれば、最短経路行列の要素の値として中間経路を用いる方が、親の頂点番号のみを用いる場合よりも高速に最短経路行列を復元できることになる。
一方、最短経路行列のアクセスの方が、処理負荷が軽い場合は、中間経路長が2以上のある整数以上であれば、親の頂点番号のみを用いる場合よりも高速に最短経路行列を復元可能になる値があると考えられる。そこで、本実施形態では、この値を「最小中間経路長(Lmin)」とし、中間経路長がLmin以上の中間経路の識別情報(以下、「中間経路番号」という)のみを、最短経路行列の要素の値として用いる場合について説明する。なお、本実施形態では、Lmin=2として説明する。
また、最短経路行列に用いる中間経路が長いほど、最短経路の復元時の最短経路行列へのアクセス回数は減る。しかし、逆に中間経路を長くすれば、アクセス回数が減るとは限らない。その長い中間経路を含む最短経路はそう多くないはずだからである。このように中間経路長とアクセス回数との関係は一概には言えないが、中間経路表のサイズとアクセス回数との間にはトレードオフの関係があることが予想される。すなわち、中間経路表のサイズが大きくなればアクセス回数が減り、逆に中間経路表のサイズが小さくなればアクセス回数が増える傾向があると予想される。極端な例では、最短経路行列へのアクセス回数を最小化する場合には、全ての最短経路を中間経路表で管理すれば、最短経路行列へのアクセス回数は1回で済む。しかし、この場合、中間経路表のサイズは膨大なものになる。一方、中間経路表のサイズを最小化する場合には、中間経路を中間経路表に持たせなければよい。しかし、この場合、親の頂点番号のみを用いる場合と同じ回数の最短経路行列へのアクセス回数が必要になる。
したがって、中間経路表のサイズをできるだけ小さく保ちながら、最短経路行列へのアクセス回数をできるだけ削減できるように調整できることが望ましい。本実施形態では、このような調整も可能とする場合について説明する。
まず、本実施形態の概要を以下に示す。各項目の詳細については後述する。
(1)グラフをクラスタリングすると共に、切断点を求める。
(2)頂点クラスタ対応表、及び中間経路表を生成する。
(3)長さが最小中間経路長(Lmin)以上の中間経路の中間経路番号を用いて最短経路行列を生成する。
(4)最短経路行列及び中間経路表Pを圧縮する。
上述のように、中間経路の長さは、中間経路表のサイズをできるだけ小さく保ちながら、最短経路行列へのアクセス回数をできるだけ削減できるように調整する必要がある。上記(1)に示すように、グラフをクラスタリングするのはこのためである。クラスタリングの結果、グラフは、切断辺で連結された複数のクラスタに分割される。なお、切断辺とは、辺の一端の頂点と他端の頂点とが、異なるクラスタに属する辺である。また、切断辺の両端の頂点を切断点という。そして、各クラスタの切断点を始点及び終点とし、そのクラスタ内に含まれる頂点だけからなる最小中間経路長Lmin以上の最短経路を、中間経路として用いる。
図8に示すように、本実施形態に係る情報処理装置100は、付与部12及び生成部14を含む最短経路行列生成部10と、復元部22を含む最短経路復元部20とを含む。最短経路行列生成部10は、開示の技術の最短経路行列生成装置の一例であり、付与部12は、開示の技術の付与部の一例であり、生成部14は、開示の技術の生成部の一例である。
付与部12は、入力されたグラフを、指定された数の部分グラフに分割(クラスタリング)する。クラスタリングの手法としては、従来既知の手法を用いることができる。そして、付与部12は、各部分グラフについて、その部分グラフに含まれる頂点を用いて表され、かつ切断点を始点及び終点とする経路を中間経路とし、その中間経路に中間経路番号を付与する。
具体的には、付与部12は、全体のグラフをG=(V,E)とし、1≦i≦pとして、以下に示すように、グラフGを、Vと、両端がVに含まれる頂点からなる辺の集合Eとからなる部分グラフG=(V,E)の列G,G,・・・,Gに分割する。
=(V,E
={(v,v)∈E|v,v∈V
このように、1つのグラフを複数のグラフに分割することは、上述のように、「クラスタリング」と呼ばれ、各連結部分グラフG(i=1,2,・・・,p))は「クラスタ」と呼ばれる。また、以下では、pを「クラスタ数」という。このクラスタリングにより、グラフGをp個の互いに重複がない連結部分グラフに分割でき、かつ切断点が求められたことになる。各部分グラフGは連結しているものとする。
なお、無向グラフの部分グラフ内の任意の2頂点について、一方から他方への経路がある場合、その部分グラフは連結であるといい、連結している部分グラフを連結部分グラフと呼ぶ。
グラフを分割する際には、上述のように、中間経路表のサイズをできるだけ小さく保ちながら、最短経路行列へのアクセス回数をできるだけ削減できるように調整することを考慮して、次の2つの要求がなるべく満たされるような制約条件を設定する。
1)各Vに含まれる頂点の数は均等
2)切断辺の数が少ない
なお、辺e=(v,v)が2つのグラフG=(V,E)とG=(V,E)と に跨っている、すなわち、v∈V、v∈Vである場合、頂点v及びvが「切断点」であり、辺eが「切断辺」である。すなわち、切断辺の数が少ないとは、p個の部分グラフG,G,・・・,Gに跨る辺、すなわち、どのGにも含まれない辺の数が少ないことを意味する。
また、付与部12は、前述のように、各クラスタG内の切断点を始点及び終点とし、G内に含まれる頂点のみからなる最小中間経路長Lmin以上の最短経路を、中間経路として用いる。
pの値によってクラスタが決まり、中間経路も決まるため、中間経路を管理する中間経路表の大きさが決まる。pの値は、グラフ全体の大きさに基づいて適切な値に設定しておくことができる。ただし、適切な値に設定するため、以下に述べるような注意が必要である。例えば、pを大きくしてnに近づければ、中間経路の平均長は小さくなるため、最短経路行列へのアクセス回数は増えるように思われるが、中間経路を使える最短経路が増え、逆にアクセス回数は減る可能性もある。その場合は、前述のように、中間経路表のサイズは大きくなると予想される。逆に、pを小さくすれば、中間経路の平均長は大きくなるため、最短経路行列へのアクセス回数は減るようにも思われるが、中間経路を使える最短経路は少なくなり、逆にアクセス回数は増える可能性もある。その場合は、中間経路表のサイズは小さくなると予想される。このように、トレードオフの関係にあると予想される最短経路行列へのアクセス回数と中間経路表のサイズは、pを変動させることで変わる。上述のようにその動きがpと平均中間経路長の間の関係のようには予測できない面はあるものの、少なくともpの値を1からnまでの間の適当な範囲で変動させることで、ユーザに最適と思われるバランスに調整することが可能である。
また、付与部12は、各頂点がいずれのクラスタに属するかを示す頂点クラスタ対応表を生成する。例えば、付与部12は、頂点番号iをキーとし、頂点iが属するクラスタGの番号kを値とするインデクス付表で、頂点クラスタ対応表Cを生成する。本実施形態では、インデクス付表Tにおいて、キーxに対する値をT[x]と表す。したがって、頂点クラスタ対応表Cの場合、キーiに対する頂点クラスタ対応表Cの値をC[i]で表す。すなわち、C[i]=kである。なお、インデクス付表とは、例えば、主記憶上のハッシュ表や二分木、又は二次記憶上のB−treeやハッシュ表のように、キーからインデクスを使って値に直接アクセスできる表をいう。
また、付与部12は、最短経路σ[i,j]上に、[k,k,・・・,kL+1](2≦L)という中間経路、すなわち長さLのσ[k,kL+1]という中間経路があれば、その中間経路に中間経路番号を付与して、中間経路表で管理する。[k,k,・・・,kL+1]という中間経路の情報を中間経路表で管理することで、参考例における中間辺の辺番号と同様に、最短経路行列の要素の値として用いることができる。また、この長さLの中間経路の中間経路番号を最短経路行列の要素の値とすることで、最短経路行列へのアクセス回数をL−1回減らすことが可能となる。
付与部12は、中間経路表として、最短経路行列で用いる中間経路を管理する中間経路表P、及び中間経路表Pを生成する。中間経路表Pは、最短経路行列の生成時に、各中間経路に付与された中間経路番号を参照する際に使用される。中間経路表Pは、最短経路の復元時に、最短経路行列で用いられている中間経路番号が示す中間経路を特定する際に使用される。例えば、付与部12は、中間経路表P及びPの各々をインデクス付表で生成することができる。
具体的には、付与部12は、中間経路の始点をi、終点をjとすると、中間経路表Pのキーをiとjとのタプル(i,j)とし、(i,j)のiを「start」、jを「end」と定義する。これにより、中間経路表Pにおいて、key=(i,j)とした場合、iの値はkey.start、jの値はkey.endで参照できるものとする。付与部12は、始点i及び終点jの中間経路に中間経路番号を付与し、その中間経路番号をP[(i,j)]の値として格納することで、中間経路表Pを生成する。
また、中間経路を[i,i,・・・,i]とし、この中間経路の中間経路番号をunoとすると、付与部12は、中間経路表Pのキーをunoとし、P[uno]の値として[i,i,・・・,i]を格納することで、中間経路表Pを生成する。[i,i,・・・,i]は、頂点i、i、・・・、及びiからなるリストである。
より具体的には、付与部12は、各クラスタG(k=1,2,・・・,p)について、G内の切断点間の最短経路を、既存の最短経路を求めるアルゴリズムを用いて求める。例えば、以下に述べる幅優先探索アルゴリズムを、全点から全点への最短経路を求めるのではなく、切断点を出発点として、全ての切断点に到達した時点で終了するようなアルゴリズムにすることで求めることが可能である。
例えば、付与部12は、全頂点の数をnとした場合、求めた各中間経路にn+1から順に中間経路番号を付与し、各中間経路と対応付けて、中間経路表P及びPに登録する。なお、中間経路表P及びPのサイズを小さくするため、中間経路表Pのキー(i,j)は、i<jを満たすものとする。キー(j,i)に対応する中間経路であって、キー(i,j)に対応する中間経路の逆順の中間経路は、中間経路表Pに格納しない。始点をj、終点をiとする中間経路については、P[(i,j)]を利用する。同様に、中間経路表Pについても、中間経路番号unoの中間経路を[i,i,・・・,i]とした場合、i<iを満たす中間経路のみを格納する。[i,ih−1,・・・,i]については、P[uno]=[i,i,・・・,i]の順序を逆転させて利用する。なお、逆転したものであることを示すために、後述のように中間経路番号unoを反転した値を最短経路行列の値として用いる。
生成部14は、中間経路表Pで管理されている中間経路を用いて、参考例における生成部14Rと同様に、最短経路行列Sを生成する。
ここで、本実施形態における最短経路行列の生成方式は、既存の全頂点から全頂点への最短経路を求めるアルゴリズム、具体的には、幅優先探索アルゴリズムに修正を加えたものである。そのため、本実施形態における最短経路行列の生成方式の理解を容易にするために、まず、幅優先探索アルゴリズムによる最短経路行列の生成について説明する。この方式では、最短経路行列の要素には、親の頂点番号が格納される。
まず、頂点j毎に、その頂点に隣接する頂点の頂点番号のリスト(以下、「隣接頂点リスト」という)A[j]が与えられているものとする。例えば、頂点jに隣接する頂点がk及びkであれば、A[j]=[k,k]である。そして、図9に示す幅優先探索アルゴリズムで詳述するように、頂点jからの距離が0、1、2、・・・である頂点を同心円状に順に求めていく。この同心円的な振る舞いの様子を図10に示す。図10は、頂点1、頂点2、頂点3、頂点4、及び頂点5を含むグラフで、頂点1を根とした場合の例である。なお、図10に示すグラフにおいて、実線で示す辺は、幅優先探索アルゴリズムで最短経路として辿った辺であり、破線で示す辺は最短経路として辿らなかった辺を示している。
具体的には、図9に示す幅優先探索アルゴリズムのS1001で、n行n列の空の最短経路行列Sを用意し、最短経路行列Sにおける処理対象の列、すなわち、求める最短経路の終点を特定するための変数jに1を設定する。
次に、ステップS1002で、jがグラフに含まれる頂点の個数n以下か否かを判定する。j≦nの場合には、ステップS1003で、頂点jからの距離を示す変数dに0を設定し、頂点jからの距離がdの同心円上に存在する頂点のリストR[d]にjを格納する。また、求める最短経路の始点を特定するための変数iに1を設定する。
次に、ステップS1004で、iがn以下か否かを判定する。i≦nの場合には、ステップS1005で、S[i,j]に初期値として「I」を格納する。最短経路行列Sの要素S[i,j]には、頂点iから頂点jへの最短経路における頂点iの親の頂点番号を格納していくが、初期値としては、最短経路の探索において、頂点iが未だ辿られていないことを示す値I(Initialの意)を格納しておくものである。
次に、ステップS1006で、iを1インクリメントしてステップS1004に戻る。ステップS1004で、i>nと判定されると、ステップS1007で、S[j,j]に最短経路の終点を示す値(ここでは、「E」)を設定する。
次に、ステップS1008で、R[d]が空か否かを判定し、空ではない場合には、ステップS1009へ移行する。ステップS1009では、dを1インクリメントし、R[d]を空のリスト([ ])で初期化する。
次に、ステップS1010で、R[d−1]に本ステップ以降の処理が未処理の頂点iが存在するか否かを判定する。未処理の頂点iが存在する場合には、ステップS1011へ移行し、未処理の頂点iが存在しない場合には、ステップS1008に戻る。
ステップS1011では、R[d−1]から未処理の頂点iを1つ選択し、その頂点iの隣接頂点リストA[i]に本ステップ以降の処理が未処理の頂点kが存在するか否かを判定する。未処理の頂点kが存在する場合には、処理はステップS1012へ移行し、未処理の頂点kが存在しない場合には、処理はステップS1010に戻る。
ステップS1012では、A[i]から未処理の頂点kを1つ選択し、S[k,j]がI、すなわち初期値か否かを判定する。S[k,j]=Iの場合には、ステップS1013へ移行し、S[k,j]≠Iの場合には、ステップS1011に戻る。
ステップS1013では、最短経路行列SのS[k,j]に、上記ステップS1011で選択した頂点の頂点番号iを格納する。また、R[d]に、上記ステップS1012で選択した頂点の頂点番号kを追加する。すなわち、頂点jから距離dの位置にある頂点であることが判明した頂点の頂点番号を、R[d](d=0,1,2,・・・)に格納していく。そして、ステップS1011に戻る。
上記ステップS1008で、R[d]が空であると判定されると、ステップS1014で、jを1インクリメントして、ステップS1002に戻る。そして、j>nと判定されると、幅優先探索アルゴリズムは終了する。
上記の処理を、図10に示すグラフを例に、より具体的に説明する。
j=1の場合において、ステップS1002〜S1007の処理までが終了すると、最短経路行列Sは、図11のS−1に示すように、j=1についての初期状態となる。このとき、R[d=0]=[1]であるので、ステップS1009に進み、R[d=0+1]=[ ]となる。R[d−1=0]には「1」が格納されており、A[i=1]=[k=2,3]である。まず、ステップS1012で、k=2が選択されたとすると、ステップS1013で、S[k=2,j=1]=1が格納され、R[d=1]=[2]となる。そして、ステップS1011に戻って、k=3が選択され、ステップS1013で、S[k=3,j=1]=1が格納され、R[d=1]=[2,3]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理の頂点iが存在しなくなるため、ステップS1008に戻る。このとき、R[d=1]=[2,3]であるので、ステップS1009に進み、R[d=1+1]=[ ]となる。R[d−1=1]には2及び3が格納されている。まず、ステップS1011で、i=2が選択されたとすると、A[i=2]=[k=1,3,4,5]である。まず、ステップS1012で、k=1が選択されたとすると、S[k=1,j=1]=E≠Iであるため、ステップS1011に戻る。次に、k=3が選択されたとすると、S[k=3,j=1]=1≠Iであるため、ステップS1011に戻る。次に、k=4が選択されたとすると、S[k=4、j=1]=Iであるため、ステップS1013で、S[k=4,j=1]=2が格納され、R[d=2]=[4]となる。そして、ステップS1011に戻って、k=5が選択され、ステップS1013で、同様にS[k=5,j=1]=2が格納され、R[d=2]=[4,5]となる。
次に、ステップS1010に戻って、R[d−1]に未処理の頂点3が存在するため、ステップS1011で、i=3が選択される。A[i=3]=[k=1,2]であり、ステップS1012で、k=1,2のいずれが選択された場合も、S[k=1or2,j=1]≠Iであるため、ステップS1010を経由してステップS1008に戻る。
このとき、R[d=2]=[4,5]であるので、ステップS1009に進み、R[d=2+1]=[ ]となる。R[d−1=2]には4及び5が格納されており、まず、ステップS1011で、i=4が選択されたとすると、A[i=4]=[k=2,5]である。ステップS1012で、k=2,5のいずれが選択された場合も、S[k=2or5,j=1]≠Iであるため、ステップS1010に戻る。ステップS1011で、i=5が選択され、A[i=5]=[k=2,4]である。ステップS1012で、k=2,4のいずれが選択された場合も、S[k=2or4,j=1]≠Iであるため、ステップS1010を経由してステップS1008に戻る。
このとき、R[d=3]は空であるため、j=1についての処理は終了する。この段階での最短経路行列Sは、図11のS−2に示す状態となる。j=2,3,4,5についても同様に処理し、j=5についての処理終了時には、最短経路行列Sは、図11のS−3に示す状態となる。
上記の幅探索アルゴリズムを踏まえて、本実施形態における最短経路行列の生成について説明する。本実施形態における最短経路行列の生成では、上記の幅優先探索アルゴリズムに、次のように変更を加える。
幅優先探索アルゴリズムにおいて、頂点jから距離dの位置にある頂点の頂点番号iが格納されるリストR[d]について、R[d]に格納される要素として、頂点番号iだけでなく、頂点iの状態に関する情報mを格納する。すなわち、本実施形態では、R[d]は、タプル(i,m)のリストである。ここでいう頂点iの状態に関する情報mとは、頂点iから頂点jへの最短経路上の中間経路を見つける過程における頂点iの状態を示す情報である。
本実施形態では、mをm=(state,uno,len)という3つの要素からなるタプルとして定義する。state、uno、及びlenの各要素は、それぞれm.state、m.uno、及びm.lenで参照可能であるとする。m.stateは、頂点iの状態を表す(詳細は後述)。m.unoは、中間経路の終点となる切断点の頂点番号、又は中間経路の中間経路番号である。m.lenは、中間経路の長さを表す。m.stateは、辿ってきた経路の現時点での状態を番号で表すものである。m.stateに用いられる番号と、その意味とを以下に示す。
NP:頂点iが最短経路探索の出発点と同じクラスタ内にいて、未だ中間経路に遭遇していない。
IP:頂点iが最短経路探索の出発点と別のクラスタ内にいて、未完結の中間経路又は中間経路になる可能性のある経路に遭遇。
CP:長さが最小中間経路長Lmin以上の完結した中間経路に遭遇。
中間経路が完結とは、最短経路の探索が、経路が長さがLmin以上の中間経路を経由して、その中間経路とは別のクラスタに移り、その中間経路がさらに延長されないことが確定したことを意味する。逆に、未完結とは、経路上で中間経路には遭遇しているが、その中間経路があるクラスタから他のクラスタに移っていないため、その中間経路が完結していなくて、さらに伸びる可能性があることを意味する。
m.stateの値としては、例えば、NP、IP、及びCPの各々に、NP<IP<CPとなる番号、例えば、0、1、2を割り当てる。なお、NPはNo Path、IPはIncomplete Path、CPはComplete Pathの略である。以下では、説明を分かり易くするため、0、1、2等の番号ではなく、NP、IP、及びCPの記号を用いて説明する。
mの各要素は、m.stateの値に応じて、以下に示す値をとる。
NPの場合 (NP,None,None)
IPの場合 (IP,u,len)
CPの場合 (CP,u,len)
Noneはオブジェクトがないことを意味する定数である。IPの場合、uは中間経路になる可能性のある経路の終点の頂点番号、lenはその経路の頂点iから終点uまでの長さである。CPの場合、uは完結した中間経路の中間経路番号、lenはその中間経路の長さであり、Lmin≦lenである。
生成部14は、上記のmを更新しながら幅優先探索により最短経路を求め、その最短経路上で経由する頂点の頂点番号、又は中間経路の中間経路番号を最短経路行列の対応する要素に格納することにより、最短経路行列Sを生成する。生成部14は、生成した最短経路行列Sを、付与部12が生成した中間経路表Pと共に圧縮して行列DB30に格納する。
復元部22は、始点及び終点を指定した最短経路の問い合わせを受け付けると、行列DB30に格納された最短経路行列S及び中間経路表Pを用いて、指定された始点及び終点に対応する頂点間の最短経路を復元する。
情報処理装置100は、例えば図12に示すコンピュータ40で実現することができる。コンピュータ40は、Central Processing Unit(CPU)41、一時記憶領域としてのメモリ42、及び不揮発性の記憶部43を備える。また、コンピュータ40は、入出力装置44、記憶媒体49に対するデータの読み込み及び書き込みを制御するRead/Write(R/W)部45、及びインターネット等のネットワークに接続される通信interface(I/F)46を備える。CPU41、メモリ42、記憶部43、入出力装置44、R/W部45、及び通信I/F46は、バス47を介して互いに接続される。
記憶部43はHard Disk Drive(HDD)、Solid State Drive(SSD)、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部43には、コンピュータ40を情報処理装置100として機能させるための最短経路行列生成プログラム50及び最短経路復元プログラム60が記憶される。最短経路行列生成プログラム50は、付与プロセス52と、生成プロセス54とを有する。最短経路復元プログラム60は、復元プロセス62を有する。また、記憶部43は、行列DB30を構成する情報が記憶される情報記憶領域70を有する。
CPU41は、最短経路行列生成プログラム50及び最短経路復元プログラム60の各々を記憶部43から読み出してメモリ42に展開し、最短経路行列生成プログラム50及び最短経路復元プログラム60が有するプロセスを順次実行する。
CPU41は、付与プロセス52を実行することで、図8に示す付与部12として動作する。また、CPU41は、生成プロセス54を実行することで、図8に示す生成部14として動作する。また、CPU41は、復元プロセス62を実行することで、図8に示す復元部22として動作する。また、CPU41は、情報記憶領域70から情報を読み出して、例えば、行列DB30の必要な情報をメモリ42に展開すると共に、メモリ42の必要な情報を情報記憶領域70に書き出す。これにより、最短経路行列生成プログラム50及び最短経路復元プログラム60の各々を実行したコンピュータ40が、情報処理装置100として機能することになる。なお、プログラムを実行するCPU41はハードウェアである。
なお、最短経路行列生成プログラム50及び最短経路復元プログラム60により実現される機能は、例えば半導体集積回路、より詳しくはApplication Specific Integrated Circuit(ASIC)等で実現することも可能である。
次に、本実施形態に係る情報処理装置100の作用について説明する。まず、情報処理装置100にグラフG(G=(V,E))が入力され、最短経路行列の生成が指示されると、情報処理装置100の最短経路行列生成部10において、図13に示す最短経路行列生成処理が実行される。最短経路行列生成処理は、開示の技術の最短経路行列生成方法の一例である。そして、最短経路行列が生成されて行列DB30に格納された状態で、最短経路σ[i,j]の問い合わせを受け付けると、情報処理装置100の最短経路復元部20において、図21に示す最短経路復元処理が実行される。以下、本実施形態における最短経路行列生成処理及び最短経路復元処理の各々について詳述する。
まず、図13に示す最短経路行列生成処理のステップS10で、付与部12が、1)各Vに含まれる頂点の数は均等、及び、2)切断辺の数が少ない、という制約下で、グラフGをp個にクラスタリングする。
次に、ステップS20で、表生成処理が実行される。ここで、図14を参照して、表生成処理について詳述する。
ステップS21で、付与部12が、クラスタの番号を示す変数kに1を設定する。また、付与部12が、初期状態の頂点クラスタ対応表Cとして、空のインデクス付表を作成する。
次に、ステップS22で、付与部12が、kが、上記ステップS10で分割されたクラスタ数p以下か否かを判定する。k≦pの場合には、処理はステップS23へ移行する。
ステップS23では、付与部12が、クラスタGに本ステップ以降の処理が未処理の頂点iが含まれるか否かを判定する。未処理の頂点iが含まれる場合には、処理はステップS24へ移行する。
ステップS24では、付与部12が、未処理の頂点iを1つ選択して、頂点クラスタ対応表のC[i]の値としてkを格納して、処理はステップS23に戻る。クラスタGに未処理の頂点が存在しなくなると、処理はステップS25へ移行し、付与部12が、kを1インクリメントして、処理はステップS22に戻る。ステップS22で、k>pと判定されると、処理はステップS26へ移行する。
ステップS26では、付与部12が、中間経路番号を示す変数uに、頂点の個数(頂点番号の最大値)nを設定する。また、付与部12が、初期状態の中間経路表P、Pの各々として、空のインデクス付表を作成する。さらに、付与部12が、クラスタの番号を示す変数kに1を設定する。
次に、ステップS27で、付与部12が、kがクラスタ数p以下か否かを判定する。k≦pの場合は、処理はステップS28へ移行する。ステップS28では、付与部12が、クラスタGの切断点を始点及び終点とし、クラスタGに含まれる頂点のみを通る最短経路を中間経路として求め、中間経路の集合Pを生成する。なお、中間経路の始点をi、終点をiとした場合、i<iを満たす中間経路のみを生成する。中間経路となる最短経路の求め方としては、例えば、上述した幅優先探索アルゴリズムを用いることができる。
次に、ステップS29で、付与部12が、中間経路の集合Pに、本ステップ以降の処理が未処理の中間経路[i,i,・・・,i]が存在するか否かを判定する。未処理の中間経路が存在する場合には、処理はステップS30へ移行する。
ステップS30では、付与部12が、uを1インクリメントし、中間経路表PのP[(i,i)]の値としてuを格納し、中間経路表PのP[u]の値として[i,i,・・・,i]を格納して、処理はステップS29に戻る。中間経路の集合Pに未処理の中間経路が存在しなくなると、処理はステップS31へ移行し、付与部12が、kを1インクリメントして、処理はステップS27に戻る。ステップS27で、k>pと判定されると、表生成処理は終了し、最短経路行列生成処理(図13)に戻る。
次に、最短経路行列生成処理のステップS40で、行列生成処理が実行される。ここで、図15を参照して、行列生成処理について詳述する。
ステップS41で、生成部14が、n行n列の空の最短経路行列Sを用意し、最短経路行列Sにおける処理対象の列、すなわち、求める最短経路の終点を特定するための変数jに1を設定する。
次に、ステップS42で、生成部14が、jがグラフに含まれる頂点の個数n以下か否かを判定する。j≦nの場合には、ステップS43で、生成部14が、頂点クラスタ対応表CからC[j]の値を取得して、変数cに設定し、頂点jからの距離を示す変数dに0を設定する。また、生成部14が、頂点jからの距離がdの同心円上に存在する頂点の頂点番号i、及び頂点iの状態を示す情報mのタプル(i,m)のリストR[d]に(j,(NP,None,None))を格納する。さらに、生成部14が、求める最短経路の始点を特定するための変数iに1を設定する。
次に、ステップS44〜S47で、上述の幅優先探索アルゴリズム(図9)のステップS1004〜S1007と同様に、最短経路行列Sの要素S[i,j](i=1,2,・・・,n)に初期値「I」、S[j,j]に終点を示す値「E」を設定する。
次に、ステップS48で、生成部14が、R[d]が空か否かを判定し、空ではない場合には、ステップS49へ移行する。ステップS49では、生成部14が、dを1インクリメントし、R[d]を空のリスト([ ])で初期化する。
次に、ステップS50で、生成部14が、R[d−1]に本ステップ以降の処理が未処理のタプル(i,m)が存在するか否かを判定する。未処理のタプル(i,m)が存在する場合には、処理はステップS51へ移行し、未処理のタプル(i,m)が存在しない場合には、処理はステップS48に戻る。
ステップS51では、生成部14が、R[d−1]から未処理のタプル(i,m)を1つ選択し、頂点iの隣接頂点リストA[i]に本ステップ以降の処理が未処理の頂点kが存在するか否かを判定する。未処理の頂点kが存在する場合には、処理はステップS52へ移行し、未処理の頂点kが存在しない場合には、処理はステップS50に戻る。
ステップS52では、生成部14が、A[i]から未処理の頂点kを1つ選択し、S[k,j]がI、すなわち初期値か否かを判定する。S[k,j]=Iの場合には、ステップS60へ移行し、S[k,j]≠Iの場合には、ステップS51に戻る。
ステップS60では、生成部14が、最短経路を頂点iから頂点kに辿った場合における頂点kとその状態を示す情報m’のタプル(k,m’)を取得するための(k,m’)取得処理を実行する。ここで、図16を参照して、(k,m’)取得処理について説明する。
ステップS61で、生成部14が、上記ステップS51で選択したタプル(i,m)のm.stateがNPか否かを判定する。m.state=NPの場合には、処理はステップS62へ移行し、m.state≠NPの場合には、処理はステップS65へ移行する。
ステップS62では、生成部14が、頂点クラスタ対応表CのC[k]の値が、上記ステップS43で設定したcの値と同じか否かを判定する。すなわち、生成部14は、頂点kが属するクラスタが、頂点jが属するクラスタと同じか否かを判定する。C[k]=cの場合には、生成部14は、頂点kは、最短経路探索の出発点である頂点jと同じクラスタに存在しており、未だ中間経路表Pで管理されている中間経路に遭遇していないと判断する。そこで、処理はステップS63へ移行し、生成部14が、上記ステップS51で選択したタプル(i,m)のmを、m’に設定し、処理はステップS76へ移行する。
一方、C[k]≠cの場合には、生成部14は、頂点kは、頂点jが属するクラスタとは別のクラスタに移ったと判断する。すなわち、頂点kは、別のクラスタの切断点であり、中間経路となり得る経路の終点である。そこで、処理はステップS64へ移行し、生成部14が、m’に(IP,k,0)を設定し、処理はステップS76へ移行する。
ステップS65では、生成部14が、上記ステップS51で選択したタプル(i,m)のm.stateがIPか否かを判定する。m.state=IPの場合には、処理はステップS66へ移行し、m.state≠IPの場合には、生成部14は、m.stateはCPであると判断し、処理はステップS63へ移行する。
ステップS66では、生成部14が、頂点クラスタ対応表CのC[k]の値が、C[m.uno]の値と同じか否かを判定する。m.unoは、上記ステップS51で選択されたタプル(i,m)のm.unoの要素である。C[k]=C[m.uno]の場合には、処理はステップS67へ移行する。
ステップS67では、生成部14が、頂点kは頂点iと同じクラスタ内に存在すると判断し、m’を、mが表す頂点iの状態から、中間経路長を1延長させた値に変更する。すなわち、生成部14は、m’に(IP,m.uno,m.len+1)を設定し、処理はステップS76へ移行する。
上記ステップS66で、C[k]≠C[m.uno]と判定される場合、頂点kは、頂点iとは異なるクラスタへ移ったこと、すなわち、m.unoを終点とする中間経路が頂点iを始点として完結したことを表す。そこで、処理はステップS68へ移行し、生成部14が、頂点iと頂点m.uno間の中間経路長m.lenが最小中間経路長Lmin以上か否かを判定する。Lmin≦m.lenの場合には、処理はステップS69へ移行する。
ステップS69では、生成部14が、iがm.unoよりも小さいか否かを判定する。i<m.unoの場合には、処理はステップS70へ移行し、生成部14が、中間経路表PからP[(i,m.uno)]の値、すなわち、始点がi、終点がm.unoである中間経路の中間経路番号を取得し、その値を変数unoに設定する。一方、i≧m.unoの場合には、処理はステップS71へ移行し、生成部14が、中間経路表PからP[(m.uno,i)]の値を取得して、その値の符号を反転させる。すなわち、生成部14は、始点がm.uno、終点がiである中間経路の中間経路番号にマイナスを付与した値を、始点がi、終点がm.unoの中間経路の中間経路番号とし、変数unoに設定する。
次に、ステップS72で、生成部14が、m’を、頂点iで中間経路が完結したことを表す値に変更する。すなわち、生成部14は、m’に(CP,uno,m.len)を設定し、処理はステップS76へ移行する。
一方、上記ステップS68で、Lmin>m.lenと判定された場合には、生成部14は、完結した中間経路は、中間経路表Pで管理されている中間経路ではないため、未だ中間経路に遭遇していない状態であるとみなし、処理はステップS73へ移行する。
ステップS73では、生成部14が、C[k]=cか否かを判定する。C[k]=cの場合には、生成部14は、頂点kは、最短経路探索の出発点である頂点jと同じクラスタに存在しており、未だ中間経路表Pで管理されている中間経路に遭遇していないと判断する。そこで、処理はステップS74へ移行し、生成部14が、m’に(NP,None,None)を設定し、処理はステップS76へ移行する。
一方、C[k]≠cの場合には、処理はステップS75へ移行し、生成部14は、上記ステップS64と同様に、m’に(IP,k,0)を設定し、処理はステップS76へ移行する。
ステップS76では、生成部14が、m’.stateがCPか否かを判定する。m’.state=CPの場合、頂点kの状態は、IPからCPへ変わったか、又は元々CPであったことを表す。そこで、処理はステップS77へ移行し、ステップS77で、生成部14が、S[k,j]の値にm’.uno、すなわち、上記ステップS70又はS71で取得した中間経路番号を格納する。
一方、m’.state≠CPの場合には、処理はステップS78へ移行し、生成部14が、S[k,j]の値に、頂点kの親の頂点番号iを格納する。そして、生成部14は、タプル(k,m’)を返し、処理は行列生成処理(図15)に戻る。
次に、ステップS80で、生成部14が、(k,m’)取得処理から返されたタプル(k,m’)をリストR[d]に追加し、処理はステップS51に戻る。
上記ステップS48で、R[d]が空であると判定されると、処理はステップS81へ移行し、生成部14が、jを1インクリメントして、処理はステップS42に戻る。そして、ステップS42で、j>nと判定されると、行列生成終了は終了し、処理は最短行列生成処理(図13)に戻る。
次に、ステップS90で、参考例における最短経路行列生成処理(図6)のステップS3と同様に、生成した最短経路行列S、及び付与部12が生成した中間経路表Pを圧縮し、行列DB30に格納して、所定の記憶領域に記憶する。そして、最短経路行列生成処理は終了する。
上記の最短経路行列生成処理について、特に行列生成処理を中心に、図17に示す単純な線状のグラフを用いて、具体的に説明する。
図17に示すグラフに含まれる頂点の個数nは、n=10である。分割数(クラスタ数)p=4として、例えば、図18に示すようにグラフがクラスタリングされたものとする。なお、図18において、破線で示す辺が切断辺である。すなわち、頂点の集合Vは次のように分割される。
=[1,2]、 V=[3,4,5]、
=[6,7,8]、 V=[9,10]
、V、V、及びVはそれぞれクラスタ(連結部分グラフ)G、G、G、及びGに含まれる。GとGとの間の切断辺は(2,3)であり、GとGとの間の切断辺は(5,6)であり、GとGとの間の切断辺は(8,9)であり、切断点は2、3、5、6、8、及び9である。したがって、頂点クラスタ対応表Cは、次のように生成される。
C[1]=1、 C[2]=1、
C[3]=2、 C[4]=2、 C[5]=2、
C[6]=3、 C[7]=3、 C[8]=3、
C[9]=4、 C[10]=4
また、中間経路表P、及び中間経路表Pは、次のように生成される。
[(3,5)]=11、 P[(6,8)]=12
[11]=[3,4,5]、 P[12]=[6,7,8]
次に、図15に示す行列生成処理の動作について具体的に説明する。以下、求める最短経路の終点をjとして、各頂点から終点j(j=1,2,・・・,10)までの最短経路を求める場合について説明する。
j=1の場合、ステップS43で、C[j=1]=1であるので、c=1となる。また、R[d=0]=[(j=1,(NP,None,None))]が設定される。
ステップS44〜S47の処理が実行されると、最短経路行列Sは、図19のS−11に示すように、j=1についての初期状態となる。このとき、R[d=0]にはタプルが1つ格納されているため、ステップS49に進み、R[d=0+1]=[ ]となる。R[d−1=0]にはタプル(1,(NP,None,None))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=1、m=(NP,None,None)である。A[i=1]=[2]であるので、ステップS52で、k=2が選択され、S[k=2、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。
m.state=NP、C[k]=1=c(=1)であるので、ステップS63で、m’=mとする。m’ .state=NPであるので、ステップS78で、S[k=2,j=1]=i(=1)を格納し、(k=2,m’=(NP,None,None))を返す。これにより、R[1]=[(2,(NP,None,None))]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理のタプル(i,m)が存在しなくなるため、ステップS48に戻る。このとき、R[d=1]=[(2,(NP,None,None))]であるので、ステップS49に進み、R[d=1+1]=[ ]となる。このとき、R[d−1=1]にはタプル(2,(NP,None,None))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=2、m=(NP,None,None)である。A[i=2]=[1,3]であるので、ステップS52で、まず、k=1が選択されたとすると、S[k=1、j=1]≠Iであるので、ステップS51に戻る。
次に、k=3が選択され、S[k=3、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。m.state=NP、C[k]=2≠c(=1)であるので、ステップS64で、m’=(IP,k=3,0)とする。m’ .state=IPであるので、ステップS78で、S[k=3,j=1]=i(=2)を格納し、(k=3,m’=(IP,k=3,0))を返す。これにより、R[2]=[(3,(IP,3,0))]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理のタプル(i,m)が存在しなくなるため、ステップS48に戻る。このとき、R[d=2]=[(3,(IP,3,0))]であるので、ステップS49に進み、R[d=2+1]=[ ]となる。このとき、R[d−1=2]にはタプル(3,(IP,3,0))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=3、m=(IP,3,0)である。A[i=3]=[2,4]であるので、ステップS52で、まず、k=2が選択されたとすると、S[k=3、j=1]≠Iであるので、ステップS51に戻る。
次に、k=4が選択され、S[k=4、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。m.state=IP、C[k]=2=C[m.uno=3](=2)であるので、ステップS67で、m’=(IP,m.uno=3,m.len+1=1)とする。m’.state=IPであるので、ステップS78で、S[k=4,j=1]=i(=3)を格納し、(k=4,m’=(IP,3,1))を返す。これにより、R[3]=[(4,(IP,3,1))]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理のタプル(i,m)が存在しなくなるため、ステップS48に戻る。このとき、R[d=3]=[(4,(IP,3,1))]であるので、ステップS49に進み、R[d=3+1]=[ ]となる。このとき、R[d−1=3]にはタプル(4,(IP,3,1))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=4、m=(IP,3,1)である。A[i=4]=[3,5]であるので、ステップS52で、まず、k=3が選択されたとすると、S[k=3、j=1]≠Iであるので、ステップS51に戻る。
次に、k=5が選択され、S[k=5、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。m.state=IP、C[k]=2=C[m.uno=3](=2)であるので、ステップS67で、m’=(IP,m.uno=3,m.len+1=2)とする。m’ .state=IPであるので、ステップS78で、S[k=5,j=1]=i(=4)を格納し、(k=5,m’=(IP,3,2))を返す。これにより、R[4]=[(5,(IP,3,2))]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理のタプル(i,m)が存在しなくなるため、ステップS48に戻る。このとき、R[d=4]=[(5,(IP,3,2))]であるので、ステップS49に進み、R[d=4+1]=[ ]となる。このとき、R[d−1=4]にはタプル(5,(IP,3,2)))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=5、m=(IP,3,2)である。A[i=5]=[4,6]であるので、ステップS52で、まず、k=4が選択されたとすると、S[k=4、j=1]≠Iであるので、ステップS51に戻る。
次に、k=6が選択され、S[k=6、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。m.state=IP、C[k]=3≠C[m.uno=3](=2)、Lmin(=2)≦m.len=2、i=5>m.uno=3であるので、ステップS71で、P[m.uno=3,i=5]=11を取得し、符号を反転し、uno=−11とする。そして、ステップS72で、m’=(CP,uno=−11,m.len=2)とする。m’ .state=CPであるので、ステップS77で、S[k=6,j=1]=m’.uno(=−11)を格納し、(k=6,m’=(CP,−11,2))を返す。これにより、R[5]=[(6,(CP,−11,2))]となる。
この段階で、A[i]に未処理の頂点kが存在しなくなり、また、R[d−1]に未処理のタプル(i,m)が存在しなくなるため、ステップS48に戻る。このとき、R[d=5]=[(6,(CP,−11,2))]であるので、ステップS49に進み、R[d=5+1]=[ ]となる。このとき、R[d−1=5]にはタプル(6,(CP,−11,2))が格納されており、ステップS51で、このタプルが未処理のタプル(i,m)として取り出される。すなわち、i=6、m=(CP,−11,2)である。A[i=6]=[5,7]であるので、ステップS52で、まず、k=5が選択されたとすると、S[k=5、j=1]≠Iであるので、ステップS51に戻る。
次に、k=7が選択され、S[k=7、j=1]=Iであるので、図16に示す(k、m’)取得処理が実行される。m.state=CPであるので、ステップS63で、m’=mとなる。m’.state=CPであるので、ステップS77で、S[k=7,j=1]=m’.uno(=−11)を格納し、(k=7,m’=(CP,−11,2))を返す。これにより、R[6]=[(7,(CP,−11,2))]となる。
一旦m.state=CPとなると、以降同様の処理となるため、S[k=8,j=1]=S[k=9,j=1]=S[k=10,j=1]=−11である。したがって、j=1の終了時には、最短経路行列Sは、図19のS−12に示す状態となる。j=2,・・・,10についても同様に処理し、j=10についての処理終了時には、最短経路行列Sは、図20のS−13に示す状態となる。
次に、図21に示す最短経路復元処理について説明する。
ステップS101で、復元部22が、受け付けた最短経路σ[i,j]の問い合わせについて、i=jか否かを判定する。i≠jの場合には、処理はステップS102へ移行し、i=jの場合には、処理はステップS110へ移行する。
ステップS102では、復元部22が、行列DB30に格納された最短経路行列Sにアクセスし、S[i,j]の値kを取得する。この際、最短経路行列Sのデータを伸長した上で、S[i,j]の値kを取得する。
次に、ステップS103で、復元部22が、上記ステップS102で取得した値kが、グラフGの頂点の数(頂点番号の最大値)nより大きいか否かを判定する。n<kの場合には、kは中間経路番号であることを表しているため、処理はステップS104へ移行し、復元部22が、伸長した中間経路表PからP[k]に対応付けられた中間経路を取得し、変数ipathに設定する。また、復元部22は、ipathの始点を変数k、終点を変数kに設定する。
次に、ステップS105で、復元部22が、以下に示すように最短経路を復元する。
path=σ[i,k] + ipath + σ[k,j]
一方、上記ステップS103で、n≧kと判定された場合には、処理はステップS106へ移行し、復元部22が、kが−nより小さい否かを判定する。k<−nの場合には、kは中間経路番号の符号を反転した値であることを表しているため、処理はステップS107へ移行し、復元部22が、中間経路表PからP[−k]に対応付けられた中間経路を取得し、変数ipathに設定する。また、復元部22は、ipathの終点を変数k、始点を変数kに設定する。
次に、ステップS108で、復元部22が、以下に示すように最短経路を復元する。
path=σ[i,k
+ reverse(ipath) + σ[k,j]
ここで、reverse(ipath)は、ipathが示す頂点列を逆順にすることを表す。
また、上記ステップS103及びS106が否定判定になる場合は、kは頂点iの親の頂点番号であることを表している。そこで、処理はステップS109へ移行し、復元部22が、以下に示すように最短経路を復元する。
path=[i,k] + σ[k,j]
なお、上記ステップS105及びS108におけるσ[i,k]及びσ[k,j]、並びに上記ステップS109におけるσ[k,j]については、本最短経路復元処理のステップS101〜S110を再帰的に実行することにより求める。
また、上記ステップS101で、i=jと判定された場合には、最短経路行列Sにアクセスすることなく、ステップS110で、復元部22が、path=[i]とする。
次に、ステップS111で、復元部22が、最短経路σ[i,j]の問い合わせに対して、pathを出力し、最短経路復元処理は終了する。
以上説明したように、本実施形態に係る情報処理装置によれば、最短経路行列生成部が、グラフに含まれる各頂点間の最短経路を表す最短経路行列の各要素の値として、最短経路上の長さ2以上の中間経路の識別情報を用いる。これにより、最短経路行列から最短経路を復元する際の最短経路行列へのアクセス回数を削減することができ、最短経路を高速に復元することができる。
なお、上記実施形態では、最短経路行列から最短経路を復元する際に、最短経路行列に親の頂点番号のみを用いる場合には不要である中間経路表Pへのアクセスが必要にはなるが、以下で説明するように、その影響は少ないと考えられる。
図22に示すように、線状にn個の頂点が並んでいるグラフの左端にある始点から右端にある終点までの最短経路におけるアクセス回数を考える。両端にそれぞれ、m/2個の頂点からなるクラスタと、それらの間にあるそれぞれm個の頂点からなる10個のクラスタ、計12個のクラスタに分割されていて、各クラスタ間は切断辺で結ばれているものとする。すなわち、n=11mが成り立っている。
この始点から終点までのアクセス回数を、最短経路行列に親の頂点番号のみを用いる方式(以下、「比較方式」という)と上記実施形態の方式(以下、「本方式」という)とで比較した結果を図23に示す。最短経路行列へのアクセス回数は比較方式ではn−1回、本方式では、m+19(=m/2×2+19)回である。また、中間経路表Pへのアクセス回数は、比較方式では中間経路表Pを用いないため0回であり、本方式では、途中で通過するクラスタ10個に対応して、10回である。
上述のように最短経路行列へのアクセスと、中間経路表Pへのアクセスでは処理負荷が異なる可能性があるが、大きくは変わらないと想定して、ここでは処理負荷が同じものとして、合計アクセス回数を計算している。したがって、合計アクセス回数は、比較方式の場合がn−1回、本方式の場合がm+29回となる。そして、合計アクセス回数は、n=110の場合は、比較方式に比べ本方式が約1/2.8で済み、n=1100の場合は、約1/8.5で済むことを示している。
また、上記実施形態では、グラフの分割数pを調整することで、中間経路表Pのサイズと、最短経路行列及び中間経路表Pへのアクセス回数とのバランスを取ることができる。
図24に、17個の頂点からなるグラフにおいて、分割数pを1から4まで変化させた場合のクラスタリングの例を示す。p=1の場合は、分割した結果のクラスタの数が1個である場合、すなわち、分割していない元のグラフを表している。
図25に、pの値毎に、中間経路表Pのサイズと、最短経路行列及び中間経路表Pへの平均アクセス回数と、それらの合計とを示す。中間経路表Pは通常ディスクに格納される。ただし、ここでは、サイズが小さいため、中間経路表Pは主記憶上にあることを仮定した。また、中間経路表Pのサイズを計算するに当たっては、中間経路表Pがハッシュ表であり、ハッシュバケットの数が要素数に等しいこと、要素毎にネクストポインタを持つこと、経路を記憶するためにその長さも記憶しておくことが必要なことを仮定した。また、平均アクセス回数は、頂点2から17、3から11、9から17、及び3から15の4つの最短経路の平均アクセス回数をもとに計算した。
中間経路表Pのサイズが10までしか許容できないのであれば、p=1又はp=2を選択することになるが、平均合計アクセス回数はともに7.25で同じであるため、どちらを選んでもよい。一方、中間経路表Pのサイズが20まで許容できるのであれば、より平均合計アクセス回数が少ないp=3を選択する。さらに、中間経路表Pのサイズが40まで許容できたとしても、p=4の場合、中間経路表Pのサイズがさらに増えるにも関わらず、平均合計アクセス回数は6.5回とかえって増えてしまうため、やはりp=3を選ぶことになる。なお、p=2の場合、2つのクラスタに分割されるが、それぞれ切断点を1つしか有しないため、中間経路表に登録される中間経路は存在しない。
この例ではグラフが小さい(頂点数が少ない)ため、中間経路を使わない比較方式に相当する場合(p=1,2)と、中間経路を使う場合(p=3,4)との差や、中間経路を使う場合でのp=3とp=4との差が少ない。しかし、大きなグラフ(頂点数が多いグラフ)では、この差が大きくなることが想定される。
なお、上記実施形態では、重みなし無向グラフに含まれる頂点間の最短経路を表す最短経路行列を生成する場合について説明したが、開示の技術は、その他の態様のグラフにも適用することができる。
具体的には、上記実施形態で説明した重みなしの無向グラフのクラスタリングを重みありグラフへ適用する場合、重みがないものとみなして、又は重みが全て1であるものとみなして、上記実施形態と同様の方法でクラスタリングすればよい。また、有向グラフへ適用する場合は、有向グラフを無向グラフとみなして、上記実施形態と同様の方法でクラスタリングすればよい。
また、上記実施形態における中間経路表の生成を重みありグラフへ適用する場合、切断点間の最短経路、すなわち中間経路を求める際に、重みありグラフに適した手法を用いればよい。例えば、実施形態のように幅優先探索ではなく、重みありグラフの最短経路を求めるアルゴリズムとしてよく知られているDijkstraの方法を用いることで対応することができる。
また、上記実施形態における中間経路表の生成を有向グラフへ適用する場合、無向グラフの場合と異なり、全ての切断点間の最短経路が存在するとは限らない。例えば、切断点kからkへの中間経路が存在しても、kからkへの中間経路が存在するとは限らない。ただし、この点は、上記実施形態における中間経路表の生成において問題とならない。2つの中間経路表のいずれも、辿れる経路だけが参照されるため、辿れない経路を登録する必要はないからである。なお、無向グラフでは、スペースの節約のため、k<kとなる中間経路だけを格納した。上記のことから、有向グラフでは、k>kでkからkへの中間経路が存在するが、kからkへの中間経路が存在しない場合には、kからkへの中間経路を格納する必要がある。
また、上記実施形態における中間経路番号を用いた最短経路行列の生成を重みありグラフへ適用する場合、上述のDijkstra法に、上記実施形態のような改造を加えることで対応することが可能である。具体的には、Dijkstra法では、頂点を長さと共に優先度付キューで管理するが、その際に、上記のmの値も同時に管理するようにすることで、実現可能となる。
また、上記実施形態における中間経路番号を用いた最短経路行列の生成を有向グラフへ適用する場合、強連結でない限り、ある頂点iからある頂点jへの最短経路が存在しないということが起きる。すなわち、各頂点iから終点であるjまでの最短経路を求める際に、有向グラフの場合は、到達できないjが存在する可能性がある。したがって、その到達できていないjに関しては、アルゴリズムの処理が終わった時点でS[i,j]の値が初期値であるIのままになっている。このIをiからjへは到達できないことを意味するものと読み替えることで、有向グラフにも対応することが可能である。
また、上記実施形態を非連結なグラフに適用する場合、以下のように対応することが可能である。なお、無向グラフの場合、連結でない場合、そのグラフは非連結であるということにする。また、有向グラフの場合、辺の向きを無視して無向グラフとみなしたときに連結でない場合、そのグラフは非連結であるということにする。
まず、既存の方法を用いてグラフGを連結部分グラフに分割する。ここで、q個の連結部分グラフG,G,・・・,Gに分割されたものとする。また、各Gは、G=(V,E)であるものとする。この際、後述の行列の合成を簡易にするため、Vの頂点に付与されている1からnまでの番号を、i<jとして、Vの頂点番号の方がVの頂点番号よりも小さくなるように付与し直すものとする。
そして、1≦i≦qとして、各連結部分グラフGに対し、上記実施形態で述べた方法を用いて、それぞれの最短経路行列S及び中間経路表P2,iを生成する。中間経路番号は、n+1から始めて、q個の連結部分グラフに渡って一意に付与するものとする。そして、こうして求められたq個の最短経路行列と中間経路表を次のように合成する。
まず、最短経路行列の合成について説明する。q個の最短経路行列S,S,・・・,Sを、図26に示すように合成して、最終的な最短経路行列Sを生成する。図26中の網掛け部分の要素には、有向グラフの場合にIが経路がないことを意味したのと同様に、経路がない(親がない)ことを示す意味でIを格納する。
次に、中間経路表の合成について説明する。合成の結果を格納する中間経路表をPとする。そして、P2,i(1≦i≦q)の要素を順にPに格納し直す。すなわち、中間経路[i,i,・・・,i]に対する統合番号がunoであり、P2,i[uno]=[i,i,・・・,i]の場合、P[uno]=[i,i,・・・,i]となるようにする。
また、上記実施形態では、中間経路表を、最短経路行列を生成する前に生成する場合について説明したが、これに限定されない。前もって中間経路表を生成するのではなく、最短経路行列を生成する際に、中間経路表を生成してもよい。具体的には以下のとおりである。
1) 空の中間経路表Pを準備する。
2) 最短経路行列を生成中に、切断点間の中間経路に遭遇した際に、その中間経路が中間経路表Pに登録されているか否かをチェックする。登録されていなければ、この時点で登録する。
3) 中間経路表Pも中間経路表Pに登録された中間経路に限って生成する。
以上を実現するために、最短経路中の中間経路や、中間経路を見つける過程における状態に関する情報を記憶するmに、切断点以降の経路も記憶しておく。この改善を加えることで、切断点間の最短経路を前もって求める処理が省略され、中間経路表P、Pに登録する中間経路を必要最小限に絞ることができる。
なお、上記実施形態では、最短経路行列生成プログラム50、及び最短経路復元プログラム60が記憶部43に予め記憶(インストール)されている態様を説明したが、これに限定されない。CD−ROMやDVD−ROM等の記憶媒体に記録された形態で提供することも可能である。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与し、
前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する
ことを含む処理をコンピュータに実行させるための最短経路行列生成プログラム。
(付記2)
前記グラフを、指定された数の部分グラフに分割し、各部分グラフについて、前記部分グラフに含まれる頂点を用いて表され、かつ他の部分グラフと辺で接続された頂点を始点及び終点とする経路を、前記中間経路とする付記1に記載の最短経路行列生成プログラム。
(付記3)
前記中間経路と、前記中間経路の識別情報とを対応付けた中間経路表を生成し、
前記最短経路行列の各要素の値として前記中間経路の識別情報を用いる際、前記中間経路表を参照する
付記1又は付記2に記載の最短経路行列生成プログラム。
(付記4)
前記中間経路表として、インデックス付表を用いる付記3に記載の最短経路行列生成プログラム。
(付記5)
付記3又は付記4に記載の最短経路行列生成プログラムにより生成された前記最短経路行列及び前記中間経路表を用いて、指定された頂点間の最短経路を復元する処理をコンピュータに実行させるための最短経路復元プログラム。
(付記6)
複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与する付与部と、
前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する生成部と、
を含む最短経路行列生成装置。
(付記7)
前記付与部は、前記グラフを、指定された数の部分グラフに分割し、各部分グラフについて、前記部分グラフに含まれる頂点を用いて表され、かつ他の部分グラフと辺で接続された頂点を始点及び終点とする経路を、前記中間経路とする付記6に記載の最短経路行列生成装置。
(付記8)
前記付与部は、前記中間経路と、前記中間経路の識別情報とを対応付けた中間経路表を生成し、
前記生成部は、前記最短経路行列の各要素の値として前記中間経路の識別情報を用いる際、前記中間経路表を参照する
付記6又は付記7に記載の最短経路行列生成装置。
(付記9)
前記付与部は、前記中間経路表として、インデックス付表を用いる付記8に記載の最短経路行列生成装置。
(付記10)
最短経路行列生成装置により生成された前記最短経路行列及び前記中間経路表を用いて、指定された頂点間の最短経路を復元する復元部
を含む最短経路復元装置。
(付記11)
複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与し、
前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する
ことを含む処理をコンピュータが実行する最短経路行列生成方法。
(付記12)
前記グラフを、指定された数の部分グラフに分割し、各部分グラフについて、前記部分グラフに含まれる頂点を用いて表され、かつ他の部分グラフと辺で接続された頂点を始点及び終点とする経路を、前記中間経路とする付記11に記載の最短経路行列生成方法。
(付記13)
前記中間経路と、前記中間経路の識別情報とを対応付けた中間経路表を生成し、
前記最短経路行列の各要素の値として前記中間経路の識別情報を用いる際、前記中間経路表を参照する
付記11又は付記12に記載の最短経路行列生成方法。
(付記14)
前記中間経路表として、インデックス付表を用いる付記3に記載の最短経路行列生成方法。
(付記15)
付記13又は付記14に記載の最短経路行列生成方法により生成された前記最短経路行列及び前記中間経路表を用いて、指定された頂点間の最短経路を復元する処理をコンピュータが実行する最短経路復元方法。
(付記16)
複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与し、
前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する
ことを含む処理をコンピュータに実行させるための最短経路行列生成プログラムを記憶した記憶媒体。
10 最短経路行列生成部
12 付与部
14 生成部
20 最短経路復元部
22 復元部
30 行列データベース
40 コンピュータ
41 CPU
42 メモリ
43 記憶部
49 記憶媒体
50 最短経路行列生成プログラム
60 最短経路復元プログラム
100 情報処理装置

Claims (5)

  1. 複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与し、
    前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する
    ことを含む処理をコンピュータに実行させるための最短経路行列生成プログラム。
  2. 前記グラフを、指定された数の部分グラフに分割し、各部分グラフについて、前記部分グラフに含まれる頂点を用いて表され、かつ他の部分グラフと辺で接続された頂点を始点及び終点とする経路を、前記中間経路とする請求項1に記載の最短経路行列生成プログラム。
  3. 前記中間経路と、前記中間経路の識別情報とを対応付けた中間経路表を生成し、
    前記最短経路行列の各要素の値として前記中間経路の識別情報を用いる際、前記中間経路表を参照する
    請求項1又は請求項2に記載の最短経路行列生成プログラム。
  4. 複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与する付与部と、
    前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する生成部と、
    を含む最短経路行列生成装置。
  5. 複数の頂点と頂点間を接続する辺とで表されたグラフにおける各頂点間の最短経路上の2以上の辺を含む中間経路の各々に識別情報を付与し、
    前記グラフに含まれる全頂点から全頂点への最短経路を表す行列の各要素の値として、前記各要素に対応する行及び列に対応する頂点間の最短経路上の中間経路の識別情報を用いて最短経路行列を生成する
    ことを含む処理をコンピュータが実行する最短経路行列生成方法。
JP2018023307A 2018-02-13 2018-02-13 最短経路行列生成プログラム、装置、及び方法 Active JP6973150B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018023307A JP6973150B2 (ja) 2018-02-13 2018-02-13 最短経路行列生成プログラム、装置、及び方法
US16/272,216 US20190251123A1 (en) 2018-02-13 2019-02-11 Apparatus, method and program for shortest path matrix generation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018023307A JP6973150B2 (ja) 2018-02-13 2018-02-13 最短経路行列生成プログラム、装置、及び方法

Publications (2)

Publication Number Publication Date
JP2019139576A JP2019139576A (ja) 2019-08-22
JP6973150B2 true JP6973150B2 (ja) 2021-11-24

Family

ID=67540536

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018023307A Active JP6973150B2 (ja) 2018-02-13 2018-02-13 最短経路行列生成プログラム、装置、及び方法

Country Status (2)

Country Link
US (1) US20190251123A1 (ja)
JP (1) JP6973150B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10274326B1 (en) * 2018-08-02 2019-04-30 Mapanything, Inc. Utilizing a geo-locator service and zone servers to reduce computer resource requirements for determining high quality solutions to routing problems
US11532044B2 (en) 2018-12-27 2022-12-20 Chicago Mercantile Exchange Inc. Portfolio optimization
US11676210B2 (en) * 2019-12-18 2023-06-13 Chicago Mercantile Exchange Inc. Portfolio optimization and transaction generation
CN113177186A (zh) * 2020-09-29 2021-07-27 北京速通科技有限公司 一种用于高速公路最短路径计算的矩阵压缩算法
JP7077387B1 (ja) 2020-11-25 2022-05-30 ヤフー株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
JP7109522B2 (ja) * 2020-11-25 2022-07-29 ヤフー株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
US20240257027A1 (en) * 2023-01-27 2024-08-01 Tableau Software, LLC Determining shortcut relationships in data models
CN118228654B (zh) * 2024-05-23 2024-08-13 杭州芯晓电子科技有限公司 一种基于电阻网络的电路设计高效调试方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE208109T1 (de) * 1993-07-30 2001-11-15 Ibm Verfahren und gerät zur automatischen verteilung einer netztopologie in haupt- und nebentopologie
DE69840809D1 (de) * 1998-09-05 2009-06-18 Ibm Verfahren zur Erzeugung der optimalen complexen PNNI Knotendarstellungen in bezug auf begrenzte Kosten
JP3762348B2 (ja) * 2002-10-07 2006-04-05 日本電信電話株式会社 階層化ネットワークノード並びにそのノードにより構成されたネットワーク
JP4734539B2 (ja) * 2006-05-15 2011-07-27 学校法人慶應義塾 ネットワークに含まれるノード間の最短経路を探索するためのシステムおよび方法
US10521473B2 (en) * 2012-05-21 2019-12-31 Kent State University Shortest path computation in large networks
JP6520362B2 (ja) * 2014-08-25 2019-05-29 富士通株式会社 生成方法、装置、及びプログラム

Also Published As

Publication number Publication date
US20190251123A1 (en) 2019-08-15
JP2019139576A (ja) 2019-08-22

Similar Documents

Publication Publication Date Title
JP6973150B2 (ja) 最短経路行列生成プログラム、装置、及び方法
CN108920720B (zh) 基于深度哈希和gpu加速的大规模图像检索方法
US20170116315A1 (en) Fast path traversal in a relational database-based graph structure
CN109325032B (zh) 一种索引数据存储及检索方法、装置及存储介质
US9864550B2 (en) Method and apparatus of recovering and encoding for data recovery in storage system
US10191998B1 (en) Methods of data reduction for parallel breadth-first search over graphs of connected data elements
Sharifzadeh et al. Processing optimal sequenced route queries using voronoi diagrams
CN112181991A (zh) 基于快速构建kd树的地球模拟系统网格重映射方法
US9465854B2 (en) In-database connectivity components analysis of data
JP4891657B2 (ja) データ記憶システム、ファイル検索装置およびプログラム
CN112395288A (zh) 基于希尔伯特曲线的r树索引合并更新方法、装置及介质
CN103761298B (zh) 一种基于分布式架构的实体匹配方法
CN110020001A (zh) 字符串数据的存储、查询方法以及相应的设备
US20170293636A1 (en) Information processing device, information processing method, and computer-readable storage medium
Bai et al. Skyline-join query processing in distributed databases
JP5670993B2 (ja) 単一パス集約による木構造の再構成装置及び方法及びプログラム
ELSAADANY et al. A Blockchain Auto-Scaling Node Organizing Design Model for the Internet of Things
CN117370619B (zh) 图的分片存储和子图采样方法及装置
JP6403232B2 (ja) 情報処理装置、情報処理方法、及びプログラム
CN114826278B (zh) 基于布尔矩阵分解的图数据压缩方法
JP3631443B2 (ja) ニューラルネット結合重み最適化装置及び方法並びにプログラム
CN111258955A (zh) 一种文件读取方法和系统、存储介质、计算机设备
Elishco et al. Capacity of dynamical storage systems
Van Le Distributed Moving Objects Database Based on Key-Value Stores.
US20060221860A1 (en) Nodal pattern configuration

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210921

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: 20211005

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211018

R150 Certificate of patent or registration of utility model

Ref document number: 6973150

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150