|
| template<typename MatroidType , typename MatrixType > |
| void | find_column_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| void | find_row_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| separation | find_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| void | pivot_top_right (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| void | pivot_bottom_left (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| void | normalize_3_4_separation (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, rank_distribution ranks, matroid_element_set &extra_elements) |
| |
| template<typename MatroidType , typename MatrixType > |
| bool | extend_to_3_4_separation (MatroidType &matroid, MatrixType &matrix, matrix_permuted< const integer_matrix > &worker_matrix, size_pair_t top_left_size, size_pair_t bottom_right_size, separation &separation, matroid_element_set &extra_elements) |
| |
| template<typename MappingValue > |
| size_pair_t | apply_mapping (permutation &permutation, std::vector< MappingValue > &mapping) |
| |
| template<typename NestedMinorSequence > |
| size_t | find_first_7_element_minor (const NestedMinorSequence &nested_minors, size_pair_t &minor_size) |
| |
| template<typename MatroidType , typename MatrixType , typename MappingValue > |
| bool | enumerate_extension (MatroidType &matroid, MatrixType &matrix, matrix_permuted< const integer_matrix > &worker_matrix, std::vector< MappingValue > &row_mapping, std::vector< MappingValue > &column_mapping, size_pair_t minor_size, size_t ext_height, size_t ext_width, separation &separation, matroid_element_set &extra_elements, unsigned long long &enumeration, unsigned long long &next_enumeration, unsigned long long max_enumerations, unsigned int &next_percent, logger &log, size_t cut) |
| |
| template<typename MatrixType , typename VectorType > |
| void | copy_partial_row (const MatrixType &matrix, VectorType &vector, size_t row, size_t first_column, size_t beyond_column) |
| |
| template<typename MatrixType , typename VectorType > |
| void | copy_partial_column (const MatrixType &matrix, VectorType &vector, size_t column, size_t first_row, size_t beyond_row) |
| |
| matroid_element_set | find_smallest_irregular_minor (const decomposed_matroid *decomposition, bool collect_extra_elements=true) |
| |
| template<typename InputIterator , typename OutputIterator1 , typename OutputIterator2 > |
| std::pair< OutputIterator1, OutputIterator2 > | split_elements (InputIterator first, InputIterator beyond, OutputIterator1 rows, OutputIterator2 columns) |
| |
| template<typename MatrixType > |
| void | create_indirect_matroid (const MatrixType &input_matrix, const matroid_element_set &row_elements, const matroid_element_set &column_elements, integer_matroid &sub_matroid, submatrix_indices &sub_indices) |
| |
template<typename MatroidType , typename MatrixType , typename MappingValue >
| bool tu::detail::enumerate_extension |
( |
MatroidType & |
matroid, |
|
|
MatrixType & |
matrix, |
|
|
matrix_permuted< const integer_matrix > & |
worker_matrix, |
|
|
std::vector< MappingValue > & |
row_mapping, |
|
|
std::vector< MappingValue > & |
column_mapping, |
|
|
size_pair_t |
minor_size, |
|
|
size_t |
ext_height, |
|
|
size_t |
ext_width, |
|
|
separation & |
separation, |
|
|
matroid_element_set & |
extra_elements, |
|
|
unsigned long long & |
enumeration, |
|
|
unsigned long long & |
next_enumeration, |
|
|
unsigned long long |
max_enumerations, |
|
|
unsigned int & |
next_percent, |
|
|
logger & |
log, |
|
|
size_t |
cut |
|
) |
| |
|
inline |
Enumerates all necessary partitions for a fixed extension inside a sequence of nested minors. It works on a separate matrix with mapping vectors. Those contain either entries +1 and -1 to show to which part of the minor-separation a row or column belongs and a 0 to designate a row or column to be unspecified.
- Parameters
-
| matroid | The given matroid |
| matrix | Representation matrix for the given matroid |
| worker_matrix | Matrix to work on with the right permutation |
| row_mapping | Mapping vector for rows |
| column_mapping | Mapping vector for columns |
| minor_size | Size of the current minor in the sequence of nested minors |
| ext_height | Height of the extension |
| ext_width | Width of the extension |
| separation | Separation to be returned |
| extra_elements | Set of matroid-elements to be filled with pivot-elements |
| enumeration | Iteration step in the whole enumeration. |
| next_enumeration | Next enumeration |
| max_enumerations | Total number of enumerations |
| next_percent | Next percent value for a percent-jump |
| log | Logger |
| cut | Length of the line to cut off the progress-part |
- Returns
- true if and only if the partitioning algorithm was successful
Type and index of enumerated element in smaller minor
Set all mappings to 1 at first
Set minor enumerated to -1
Iterator over extension bits and set row/column mapping to -1 if the bit is set
Transform the mappings into row/column permutations.
template<typename MatroidType , typename MatrixType >
Finds paths in the top-left BFS graph between two bottom-left independet columns, shortens them and swaps rows and columns such that the columns and the connecting row are near the split point.
- Parameters
-
| matroid | Given matroid |
| matrix | A representation matrix for the matroid |
| split | Split of a given (3|4)-separation. |
Set up matrix for BFS
Try to find path from type 1 to the 2 and 3. If no path is found, try between 2 and 3.
Find reached node
Find reached node
We now have a path between two columns of different type and apply the path shortening technique to make it short.
Swap everything to be near split point.
template<typename MatroidType , typename MatrixType >
Finds paths in the bottom-right BFS graph between two bottom-left independet rows, shortens them and swaps rows and columns such that the rows and the connecting column are near the split point.
- Parameters
-
| matroid | Given matroid |
| matrix | A representation matrix for the matroid |
| split | Split of a given (3|4)-separation. |
Set up matrix for BFS
Try to find path from type 1 to the 2 and 3. If no path is found, try between 2 and 3.
Find reached node
Find reached node
We now have a path between two columns of different type and apply the path shortening technique to make it short.