CMR  1.3.0
matroid_reorder.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "matrix_reorder.hpp"
4 
5 namespace tu
6 {
7 
17  template <typename MatroidType, typename MatrixType>
18  inline void matroid_apply_row_permutation(MatroidType& matroid, MatrixType& matrix, const permutation& perm)
19  {
20  permutation p = perm;
21  for (size_t row = 0; row < matroid.size1(); ++row)
22  {
23  size_t target_row = p(row);
24 
25  matroid_permute1(matroid, matrix, row, target_row);
26  p.rswap(row, target_row);
27  }
28  }
29 
39  template <typename MatroidType, typename MatrixType>
40  inline void matroid_apply_column_permutation(MatroidType& matroid, MatrixType& matrix, const permutation& perm)
41  {
42  matroid_transposed <MatroidType> transposed_matroid(matroid);
43  matrix_transposed <MatrixType> transposed_matrix(matrix);
44  matroid_apply_row_permutation(transposed_matroid, transposed_matrix, perm);
45  }
46 
59  template <typename MatroidType, typename MatrixType, typename ElementLess>
60  inline void matroid_reorder_rows(MatroidType& matroid, MatrixType& matrix, size_t row_first, size_t row_beyond, size_t column_first,
61  size_t column_beyond, ElementLess element_less)
62  {
63  permutation perm;
64  matrix_reorder_rows(matrix, row_first, row_beyond, column_first, column_beyond, element_less, perm);
66  }
67 
80  template <typename MatroidType, typename MatrixType, typename ElementLess>
81  inline void matroid_reorder_columns(MatroidType& matroid, MatrixType& matrix, size_t row_first, size_t row_beyond, size_t column_first,
82  size_t column_beyond, ElementLess element_less)
83  {
84  matroid_transposed <MatroidType> transposed_matroid(matroid);
85  matrix_transposed <MatrixType> transposed_matrix(matrix);
86  matroid_reorder_rows(transposed_matroid, transposed_matrix, column_first, column_beyond, row_first, row_beyond, element_less);
87  }
88 
89 } /* namespace tu */
Definition: matrix_transposed.hpp:47
Definition: matroid_transposed.hpp:14
Definition: matroid.hpp:22
size_t size1() const
Definition: matroid.hpp:77
Definition: permutations.hpp:44
void rswap(value_type a, value_type b)
Definition: permutations.hpp:199
Definition: algorithm.hpp:14
void matroid_reorder_columns(MatroidType &matroid, MatrixType &matrix, size_t row_first, size_t row_beyond, size_t column_first, size_t column_beyond, ElementLess element_less)
Definition: matroid_reorder.hpp:81
void matroid_apply_row_permutation(MatroidType &matroid, MatrixType &matrix, const permutation &perm)
Definition: matroid_reorder.hpp:18
void matroid_permute1(matroid< NameType > &matroid, size_t index1, size_t index2)
Definition: matroid.hpp:162
void matrix_reorder_rows(const MatrixType &matrix, size_t row_first, size_t row_beyond, size_t column_first, size_t column_beyond, ElementLess element_less, permutation &result_permutation)
Definition: matrix_reorder.hpp:110
void matroid_apply_column_permutation(MatroidType &matroid, MatrixType &matrix, const permutation &perm)
Definition: matroid_reorder.hpp:40
void matroid_reorder_rows(MatroidType &matroid, MatrixType &matrix, size_t row_first, size_t row_beyond, size_t column_first, size_t column_beyond, ElementLess element_less)
Definition: matroid_reorder.hpp:60