Locus No Pilotus
Project of four first grade MIPT DAFE/RSE students (for engineering practical work in the second semester) in Qt C++
Loading...
Searching...
No Matches
adjacency_matrix.h
Go to the documentation of this file.
1#pragma once
2
3// std libs:
4#include <vector>
5
6// our code libs:
7#include "lib/infinity.h"
8#include "lib/point.h"
9
10namespace math {
11
12using lib::precision;
13
14using lib::inf;
15
16/// @brief Структура для хранения двух минимумов строки/столбца
17struct Minimums {
18 double first;
19 double second;
20};
21
22/// @brief Матрица смежности для алгоритма Литтла
24 public:
25 /**
26 * @brief Создает новый экземпляр AdjacencyMatrix с
27 * добавлением строки и столбца номеров точек
28 * @param nums: матрица смежности графа
29 * @return AdjacencyMatrix: экземпляр AdjacencyMatrix по данной матрице
30 * смежности
31 */
33 const std::vector<std::vector<double>>& nums);
34
35 enum Mins { Rows, Columns };
36
37 // Копирующий конструктор для матрицы
38 AdjacencyMatrix(const AdjacencyMatrix& other) = default;
39
40 // Копирующее присваивание для матрицы
41 AdjacencyMatrix& operator=(const AdjacencyMatrix& other) = default;
42
43 /**
44 * @brief Меняет элемент матрицы
45 * @param i: номер строки элемента
46 * @param j: номер столбца элемента
47 * @param num: новое значение элемента
48 */
49 void SetMatrixValue(std::size_t i, std::size_t j, double num);
50
51 // Возвращает размер матрицы
52 std::size_t GetSize() const { return size_; }
53
54 // Возвращает элемент матрицы
55 double GetMatrixValue(std::size_t i, std::size_t j) const {
56 return matrix_[i][j];
57 }
58
59 // Возвращает оценку расстояния
60 double GetBottomLineEvaluation() const { return evaluation_; }
61
62 // Возвращает выбранное на данной итерации
63 // ребро для последующего рассмотрения
64 std::pair<std::size_t, std::size_t> GetSelectedEdge() const {
65 return selected_edge_;
66 }
67
68 // Возвращает выбранное на данной итерации
69 // значение матрицы для последующего рассмотрения
70 std::pair<std::size_t, std::size_t> GetSelectedValue() const {
71 return selected_value_;
72 }
73
74 /**
75 * @brief Создает минор матрицы
76 * @param i: номер удаляемой строки
77 * @param j: номер удаляемого столбца
78 * @return AdjacencyMatrix: минор матрицы
79 */
80 AdjacencyMatrix Minor(std::size_t i, std::size_t j);
81
82 /**
83 * @brief Создает редуцированную матрицы
84 * @return AdjacencyMatrix: редуцированная матрица
85 */
87
88 // Считает данные для матрицы
89 void CalculateData();
90
91 /**
92 * @brief Расширяет матрицу для нескольких коммивояжеров
93 * @param num_of_flyers: количество коммивояжеров
94 */
95 void ExtendTo(std::size_t num_of_flyers);
96
97 private:
98 // Размер матрицы
99 std::size_t size_;
100
101 // Матрица
102 std::vector<std::vector<double>> matrix_;
103
104 // Редуцированная версия матрицы
105 std::vector<std::vector<double>> reducted_matrix_;
106
107 // Минимальный элемент в каждой строке и в каждом столбце
108 std::vector<double> min_numbers_;
109
110 // Оценка пути для данной матрицы
111 double evaluation_ = 0;
112
113 // Ребро, которое выбирается для следующего шага в алгоритме Литтла
114 std::pair<std::size_t, std::size_t> selected_edge_;
115
116 // Знач. матрицы, которое выбирается для следующего шага в алгоритме Литтла
117 std::pair<std::size_t, std::size_t> selected_value_;
118
119 /**
120 * @brief Создает новый экземпляр AdjacencyMatrix
121 * @param nums: матрица смежности графа
122 * @return AdjacencyMatrix: экземпляр AdjacencyMatrix по данной матрице
123 * смежности
124 */
125 AdjacencyMatrix(const std::vector<std::vector<double>>& nums);
126
127 /**
128 * @brief Находит 2 минимума в строке или столбце
129 * @param type: тип поиска минимума(в строке или в столбце)
130 * @param index: номер строки/столбца
131 * @return Minimums: 2 найденных минимума
132 */
133 Minimums FindTwoMinimums(Mins type, std::size_t index) const;
134
135 /**
136 * @brief Находит нижнюю оценку для матрицы
137 * @return double: нижняя оценку матрицы
138 */
139 double BottomLineEvaluation();
140
141 /**
142 * @brief Находит позицию нуля с наибольшей степенью
143 * @return std::pair<std::size_t, std::size_t>: позицию нуля с наибольшей
144 * степенью
145 */
146 std::pair<std::size_t, std::size_t> HighestPowerOfZero() const;
147};
148
149} // namespace math
Матрица смежности для алгоритма Литтла
Definition adjacency_matrix.h:23
AdjacencyMatrix & operator=(const AdjacencyMatrix &other)=default
Minimums FindTwoMinimums(Mins type, std::size_t index) const
Находит 2 минимума в строке или столбце
Definition adjacency_matrix.cpp:49
static AdjacencyMatrix WithExtraRowCol(const std::vector< std::vector< double > > &nums)
Создает новый экземпляр AdjacencyMatrix с добавлением строки и столбца номеров точек
Definition adjacency_matrix.cpp:9
std::size_t size_
Definition adjacency_matrix.h:99
std::pair< std::size_t, std::size_t > GetSelectedValue() const
Definition adjacency_matrix.h:70
std::pair< std::size_t, std::size_t > selected_edge_
Definition adjacency_matrix.h:114
std::vector< std::vector< double > > matrix_
Definition adjacency_matrix.h:102
double evaluation_
Definition adjacency_matrix.h:111
double GetMatrixValue(std::size_t i, std::size_t j) const
Definition adjacency_matrix.h:55
std::size_t GetSize() const
Definition adjacency_matrix.h:52
std::vector< double > min_numbers_
Definition adjacency_matrix.h:108
std::pair< std::size_t, std::size_t > selected_value_
Definition adjacency_matrix.h:117
AdjacencyMatrix Reducted()
Создает редуцированную матрицы
Definition adjacency_matrix.cpp:40
void SetMatrixValue(std::size_t i, std::size_t j, double num)
Меняет элемент матрицы
Definition adjacency_matrix.cpp:23
std::vector< std::vector< double > > reducted_matrix_
Definition adjacency_matrix.h:105
double BottomLineEvaluation()
Находит нижнюю оценку для матрицы
Definition adjacency_matrix.cpp:91
AdjacencyMatrix Minor(std::size_t i, std::size_t j)
Создает минор матрицы
Definition adjacency_matrix.cpp:28
std::pair< std::size_t, std::size_t > HighestPowerOfZero() const
Находит позицию нуля с наибольшей степенью
Definition adjacency_matrix.cpp:123
AdjacencyMatrix(const AdjacencyMatrix &other)=default
double GetBottomLineEvaluation() const
Definition adjacency_matrix.h:60
std::pair< std::size_t, std::size_t > GetSelectedEdge() const
Definition adjacency_matrix.h:64
Mins
Definition adjacency_matrix.h:35
@ Rows
Definition adjacency_matrix.h:35
@ Columns
Definition adjacency_matrix.h:35
void CalculateData()
Definition adjacency_matrix.cpp:141
void ExtendTo(std::size_t num_of_flyers)
Расширяет матрицу для нескольких коммивояжеров
Definition adjacency_matrix.cpp:148
constexpr double inf
Infinity.
Definition infinity.h:9
constexpr double precision
Definition point.h:11
Definition adjacency_matrix.cpp:7
Структура для хранения двух минимумов строки/столбца
Definition adjacency_matrix.h:17
double first
Definition adjacency_matrix.h:18
double second
Definition adjacency_matrix.h:19