6 releases
Uses old Rust 2015
0.2.4 | Oct 31, 2018 |
---|---|
0.2.3 | Oct 31, 2018 |
0.1.0 | Oct 22, 2018 |
#1414 in Algorithms
17,958 downloads per month
Used in 7 crates
(3 directly)
69KB
807 lines
Partitions
A disjoint-sets/union-find implementation of a vector partitioned in sets that allows for efficient iteration over the elements of a set.
The main struct of this crate is PartitionVec<T>
which has the functionality
of a Vec<T>
and in addition divides the elements of this vector in sets.
The elements each start in their own set and sets can be joined with the
union
method.
You can check if elements share a set with the same_set
method and iterate
on the elements in a set with the set
method.
The union
and same_set
methods are extremely fast and have an amortized
complexity of O(α(n))
where α
is the inverse Ackermann function and n
is
the length.
This complexity is proven to be optimal and α(n)
has value below 5 for any n
that can be written in the observable universe.
The next element of the iterator returned by set
is found in O(1)
time.
The Disjoint-Sets algorithm is used in high-performance implementations of unification. It is also a key component in implementing Kruskal's algorithm to find the minimum spanning tree of a graph.
Using Partitions
The recommended way to use this crate is to add a line into your Cargo.toml
such as:
[dependencies]
partitions = "0.2"
and then add the following to to your lib.rs
or main.rs
:
extern crate partitions;
License
Partitions is distributed under the terms of the Apache License (Version 2.0).
Dependencies
~1.5MB
~27K SLoC