Mnemonist
StaticDisjointSet
A StaticDisjointSet
is a structure representing sets of sets using the “union-find” technique.
This implementation is static because it works on a range of indices starting from 0 and going up to a fixed size given at instantiation time.
It is however a very memory-efficient way to solve some issues such as finding connected components in a graph.
const StaticDisjointSet = require('mnemonist/static-disjoint-set');
Constructor
The StaticDisjointSet
takes an initial size at instantiation time (i.e. the total number of items we are going to handle, the number of nodes in your graph, for instance).
const sets = new StaticDisjointSet(size);
Members
Methods
Mutation
Read
#.dimension
Total number of sets known by the disjoint set (obviously less than or equal to the size).
const sets = new StaticDisjointSet(4);
sets.union(1, 2);
sets.union(1, 3);
set.size;
>>> 4
set.dimension;
>>> 2
#.size
Total number of stored items.
const sets = new StaticDisjointSet(4);
set.size;
>>> 4
#.union
O(1)
or O(α(n))
to be exact.
Perform the union of two items. If they belong to different sets, their respective sets will be merged into a single one.
const sets = new StaticDisjointSet(4);
sets.union(1, 2);
sets.union(1, 3);
#.compile
O(n)
or O(n α(n))
to be exact.
Compile the disjoint sets into an array of arrays.
const sets = new StaticDisjointSet(4);
sets.union(1, 2);
sets.union(1, 3);
sets.compile();
>>> [[0], [1, 2, 3]]
#.find
O(1)
or O(α(n))
to be exact.
Returns the root item of the given item’s current set.
const sets = new StaticDisjointSet(4);
sets.union(1, 2);
sets.union(1, 3);
sets.find(2);
>>> 1
#.mapping
O(n)
or O(n α(n))
to be exact.
Returns an array whose values are the id of the item’s set.
const sets = new StaticDisjointSet(4);
sets.union(1, 2);
sets.union(1, 3);
sets.mapping();
>>> [0, 1, 1, 1]