<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Karibov</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Karibov"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Karibov"/>
	<updated>2026-10-22T17:53:18Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12654</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12654"/>
		<updated>2016-10-16T15:45:25Z</updated>

		<summary type="html">&lt;p&gt;Karibov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
&lt;br /&gt;
Для каждого &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; вычисляем центроид: &amp;lt;math&amp;gt;\mu _i = \frac{1}{n_i} \sum^{}_{j \in C_i} {j}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами для поиска подходящим для объединения кластеров могут быть использованы следующие формулы: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|\mu _i - \mu _j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединяем ближайшие кластеры.&lt;br /&gt;
&lt;br /&gt;
Затем для каждого кластера определяются &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; точек представителей максимально удалённых друг от друга.&lt;br /&gt;
&lt;br /&gt;
Затем каждую точку представителя выполняется сдвигают к центроиде соответствующего кластера в &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; раз.&lt;br /&gt;
&lt;br /&gt;
Затем происходит присвоение неиспользованных точек к кластерам.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров, вычисление их центроидов и назначение точек представителей.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть метода составляют разбиение случайной выборки строк на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|Рисунок 1. Схема реализации [2]]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока число кластеров не будет равно &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:IG_CURE.jpg|800px|thumb|center|Рисунок 2. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
Входные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [3].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf.&lt;br /&gt;
&lt;br /&gt;
[2] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4.&lt;br /&gt;
&lt;br /&gt;
[3] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming. Volume 4315 of the series Lecture Notes in Computer Science pp 289-299 Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP.&lt;br /&gt;
&lt;br /&gt;
[4] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12647</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12647"/>
		<updated>2016-10-16T15:41:33Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
&lt;br /&gt;
Для каждого &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; вычисляем центроид: &amp;lt;math&amp;gt;\mu _i = \frac{1}{n_i} \sum^{}_{j \in C_i} {j}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами для поиска подходящим для объединения кластеров могут быть использованы следующие формулы: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|\mu _i - \mu _j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединяем ближайшие кластеры.&lt;br /&gt;
&lt;br /&gt;
Затем для каждого кластера определяются &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; точек представителей максимально удалённых друг от друга.&lt;br /&gt;
&lt;br /&gt;
Затем каждую точку представителя выполняется сдвигают к центроиде соответствующего кластера в &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; раз.&lt;br /&gt;
&lt;br /&gt;
Затем происходит присвоение неиспользованных точек к кластерам.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров, вычисление их центроидов и назначение точек представителей.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть метода составляют разбиение случайной выборки строк на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|Рисунок 1. Схема реализации [2]]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока число кластеров не будет равно &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:IG_CURE.jpg|800px|thumb|center|Рисунок 2. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
Входные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [3]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf.&lt;br /&gt;
&lt;br /&gt;
[2] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4.&lt;br /&gt;
&lt;br /&gt;
[3] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming. Volume 4315 of the series Lecture Notes in Computer Science pp 289-299 Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP.&lt;br /&gt;
&lt;br /&gt;
[4] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12645</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12645"/>
		<updated>2016-10-16T15:41:18Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
&lt;br /&gt;
Для каждого &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; вычисляем центроид: &amp;lt;math&amp;gt;\mu _i = \frac{1}{n_i} \sum^{}_{j \in C_i} {j}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами для поиска подходящим для объединения кластеров могут быть использованы следующие формулы: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|\mu _i - \mu _j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединяем ближайшие кластеры.&lt;br /&gt;
&lt;br /&gt;
Затем для каждого кластера определяются &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; точек представителей максимально удалённых друг от друга.&lt;br /&gt;
&lt;br /&gt;
Затем каждую точку представителя выполняется сдвигают к центроиде соответствующего кластера в &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; раз.&lt;br /&gt;
&lt;br /&gt;
Затем происходит присвоение неиспользованных точек к кластерам.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров, вычисление их центроидов и назначение точек представителей.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть метода составляют разбиение случайной выборки строк на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|Рисунок 1. Схема реализации[2]]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока число кластеров не будет равно &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:IG_CURE.jpg|800px|thumb|center|Рисунок 2. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
Входные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf.&lt;br /&gt;
&lt;br /&gt;
[2] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4.&lt;br /&gt;
&lt;br /&gt;
[3] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming. Volume 4315 of the series Lecture Notes in Computer Science pp 289-299 Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP.&lt;br /&gt;
&lt;br /&gt;
[4] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12643</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12643"/>
		<updated>2016-10-16T15:40:27Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
&lt;br /&gt;
Для каждого &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; вычисляем центроид: &amp;lt;math&amp;gt;\mu _i = \frac{1}{n_i} \sum^{}_{j \in C_i} {j}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами для поиска подходящим для объединения кластеров могут быть использованы следующие формулы: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|\mu _i - \mu _j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединяем ближайшие кластеры.&lt;br /&gt;
&lt;br /&gt;
Затем для каждого кластера определяются &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; точек представителей максимально удалённых друг от друга.&lt;br /&gt;
&lt;br /&gt;
Затем каждую точку представителя выполняется сдвигают к центроиде соответствующего кластера в &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; раз.&lt;br /&gt;
&lt;br /&gt;
Затем происходит присвоение неиспользованных точек к кластерам.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров, вычисление их центроидов и назначение точек представителей.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть метода составляют разбиение случайной выборки строк на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|Рисунок 1. Схема реализации]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока число кластеров не будет равно &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:IG_CURE.jpg|800px|thumb|center|Рисунок 2. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
Входные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf.&lt;br /&gt;
&lt;br /&gt;
[2] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4.&lt;br /&gt;
&lt;br /&gt;
[3] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming. Volume 4315 of the series Lecture Notes in Computer Science pp 289-299 Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP.&lt;br /&gt;
&lt;br /&gt;
[4] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12642</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12642"/>
		<updated>2016-10-16T15:40:03Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
