Участник:Dmarkin/Алгоритм кластеризации, основанный на минимальном покрывающем дереве
Автор описания: Маркин Дмитрий Валерьевич, группа 611
Свойства и структура алгоритмов
Общее описание алгоритма
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны.
Алгоритм кластеризации на k кластеров, основанный на построении минимального остовного дерева (MST):
- По исходным данным строится граф. Каждый объект представляется в виде вершины графа, каждые две вершины соединяются ребром. Вычисляется вес ребра при помощи выбранной метрики (например, евклидовой);
- Для полученного графа строится минимальное остовное дерево при помощи одного из алгоритмов (наиболее распространены: Алгоритм Крускала, Алгоритм Борувки, Алгоритм Прима)
- Удаляется k-1 ребро минимального остовного дерева с максимальным весом и получаются k компонент связности.
Математическое описание алгоритма
Имеем [math]\displaystyle{ N }[/math] объектов [math]\displaystyle{ x }[/math], которые представляют собой элемент метрического пространства с метрикой [math]\displaystyle{ d(x_i,x_j)=\sqrt{\sum^{n}_{k=1} {(x_{ik}-x_{jk})^2}} }[/math].
На первом шаге строим граф [math]\displaystyle{ G=(V,E) }[/math] с множеством вершин [math]\displaystyle{ V }[/math] ([math]\displaystyle{ |V|=N }[/math]) и множеством ребер [math]\displaystyle{ E }[/math] ([math]\displaystyle{ |E|=\frac{N*(N-1)} {2} }[/math]).
На втором этапе строится минимальное покрывающее дерево [math]\displaystyle{ MST(G) }[/math].
На третьем этапе удаляется [math]\displaystyle{ K-1 }[/math] ребро, и дерево распадается на поддеревья [math]\displaystyle{ MST_i }[/math], вершины которых объявляются принадлежащими кластеру с номером [math]\displaystyle{ i }[/math].
Вычислительное ядро алгоритма
Алгоритм состоит из трёх независимых шагов:
- Построение графа и вычисление расстояний. Сложность [math]\displaystyle{ O(N^2) }[/math];
- Построение минимального покрывающего дерева при помощи одного из наиболее распространенных методов ( Алгоритм Крускала, Алгоритм Борувки, Алгоритм Прима). Сложность [math]\displaystyle{ O(N^2 log(N)) }[/math];
- Разбиение на кластеры. Сложность в худшем случае [math]\displaystyle{ O(N) }[/math].
Отсюда следует, что вычислительным ядром алгоритма является этап построения минимального покрывающего дерева, поскольку он имеет наибольшую сложность.
Макроструктура алгоритма
В состав алгоритма входят следующие макрооперации:
- Добавление ребра в граф;
- Вычисление расстояний между вершинами;
- Нахождение минимального покрывающего дерева, что является вычислительным ядром алогоритма;
- Удаление ребра из графа.
Схема реализации последовательного алгоритма
Обозначения
- [math]\displaystyle{ D(i) }[/math] — расстояние от [math]\displaystyle{ i }[/math]-й вершины до построенного дерева;
- [math]\displaystyle{ P(i) }[/math] — предок [math]\displaystyle{ i }[/math]-й вершины, то есть такая вершина [math]\displaystyle{ u }[/math], что [math]\displaystyle{ (u,i) }[/math] легчайшее из всех рёбер, соединяющее i с вершиной из построенного дерева;
- [math]\displaystyle{ W(i,j) }[/math] — вес ребра [math]\displaystyle{ (i,j) }[/math];
- [math]\displaystyle{ Q }[/math] — приоритетная очередь вершин графа, где ключ — [math]\displaystyle{ D(i) }[/math];
- [math]\displaystyle{ T }[/math] — множество ребер минимального остовного дерева.
Псевдокод
Последовательная сложность алгоритма
Информационный граф
