Skip to content

Dev guide: Open tasks, projects and collaboration ideas

Joris Kinable edited this page Aug 19, 2021 · 7 revisions

A detailed list of improvements/additions, that the JGraphT developers have already identified, follows. The list is by no means exhaustive, feel free to enhance functionality in some other area and submit a pull-request.

Demos

  • Write visualization demo of various algorithms in action. For example, the ability to single-step a shortest-path traversal.
  • Write demo which transforms from DOT into GraphML
  • Write demo to execute shortest paths using A* and the ALT heuristic

Importers/Exporters

GraphML

Class GraphMLImporter supports GraphML version 1.0. Add subclasses for the following cases:

  • GraphML version 1.1
  • SVG extensions
  • yEd extensions (ygraphml)

Matrix Market Exchange Format

See this document for the format.

Pajek

See this document for the format's description.

  • Add Pajek exporter
  • Add Pajek importer, using antlr for the parser.

XGMML

Named graphs and Generators

Adapters

Mathematica Adapter

  • Add an adapter which enables mathematica and JGraphT using Mathematica's Java interface. This can be similar to our Guava interface and should be done in a separate module.

Matlab Adapter

Algorithms

Minimum cut in directed graphs

  • Implement the algorithm by Hao and Orlin, A Faster Algorithm for Finding the Minimum Cut in a Directed Graph (1994). Note that this algorithm uses a modified version of the push-relabel algorithm by Goldberg and Tarjan (1988). JGraphT already contains an implementation of this push-relabel algorithm, so one should check whether this implementation can be re-used/extended/modified.

Shortest paths (org.jgrapht.alg.shortestpath)

  • Implement large scale routing algorithms
    • Note: a PR #865 has been submitted.

Simple cycles (org.jgrapht.alg.cycle)

  • Add interface which returns cycles as list of edges or a GraphPath and change the 4 algorithms to follow the interface.

Minimum mean cycle

  • Add an efficient algorithm for finding minimum mean cycle in the directed weighted graph. Consider implementing one of the following algorithms: Karp's original algorithm, Hartman-Orlin algorithm or Howard's algorithm for minimum mean cycle.
    • Note: a PR #862 has been submitted.

Colorings (org.jgrapht.experimental.alg.color)

  • Consider implementing the improved backtracking algorithm by Brélaz. See the following document for algorithmic details.
  • Implement edge coloring algorithms.

Line graphs

  • add method isLineGraph to GraphTests class

Chordal graphs

Interval graphs

  • Implement detection algorithm which tests whether a graph is an interval graph or a comparability graph. This paper might be a good starting point (check for more recent works!). The algorithm must provide a proof if the graph is or isn't an interval graph. Interval graphs have a perfect elimination order. Similar to ChordalGraphColoring, the class should implement a getPerfectEliminationOrder() method.

Cliques

Implement exact and heuristic methods to find the largest clique in a graph. A starting point would be cliquer and the well-known paper A fast algorithm for the maximum clique problem by Patrick Östergård. The new algorithms should be implemented in the org.jgrapht.alg.clique package and implement a new clique interface. This PR could give some inspiration.

Graph Isomorphism

Graph connectivity

  • add method GraphTests.isKConnected to check whether a graph is k-connected
  • add algorithms to find the edge-connectivity and vertex connectivity of a graph. A good starting point is the paper "Computing Vertex Connectivity: New Bounds from Old Techniques" by Henzinger, Rao, Gabow, 2000

Dynamic connectivity

Graph Polynomials

Add algorithms to compute a number of well-known graph polynomials. For this we need a new data structure to store and represent polynomials. This data structure needs to be compatible with other algorithmic packages. Consider using Apache commons math and in particular the classes PolynomialFunction. Need to check whether a Multivariate version of the PolynomialFunction exists.

Measures

  • Implement an algorithm to compute the bandwidth of a graph. Add a static method to GraphMeasurer.
  • Implement an algorithm to compute the pathwidth of a graph. Add a static method to GraphMeasurer. This also requires to implement a path decomposition (add implementation to decomposition package).

Community detection

Decompositions

Trees

  • Implement Lengauer-Tarjan dominator tree algorithm: Thomas Lengauer and Robert Endre Tarjan: A fast algorithm for finding dominators in a flowgraph, ACM Transactions on Programming Language and Systems, 1(1):121-141, 1979.

Graph Tests

Several graph tests are still missing, including, but not limited to:

Clone this wiki locally