Commit Graph

16 Commits

Author SHA1 Message Date
Dan Kortschak
142f1a8c6b graph: make graph analysis routines safe for indeterminate iterators
This is a change in design for the graph.NodesOf family of functions. The
alternative was to provide an equivalent set of non-panicking routines in
graph for internal use. The protection that was intended with the panic
was to panic early rather than late when an indeterminate iterator exhausts
slice index space. I think in hindsight this was an error and we should
let things blow up in that (likely rare) situation.

The majority of changes are in test code. Outside the iterator package, which
is intimately tied to the determined iterator implementations, only one test
now fails if an indeterminate iterator is used, product's Modular extended
sub-graph isomorphism example, which is an algorithm that would have time
complexity issues with large iterators anyway.
2020-07-02 07:47:46 +09:30
Dan Kortschak
9329cb7525 graph/path: use type system to differentiate behaviours within JohnsonAllPaths
This change separates the two phases of the all pair shortest path
algorithm into different types, simplifying each part and removing a
conditional from the Dijkstra all paths code path.
2019-09-07 21:10:23 +09:30
Dan Kortschak
936e3fec9e graph/path: fix negative cycle handling by AllShortest and FloydWarshall
Also remove unjustifiable claim in Bellman-Ford negative cycles example and add
Floyd-Warshall negative cycles example.
2019-02-10 06:50:51 +10:30
Dan Kortschak
969ecdd209 graph: remove Has method from Graph and Multigraph 2018-10-12 17:57:01 +10:30
Dan Kortschak
46d85b5bdf graph: avoid issues around graph node retrieval subtleties
With the approach to graph node mutation on edge setting the previously
existed there was an issue that the edge last used connect a pair of
nodes could result in a difference in the nodes being returned by a node
query compared to the same node associated with edges returned from an
edge query.

This change avoids dealing with that by making it implementation
dependent and stating this, and by making all the node-storing graphs
we provide mutate the nodes when edges are set.
2018-09-29 19:26:44 +09:30
Dan Kortschak
b73a2c92ff graph: add node, edge and line iterators 2018-09-23 09:25:56 +09:30
Dan Kortschak
f5d91d72f8 graph/path: allow incremental path building for Dijkstra 2018-05-24 07:13:55 +09:30
Dan Kortschak
fa6741ae52 graph/path: tighten use of johnsonWeightAdjuster
The only call to Has for johnsonWeightAdjuster is in the preamble to
BellmanFordFor, which is always passed the known query node. If Has is
called when the graph is not in the Bellman-Ford mode or the Has query
is not the query node, the call was invalid and we should panic.
2018-05-09 22:09:45 +09:30
Dan Kortschak
6b03bc22e1 graph: use int64 for node retrieval 2018-03-24 09:21:44 +10:30
kortschak
fa0c5aa7bc all: use golang.org/x/exp/rand instead of math/rand 2017-11-17 11:52:34 +10:30
kortschak
805531d142 all: change capitalization of gonum in license header 2017-11-02 06:54:08 +10:30
kortschak
ffa13e8edb graph,graph/{community,network,path}: rename WeightedGraph => Weighted 2017-08-24 10:21:15 +09:30
kortschak
715b695621 graph,graph/{network,path}: remove Weighter interface 2017-08-24 10:21:15 +09:30
kortschak
15ecc07d40 graph/path/...: update for int64 IDs 2017-07-02 08:38:42 +09:30
Brendan Tracey
d33397aa65 all: change import paths 2017-05-23 00:03:03 -06:00
Brendan Tracey
059a6c43f9 graph: imported graph as a subtree 2017-05-23 00:02:59 -06:00