<?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=%D0%AE%D0%BB%D0%B8%D1%8F+%D0%96%D0%BE%D1%81%D0%B0%D0%BD</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=%D0%AE%D0%BB%D0%B8%D1%8F+%D0%96%D0%BE%D1%81%D0%B0%D0%BD"/>
	<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/%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD"/>
	<updated>2026-10-22T20:04:19Z</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=16030</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=16030"/>
		<updated>2016-11-07T09:01:50Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              =Метод рекурсивной координатной бисекции&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(log_2 k)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;|G|+p&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;p*|S|&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; - координатной оси&lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - точки раздела множества&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File: Pokoorbi.jpg||thumb|center|1200px|Рисунок 1. Информационный граф.&amp;lt;ref name=&amp;quot;G1&amp;quot;/&amp;gt;]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15463</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15463"/>
		<updated>2016-11-01T10:05:32Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; - координатной оси&lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - точки раздела множества&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File: bisec_gr.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15462</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15462"/>
		<updated>2016-11-01T10:04:02Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; - координатной оси&lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - точки раздела множества&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File: bisec_gr.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15447</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15447"/>
		<updated>2016-11-01T08:54:36Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; - координатной оси&lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - точки раздела множества&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
По сути строение информационного графа описано в п.1.8.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15446</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15446"/>
		<updated>2016-11-01T08:53:59Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Свойства и структура алгоритмов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; - координатной оси&lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; - точка раздела множества&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
По сути строение информационного графа описано в п.1.8.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15445</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15445"/>
		<updated>2016-11-01T08:45:43Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Свойства и структура алгоритмов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
По сути строение информационного графа описано в п.1.8.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i}\log_2{\frac{n}{2^i}})=&lt;br /&gt;
O(\sum\limits_{i=0}^{log_2{k}}(n\frac{(log_2{n}-i)}{2^i}))=&lt;br /&gt;
O(n(\sum\limits_{i=0}^{log_2{k}}(\frac{log_2{n}}{2^i})-\sum\limits_{i=0}^{log_2{k}}(\frac{i}{2^i})))=&lt;br /&gt;
O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15386</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=15386"/>
		<updated>2016-10-31T22:40:35Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
