Участник:Руфина Третьякова/Хранение ненулевых элементов разреженных матриц. Умножение разреженной матрицы на вектор: различия между версиями
Trrufina (обсуждение | вклад) |
|||
| Строка 28: | Строка 28: | ||
=== Макроструктура алгоритма === | === Макроструктура алгоритма === | ||
Псевдокод алгоритма: | |||
'''Входные данные''': | |||
разреженная матрица в формате CSR: | |||
''Ai'', ''Aj'' ''A'' с весами ''f''(''e''); | |||
вектор ''x''. | |||
'''Выходные данные''': произведение матрицы на вектор ''y''. | |||
''Q'' := '''new''' priority queue | |||
'''for each''' ''v'' ∈ ''V'': | |||
'''if''' ''v'' = ''u'' '''then''' ''d''(''v'') := 0 '''else''' ''d''(''v'') := ∞ | |||
''Q''.insert(''v'', ''d''(''v'')) | |||
'''while''' ''Q'' ≠ ∅: | |||
''v'' := ''Q''.delete_min() | |||
'''for each''' ''e'' = (''v'', ''w'') ∈ ''E'': | |||
'''if''' ''d''(''w'') > ''d''(''v'') + ''f''(''e''): | |||
''d''(''w'') := ''d''(''v'') + ''f''(''e'') | |||
''Q''.decrease_key(''w'', ''d''(''w'')) | |||
=== Схема реализации последовательного алгоритма === | === Схема реализации последовательного алгоритма === | ||
Версия от 20:51, 12 октября 2016
| Умножение разреженной матрицы на вектор | |
| Последовательный алгоритм | |
| Последовательная сложность | [math]\displaystyle{ }[/math] |
| Объём входных данных | [math]\displaystyle{ }[/math] |
| Объём выходных данных | [math]\displaystyle{ }[/math] |
| Параллельный алгоритм | |
| Высота ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
| Ширина ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
Авторы статьи: Третьякова Р. М. (группа 603), Буторина Е. В. (группа 603)
Свойства и структура алгоритма
Общее описание алгоритма
Разрежённая матрица — это матрица с преимущественно нулевыми элементами. В противном случае, если бо́льшая часть элементов матрицы ненулевые, матрица считается плотной. Среди специалистов нет единства в определении того, какое именно количество ненулевых элементов делает матрицу разрежённой. Разные авторы предлагают различные варианты. Огромные разрежённые матрицы часто возникают при решении таких задач, как дифференциальное уравнение в частных производных. При хранении и преобразовании разрежённых матриц в компьютере бывает полезно, а часто и необходимо, использовать специальные алгоритмы и структуры данных, которые учитывают разрежённую структуру матрицы. Операции и алгоритмы, применяемые для работы с обычными, плотными матрицами, применительно к большим разрежённым матрицам работают относительно медленно и требуют значительных объёмов памяти. Однако разрежённые матрицы могут быть легко сжаты путём записи только своих ненулевых элементов, что снижает требования к компьютерной памяти.
Математическое описание алгоритма
Исходные данные: матрица [math]\displaystyle{ A }[/math] (элементы [math]\displaystyle{ A_{ij}, i, j = 1, \ldots, n }[/math]).,
вектор [math]\displaystyle{ b }[/math]
Вычисляемые данные: вектор [math]\displaystyle{ c }[/math]
Вычислительное ядро алгоритма
Макроструктура алгоритма
Псевдокод алгоритма:
Входные данные:
разреженная матрица в формате CSR:
Ai, Aj A с весами f(e);
вектор x.
Выходные данные: произведение матрицы на вектор y.
Q := new priority queue
for each v ∈ V:
if v = u then d(v) := 0 else d(v) := ∞
Q.insert(v, d(v))
while Q ≠ ∅:
v := Q.delete_min()
for each e = (v, w) ∈ E:
if d(w) > d(v) + f(e):
d(w) := d(v) + f(e)
Q.decrease_key(w, d(w))
Схема реализации последовательного алгоритма
Метод можно описать следующим образом:
Последовательная сложность алгоритма
Для вычисления сингулярных чисел и векторов матрицы порядка n в последовательном варианте требуется:
- [math]\displaystyle{ }[/math] делений,
- [math]\displaystyle{ }[/math] сложений (вычитаний),
- [math]\displaystyle{ }[/math] умножений.
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Свойства алгоритма
Программная реализация алгоритма
Масштабируемость алгоритма и его реализации
Существующие реализации алгоритма
Литература
1. С. Писсанецки Технология разреженных матриц. Изд. Мир, 1988.