Участник:Obirvalger/Метод рекурсивной координатной бисекции
Авторы: Гордеев Михаил, Колмаков Евгений.
Содержание
- 1 Свойства и структура алгоритмов
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритмов
1.1 Общее описание алгоритма
1.2 Математическое описание алгоритма
1.3 Вычислительное ядро алгоритма
1.4 Макроструктура алгоритма
Как записано в описании ядра алгоритма, основную часть метода составляют множественные (всего k-1) сортировки(функция sort).
1.5 Схема реализации последовательного алгоритма
1.6 Последовательная сложность алгоритма
Обозначим через D_k(n) сложность алгоритма рекурсивной координатной бисекции для графа с n вершинами на k частей.
Введем D(n) = D_k(n) при k = n. Для D(n) верно следующее рекуррентное равенство:
\begin{array}{l} D(n) = S(n) + 2D(\frac{n}{2}) \\ D(1) = S(1) = 0 \\ \end{array} , где S(n) это сложность алгоритма сортировки массива из n элементов.
Пусть S(n) = O(n\log{n}), например для сортировки слиянием, тогда по теореме о рекуррентном неравенстве D(n) \lesssim n^{1+\varepsilon}.
Для D(n) есть точное значение: \sum\limits_{i=0}^{\log_2{n}}2^i S(\frac{n}{2^i}).
D_k(n) = \sum\limits_{i=0}^{\log_2{k}}2^i S(\frac{n}{2^i}). Если использовать сортировку со сложностью S(n) = O(n\log{n}), то D_k(n) = O(\sum\limits_{i=0}^{\log_2{k}}2^i \frac{n}{2^i} \log{\frac{n}{2^i}}) = O(n\log(\prod\limits_{i=0}^{\log_2{k}}\frac{n}{2^i})) = O(n\log{\frac{n^{\log_2{k}}}{2^\frac{\log_2{k}(\log_2{k}+1))}{2}}}) = O(n(\log{n}\log{k} - \frac{\log^2_2{k}}{2})) = O(n\log{n}\log{k}).
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Входные и выходные данные алгоритма
Входные данные: граф G = (V, E) , вложенный в \mathbb{R}^N, и число k частей (доменов), на которое нужно разбить граф. Таким образом, помимо матрицы смежности (или любого другого представления графа) для каждой вершины v \in V задан набор её координат v = (v_1, \dots, v_N) \in \mathbb{R}^N, поэтому V задаётся массивом N-мерных векторов или матрицей размера |V| \times N.
Объём входных данных: N|V| + |G|, где |G| - объём данных, представляющих граф G, который в общем случае зависит от выбранного представления.
Выходные данные: k доменов графа G, задающих его декомпозицию.
Объём выходных данных: |V| - для каждого домена достаточно хранить соответствующие вершинам из этого домена индексы строк в матрице, представляющей множество вершин.