quick-find-union-find v1.0.3
QuickFindUF is based on http://algs4.cs.princeton.edu/15uf/QuickFindUF.java.html
The QuickFindUF class represents a union–find data type
(also known as the disjoint-sets data type).
It supports the union and find operations,
along with a connected operation for determining whether
two sites are in the same component and a count operation that
returns the total number of components.
The union–find data type models connectivity among a set of n
sites, named 0 through n–1.
The is-connected-to relation must be an
equivalence relation:
Reflexive:pis connected top.Symmetric: Ifpis connected toq, thenqis connected top.Transitive: Ifpis connected toqandqis connected tor, thenpis connected tor.An equivalence relation partitions the sites into
equivalence classes(orcomponents). In this case, two sites are in the same component if and only if they are connected. Both sites and components are identified with integers between 0 andn–1. Initially, there arencomponents, with each site in its own component. Thecomponent identifierof a component (also known as theroot,canonical element,leader, orset representative) is one of the sites in the component: two sites have the same component identifier if and only if they are in the same component.union(p,q) adds a connection between the two sitespandq. Ifpandqare in different components, then it replaces these two components with a new component that is the union of the two.find(p) returns the component identifier of the component containingp.connected(p,q) returns true if bothpandqare in the same component, and false otherwise.count() returns the number of components.
The component identifier of a component can change
only when the component itself changes during a call to
union—it cannot change during a call
to find, connected, or count.
This implementation uses quick find.
Initializing a data structure with n sites takes linear time.
Afterwards, the find, connected, and count
operations take constant time but the union operation
takes linear time.
For additional documentation, see Section 1.5 of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.