计算实现给定置换矩阵的一系列行交换?

计算科学 线性代数
2021-12-21 05:33:28

这个问题旨在清理内部稀疏直接求解器的实现细节。它使用 METIS 将重新排序为以减少填充。反解例程中,求解器需要在输入时对应用相同的置换矩阵,然后在返回之前撤消目前这是通过临时向量与置换复制上执行原位反求解,然后复制APAPTLx=bLTx=bbxtbtLLTtt排列回(实际上是彼此的别名,但仍然存在 -temporary)xbxt

我想重做此操作以完全就地,消除临时我认为为了这样做,我需要采用 METIS 计算的置换向量并确定产生它的行交换序列。(这是正确的吗?)我正在考虑实现的算法基本上就像带有自定义比较器的自定义快速排序。(比较器将被定制,以便将正确排序到 METIS 的答案中,快速排序将被定制为记录原子交换操作,以便以后可以应用它们就地到)。t{0,1,2,3,,N}b

我的问题是 - 这是完成我想做的事情的最佳方式吗?我已经可以看出答案(实现的一系列行交换)是非唯一的,因为任何排序算法都会产生答案,但可能会执行完全不同的交换。例如,bubblesort 与 quicksort 显然会产生不同的序列 - 一个使用交换,另一个使用,但两者都可以工作。我认为找到交换的最小数量会更好地提高性能,因此偏向于排序算法,但是是否有不同的方法可以保证找到最小长度的交换序列?我认为会有一些方法可以找到一个PO(n2)O(nlogn)O(nlogn)O(n)长度。

1个回答

您不能通过在第个步骤中将第个组件与包含第个目标组件的组件交换来简单地做到这一点吗?iii