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
Copy file name to clipboardExpand all lines: tex/GraphTheoryIntro.tex
+44-34Lines changed: 44 additions & 34 deletions
Original file line number
Diff line number
Diff line change
@@ -69,7 +69,7 @@ \section{Основные определения}
69
69
Один из способов задать граф --- это задать его \textit{матрицу смежности}.
70
70
71
71
\begin{definition}
72
-
\textit{Матрица смежности} графа $\mathcal{G}=\langle V,E,L \rangle$ --- это квадратная матрица $M$ размера $n \times n$, где $|V| = n$, построенная над алгебраической структурой$\mathbb{G} = (S,\circ\colon S \times S \to S)$, которая конструируется следующим образом.
72
+
\textit{Матрица смежности} графа $\mathcal{G}=\langle V,E,L \rangle$ --- это квадратная матрица $M$ размера $n \times n$, где $|V| = n$, построенная над коммутативным моноидом$\mathbb{G} = (S,\circ\colon S \times S \to S)$, который конструируется следующим образом.
73
73
74
74
\begin{enumerate}
75
75
\item$L \subseteq S$.
@@ -80,7 +80,7 @@ \section{Основные определения}
80
80
При этом $M[i,j] = \bigcirc_{(i,l,j) \in E}l$, где $\bigcirc_\varnothing = \mathbb{0}$.
81
81
\end{definition}
82
82
83
-
Заметим, что наше определение матрицы смежности отличается от классического, в котором матрица является булевой и отражает лишь факт наличия хотя бы одного ребра и. То есть $M[i,j] = 1\iff\exists e = (i,\_,j) \in E$.
83
+
Заметим, что наше определение матрицы смежности отличается от классического, в котором матрица является булевой и отражает лишь факт наличия хотя бы одного ребра. То есть $M[i,j] = 1\iff\exists e = (i,\_,j) \in E$.
Будем считать, что веса берутся из $\mathbb{R}$, а решаемая задача --- поиск кратчайших путей между вершинами. В таком случае естественно предположить, что для любой вершины $v_i$ существует петля $v_i,0,v_i$, хоть она явно и не изображена. Далее, $\mathbb{G} = ( \mathbb{R}\cup\{\infty\} , \min)$, где $\infty$ --- нейтральный элемент относительно операции $\min$.
162
+
Будем считать, что веса берутся из $\mathbb{R}$, а решаемая задача --- поиск кратчайших путей между вершинами. В таком случае естественно предположить, что для любой вершины $v_i$ существует петля $(v_i,0,v_i)$, хоть она явно и не изображена. Далее, $\mathbb{G} = ( \mathbb{R}\cup\{\infty\} , \min)$, где $\infty$ --- нейтральный элемент относительно операции $\min$.
163
163
164
164
В результате мы получим следующую матрицу смежности:
Специальные понятия, необходимые для изложения конкретного материала, будут даны в соответствующих главах.
175
+
Таким образом, уже можно заметить, что введение моноида как абстракции позволяет достаточно унифицированным образом смотреть на различные графы и их матрицы смежности. Далее мы увидим, что данный путь позволит решать унифицированным образом достаточно широкий круг задач, связанных с анализом путей в графах. Но сперва мы сформулируем различные варианты задачи поиска путей в графе. Это необходимо для формулировки задач, на решение которых мы в конечном итоге нацелены.
176
+
177
+
\section{Задачи поиска путей}
178
+
179
+
Одна из классических задач анализа графов --- это задача поиска путей между вершинами с различными ограничениями.
180
+
181
+
При этом, возможны различные постановки задачи.
182
+
С одной стороны, постановки различаются тем, что именно мы хотим получить в качестве результата. Здесь наиболее частыми являются следующие варианты.
183
+
184
+
\begin{itemize}
185
+
\item Наличие хотя бы одного пути, удовлетворяющего ограничениям, в графе. В данном случае не важно, между какими вершинами существует путь, важно лишь наличие его в графе.
186
+
187
+
\item Наличие пути, удовлетворяющего ограничениям, между некоторыми вершинами: задача достижимости.
188
+
При данной постановке задачи, нас интересует ответ на вопрос достижимости вершины $v_i$ из вершины $v_j$ по пути, удовлетворяющему ограничениям.
189
+
Такая постановка требует лишь проверить существование пути, но не его предоставления в явном виде.
190
+
191
+
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его. При этом часто подразумевается, что возвращается любой путь, являющийся решением, без каких-либо дополнительных ограничений. Хотя, например, в некоторых задачах дополнительное требование простоты или наименьшей длинны выглядит достаточно естественным.
192
+
193
+
\item Поиск всех путей: необходимо предоставить все пути, удовлетворяющие заданным ограничениям.
194
+
\end{itemize}
195
+
196
+
С другой стороны, задачи могут различаться ещё и тем, как фиксируются множества стартовых и конечных вершин.
197
+
Здесь возможны следующие варианты:
198
+
\begin{itemize}
199
+
\item от одной вершины до всех,
200
+
\item между всеми парами вершин,
201
+
\item межу фиксированной парой вершин,
202
+
\item между двумя множествами вершин $V_1$ и $V_2$, что подразумевает решение задачи для всех $(v_i,v_j) \in V_1\times V_2$.
203
+
\end{itemize}
204
+
205
+
Стоит отметить, что последний вариант является самым общим и остальные --- лишь его частные случаи.
206
+
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются.
207
+
208
+
В итоге, перебирая возможные варианты желаемого результата и способы фиксации стартовых и финальных вершин, мы можем сформулировать достаточно большое количество задач. Например, задачу поиска всех путей между двумя заданными вершинами, задачу поиска одного пути от фиксированной стартовой вершины до каждой вершины в графе, или задачу достижимости между всеми парами вершин.
209
+
210
+
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины. Один из естественных способов задавать ограничения --- это формулировать их в терминах той алгебраической структуры, из которой берутся веса рёбер графа.
211
+
212
+
Предположим, что дан граф $\mathcal{G} = \langle V, E, L\rangle$, где $L = \langle S, \oplus, \otimes\rangle$ --- это полукольцо. Тогда можно поставить следующую задачу: выяснить, каково наилучшее значение некоторого свойства $$\{(v_i, v_j, c) \mid\exists v_i \pi v_j, c = \bigoplus_{\forall v_i \pi v_j} \bigotimes_{(u,l,v) \in\pi } l \}$$
213
+
214
+
Ограничение, имеющее важное прикладное значение, --- минимальность длины искомого пути.
215
+
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}. Рассмотрим её более подробно. Тем более, что данная задача в определённом смысле близка к задаче, которая будет основной в данной работе, и из алгоритмов для APSP можно почерпнуть идеи для алгоритмов решения задачи поиска путей с ограничениями в терминах формальных языков.
177
216
178
217
\section{Графы и линейная алгебра}
179
218
@@ -224,36 +263,7 @@ \section{Графы и линейная алгебра}
224
263
225
264
Про Кронекера и произведение графов.
226
265
227
-
\section{Задачи поиска путей}
228
-
229
-
Одна из классических задач анализа графов --- это задача поиска путей между вершинами с различными ограничениями.
230
-
231
-
При этом, возможны различные постановки задачи.
232
-
С одной стороны, по тому, что именно мы хотим получить в качестве результата:
233
-
\begin{itemize}
234
-
\item Наличие хотя бы одного пути, удовлетворяющего ограничениям, в графе. В данном случае не важно, между какими вершинами существует путь, важно лишь наличие его в графе.
235
-
\item Наличие пути, удовлетворяющего ограничениям, между некоторыми вершинами: задача достижимости.
236
-
При данной постановке задачи, нас интересует ответ на вопрос достижимости вершина $v_1$ из вершины $v_2$ по пути, удовлетворяющему ограничениям.
237
-
Такая постановка требует лишь проверить существование пути, но не обязательно его предоставлять в явном виде.
238
-
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его. При этом часто подразумевается, что возвращается любой путь, являющийся решением, без каких-либо дополнительных ограничений. Хотя, например, в некоторых задачах дополнительное требование простоты или наименьшей длинны выглядит достаточно естественным.
239
-
\item Поиск всех путей: необходимо предоставить все пути, удовлетворяющие заданным ограничениям.
240
-
\end{itemize}
241
-
242
-
С другой стороны, задачи различаются ещё и по тому, как фиксируются множества стартовых и конечных вершин.
243
-
Здесь возможны следующие варианты:
244
-
\begin{itemize}
245
-
\item от одной вершины до всех,
246
-
\item между всеми парами вершин,
247
-
\item межу фиксированной парой вершин,
248
-
\item между двумя множествами вершин.
249
-
\end{itemize}
250
-
251
-
Стоит отметить, что последний вариант является самым общим и остальные --- лишь его частные случаи.
252
-
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя стартовые и финальные множества разными способами.
253
266
254
-
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины.
255
-
Ограничение, имеющее важное прикладное значение, --- минимальность длины искомого пути.
256
-
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}. Рассмотрим её более подробно. Тем более, что данная задача в определённом смысле близка к задаче, которая будет основной в данной работе, и из алгоритмов для APSP можно почерпнуть идеи для алгоритмов решения задачи поиска путей с ограничениями в терминах формальных языков.
Сложность наивного произведения двух матриц составляет $O(n^3)$, что очевидным образом следует из псевдокода. Но можно ли улучшить этот алгоритм? Первый положительный ответ был опубликовал Ф. Штрассен в 1969 году~\cite{Strassen1969}. Сложность предложенного им алгоритма --- $O(n^{\log_2 7}) \approx O(n^{2.81})$. Основная идея --- рекурсивное разбиение исходных матриц на блоки $2\times2$и вычисление их произведения с помощью только 7 умножений, а не 8.
642
+
Сложность наивного произведения двух матриц составляет $O(n^3)$, что очевидным образом следует из псевдокода. Но можно ли улучшить этот алгоритм? Первый положительный ответ был опубликовал Ф. Штрассен в 1969 году~\cite{Strassen1969}. Сложность предложенного им алгоритма --- $O(n^{\log_2 7}) \approx O(n^{2.81})$. Основная идея --- рекурсивное разбиение исходных матриц на блоки и вычисление их произведения с помощью только 7 умножений, а не 8.
643
643
644
644
Рассмотрим алгоритм Штрассена более подробно. Пусть $A$ и $B$ --- две квадратные матрицы размера $2^n \times2^n$\footnote{Если размер умножаемых матриц не является натуральной степенью двойки, мы дополняем исходные матрицы дополнительными нулевыми строками и столбцами.} над кольцом $R=(S,\oplus,\otimes)$. Наша задача найти матрицу $C = A \cdot B$.
0 commit comments