1 stable release
1.0.0 | Jun 19, 2023 |
---|
#2526 in Algorithms
57 downloads per month
70KB
896 lines
Overview
All algorithms in this crate are run using the Graph struct. It is used to organize nodes that are connected to each other using weighted edges and to provide a simple to use interface.
Click here to see a list of implemented algorithms.
Minimal working example
use simple_graph_algorithms::{Graph, algorithms::{dijkstra, RunAlgorithmError}};
fn main() -> Result<(), RunAlgorithmError> {
// Create empty graph
let mut graph = Graph::new();
// Add new nodes to the graph
graph.add_node("a");
graph.add_node("b");
graph.add_node("c");
graph.add_node("d");
graph.add_node("e");
// Add edges to the graph
graph.add_edge(1, &"a", &"b"); // Adds an edge that leads from a to b with weight 1
graph.add_edge(2, &"a", &"c");
graph.add_edge(5, &"b", &"d");
graph.add_edge(3, &"c", &"a");
graph.add_edge(4, &"d", &"a");
graph.add_edge(2, &"d", &"c");
graph.add_edge(3, &"c", &"e");
// Calculate the shortest path tree starting at node "a" using Dijkstra's algorithm
let spt = dijkstra(&mut graph, &"a")?;
// Get the shortest distance from "a" to other nodes
assert_eq!(spt.shortest_distance(&"d"), Some(6));
assert_eq!(spt.shortest_distance(&"c"), Some(2));
assert_eq!(spt.shortest_distance(&"e"), Some(5));
Ok(())
}
Features
Feature | Description |
---|---|
from_instruction | Enables functionality that allows graphs to be parsed from a list of instructions. |
serde | Serde serialization and deserialization support for some objects. |
simple_graph_algorithms
This library aims to provide simple to use implementations for various algorithms run on graphs.
Algorithms
The following algorithms are currently implemented in this library:
Documentation
The documentation will be hosted on docs.rs once the first version has been released to crates.io.
Performance
Algorithm | Mean time over 100 runs on a graph with 10,000 nodes and 39,600 edges |
---|---|
Bellman-Ford | 2.1883 s |
Dijkstra | 52.3155 ms |
These tests where performed on a Ryzen 5 7600x
. Performance might be slower on older hardware.
To run these tests yourself type cargo bench
, a full run will take a few minutes.
Dependencies
~145KB