Я новичок в использовании разреженных матриц, но теперь мне нужно использовать один в моей работе, чтобы сэкономить место. Я так понимаю, что следующая матрица:
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) время?
Я ценю любую помощь, которую вы можете оказать. Я уверен, что для этого есть хорошо разработанные уравнения, но я не могу их найти.
Здесь нет O (1) процедура получения значения при произвольном (I, J) координата (по крайней мере, без предварительной обработки). Лучшее, что вы можете сделать, это O (журнал N) в среднем (где матрица MxNчерез процедуру двоичного поиска по индексам столбцов.*
* Ну, на самом деле это O (log k), где К количество ненулевых элементов в строке Однако, если предположить, что плотность не связана с размером матрицы (что часто имеет место), то O (журнал N) является действительным.
Других решений пока нет …