使用置换矩阵交换行的优点是什么?为什么要创建置换矩阵并应用矩阵乘法,这比使用for循环交换行更容易和更有效吗?
使用置换矩阵交换行的优点是什么?为什么要创建置换矩阵并应用矩阵乘法,这比使用for循环交换行更容易和更有效吗?
置换矩阵是一种有用的数学抽象,因为它们允许使用矩阵代数的常规规则进行分析,而无需引入另一种类型的操作。
在软件中,好的实现不会将置换矩阵作为完整矩阵存储,而是直接存储置换数组并应用它(无需进行完整的矩阵乘法)。
根据涉及的矩阵大小和操作和访问模式,可能更便宜的方法是根本不在内存中应用置换,而只是将其用作额外的间接寻址。因此,当您请求(P * M)(i,j)
时,其中P
是置换矩阵,M
是您正在排列的其他矩阵,数据根本不需要重新排列,而是元素访问操作将在访问元素时查找置换后的行。
我脑海中首先想到的是“空间局部性”问题。缓存技术假设如果访问了一个内存位置,那么很可能会访问该内存附近的位置。在某些编程语言中,行中的元素是相邻的,而在其他语言中,列中的元素是相邻的,这取决于实现方式。我猜置换矩阵是为了解决这个问题而设计的,因为矩阵乘法的优化是算法学术界主要致力于改进的问题之一。简单的循环结构将无法利用缓存技术来提高性能。