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

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 4: Строка 4:
  
 
== Общее описание алгоритма ==
 
== Общее описание алгоритма ==
 +
 +
Пусть N — число строк матрицы. Если b — заполненный, то к его элементам, находящимся в В, доступ может быть про­извольным.
 +
Для каждой ее строки I матрицы мы находим с помощью IA значения первой IAA и последней IAB позиций, занимаемых элементами строки I в массивах JA и AN. Затем, чтобы вычислить скалярное произведение строки I и вектора В, мы просто просматриваем JA и AN на отрезке от IAA до IAB:
 +
каждое значение, хранимое в JA, есть столбцовый индекс и используется для извлечения из массива В элемента, который должен бытьумножен на соответствующее число из AN. Результат каж­дого умножения прибавляется к С (I).
  
 
== Математическое описание алгоритма ==
 
== Математическое описание алгоритма ==

Версия 13:30, 12 октября 2016

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

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

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

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

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 Вычислительное ядро алгоритма

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