Почему матрицы перестановки используются для обмена рядами массива?
-
26-10-2019 - |
Вопрос
Каковы преимущества использования матрицы перестановки для обмена рядами? Почему можно создать матрицу перестановки, а затем применить умножение матрицы, проще и эффективнее, чем просто заменять строки на петлю?
Решение
Матрицы перестановки являются полезной математической абстракцией, потому что они позволяют анализировать, используя нормальные правила матричной алгебры, без необходимости ввести другой тип операции.
В программном обеспечении хорошие реализации не хранят матрицу перестановки в качестве полной матрицы, они хранят массив перестановки и применяют его напрямую (без полного умножения матрицы).
В зависимости от размеров матриц и задействованных операций и моделей доступа, может быть дешевле не применять перестановку к данным в памяти вообще, а просто для использования в качестве дополнительного косвенного направления. Итак, когда вы просите (P * M)(i,j)
, куда P
является матрицей перестановки и M
Это какая-то другая матрица, которую вы перестаете, данные не должны быть повторно оранже участвовать, а операция доступа к элементам будет просматривать перестройную строку при получении доступа к элементу.
Другие советы
Первое, что приходит в мой разум, - это проблема, называемая «пространственной местностью». Технологии кэширования предполагают, что если доступ к расположению памяти, вероятно, доступно доступ к близлежащим местам памяти. На некоторых языках программирования элементы в рядах являются соседями, тогда как элементы в колонках являются соседями в других. Это зависит от реализации. Я полагаю, что матрицы перестановки предназначены для решения этой проблемы, поскольку оптимизация умножения матрицы является одной из проблем, которые алгоритмы Academia в основном работают над улучшением. Простая структура петли не сможет использовать кеш -технологии для повышения производительности.