По сути строение информационного графа описано в п.1.8.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Структура параллельного алгоритма:&lt;br /&gt;
#Подготовительный этап:&lt;br /&gt;
#*определение числа и объема требуемых доменов по процессорам&lt;br /&gt;
#**Пусть имеется граф с n вершинами, он распределяется по k доменам. Тогда глубина рекурсии - &amp;lt;math&amp;gt;log_{2}k&amp;lt;/math&amp;gt;, что равняется числу ярусов.&lt;br /&gt;
#Разделение доменов по процессорам:&lt;br /&gt;
#*вызов рекурсивной покоординатной бисекции по процессорам:&lt;br /&gt;
#**сортировка вершин графа (на i-м ярусе выполняется &amp;lt;math&amp;gt;2^i&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;O(n\log_2{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;Тогда сложность алгоритма можно представить в следующем виде:&lt;br /&gt;
&amp;lt;math&amp;gt;O(\sum\limits_{i=0}^{log_2{k}}\frac{n}{2^i} \log_2{\frac{n}{2^i}})=n\sum\limits_{i=0}^{log_2{k}}(\frac{\log_2{n}}{2^i} - \frac{i}{2^i})=O(n\log_2{n})-O(n)=O(n\log_2{n})&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview ParMETIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ PT-SCOTCH]&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*[http://glaros.dtc.umn.edu/gkhome/metis/metis/overview METIS]&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*[https://www.labri.fr/perso/pelegrin/scotch/ SCOTCH]&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12173</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12173"/>
		<updated>2016-10-15T21:34:45Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
----&lt;br /&gt;
По сути строение информационного графа описано в п.1.8.&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.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
#*вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12141</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12141"/>
		<updated>2016-10-15T21:21:23Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Свойства и структура алгоритмов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
#*вызов рекурсивной покоординатной бисекции по процессорам в соответствии с п.1.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
#*вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12127</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12127"/>
		<updated>2016-10-15T21:15:40Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 5:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Шаг 6:&#039;&#039;&#039;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
#*вызов рекурсивной покоординатной бисекции по процессорам в соответствии с п.1.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
#*вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12118</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12118"/>
		<updated>2016-10-15T21:11:27Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
#*вызов рекурсивной покоординатной бисекции по процессорам в соответствии с п.1.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
#*вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12115</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12115"/>
		<updated>2016-10-15T21:10:38Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
##вызов рекурсивной покоординатной бисекции по процессорам в соответствии с п.1.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
##вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12112</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12112"/>
		<updated>2016-10-15T21:09:50Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
**вызов рекурсивной покоординатной бисекции по процессорам в соответствии с п.1.5&lt;br /&gt;
#Параллельные вызовы алгоритма для каждого процессора&lt;br /&gt;
**вызов локальной координатной бисекции по доменам&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12077</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12077"/>
		<updated>2016-10-15T21:01:54Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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.5&lt;br /&gt;
#вызов локальной координатной бисекции по доменам на конкретных процессорах&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12074</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12074"/>
		<updated>2016-10-15T21:01:38Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12048</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12048"/>
		<updated>2016-10-15T20:57:29Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12044</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12044"/>
		<updated>2016-10-15T20:57:09Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Intuit.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12041</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12041"/>
		<updated>2016-10-15T20:56:55Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
&amp;lt;br/&amp;gt;[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;br /&gt;
&amp;lt;br/&amp;gt;[3] Wikipedia.org&lt;br /&gt;
&amp;lt;br/&amp;gt;[4] Wikipedia.ru&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12017</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=12017"/>
		<updated>2016-10-15T20:55:21Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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;
&#039;&#039;&#039;Параллельные&#039;&#039;&#039; реализации: &lt;br /&gt;
*PARMETIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*PT-SCOTCH&lt;br /&gt;
*ZOLTAN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Последовательные&#039;&#039;&#039; реализации: &lt;br /&gt;
*METIS&lt;br /&gt;
*JOSTLE&lt;br /&gt;
*SCOTCH&lt;br /&gt;
*CHACO&lt;br /&gt;
*PARTY&lt;br /&gt;
&lt;br /&gt;
== Литература==&lt;br /&gt;
----&lt;br /&gt;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11993</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11993"/>
		<updated>2016-10-15T20:52:12Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Свойства и структура алгоритмов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Представим последовательную реализацию метода рекурсивной координатной бисекции с помощью псевдокода:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;math&amp;gt;BisectCoordRec\{V, iend, istart , p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;{&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;l_{k}=argmax{max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right)} &amp;lt;/math&amp;gt; - //определение оси для сортировки&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Sort(V, iend, istart ,l_{k})&amp;lt;/math&amp;gt;- //сортировка вершин по выбранной координате&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt; - //поиск точки для разделения множества вершин&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;Bisect\left(V,(iend-istart) , V_{l}, \frac{p+1}{2}, V_{r}, \frac{\frac{(iend-istart)*(p+1)}{2}}{p}\right)&amp;lt;/math&amp;gt;- //разделение массива вершин на два&lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{l}|&amp;gt;1 : BisectCoordRec\{V_{l},\frac{(iend-istart)*\frac{p+1}{2}}{p} , \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;   &amp;lt;math&amp;gt;if |V_{r}|&amp;gt;1 : BisectCoordRec\{V_{r}, (iend-istart) - \frac{(iend-istart)*\frac{p+1}{2}}{p} , p - \frac{p+1}{2}, p\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;}&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}nlog_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11761</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11761"/>
		<updated>2016-10-15T20:22:32Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Свойства и структура алгоритмов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&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;
Пусть в графе &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; содержится &amp;lt;math&amp;gt;|V|=n&amp;lt;/math&amp;gt; вершин. &lt;br /&gt;
*Для определения координат &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
*Для сортировки массива вершин по координате требуется &amp;lt;math&amp;gt;O(nlog_{2}n)&amp;lt;/math&amp;gt; попарных сравнений&lt;br /&gt;
&lt;br /&gt;
Так как всего осуществляется &amp;lt;math&amp;gt;p-1&amp;lt;/math&amp;gt; шагов рекурсии, глубина ее составляет &amp;lt;math&amp;gt;-log_{2}p+1&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит можно определить сложность алгоритма следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;O(nlog_{2}log_{2}p)&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;
&#039;&#039;&#039;Вход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выход алгоритма:&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; доменов &amp;lt;math&amp;gt;\{S_{p}\}&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] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11635</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11635"/>
		<updated>2016-10-15T20:04:54Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&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;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11631</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11631"/>
		<updated>2016-10-15T20:04:42Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Основной составляющей метода является повторяющиеся сортировки множества координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; на каждом рекурсивном шаге. Всего таких шагов &amp;lt;math&amp;gt;p-1&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;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11607</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11607"/>
		<updated>2016-10-15T20:01:20Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&amp;lt;/math&amp;gt; &lt;br /&gt;
=== Вычислительное ядро алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Вычислительное ядро алгоритма составляют:&lt;br /&gt;
*сортировка массива координат вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; (могут применяться различные виды сортировок) &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;l_{k}&amp;lt;/math&amp;gt; &lt;br /&gt;
*вычисление величины &amp;lt;math&amp;gt;m&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;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11586</id>
		<title>Участник:Юлия Жосан/Разбиение вершин графа на равные по мощности блоки методом рекурсивной координатной бисекции</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:%D0%AE%D0%BB%D0%B8%D1%8F_%D0%96%D0%BE%D1%81%D0%B0%D0%BD/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B8%D1%81%D0%B5%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=11586"/>
		<updated>2016-10-15T19:56:37Z</updated>

		<summary type="html">&lt;p&gt;Юлия Жосан: Новая страница: «Автор: User:Юлия Жосан| == Свойства и структура алгоритмов == === Общее описание алгоритма ===…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор: [[User:Юлия Жосан|Юлия Жосан]]&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Декомпозиция графа&#039;&#039;&#039; - это задача его разбиения на непересекающиеся подмножества доменов, для их последующей параллельной обработки группой процессоров. Основная сложность использования параллельных методов состоит в поиске оптимальной декомпозиции, которая дает сбалансированное распределение доменов по процессорам. Выделяют два основных свойства оптимальной декомпозиции, которые должны выполняться одновременно: &lt;br /&gt;
*минимизация максимального веса исходящих из домена ребер&lt;br /&gt;
*равномерное распределение по доменам суммарного веса узлов/ребер&lt;br /&gt;
&lt;br /&gt;
Покоординатная декомпозиция основана на рекурсивном делении пополам сети по координатной оси, вдоль которой область наиболее протяженная, соотношение размеров полученных частей зависит от требуемого количества доменов в каждой из них. Этот метод применяется для обработки сеток больших размеров (объем описания сетки превышает объем оперативной памяти одного процессорного узла).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные этапы работы алгоритма:&#039;&#039;&#039;&lt;br /&gt;
#Выбор направления, вдоль которого будут упорядочиваться вершины домена&lt;br /&gt;
#Упорядочивание вершин вдоль выбранного в п.1 направления&lt;br /&gt;
#Вычисление номера m первой вершины второго домена&lt;br /&gt;
#Формирование двух новых доменов, первый из которых включает вершины от первой до m-1 входящего домена, а второй включает вершины с m до последней вершины входящего домена&lt;br /&gt;
#Запуск алгоритма для полученных в п.4 доменов&lt;br /&gt;
&lt;br /&gt;
Выделяют следующие &#039;&#039;&#039;достоинства&#039;&#039;&#039; данного алгоритма:&lt;br /&gt;
*высокая скорость работы&lt;br /&gt;
*низкий уровень дисбаланса распределения вершин между доменами&lt;br /&gt;
*экономичность по памяти&lt;br /&gt;
===Математическое описание алгоритма===&lt;br /&gt;
----&lt;br /&gt;
Пусть на &#039;&#039;&#039;вход&#039;&#039;&#039; алгоритму подаются следующие данные: &lt;br /&gt;
*неориентированный граф &amp;lt;math&amp;gt;G=(V, E)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - множество вершин, &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; - множество ребер&lt;br /&gt;
*Требуемое число доменов &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На &#039;&#039;&#039;выходе&#039;&#039;&#039; алгоритма требуется получить множество доменов &amp;lt;math&amp;gt;\{S_{p}\}&amp;lt;/math&amp;gt;.Это множество &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; непересекающихся подмножеств &amp;lt;math&amp;gt;\{V_{i}\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;V=\bigcup\limits_{i=1}^{p} V_{i}&amp;lt;/math&amp;gt;,  &amp;lt;math&amp;gt;V_{i}\cap V_{j}=\emptyset&amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i\not=j&amp;lt;/math&amp;gt;&lt;br /&gt;
при котором минимизируются следующие функционалы: &lt;br /&gt;
*суммарный вес вершин в домене: &amp;lt;math&amp;gt;\vert S_{p}\vert=\sum\limits_{i=1}^{p} \vert v_{i} \vert\rightarrow min&amp;lt;/math&amp;gt;&lt;br /&gt;
*суммарный вес разрезанных ребер:&amp;lt;math&amp;gt;\sum\limits_{ij} \vert e_{ij} \vert\rightarrow min , v_{i}\in S_{l}, v_{j}\in S_{r},  S_{l}\cap S_{r}=\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опишем подробнее &#039;&#039;&#039;схему работу&#039;&#039;&#039; рекурсивного алгоритма:&lt;br /&gt;
#Выбор оси, вдоль которой будет осуществляться сортировка. Для этого вычисляется величина &amp;lt;math&amp;gt;l_{k}=max\left( v_{i}^{k}\right)-min\left(v_{i}^{k}\right) , v_{i}^{k}\in V , k &amp;lt;/math&amp;gt; - координатная ось, и выбирается ее максимальное значение. &lt;br /&gt;
#Сортировка множества вершин &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; по выбранной в п.1 координате по возрастанию номеров коодинат вершин&lt;br /&gt;
#Вычисляется номер вершины, по которой пойдет разбиение множества: &amp;lt;math&amp;gt;m=(iend-istart+1)*\frac{\frac{p+1}{2}}{p}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;iend, istart&amp;lt;/math&amp;gt; - номер первой вершины в множестве и номер последней вершины в множестве соответственно&lt;br /&gt;
#Множество вершин делится на две части: &amp;lt;math&amp;gt;V_{l}=|v_{l}|, l=istart..m ,V_{r}=|v_{r}|, r=m+1..iend &amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм запускается для &amp;lt;math&amp;gt;V_{l}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V_{r}&amp;lt;/math&amp;gt;&lt;br /&gt;
#Алгоритм останавливается на итерации, для которой &amp;lt;math&amp;gt;|V_{l}|=1 , |V_{r}|=1&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;
[1] Якобовский М.В. Введение в параллельные методы решения задач: Учебное пособие / Предисл.: В. А. Садовничий. – М.: Издательство Московского университета, 2012. – 328 с., илл. – (Серия «Суперкомпьютерное образование»), ISBN 978-5-211-06382-2 URL: http://lira.imamod.ru/ITTPMOPS/&lt;br /&gt;
[2]  Головченко Е.Н. Декомпозиция расчетных сеток для решения задач механики сплошных сред на высокопроиводительных вычислительных системах. Дисс ... канд. ф.-м.наук. Институт прикладной математики им. М. В. Келдыша РАН, г. Москва URL: http://keldysh.ru/council/3/D00202403/golovchenko_diss.pdf&lt;/div&gt;</summary>
		<author><name>Юлия Жосан</name></author>
	</entry>
</feed>