Основы Union-Find
I. Понятие и введение
Union-Find — это древовидная структура данных, используемая для обработки объединения и запроса некоторых непересекающихся множеств.
Идея Union-Find состоит в том, чтобы использовать массив для представления всего леса (parent). Корневой узел дерева однозначно определяет множество; как только мы находим корень дерева элемента, мы можем определить, к какому множеству он принадлежит.
II. Примечания по применимости
Системы Union-Find используются в некоторыхNВ задачах применения множеств с элементами мы обычно вначале позволяем каждому элементу образовать одноэлементное множество, затем объединяем множества, содержащие элементы одной группы, в определённом порядке и в процессе многократно находим, какому множеству принадлежит элемент. Этот процесс может показаться простым, но когда объём данных чрезвычайно велик, если для его описания используются другие структуры данных, требуемое пространство часто оказывается слишком большим, чтобы компьютер мог его выдержать, и результат невозможно вычислить за короткое время. Поэтому для его обработки можно использовать только систему Union-Find.
III. Базовое представление данных системы Union-Find


Снова, как показано выше0、2、4、6、8Все следующие0Это множество представляет0、2、4、6、8Эти пять элементов связаны,1、3、5、7、9Все следующие1Это множество представляет0,1、3、5、7、9Эти пять элементов связаны.
Создайте класс UnionFind, инициализируйте его так, чтобы каждый id[i] указывал на самого себя, без объединённых элементов:
public UnionFind1(int n) {
count = n;
id = new int[n];
// Инициализация: каждый id[i] указывает на самого себя, нет объединённых элементов
for (int i = 0; i < n; i++)
id[i] = i;
}
...
Пример кода на Java
Загрузка пакета исходного кода:Скачать
Код файла UnionFind.java:
public class UnionFind{
private int[] id;
// количество элементов данных
private int count;
public UnionFind1(int n) {
count = n;
id = new int[n];
for (int i = 0; i < n; i++)
id[i] = i;
}
}