DEV//UNIT
← Алгоритмыdata-structures

Union-Find (DSU)

Множества с быстрым «в одном ли?» и слиянием за ~O(1).

время ~O(1) amortizedпамять O(n)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class UnionFind {
2 private parent: Map<string, string> = new Map()
3
4 find(x: string): string {
5 let root = this.parent.get(x) ?? x
6 while (root !== (this.parent.get(root) ?? root)) {
7 root = this.parent.get(root) ?? root
8 }
9 // сжатие пути
10 while (x !== root) {
11 const next = this.parent.get(x) ?? x
12 this.parent.set(x, root)
13 x = next
14 }
15 return root
16 }
17
18 union(a: string, b: string): void {
19 const ra = this.find(a)
20 const rb = this.find(b)
21 if (ra !== rb) this.parent.set(ra, rb)
22 }
23
24 connected(a: string, b: string): boolean {
25 return this.find(a) === this.find(b)
26 }
27}

Проблема

Множества с быстрым «в одном ли?» и слиянием за ~O(1).

Что вы видите

Массив корней: union перенаправляет корень одного множества в другое.

Как это работает

find идёт по parent до корня; сжатие пути прижимает цепочку. Амортизированно почти O(1). Ядро Краскала и сетевых соединений.

Пошаговый разбор

  1. 01

    find

    По parent до корня.

  2. 02

    union

    Корень одного → под другой.

  3. 03

    Сжатие пути

    Цепочка прижимается к корню.

Complexity и ограничения

time
~O(1) amortized
space
O(n)

См. complexity в шапке страницы.

Edge cases

  • Пустой вход

    Корректно завершается без лишних шагов.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Продукт

Классический приём в реальных системах.

Собеседования

Стандартный вопрос на понимание структуры.

Связанные алгоритмы

Shorts

««В одном ли мы множестве?» — почти бесплатно»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

«В одном ли мы множестве?» — почти бесплатно
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/union-find