Участник:Lexaloris/Умножение разреженной матрицы на вектор: различия между версиями
Lexaloris (обсуждение | вклад) |
Lexaloris (обсуждение | вклад) |
||
Строка 33: | Строка 33: | ||
== Вычислительное ядро алгоритма == | == Вычислительное ядро алгоритма == | ||
− | Вычислительным ядром, т.е. той частью алгоритма, на которую приходится основное время работы алгоритма, является вычисление | + | Вычислительным ядром, т.е. той частью алгоритма, на которую приходится основное время работы алгоритма, является вычисление значения <math>c_{i}</math> вектора-произведения, т.е произведения строки <math>I</math> матрицы <math>A</math> и вектора <math>B</math> по формуле: |
:<math> | :<math> |
Версия 08:03, 15 октября 2016
Авторы страницы: Кочетков П.А и Новоселов А.Д.
Содержание
- 1 Свойства и структура алгоритмов
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 3 Литература
1 Свойства и структура алгоритмов
1.1 Общее описание алгоритма
Пусть [math]N[/math] — число строк матрицы. Для каждой ее строки [math]I[/math] матрийы мы находим с помощью [math]IA[/math] значения первой [math]IAA[/math] и последней [math]IAB[/math] позиций, занимаемых элементами строки [math]I[/math] в массивах [math]JA[/math] и [math]AN[/math]. Затем, чтобы вычислить скалярное произведение строки [math]I[/math] и вектора [math]B[/math], мы просто просматриваем [math]JA[/math] и [math]AN[/math] на отрезке от [math]IAA[/math] до [math]IAB[/math]: каждое значение, хранимое в [math]JA[/math], есть столбцовый индекс и используется для извлечения из массива [math]B[/math] элемента, который должен быть умножен на соответствующее число из [math]AN[/math]. Результат каждого умножения прибавляется к [math]C(I)[/math].
1.2 Математическое описание алгоритма
Исходные данные:
[math]IA, JA, AN[/math] - заданная матрица в форме RR (С) U;
[math]B[/math] - заданный заполненный вектор;
[math]N[/math] - число строк матрицы.
Выход: [math]C[/math] вектор-произведение размерности [math]N[/math].
Формулы метода:
- [math] \begin{align} & IAA_{i} = IA(i), \quad i \in [1, N], \\ & IAB_{i} = IA(i + 1) - 1, \quad i \in [1, N], \\ & c_{i} = \sum\limits_{j = IAA_{i}}^{IAB_{i}} AN(j)B(JA(j)), \quad i \in [1, N] \\ \end{align} [/math]
1.3 Вычислительное ядро алгоритма
Вычислительным ядром, т.е. той частью алгоритма, на которую приходится основное время работы алгоритма, является вычисление значения [math]c_{i}[/math] вектора-произведения, т.е произведения строки [math]I[/math] матрицы [math]A[/math] и вектора [math]B[/math] по формуле:
- [math] \begin{align} & c_{i} = \sum\limits_{j = IAA_{i}}^{IAB_{i}} AN(j)B(JA(j)), \quad i \in [1, N] \\ \end{align} [/math]
1.4 Макроструктура алгоритма
1.5 Схема реализации последовательного алгоритма
Последовательность исполнения метода следующая:
Далее для всех [math]i[/math] от [math]1[/math] до [math]N[/math] по нарастанию выполняются:
1. [math] c_{i} = 0; IAA = IA(i); IAB = IA(i + 1 ) - 1 [/math]
После этого, если [math](IAB \lt = IAA)[/math]:
2. Для всех [math]j[/math] от [math]IAA[/math] до [math]IAB[/math] выполняется:
[math]c_{i} = \sum\limits_{j = IAA_{i}}^{IAB_{i}} AN(j)B(JA(j))[/math]
1.6 Последовательная сложность алгоритма
Для всего алгоритма потребуется выполнить [math]O(M)[/math] операций, где [math]M[/math] - число ненулевых элементов матрицы.
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Входные и выходные данные алгоритма
1.10 Свойства алгоритма
Алгоритм в рамках выбранной версии полностью детерминирован.
Вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – константа.
2 Программная реализация алгоритма
2.1 Масштабируемость алгоритма и его реализации
2.2 Существующие реализации алгоритма
3 Литература
<references \>