&lt;br /&gt;
Для каждого &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; вычисляем центроид: &amp;lt;math&amp;gt;\mu _i = \frac{1}{n_i} \sum^{}_{j \in C_i} {j}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами для поиска подходящим для объединения кластеров могут быть использованы следующие формулы: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|\mu _i - \mu _j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединяем ближайшие кластеры.&lt;br /&gt;
&lt;br /&gt;
Затем для каждого кластера определяются &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; точек представителей максимально удалённых друг от друга.&lt;br /&gt;
&lt;br /&gt;
Затем каждую точку представителя выполняется сдвигают к центроиде соответствующего кластера в &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; раз.&lt;br /&gt;
&lt;br /&gt;
Затем происходит присвоение неиспользованных точек к кластерам.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров, вычисление их центроидов и назначение точек представителей.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть метода составляют разбиение случайной выборки строк на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|Рисунок 1. Схема реализации]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока число кластеров не будет равно &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:IG_CURE.jpg|800px|thumb|center|Рисунок 2. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
Входные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;br /&gt;
[2] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[3] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming. Volume 4315 of the series Lecture Notes in Computer Science pp 289-299 Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;br /&gt;
[4] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12587</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12587"/>
		<updated>2016-10-16T14:46:26Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров [1].&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12586</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12586"/>
		<updated>2016-10-16T14:45:20Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера, &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; число точек для кластеризации, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - размерность множества, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной инициализации.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
Каждый шаг алгоритма выполняется независимо от других кластеров и их представителей. Это дает предпосылки к возможности хорошего распараллеливания метода кластеризации на каждом этапе алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12578</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12578"/>
		<updated>2016-10-16T14:37:07Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
[[Файл:CURE.jpg|800px|thumb|center|]]&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
В худшем случае иерархический алгоритм кластеризации имеет сложность  &amp;lt;math&amp;gt;O(n^2 log(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для пространств небольших размерностей достигается сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12562</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12562"/>
		<updated>2016-10-16T14:01:07Z</updated>

		<summary type="html">&lt;p&gt;Karibov: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12561</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12561"/>
		<updated>2016-10-16T14:00:49Z</updated>

		<summary type="html">&lt;p&gt;Karibov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12545</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12545"/>
		<updated>2016-10-16T13:46:19Z</updated>

		<summary type="html">&lt;p&gt;Karibov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12544</id>
		<title>Участник:Karibov/Алгоритм кластеризации с использованием представлений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Karibov/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=12544"/>
		<updated>2016-10-16T13:45:49Z</updated>

		<summary type="html">&lt;p&gt;Karibov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Карибов Евгений, Курашов Александр&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Выполняет иерархическую кластеризацию с использованием набора определяющих точек для&lt;br /&gt;
определения объекта в кластер.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных.&lt;br /&gt;
&lt;br /&gt;
Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет&lt;br /&gt;
кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту&lt;br /&gt;
хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров.&lt;br /&gt;
Описание алгоритма [1]:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
Шаг 2: Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера&lt;br /&gt;
(строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию&lt;br /&gt;
дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум&lt;br /&gt;
ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами&lt;br /&gt;
используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
Шаг 3: Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в&lt;br /&gt;
него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для&lt;br /&gt;
расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими&lt;br /&gt;
кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая&lt;br /&gt;
группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера&lt;br /&gt;
меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный&lt;br /&gt;
кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры,&lt;br /&gt;
расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы&lt;br /&gt;
выполняется следующее: если расстояние до новообразованного кластера ближе, чем предыдущий&lt;br /&gt;
ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
Шаг 4: Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: множество данных &amp;lt;math&amp;gt;\{p_i\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число кластеров, на  которое необходимо разбить множество&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: множества &amp;lt;math&amp;gt;C_i, i = 1..k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
Алгоритм строит &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; кластеров путем минимизации функции &amp;lt;math&amp;gt;E = \sum^{k}_{i=1} {\sum^{}_{p\in C_i} {\left \| p - m_i \right \|^2}}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m_i &amp;lt;/math&amp;gt; среднее значение для кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для вычисления расстояния между кластерами можно воспользоваться одной из следующих формул &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{mean}(C_i, C_j) = \left \|m_i - m_j\right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{ave}(C_i, C_j) = \frac{1}{n_in_j} {\sum^{}_{p\in C_i} {\sum^{}_{p&#039;\in C_j} {\left \|p - p&#039;\right \|}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{max}(C_i, C_j) = \max_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_{min}(C_i, C_j) = \min_{p&#039;\in C_j, p&#039;\in C_j}\left \|p - p&#039;\right \|&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;n_i &amp;lt;/math&amp;gt; - количество точек в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf&lt;/div&gt;</summary>
		<author><name>Karibov</name></author>
	</entry>
</feed>