Что такое быстрая матрица или двумерный массив для хранения матрицы смежности в переполнении стека

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

Прямо сейчас у меня есть следующее:

  • Моя симуляция выводит boost::dynamic_bitset содержащий 112 битов каждый шаг по времени.
  • Я использую набор битов в качестве ключа в Google Sparse Hash, чтобы отобразить целочисленное значение, которое можно использовать в качестве индекса для матрицы смежности, которую я хочу построить.

Теперь мне нужна хорошая / быстрая матрица или двумерный массив для хранения целых чисел. Должно:

  • Используйте целочисленные значения, которые я сохранил в Google Sparse Hash, в качестве номеров строк / столбцов. (Например, я хочу получить доступ к сохраненному целому числу или изменить его, выполнив matrix(3,4) = 3,
  • Я не знаю, сколько строк или столбцов мне понадобится заранее. Так что он должен иметь возможность просто добавлять строки и столбцы на лету.
  • Большинство значений будет равно 0, поэтому, вероятно, это должна быть редкая реализация чего-либо.
  • Количество строк и столбцов будет очень большим, поэтому оно должно быть очень быстрым.
  • Прост в использовании. Мне не нужно много математических операций, это должен быть простой и быстрый способ хранения и доступа к целым числам.

Надеюсь, я достаточно ясно изложил свой вопрос.

0

Решение

Я бы порекомендовал http://www.boost.org/doc/libs/1_54_0/libs/numeric/ublas/doc/matrix_sparse.htm — повысить UBLAS разреженных матриц. Существует несколько различных реализаций разреженных матричных хранилищ, поэтому чтение документации поможет вам выбрать тип, подходящий для ваших целей. (TLDR: разреженные матрицы имеют быстрый поиск или быструю вставку.)

0

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

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