UNPKG

quick-union-union-find

Version:

Quick Union Union Find using ES next

62 lines (51 loc) 2.49 kB
This code is based on http://algs4.cs.princeton.edu/15uf/QuickUnionUF.java.html The `QuickUnionUF` 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 union. Initializing a data structure with `n` sites takes linear time. Afterwards, the `union`, `find`, and `connected` operations take linear time (in the worst case) and the `count` operation takes constant 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.