Участник:Lexaloris/Умножение разреженной матрицы на вектор: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 5: Строка 5:
== Общее описание алгоритма ==
== Общее описание алгоритма ==


Пусть N — число строк матрицы. Если b — заполненный, то к его элементам, находящимся в В, доступ может быть про­извольным.
Пусть <math>N</math> — число строк матрицы.  
Для каждой ее строки I матрицы мы находим с помощью IA значения первой IAA и последней IAB позиций, занимаемых элементами строки I в массивах JA и AN. Затем, чтобы вычислить скалярное произведение строки I и вектора В, мы просто просматриваем JA и AN на отрезке от IAA до IAB:
Для каждой ее строки <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>:
каждое значение, хранимое в JA, есть столбцовый индекс и используется для извлечения из массива В элемента, который должен бытьумножен на соответствующее число из AN. Результат каж­дого умножения прибавляется к С (I).
каждое значение, хранимое в <math>JA</math>, есть столбцовый индекс и используется для извлечения из массива <math>B</math> элемента, который должен быть умножен на соответствующее число из <math>AN</math>. Результат каж­дого умножения прибавляется к <math>C(I)</math>.


== Математическое описание алгоритма ==
== Математическое описание алгоритма ==

Версия от 10:36, 12 октября 2016

Авторы страницы: Кочетков П.А и Новоселов А.Д.

Свойства и структура алгоритмов

Общее описание алгоритма

Пусть [math]\displaystyle{ N }[/math] — число строк матрицы. Для каждой ее строки [math]\displaystyle{ I }[/math] матрийы мы находим с помощью [math]\displaystyle{ IA }[/math] значения первой [math]\displaystyle{ IAA }[/math] и последней [math]\displaystyle{ IAB }[/math] позиций, занимаемых элементами строки [math]\displaystyle{ I }[/math] в массивах [math]\displaystyle{ JA }[/math] и [math]\displaystyle{ AN }[/math]. Затем, чтобы вычислить скалярное произведение строки [math]\displaystyle{ I }[/math] и вектора [math]\displaystyle{ B }[/math], мы просто просматриваем [math]\displaystyle{ JA }[/math] и [math]\displaystyle{ AN }[/math] на отрезке от [math]\displaystyle{ IAA }[/math] до [math]\displaystyle{ IAB }[/math]: каждое значение, хранимое в [math]\displaystyle{ JA }[/math], есть столбцовый индекс и используется для извлечения из массива [math]\displaystyle{ B }[/math] элемента, который должен быть умножен на соответствующее число из [math]\displaystyle{ AN }[/math]. Результат каж­дого умножения прибавляется к [math]\displaystyle{ C(I) }[/math].

Математическое описание алгоритма

Исходные данные:

[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 \>