Участник:Lexaloris/Умножение разреженной матрицы на вектор: различия между версиями
Lexaloris (обсуждение | вклад) |
Lexaloris (обсуждение | вклад) |
||
| Строка 4: | Строка 4: | ||
== Общее описание алгоритма == | == Общее описание алгоритма == | ||
Пусть N — число строк матрицы. Если b — заполненный, то к его элементам, находящимся в В, доступ может быть произвольным. | |||
Для каждой ее строки I матрицы мы находим с помощью IA значения первой IAA и последней IAB позиций, занимаемых элементами строки I в массивах JA и AN. Затем, чтобы вычислить скалярное произведение строки I и вектора В, мы просто просматриваем JA и AN на отрезке от IAA до IAB: | |||
каждое значение, хранимое в JA, есть столбцовый индекс и используется для извлечения из массива В элемента, который должен бытьумножен на соответствующее число из AN. Результат каждого умножения прибавляется к С (I). | |||
== Математическое описание алгоритма == | == Математическое описание алгоритма == | ||
Версия от 10:30, 12 октября 2016
Авторы страницы: Кочетков П.А и Новоселов А.Д.
Свойства и структура алгоритмов
Общее описание алгоритма
Пусть N — число строк матрицы. Если b — заполненный, то к его элементам, находящимся в В, доступ может быть произвольным. Для каждой ее строки I матрицы мы находим с помощью IA значения первой IAA и последней IAB позиций, занимаемых элементами строки I в массивах JA и AN. Затем, чтобы вычислить скалярное произведение строки I и вектора В, мы просто просматриваем JA и AN на отрезке от IAA до IAB: каждое значение, хранимое в JA, есть столбцовый индекс и используется для извлечения из массива В элемента, который должен бытьумножен на соответствующее число из AN. Результат каждого умножения прибавляется к С (I).
Математическое описание алгоритма
Исходные данные:
[math]\displaystyle{ IA, JA, AN }[/math] - заданная матрица в форме RR (С) U;
[math]\displaystyle{ B }[/math] - заданный заполненный вектор;
[math]\displaystyle{ N }[/math] - число строк матрицы.
Выход: [math]\displaystyle{ C }[/math] вектор-произведение размерности [math]\displaystyle{ N }[/math].
Формулы метода:
- [math]\displaystyle{ \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]
Вычислительное ядро алгоритма
Макроструктура алгоритма
Схема реализации последовательного алгоритма
Последовательность исполнения метода следующая:
Далее для всех [math]\displaystyle{ i }[/math] от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ N }[/math] по нарастанию выполняются:
1. [math]\displaystyle{ c_{i} = 0; IAA = IA(i); IAB = IA(i + 1 ) - 1 }[/math]
После этого, если [math]\displaystyle{ (IAB \lt = IAA) }[/math]:
2. Для всех [math]\displaystyle{ j }[/math] от [math]\displaystyle{ IAA }[/math] до [math]\displaystyle{ IAB }[/math] выполняется:
[math]\displaystyle{ c_{i} = \sum\limits_{j = IAA_{i}}^{IAB_{i}} AN(j)B(JA(j)) }[/math]
Последовательная сложность алгоритма
Для всего алгоритма потребуется выполнить [math]\displaystyle{ O(M) }[/math] операций, где [math]\displaystyle{ M }[/math] - число ненулевых элементов матрицы.
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Свойства алгоритма
Алгоритм в рамках выбранной версии полностью детерминирован.
Программная реализация алгоритма
Масштабируемость алгоритма и его реализации
Существующие реализации алгоритма
Литература
<references \>