UNPKG

quick-find-union-find

Version:

Quick Find Union Find using ES next

62 lines (52 loc) 2.48 kB
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.