Участник:Руфина Третьякова/Хранение ненулевых элементов разреженных матриц. Умножение разреженной матрицы на вектор
| Умножение разреженной матрицы на вектор | |
| Последовательный алгоритм | |
| Последовательная сложность | [math]\displaystyle{ }[/math] |
| Объём входных данных | [math]\displaystyle{ }[/math] |
| Объём выходных данных | [math]\displaystyle{ }[/math] |
| Параллельный алгоритм | |
| Высота ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
| Ширина ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
Авторы статьи: Третьякова Р. М. (группа 603), Буторина Е. В. (группа 603)
Свойства и структура алгоритма
Общее описание алгоритма
Разрежённая матрица — это матрица с преимущественно нулевыми элементами. В противном случае, если бо́льшая часть элементов матрицы ненулевые, матрица считается плотной. Среди специалистов нет единства в определении того, какое именно количество ненулевых элементов делает матрицу разрежённой. Разные авторы предлагают различные варианты. Огромные разрежённые матрицы часто возникают при решении таких задач, как дифференциальное уравнение в частных производных. При хранении и преобразовании разрежённых матриц в компьютере бывает полезно, а часто и необходимо, использовать специальные алгоритмы и структуры данных, которые учитывают разрежённую структуру матрицы. Операции и алгоритмы, применяемые для работы с обычными, плотными матрицами, применительно к большим разрежённым матрицам работают относительно медленно и требуют значительных объёмов памяти. Однако разрежённые матрицы могут быть легко сжаты путём записи только своих ненулевых элементов, что снижает требования к компьютерной памяти.
Математическое описание алгоритма
Исходные данные: разреженная матрица [math]\displaystyle{ A^{n*n} }[/math], вектор [math]\displaystyle{ b^{n*1} }[/math]
Рассмотрим CSR-представление разреженных матриц
CSR-формат представляет матрицу Шаблон:Math в виде 3-х одномерных массивов:
массив [math]\displaystyle{ A }[/math] содержит ненулевые значения матрицы, [math]\displaystyle{ JA }[/math] - номера столбцов ненулевых элементов., [math]\displaystyle{ IA }[/math]- содержит номер с которого начинается описание элементов в массивах, Этот формат позволяет быстро производить р=перемножение матрицы на вектор (Шаблон:Math).
The CSR format stores a sparse Шаблон:Math matrix Шаблон:Math in row form using three (one-dimensional) arrays Шаблон:Math. Let Шаблон:Math denote the number of nonzero entries in Шаблон:Math. (Note that zero-based indices shall be used here.)
- The array Шаблон:Math is of length Шаблон:Math and holds all the nonzero entries of Шаблон:Math in left-to-right top-to-bottom ("row-major") order.
- The array Шаблон:Math is of length Шаблон:Math. It is defined by this recursive definition:
- Шаблон:Math
- Шаблон:Math (number of nonzero elements on the Шаблон:Math-th row in the original matrix)
- Thus, the first Шаблон:Math elements of Шаблон:Math store the index into Шаблон:Math of the first nonzero element in each row of Шаблон:Math, and the last element Шаблон:Math stores Шаблон:Math, the number of elements in Шаблон:Math, which can be also thought of as the index in Шаблон:Math of first element of a phantom row just beyond the end of the matrix Шаблон:Math. The values of the Шаблон:Math-th row of the original matrix is read from the elements Шаблон:Math to Шаблон:Math (inclusive on both ends), i.e. from the start of one row to the last index just before the start of the next.[1]
- The third array, Шаблон:Math, contains the column index in Шаблон:Math of each element of Шаблон:Math and hence is of length Шаблон:Math as well.
Например, матрица
- [math]\displaystyle{ \begin{pmatrix} 0 & 0 & 0 & 0 \\ 5 & 8 & 0 & 0 \\ 0 & 0 & 3 & 0 \\ 0 & 6 & 0 & 0 \\ \end{pmatrix} }[/math]
это Шаблон:Math разреженная матрица с 4-мя ненулевыми элементами, представляемая в формате CSR
A = [ 5 8 3 6 ] IA = [ 0 0 2 3 4 ] JA = [ 0 1 2 1 ]
где вектор
Вычисляемые данные: вектор [math]\displaystyle{ c^{n*1} }[/math]
Вычислительное ядро алгоритма
Макроструктура алгоритма
Псевдокод алгоритма:
Входные данные:
число строк матрицы n;
разреженная матрица в формате CSR:
строчные указатели IA,
столбцовые указателиJA,
ненулевые элементы A;
вектор x.
Выходные данные: произведение матрицы на вектор y.
Q := new priority queue
for i = 1,n:
for k = IA(i), IA(i+1)-1:
y(i) += A(k)*x(JA(k));
Схема реализации последовательного алгоритма
Метод можно описать следующим образом:
Последовательная сложность алгоритма
Для вычисления сингулярных чисел и векторов матрицы порядка n в последовательном варианте требуется:
- [math]\displaystyle{ }[/math] делений,
- [math]\displaystyle{ }[/math] сложений (вычитаний),
- [math]\displaystyle{ }[/math] умножений.
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Свойства алгоритма
Программная реализация алгоритма
Масштабируемость алгоритма и его реализации
Существующие реализации алгоритма
Литература
1. С. Писсанецки Технология разреженных матриц. Изд. Мир, 1988.