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
+84-48Lines changed: 84 additions & 48 deletions
Original file line number
Diff line number
Diff line change
@@ -189,10 +189,10 @@ \section{Обход графа в ширину}
189
189
Пример.
190
190
191
191
Алгоритм обхода в ширину может быть переформулирован в терминах матрично-векторных операций следующим образом\footnote{
192
-
Стоит отметить, что ситуация со не менее известным обходом в глубину (Depth-First Search, DFS) более сложная:
192
+
Стоит отметить, что ситуация с не менее известным обходом в глубину (Depth-First Search, DFS) более сложная:
193
193
на момент написания текста не известно естественного выражения данного обхода в терминах линейной алгебры.
194
194
Доказательство невозможности такого построения также не предъявлены.
195
-
При этом, решения для частных случаев (деревья, ориентированные графы без циклов) предложены, например, в работе~\cite{10.1145/3315454.3329962}}.
195
+
При этом, решения для частных случаев (деревья, ориентированные графы без циклов) предложены, например, в работе~\cite{10.1145/3315454.3329962}.}.
196
196
Пусть фронт --- вектор размера $n$, а сам граф представлен матрицей смежности.
197
197
Тогда один шаг --- получение нового фронта --- это умножение текущего фронта на матрицу смежности.
198
198
Для того, чтобы отслеживать посещённые вершины нужна маска.
@@ -201,68 +201,91 @@ \section{Обход графа в ширину}
201
201
202
202
\begin{example}
203
203
204
-
В качестве примера рассмотрим обход в ширину графа из примера~\ref{example:diGraph} начиная с вершины 2.
205
-
Для обозначения текущего фронта будем использовать зелёный цвет, а для достижимых из него за один шаг --- жёлтый.
204
+
Рассмотрим обход в ширину графа из примера~\ref{example:diGraph} начиная с вершины 2.
205
+
Для обозначения текущего фронта будем использовать зелёный цвет, а для достижимых из него за один шаг --- жёлтый, обведём вершину красным, если она посешается повторно.
\item$\mathbb{0} \otimes\mathbb{0} = \mathbb{0}$ : если не существует пути $i \pi j$ и не существует пути $j \pi k$, то не существует и пути $i \pi k$.
352
388
\end{itemize}
353
389
354
-
Новую операцию добавим к моноиду и получим новую алгебраическую структуру $\mathbb{G}' = (S, \oplus,\otimes)$. Данная структура является коммутативным моноидом по сложению (по построению) с нейтральным элементом $\mathbb{0}$. Из построения $\otimes$ видно, что $\mathbb{0}$ является аннигилятором. Ничего более про операцию $\otimes$, а значит и про $\mathbb{G}'$ мы сказать, исходя из построения, не можем. Классический фреймворк для решения algebraic path problem подразумевает, что $\mathbb{G}'$ является полукольцом, однако далее мы увидим, что существуют задачи, в которых $\otimes$, например, не является ассоциативной\footnote{Такой будет рассматриваемая в данной работе задача достижимости с ограничениями в терминах формальных языков. Другие примеры можно найти в уже упоминавшейся работе~\cite{Baras2010PathPI}}. А значит, согласно нашему определению, $\mathbb{G}'$ полукольцом не является.
390
+
Новую операцию добавим к моноиду и получим новую алгебраическую структуру $\mathbb{G}' = (S, \oplus,\otimes)$. Данная структура является коммутативным моноидом по сложению (по построению) с нейтральным элементом $\mathbb{0}$. Из построения $\otimes$ видно, что $\mathbb{0}$ является аннигилятором. Ничего более про операцию $\otimes$, а значит и про $\mathbb{G}'$ мы сказать, исходя из построения, не можем. Классический фреймворк для решения algebraic path problem подразумевает, что $\mathbb{G}'$ является полукольцом, однако далее мы увидим, что существуют задачи, в которых $\otimes$, например, не является ассоциативной\footnote{Такой будет рассматриваемая в данной работе задача достижимости с ограничениями в терминах формальных языков. Другие примеры можно найти в уже упоминавшейся работе~\cite{Baras2010PathPI}.}. А значит, согласно нашему определению, $\mathbb{G}'$ полукольцом не является.
355
391
356
392
Теперь, когда построена алгебраическая структура, обеспечивающая вычисление формулы~
357
393
\ref{eq:algPathProblem}, мы можем предложить алгоритм вычисления этой формулы и данным алгоритмом в интересующих нас частных случаях будет являться алгоритм Флойда-Уоршелла~\cite{Floyd1962, Bernard1959, Warshall1962}. Псевдокод алгоритма представлен на листинге~\ref{lst:algoFloydWarxhall}, а его сложность $O(n^3)$. Он практически дословно основан на описанной выше идее сборки путей из двух подпутей: тройной вложенный цикл перебирает все возможные разбиения пути на две части, а в строке 7 как раз и происходит вычисление формулы~
0 commit comments