quick-find-union-find
Version:
Quick Find Union Find using ES next
62 lines (52 loc) • 2.48 kB
Markdown
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`: `p` is connected to `p`.
- `Symmetric`: If `p` is connected to `q`,
then `q` is connected to `p`.
- `Transitive`: If `p` is connected to `q`
and `q` is connected to `r`, then
`p` is connected to `r`.
An equivalence relation partitions the sites into
`equivalence classes` (or `components`). 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 and
`n`–1.
Initially, there are `n` components, with each site in its
own component. The `component identifier` of a component
(also known as the `root`, `canonical element`, `leader`,
or `set 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 sites `p` and `q`.
If `p` and `q` are 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 containing `p`.
- `connected`(`p`, `q`)
returns true if both `p` and `q`
are 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 <a href="http://algs4.cs.princeton.edu/15uf">Section 1.5</a> of
*Algorithms, 4th Edition* by Robert Sedgewick and Kevin Wayne.