GithubHelp home page GithubHelp logo

setzer22 / graphdrawing Goto Github PK

View Code? Open in Web Editor NEW

This project forked from renatav/graphdrawing

1.0 1.0 0.0 2.36 MB

Graph Analysis and Drawing Library - Grad

License: MIT License

Java 85.21% Python 14.78% Shell 0.01%

graphdrawing's Introduction

FORK

This repository is a fork of https://github.com/renatav/GraphDrawing

The code at the original repository did not compile because there were three inter-dependent projects structured as three independent sub-folders. A different attempt at fixing this was done in https://github.com/fernandogodoy/GraphDrawing, but it caused a different subset of problems when distributing applications (namely, the parent jar was missing).

This repository is optimized for distribution: A simple "GraphDrawingMonoproject" project, which can be built into a single jar with all dependencies included.

Graph Analysis and Drawing Library - Grad

Site: http://www.gradlibrary.net

Javadoc: https://renatav.github.io/GraphDrawing/

Grad is a library for the Java programming language whose main goals are to provide a large number of graph drawing and analysis algorithms and a very simple integration with existing tools. It consists of three projects:

  • GraphDrawingTheory - the core of the library, containing numerous algorithms
  • GraphEditor - a simple graph editor that can be used to test the layout and anaylisis features
  • GraphLayoutDSL - defines a domain-specific language (DSL) for specifying how a graph should be laid out

Implemented analysis algorithms

Grad offers implementations of several noteable graph analysis algorithms.

Graph traversal

  • Dijkstra's shortest path
  • Depth-first search and construction of DFS trees

Graph connectivity

  • Checking connectivity, biconnectivity and triconnectivity of graphs
  • Finding graph cut vertices and blocks (biconnected components) of a graph
  • Hopcroft-Tarjan division of a graph into triconnected components
  • Construction of BC (block-cut vertex) trees
  • Construction of SPQR trees (not thoroughly teseted yet)
  • Planar augmentation - an algorithm for turning a connected graph into a biconnected one. Based on Fialko and Mutzel's 5/3 approximation algorithm

Cyclic properties

  • Johnson's algorithms for finding simple cycles of a directed graph
  • Paton's algorithm for finding cycles of an undirected graph

Planarity testing

  • Fraysseix-Mendez planarity testing
  • Boyer-Myrvold planarity testing which finds the outside face
  • PQ tree planarity testing with Booth and Lueker's algorithm, which finds the upwards embedding
  • Finding an embedding and planar faces given an upwards embedding

Graph symmetry

  • McKay's canonical graph labeling algorithm (nauty) for finding permutations
  • De Fraysseix's heuristic for graph symmetry detection
  • Analyzing permutations and finding permtuation groups
  • Forming permutation cycles

Other

  • Checking if a graph is bipartite
  • Checking if a tree is binary
  • Finding topological ordering
  • Finding st-ordering

Layout algorithms

Grad has several original implementaions of different graph drawing (layout) algorithms and ports some excellet implementations form other open-soucce libraries. It strives to provide a very easy way of calling any desired algorithm.

Original implementations

  • Box layout (simple positioning of graph vertices into a table-like structure)
  • Circle layout with or without the optimization of edge crossings
  • Tutte straight-line drawing
  • Concentric symmetric drawing based on Car and Kocay's algorithm
  • Chiba's convex drawing of planar graphs
  • Work in progress: orthogonal drawing

Ported algorithms

  • Lebel-based tree drawing
  • Tree balloon layout
  • Node link tree layout
  • Radial tree layout
  • Hierarchical layout
  • Spring, Kamada-Kawai and force-dircted layout
  • Organic and fast-organic layouts
  • ISOM layout

graphdrawing's People

Contributors

renatav avatar setzer22 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.