Хранение Матричной информации в векторе STL. Какой лучше вектор или вектор векторов? - PullRequest
2 голосов
/ 21 июня 2011

Я создал свой собственный класс Matrix, внутри которого информация о Matrix хранится в векторе STL.Я заметил, что во время поиска в Интернете некоторые люди работают с вектором векторов для представления информации о матрице.Мое лучшее предположение говорит мне, что, пока матрица маленькая или тощая (row_num >> column_num), разница должна быть небольшой, но что если матрица квадратная или жирная (row_num << column_num)?Если бы я создал очень большую матрицу, увидел бы я разницу во времени выполнения?Есть ли другие факторы, которые необходимо учитывать? </p>

Спасибо

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Слишком много переменных, чтобы ответить на ваш вопрос.

Создайте абстракцию, чтобы вашему коду не было никакого дела до представления матрицы. Затем напишите свой код, используя любую реализацию. Тогда профилируйте это.

Если ваша матрица плотная, то "вектор векторов" вряд ли будет быстрее, чем один большой блок памяти, и может быть медленнее. (Погоня за двумя указателями для произвольного доступа + худшее месторасположение.)

Если ваши матрицы большие и разреженные, правильный ответ на ваш вопрос, вероятно, «ни один».

Итак, создайте абстрактный интерфейс, закодируйте что-нибудь и профилируйте его. (И, как говорит @Mark, существует множество сторонних библиотек, которые вы, вероятно, должны рассмотреть.)

2 голосов
/ 21 июня 2011

Рассматривали ли вы использование готового матричного представления, такого как повышение, вместо изобретения колеса?

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

0 голосов
/ 21 июня 2011

Если вы храните все в одном векторе, итератор пересекает всю матрицу. Если вы используете вектор векторов, итератор будет проходить только одно измерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...