# @utilityjs/disjoint-set

> An implementation of DisjointSet data structure.

Latest version **2.0.0** (published 2026-02-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install @utilityjs/disjoint-set
pnpm add @utilityjs/disjoint-set
yarn add @utilityjs/disjoint-set
bun add @utilityjs/disjoint-set
```

## Health

**Score 60/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2026-02-09 |
| First published | 2021-10-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 4.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 27 |
| Maintainers | mimshins |
| Keywords | javascript, typescript, data structure, algorithm, disjoint set, union-find, merge-find |

## Links

- npm: https://www.npmjs.com/package/@utilityjs/disjoint-set
- Repository: https://github.com/mimshins/utilityjs
- Homepage: https://github.com/mimshins/utilityjs/tree/main/packages/data-structures/disjoint-set
- Issues: https://github.com/mimshins/utilityjs/issues
- npm.io page: https://npm.io/package/@utilityjs/disjoint-set

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2026-02-09
- 1.0.0 — 2021-10-09

## README

<div align="center">

# UtilityJS | Disjoint Set

A Union-Find data structure with path compression and union by rank.

</div>

<hr />

## Features

- **Path Compression**: Optimized find operations
- **Union by Rank**: Balanced tree structure for efficient unions
- **Custom Key Generator**: Support for complex value types
- **Method Chaining**: Fluent API design

## Installation

```bash
npm install @utilityjs/disjoint-set
```

or

```bash
pnpm add @utilityjs/disjoint-set
```

## Usage

### Basic Usage

```typescript
import DisjointSet from "@utilityjs/disjoint-set";

const ds = new DisjointSet<string>();

ds.makeSet("A").makeSet("B").makeSet("C");

ds.union("A", "B");

ds.inSameSet("A", "B"); // true
ds.inSameSet("A", "C"); // false
```

### Custom Key Generator

```typescript
import DisjointSet from "@utilityjs/disjoint-set";

interface Node {
  id: number;
  name: string;
}

const ds = new DisjointSet<Node>(node => String(node.id));

ds.makeSet({ id: 1, name: "Node 1" });
ds.makeSet({ id: 2, name: "Node 2" });

ds.union({ id: 1, name: "Node 1" }, { id: 2, name: "Node 2" });
```

## API

### `KeyGenerator<T>`

```typescript
type KeyGenerator<T> = (value: T) => string;
```

### `DisjointSet<T>`

#### Constructor

- `new DisjointSet<T>(keyGenerator?: KeyGenerator<T>)` - Creates a disjoint set
  with optional key generator (defaults to JSON.stringify)

#### Methods

- `makeSet(value: T): DisjointSet<T>` - Create a new set containing the value
- `find(value: T): string | null` - Find the root key of the set containing the
  value
- `union(valueA: T, valueB: T): DisjointSet<T>` - Unite the sets containing both
  values
- `inSameSet(valueA: T, valueB: T): boolean` - Check if values are in the same
  set

## Contributing

Read the
[contributing guide](https://github.com/mimshins/utilityjs/blob/main/CONTRIBUTING.md)
to learn about our development process, how to propose bug fixes and
improvements, and how to build and test your changes.

## License

This project is licensed under the terms of the
[MIT license](https://github.com/mimshins/utilityjs/blob/main/LICENSE).

---
_Source: https://npm.io/package/@utilityjs/disjoint-set · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
