Чтение из файла разреженной матрицы

0

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

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

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

Я пробовал кое-что прочитать и после этого вставить в мою разреженную матрицу:

1) Используя плотную матрицу.

2) Используя другую реализацию с разреженной матрицей, я попытался использовать std :: map.

3) Приоритетная очередь, я создал массив priority_queues. Я вставляю элемент i, j в priority_queue [i], поэтому, когда я выхожу priority_queue [i], я беру младший j-индекс строки i.

Но мне нужно что-то действительно быстрое и эффективное для памяти, потому что самая большая матрица, которую я буду использовать, будет равна 100k x 100k, а попытки, которые я сделал, были настолько медленными, почти в 200 раз медленнее, чем сама итерация мощности.

Какие-либо предложения? Извините за плохой английский :(

  • 0
    Как насчет чтения данных при отправке и последующего форматирования в формат?
Теги:
sparse-matrix

1 ответ

0
Лучший ответ

То, как работают многие редкие погрузчики, заключается в том, что вы используете промежуточную структуру с тремя тройками. Т.е. независимо от того, как выглядит файл, вы загружаете его в нечто вроде vector< tuple< row, column, value> >.

Затем вы создаете из этого редкую структуру. Причина именно в том, что вы используете. У вашей разреженной структуры матрицы, вероятно, есть ограничения, например, вам нужно знать количество элементов в каждой строке/столбце, или нужно сортировать входные данные и т.д. Вы можете массировать массив трёх раз в том, что вам нужно (т.е. Путем сортировки).

Это также делает тривиальным решение вашей дилеммы симметрии. Для каждой тройки исходного файла вы вставляете в свою промежуточную структуру как (row, column, value) и (column, row, value).

Другой вариант - просто написать сценарий, который будет сортировать ваш файл профессора.

FYI, в разреженном мире важно количество элементов (ненулевых), а не размерности матрицы. 100k-by-100k - это бессмысленная информация. Например, вся эта матрица может быть полностью пустой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню