Skip to content

Commit 0a027e7

Browse files
committed
Better graphs in graph theory chapter
1 parent 4fa841c commit 0a027e7

File tree

8 files changed

+143
-105
lines changed

8 files changed

+143
-105
lines changed

tex/GraphTheoryIntro.tex

Lines changed: 13 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,7 @@ \section{Основные определения}
1919
Пусть дан граф $$\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.$$
2020
Графическое представление графа $\mathcal{G}_1$:
2121
\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}
3423
\end{center}
3524
\end{example}
3625

@@ -46,13 +35,8 @@ \section{Основные определения}
4635
\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).$$
4736

4837
\begin{center}
49-
\begin{tikzpicture}[on grid, auto]
50-
\node[state] (v_1) {$v_1$};
51-
\node[state] (v_n) [right=2.0cm of v_1] {$v_n$};
52-
\path[->]
53-
(v_1) edge [out=45] node {$\pi$} (v_n);
54-
\end{tikzpicture}
55-
\end{center}
38+
\input{figures/graph/path.tex}
39+
\end{center}
5640
\end{definition}
5741

5842
\begin{example}[Пример путей графа]
@@ -82,24 +66,14 @@ \section{Основные определения}
8266

8367
Также можно встретить матрицы смежности, в ячейках которых всё же хранится некоторая информация, однако, в единственном экземпляре. То есть запрещены параллельные рёбра.
8468
Такой подход часто можно встретить в задачах о кратчайших путях: в этом случае в ячейке хранится расстояние между двумя вершинами.
85-
При этом, так как в качестве весов часто рассматривают произвольные (в том числе отрицательные) числа, то в задачах о кратчайших путях отдельно вводят значение ``бесконечность'' для обозначения ситуации, когда между двумя вершинами нет пути или его длина ещё не известна.
69+
При этом, так как в качестве весов часто рассматривают произвольные (в том числе отрицательные) числа, то в задачах о кратчайших путях отдельно вводят значение ``бесконечность'' для обозначения ситуации, когда между двумя вершинами нет пути или его длина ещё не известна.
8670
Всё это приводит к тому, что \textit{матрица смежности} --- это обобщённое понятие, нежели конкретный специальный тип матриц.
8771
Данная конструкция даёт общее представление о том, как в матричном виде ханить различную информацию о смежноти вершин в графе.
8872

8973
\begin{example}[Пример матрицы смежности неориентированного графа]
9074
Неориентированный граф:
9175
\begin{center}
92-
\begin{tikzpicture}[on grid,auto]
93-
\node[state] (q_0) {$0$};
94-
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
95-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
96-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
97-
\path[-]
98-
(q_0) edge node {} (q_1)
99-
(q_1) edge node {} (q_2)
100-
(q_2) edge node {} (q_0)
101-
(q_2) edge node {} (q_3);
102-
\end{tikzpicture}
76+
\input{figures/graph/graph1.tex}
10377
\end{center}
10478

10579
И его матрица смежности:
@@ -116,18 +90,7 @@ \section{Основные определения}
11690
\begin{example}[Пример матрицы смежности ориентированного графа]
11791
Ориентированный граф:
11892
\begin{center}
119-
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
120-
\node[state] (q_0) {$0$};
121-
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
122-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
123-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
124-
\path[->]
125-
(q_0) edge node {} (q_1)
126-
(q_1) edge node {} (q_2)
127-
(q_2) edge node {} (q_0)
128-
(q_2) edge[bend left, above] node {} (q_3)
129-
(q_3) edge[bend left, below] node {} (q_2);
130-
\end{tikzpicture}
93+
\input{figures/graph/graph2.tex}
13194
\end{center}
13295

13396
И его матрица смежности:
@@ -144,19 +107,7 @@ \section{Основные определения}
144107
\begin{example}[Пример матрицы смежности помеченного графа]
145108
Помеченный граф:
146109
\begin{center}
147-
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
148-
\node[state] (q_0) {$0$};
149-
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
150-
\node[state] (q_2) [right = 2cm of q_0] {$2$};
151-
\node[state] (q_3) [right = 2cm of q_2] {$3$};
152-
\path[->]
153-
(q_0) edge node {a} (q_1)
154-
(q_1) edge node {a} (q_2)
155-
(q_2) edge node {a} (q_0)
156-
(q_2) edge[bend left = 20] node {a} (q_3)
157-
(q_2) edge[bend left = 60] node {b} (q_3)
158-
(q_3) edge[bend left, below] node {b} (q_2);
159-
\end{tikzpicture}
110+
\input{figures/graph/graph3.tex}
160111
\end{center}
161112

162113
И его матрица смежности:
@@ -173,18 +124,7 @@ \section{Основные определения}
173124
\begin{example}[Пример матрицы смежности взвешенного графа]
174125
Взвешенный граф для задачи о кратчайших путях:
175126
\begin{center}
176-
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
177-
\node[state] (q_0) {$0$};
178-
\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}
188128
\end{center}
189129

190130
И его матрица смежности (для задачи о кратчайших путях):
@@ -225,7 +165,7 @@ \section{Задачи поиска путей}
225165
\item между двумя множествами вершин.
226166
\end{itemize}
227167

228-
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
168+
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
229169
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя разные стартоыве и финальные множетсва.
230170

231171
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины.
@@ -272,44 +212,12 @@ \section{APSP и транзитивное замыкание графа}
272212
\begin{example}
273213
Пусть дан следующий граф:
274214
\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}
287216
\end{center}
288217

289218
Построим его транзитивное замыкание:
290219
\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}
313221
\end{center}
314222
\begin{remark}
315223
На самом деле, петли у вершины 3 может и не быть, т.к. это зависит от определения.
@@ -423,9 +331,9 @@ \section{Умножение матриц с субкубической слож
423331
% \item Реализуйте алгоритм произведения матриц над произвольным полукольцом. Используйте результат решения предыдущей задачи.
424332
% \item Используя результаты предыдущих задач, реализуйте алгоритм построения транзитивного замыкания через произведение матриц.
425333
% \item Используя результаты предыдущих задач, реализуйте алгоритм решения задачи APSP для ориентированного через произведение матриц.
426-
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу построения транзитивного замыкания графа.
334+
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу построения транзитивного замыкания графа.
427335
% \item Используя существующую библиотеку линейной алгебры для CPU, решите задачу APSP для ориентированного графа.
428-
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу построения транзитивного замыкания графа.
336+
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу построения транзитивного замыкания графа.
429337
% \item Используя существующую библиотеку линейной алгебры для GPGPU, решите задачу APSP для ориентированного графа.
430338
% \item Сравните произволительность решений предыдущих задач
431339
%\end{enumerate}

tex/figures/graph/graph0.tex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[->]
14+
(q_0) edge[left] node {a} (q_1)
15+
(q_1) edge[above] node {a} (q_2)
16+
(q_2) edge[below] node {a} (q_0)
17+
(q_2) edge[bend left, above] node {b} (q_3)
18+
(q_3) edge[bend left, below] node {b} (q_2);
19+
\end{tikzpicture}

tex/figures/graph/graph1.tex

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[]
14+
(q_0) edge (q_1)
15+
(q_1) edge (q_2)
16+
(q_2) edge (q_0)
17+
(q_2) edge (q_3);
18+
\end{tikzpicture}

tex/figures/graph/graph2.tex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[->]
14+
(q_0) edge (q_1)
15+
(q_1) edge (q_2)
16+
(q_2) edge (q_0)
17+
(q_2) edge [bend left] (q_3)
18+
(q_3) edge [bend left] (q_2);
19+
\end{tikzpicture}

tex/figures/graph/graph3.tex

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[->]
14+
(q_0) edge[left] node {a} (q_1)
15+
(q_1) edge[above] node {a} (q_2)
16+
(q_2) edge[below] node {a} (q_0)
17+
(q_2) edge[bend left = 20, above] node {a} (q_3)
18+
(q_2) edge[bend left = 60, above] node {b} (q_3)
19+
(q_3) edge[bend left, below] node {b} (q_2);
20+
\end{tikzpicture}

tex/figures/graph/graph4.tex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[->]
14+
(q_0) edge[left] node {$-1.4$} (q_1)
15+
(q_1) edge[above] node[yshift=5pt] {$2.2$} (q_2)
16+
(q_2) edge[below] node[yshift=-5pt] {$0.5$} (q_0)
17+
(q_2) edge[bend left, above] node {$1.85$} (q_3)
18+
(q_3) edge[bend left, below] node {$-0.76$} (q_2);
19+
\end{tikzpicture}

tex/figures/graph/graph5.tex

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
\begin{tikzpicture}[]
2+
% Apex angle 60 degrees
3+
\node[isosceles triangle,
4+
isosceles triangle apex angle=60,
5+
draw=none,fill=none,
6+
minimum size=2cm] (T60) at (3,0){};
7+
8+
9+
\node[state] (q_0) at (T60.right corner) {$0$};
10+
\node[state] (q_1) at (T60.left corner) {$1$};
11+
\node[state] (q_2) at (T60.apex) {$2$};
12+
\node[state] (q_3) [right=1.5cm of q_2] {$3$};
13+
\path[->]
14+
(q_0) edge[loop below] node {} ()
15+
edge node {} (q_1)
16+
edge[bend right] node {} (q_2)
17+
edge[bend right = 60] node {} (q_3)
18+
(q_1) edge[loop above] node {} ()
19+
edge[bend right] node {} (q_0)
20+
edge node {} (q_2)
21+
edge[bend left = 50, above] node {} (q_3)
22+
(q_2) edge[loop below] node {} ()
23+
edge[bend right] node {} (q_1)
24+
edge node {} (q_0)
25+
edge[bend left, above] node {} (q_3)
26+
(q_3) edge[loop above] node {} ()
27+
edge[bend left, below] node {} (q_2)
28+
;
29+
\end{tikzpicture}

tex/figures/graph/path.tex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
\begin{tikzpicture}[on grid, auto]
2+
\node[state] (v_1) {$v_1$};
3+
\node[state] (v_n) [right=2.0cm of v_1] {$v_n$};
4+
\path[->]
5+
(v_1) edge [out=45] node {$\pi$} (v_n);
6+
\end{tikzpicture}

0 commit comments

Comments
 (0)