Skip to content

Commit

Permalink
Misc changes in RPQ
Browse files Browse the repository at this point in the history
  • Loading branch information
WoWaster committed Jun 24, 2024
1 parent d181ab0 commit 06133c7
Showing 1 changed file with 27 additions and 17 deletions.
44 changes: 27 additions & 17 deletions tex/RPQ.tex
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,35 @@ \section{Достижимость с несколькими источникам
Покажем на примере, как данный метод может быть использован, когда мы накладываем дополнительные ограничения в виде регулярного языка на путь в графе.

Для этого, во-первых, предъявим булевые представления для матриц смежности графа и автомата для регулярного языка.
\marginnote{TODO: Подумать над разбиением на разделы и подразделы}
Затем, введем специальную блочно-диагональную матрицу для синхронизации обхода в ширину по двум матрицам смежности.
Далее, попробуем наивно реализовать обход в ширину, и посмотрим, почему наивная реализация может выдавать некорректный результат.
После этого перейдем к реализации обхода в ширину более продвинутым методом, который решает проблему наивного подхода.

\subsection{Пример работы алгоритма}
\marginnote{TODO: Подумать над разбиением на разделы и подразделы}
Возьмём следующий граф.
\begin{center}
\label{input_rpq}
\begin{tikzpicture}[node distance=2cm,shorten >=1pt,on grid,auto]
\node[state] (q_0) {$1$};
\node[state] (q_1) [above=of q_0] {$2$};
\node[state] (q_2) [right=of $(q_0)!0.5!(q_1)$] {$0$};
\node[state] (q_3) [right=of q_2] {$3$};
\path[->]
(q_0) edge node {b} (q_1)
(q_1) edge node[pos=0.3] {a} (q_2)
(q_2) edge node[pos=0.7] {a} (q_0)
(q_2) edge[bend left] node[above] {b} (q_3)
(q_3) edge[bend left] node {b} (q_2);
\end{tikzpicture}
\end{center}
\begin{marginfigure}
\caption{Входной граф.}
\label{fig:ms_rpq_graph}
\begin{center}
\begin{tikzpicture}[
shorten >=1pt,
auto]
\node[state] (q_0) {$0$};
\node[state] (q_1) [below left = of q_0] {$1$};
\node[state] (q_2) [above left = of q_0] {$2$};
\node[state] (q_3) [right = of q_0]{$3$};

\path[->]
(q_0) edge [bend left] node {$b$} (q_3)
(q_3) edge [bend left] node {$b$} (q_0)
(q_0) edge node {$a$} (q_1)
(q_1) edge node {$b$} (q_2)
(q_2) edge node {$a$} (q_0);
\end{tikzpicture}
\end{center}
\end{marginfigure}
Возьмём граф изображенный на рисунке~\ref{fig:ms_rpq_graph}.


Его матрица смежности имеет следующий вид.
\marginnote{TODO: Точка внизу или снизу?}
Expand Down Expand Up @@ -540,6 +547,7 @@ \subsection{Процесс обхода графа}
Далее, с помощью операций перестановки и сложения векторов $M'$ преобразуется к виду матрицы $M$ и присваивается ей.
Итерации продолжаются пока $M'$ содержит новые вершины, не содержащиеся в $M$. На листинге~\ref{BFSRPQ1} представлен этот алгоритм.

%% FIXME: Переверстать алгоритм
% \begin{algorithm}[t]
% \caption{Алгоритм достижимости в графе с регулярными ограничениями на основе поиска в ширину, выраженный с помощью операций матричного умножения}\label{BFSRPQ1}
% \begin{algorithmic}[1]
Expand Down Expand Up @@ -575,6 +583,7 @@ \subsection{Процесс обхода графа}
То есть, имела единицы на главной диагонали, а все остальные значения в первых $k$ столбцах были нулями.
Подробнее эта процедура описана в листинге~\ref{AlgoTransformRows}.

%% FIXME: Переверстать алгоритм
% \begin{algorithm}[H]
% \caption{Алгоритм трансформации строчек}\label{AlgoTransformRows}
% \begin{algorithmic}[1]
Expand Down Expand Up @@ -604,6 +613,7 @@ \subsection{Модификации алгоритма}

Матрица $\mfrakM$ собирается из множества матриц $M(V_{\mathrm{src}}^i)$ и позволяет хранить информацию о том, из какой начальной вершины достигаются новые вершины во время обхода.

%% FIXME: Переверстать алгоритм
% \begin{algorithm}[t]
% \caption{Модификация алгоритма для поиска конкретной исходной вершины}\label{BFSRPQ2}
% \begin{algorithmic}[1]
Expand Down

0 comments on commit 06133c7

Please sign in to comment.