pgr_johnson

pgr_johnson - Returns the sum of the costs of the shortest path for each pair of nodes in the graph using Floyd-Warshall algorithm.

images/boost-inside.jpeg

Boost Graph Inside

Availability

  • Version 2.2.0

    • Signature change

    • Old signature no longer supported

  • Version 2.0.0

    • Official function

Description

The Johnson algorithm, is a good choice to calculate the sum of the costs of the shortest path for each pair of nodes in the graph, for sparse graphs . It usees the Boost’s implementation which runs in \(O(V E \log V)\) time,

The main characteristics are:

  • It does not return a path.

  • Returns the sum of the costs of the shortest path for each pair of nodes in the graph.

  • Process is done only on edges with positive costs.

  • Boost returns a \(V \times V\) matrix, where the infinity values. Represent the distance between vertices for which there is no path.

    • We return only the non infinity values in form of a set of (start_vid, end_vid, agg_cost) .

  • Let be the case the values returned are stored in a table, so the unique index would be the pair: (start_vid, end_vid) .

  • For the undirected graph, the results are symmetric.

    • The agg_cost of (u, v) is the same as for (v, u) .

  • When start_vid = end_vid , the agg_cost = 0.

  • Recommended, use a bounding box of no more than 3500 edges.

Signatures

Summary

pgr johnson( Edges SQL , [ directed ])

RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Example :

For a directed subgraph with edges \(\{1, 2, 3, 4\}\) .

SELECT * FROM pgr_johnson(
  'SELECT source, target, cost FROM edges
  WHERE id < 5'
) ORDER BY start_vid, end_vid;
 start_vid  end_vid  agg_cost
-----------+---------+----------
         5        6         1
         5        7         2
         6        7         1
(3 rows)

Parameters

Parameter

Type

Default

Description

Edges SQL

TEXT

Edges SQL as described below.

Optional parameters

Column

Type

Default

Description

directed

BOOLEAN

true

  • When true the graph is considered Directed

  • When false the graph is considered as Undirected .

Inner Queries

Edges SQL

Column

Type

Default

Description

source

ANY-INTEGER

Identifier of the first end point vertex of the edge.

target

ANY-INTEGER

Identifier of the second end point vertex of the edge.

cost

ANY-NUMERICAL

Weight of the edge ( source , target )

reverse_cost

ANY-NUMERICAL

-1

Weight of the edge ( target , source )

  • When negative: edge ( target , source ) does not exist, therefore it’s not part of the graph.

Where:

ANY-INTEGER :

SMALLINT , INTEGER , BIGINT

ANY-NUMERICAL :

SMALLINT , INTEGER , BIGINT , REAL , FLOAT

Result Columns

Set of (start_vid, end_vid, agg_cost)

Column

Type

Description

start_vid

BIGINT

Identifier of the starting vertex.

end_vid

BIGINT

Identifier of the ending vertex.

agg_cost

FLOAT

Aggregate cost from start_vid to end_vid .

See Also

Indices and tables