You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Пусть дан граф $$\mathcal{G}_1 = \langle\{0,1,2,3\}, \{(0,a,1), (1,a,2), (2,a,0), (2,b,3), (3,b,2)\}, \{a,b\}\rangle.$$
20
20
Графическое представление графа $\mathcal{G}_1$:
21
21
\begin{center}
22
-
\begin{tikzpicture}[on grid, auto]
23
-
\node[state] (q_0) {$0$};
24
-
\node[state] (q_1) [above right=1.4cm and 1.0cm of q_0] {$1$};
25
-
\node[state] (q_2) [right=2.0cm of q_0] {$2$};
26
-
\node[state] (q_3) [right=2.0cm of q_2] {$3$};
27
-
\path[->]
28
-
(q_0) edge node {a} (q_1)
29
-
(q_1) edge node {a} (q_2)
30
-
(q_2) edge node {a} (q_0)
31
-
(q_2) edge[bend left, above] node {b} (q_3)
32
-
(q_3) edge[bend left, below] node {b} (q_2);
33
-
\end{tikzpicture}
22
+
\input{figures/graph/graph0}
34
23
\end{center}
35
24
\end{example}
36
25
@@ -46,13 +35,8 @@ \section{Основные определения}
46
35
\textit{Путём} $\pi$ в графе $\mathcal{G}$ будем называть последовательность рёбер такую, что для любых двух последовательных рёбер $e_1=(u_1,l_1,v_1)$ и $e_2=(u_2,l_2,v_2)$ в этой последовательности, конечная вершина первого ребра является начальной вершиной второго, то есть $v_1 = u_2$. Будем обозначать путь из вершины $v_0$ в вершину $v_n$ как $$v_0\pi v_n = e_0,e_1, \dots, e_{n-1} = (v_0, l_0, v_1),(v_1,l_1,v_2),\dots,(v_{n-1},l_n,v_n).$$
Также можно встретить матрицы смежности, в ячейках которых всё же хранится некоторая информация, однако, в единственном экземпляре. То есть запрещены параллельные рёбра.
84
68
Такой подход часто можно встретить в задачах о кратчайших путях: в этом случае в ячейке хранится расстояние между двумя вершинами.
85
-
При этом, так как в качестве весов часто рассматривают произвольные (в том числе отрицательные) числа, то в задачах о кратчайших путях отдельно вводят значение ``бесконечность'' для обозначения ситуации, когда между двумя вершинами нет пути или его длина ещё не известна.
69
+
При этом, так как в качестве весов часто рассматривают произвольные (в том числе отрицательные) числа, то в задачах о кратчайших путях отдельно вводят значение ``бесконечность'' для обозначения ситуации, когда между двумя вершинами нет пути или его длина ещё не известна.
86
70
Всё это приводит к тому, что \textit{матрица смежности} --- это обобщённое понятие, нежели конкретный специальный тип матриц.
87
71
Данная конструкция даёт общее представление о том, как в матричном виде ханить различную информацию о смежноти вершин в графе.
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
179
-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
180
-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
181
-
\path[->]
182
-
(q_0) edge node {-1.4} (q_1)
183
-
(q_1) edge node {2.2} (q_2)
184
-
(q_2) edge node {0.5} (q_0)
185
-
(q_2) edge[bend left, above] node {1.85} (q_3)
186
-
(q_3) edge[bend left, below] node {-0.76} (q_2);
187
-
\end{tikzpicture}
127
+
\input{figures/graph/graph4.tex}
188
128
\end{center}
189
129
190
130
И его матрица смежности (для задачи о кратчайших путях):
@@ -225,7 +165,7 @@ \section{Задачи поиска путей}
225
165
\item между двумя множествами вершин.
226
166
\end{itemize}
227
167
228
-
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
168
+
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
229
169
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя разные стартоыве и финальные множетсва.
230
170
231
171
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины.
@@ -272,44 +212,12 @@ \section{APSP и транзитивное замыкание графа}
272
212
\begin{example}
273
213
Пусть дан следующий граф:
274
214
\begin{center}
275
-
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
276
-
\node[state] (q_0) {$0$};
277
-
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
278
-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
279
-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
280
-
\path[->]
281
-
(q_0) edge node {} (q_1)
282
-
(q_1) edge node {} (q_2)
283
-
(q_2) edge node {} (q_0)
284
-
(q_2) edge[bend left, above] node {} (q_3)
285
-
(q_3) edge[bend left, below] node {} (q_2);
286
-
\end{tikzpicture}
215
+
\input{figures/graph/graph2.tex}
287
216
\end{center}
288
217
289
218
Построим его транзитивное замыкание:
290
219
\begin{center}
291
-
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
292
-
\node[state] (q_0) {$0$};
293
-
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
294
-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
295
-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
296
-
\path[->]
297
-
(q_0) edge[loop below] node {} ()
298
-
(q_1) edge[loop above] node {} ()
299
-
(q_2) edge[loop below] node {} ()
300
-
(q_3) edge[loop below] node {} ()
301
-
302
-
(q_0) edge node {} (q_1)
303
-
(q_1) edge[bend right] node {} (q_0)
304
-
(q_1) edge node {} (q_2)
305
-
(q_2) edge[bend right] node {} (q_1)
306
-
(q_2) edge node {} (q_0)
307
-
(q_0) edge[bend right] node {} (q_2)
308
-
(q_2) edge[bend left, above] node {} (q_3)
309
-
(q_3) edge[bend left, below] node {} (q_2)
310
-
(q_0) edge[bend right = 60] node {} (q_3)
311
-
(q_1) edge[bend left, above] node {} (q_3);
312
-
\end{tikzpicture}
220
+
\input{figures/graph/graph5.tex}
313
221
\end{center}
314
222
\begin{remark}
315
223
На самом деле, петли у вершины 3 может и не быть, т.к. это зависит от определения.
@@ -423,9 +331,9 @@ \section{Умножение матриц с субкубической слож
423
331
% \item Реализуйте алгоритм произведения матриц над произвольным полукольцом. Используйте результат решения предыдущей задачи.
424
332
% \item Используя результаты предыдущих задач, реализуйте алгоритм построения транзитивного замыкания через произведение матриц.
425
333
% \item Используя результаты предыдущих задач, реализуйте алгоритм решения задачи APSP для ориентированного через произведение матриц.
426
-
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу построения транзитивного замыкания графа.
334
+
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу построения транзитивного замыкания графа.
427
335
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу APSP для ориентированного графа.
428
-
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу построения транзитивного замыкания графа.
336
+
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу построения транзитивного замыкания графа.
429
337
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу APSP для ориентированного графа.
430
338
% \item Сравните произволительность решений предыдущих задач
0 commit comments