Поиск значений в разреженной матрице CRS?

Я новичок в использовании разреженных матриц, но теперь мне нужно использовать один в моей работе, чтобы сэкономить место. Я так понимаю, что следующая матрица:

10   0    0    0   -2    0
3    9    0    0    0    3
0    7    8    7    0    0
3    0    8    7    5    0
0    8    0    9    9    13
0    4    0    0    2   -1

может быть представлен тремя векторами:

[10 -2 3 9 3 7 8 7 3 8 7 5 8 9 9 13 3 2 -1] // nonzero_vals

[1 5 1 2 6 2 3 4 1 3 4 5 2 4 5 6 2 5 6] // col_indices

[1 3 6 9 13 17 20] // row_ptr (indices of values that start row)

Моя задача теперь определить правильные уравнения для поиска значения за O (1) времени. Если я, например, хочу вернуть, какое значение матрицы хранится в местоположении (2,2), как мне вернуть 9? Кроме того, как мне вернуть 0, если координаты поиска не представлены в разреженной матрице, также за O (1) время?

Я ценю любую помощь, которую вы можете оказать. Я уверен, что для этого есть хорошо разработанные уравнения, но я не могу их найти.

0

Решение

Здесь нет O (1) процедура получения значения при произвольном (I, J) координата (по крайней мере, без предварительной обработки). Лучшее, что вы можете сделать, это O (журнал N) в среднем (где матрица MxNчерез процедуру двоичного поиска по индексам столбцов.*



* Ну, на самом деле это O (log k), где К количество ненулевых элементов в строке Однако, если предположить, что плотность не связана с размером матрицы (что часто имеет место), то O (журнал N) является действительным.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]