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/RPQ.tex
+144-1Lines changed: 144 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,8 +2,151 @@ \chapter{Поиск путей с регулярными ограничения
2
2
3
3
\section{Достижимость между всеми парами вершин}
4
4
5
-
Через тензорное произведение
5
+
Через тензорное произведение.
6
+
7
+
Классическое построение пересечения автоматов строит их тензорное произведение.
8
+
9
+
Так как мы хотим отвечать ещё и на вопрос о достижимости, что нам надо ещё и транзитивное замыкание посчитать.
6
10
7
11
\section{Достижимость с несколькими источниками}
8
12
9
13
Достижимость от нескольких стартовых вершин через обход в ширину, основанный на линейной алгебре~\cite{9286186}.
14
+
15
+
Алгоритм принимает на вход граф $\mathcal{G}$, детерминированный конечный автомат $\mathcal{R}$, описывающий регулярную грамматику, и множество начальных вершин $V_{src}$ графа.
16
+
17
+
Граф $\mathcal{G}$ и автомат $\mathcal{R}$ можно представить в виде булевых матриц смежности. Так, в виде словаря для каждой метки графа заводится булева матрица смежности, на месте $(i, j)$ ячейки которой стоит 1, если $i$ и $j$ вершины графа соединены ребром данной метки. Такая же операция проводится для автомата грамматики $\mathcal{R}$.
18
+
19
+
Далее, мы оперируем с двумя словарями, где ключом является символ метки ребра графа или символ алфавита автомата, а значением --- соответствующая им булевая матрица.
20
+
21
+
Для каждого символа из пересечения этих множеств строится матрица $\mathfrak{D}$, как прямая сумма булевых матриц. То есть, строится матрица $\mathfrak{D} = Bool_{\mathcal{R}_a} \bigoplus Bool_{\mathcal{G}_a}$, которая определяется как
22
+
23
+
\begin{equation}
24
+
\mathfrak{D} =
25
+
\left[
26
+
\begin{matrix}
27
+
Bool_{\mathcal{R}_a} & 0\\
28
+
0 & Bool_{\mathcal{G}_a}
29
+
\end{matrix}
30
+
\right]
31
+
\end{equation}
32
+
33
+
Где $\mathcal{R}_{a}$ и $\mathcal{G}_{a}$ матрицы смежности соответствующих символов автомата грамматики $\mathcal{R}$ и графа $\mathcal{G}$ для символа $a \in A_\mathcal{R} \cap A_\mathcal{G}$, $A_\mathcal{R} \cap A_\mathcal{G}$ --- пересечение алфавитов. Такая конструкция позволяет синхронизировать алгоритм обхода в ширину одновременно для графа и грамматики.
34
+
35
+
Далее вводится матрица $M$, хранящая информацию о фронте обхода. Она нужна для выделения множества пройденных вершин и не допускает зацикливание алгоритма.
36
+
\begin{equation}
37
+
M^{k \times (k + n)} =
38
+
\left[
39
+
\begin{matrix}
40
+
Id_k & Matrix_{k \times n }
41
+
\end{matrix}
42
+
\right]
43
+
\end{equation}
44
+
45
+
Где $Id_k$ --- единичная матрица размера $k$, $k$ --- количество вершин в автомате $\mathcal{R}$, $Matrix_{k \times n }$ --- матрица, хранящая в себе маску пройденных вершин в автомате графа, $n$ --- количество вершин в графе $\mathcal{G}$.
46
+
47
+
\subsection{Выходные данные}
48
+
49
+
На выходе строится множество $\mathcal{P}$ пар вершин $(v, w)$ графа $\mathcal{G}$ таких, что вершина $w$ достижима из множества начальных вершин, при этом $v \in V_{src}$, $w \not\in V_{src}$. Это множество представляется в виде матрицы размера $|V|\times|V|$, где $(i,j)$ ячейка содержит 1, если пара вершин с индексами $(i, j) \in\mathcal{P}$.
50
+
51
+
\subsection{Процесс обхода графа}
52
+
53
+
Алгоритм обхода заключается в последовательном умножении матрицы $M$ текущего фронта на матрицу $\mathfrak{D}$. В результате чего, находится матрица $M'$ содержащая информацию о вершинах, достижимых на следующем шаге. Далее, с помощью операций перестановки и сложения векторов $M'$ преобразуется к виду матрицы $M$ и присваивается ей. Итерации продолжаются пока $M'$ содержит новые вершины, не содержащиеся в $M$. На листинге~\ref{BFSRPQ1} представлен этот алгоритм.
54
+
55
+
\begin{algorithm}[t]
56
+
\caption{Алгоритм достижимости в графе с регулярными ограничениями на основе поиска в ширину, выраженный с помощью операций матричного умножения}\label{BFSRPQ1}
57
+
\begin{algorithmic}[1]
58
+
\Procedure{BFSBasedRPQ}{$\mathcal{R}=\langle Q, \Sigma, P, F, q \rangle,\mathcal{G}=\langle V, E, L \rangle, V_{src}$}
\State$V\gets Matrix.reduceVector()$\Comment{Сложение по столбцам}
74
+
\For{$k \in0\dots|V_{src}|-1$}
75
+
\State$W\gets\mathcal{P}.getRow(k)$
76
+
\State$\mathcal{P}.setRow(k, V+W)$
77
+
\EndFor
78
+
\EndWhile
79
+
\State\textbf{return} $\mathcal{P}$
80
+
\EndProcedure
81
+
\end{algorithmic}
82
+
\end{algorithm}
83
+
84
+
В алгоритме~\ref{BFSRPQ1}, в~\ref{TransformRows} строке происходит трансформация строчек в матрице $M'$. Это делается для того, чтобы представить полученную во время обхода матрицу $M'$, содержащую новый фронт, в виде матрицы $M$. Для этого требуется так переставить строчки $M'$, чтобы она содержала корректные по своему определению значения. То есть, имела единицы на главной диагонали, а все остальные значения в первых $k$ столбцах были нулями. Подробнее эта процедура описана в листинге~\ref{AlgoTransformRows}.
\State{$Ix, Iy \gets$ итераторы по индексам ненулевых элементов $T$}
92
+
\For{$i \in0\dots|Iy|$}
93
+
\State{$R\gets M.getRow(Ix[i])$}
94
+
\State{$M'.setRow(Iy[i], R + M'.getRow(Iy[i]))$}
95
+
\EndFor
96
+
\EndProcedure
97
+
\end{algorithmic}
98
+
\end{algorithm}
99
+
100
+
\pagebreak
101
+
102
+
\subsection{Модификации алгоритма}
103
+
104
+
Рассмотрим $V_{src}$ --- множество начальных вершин, состоящее из $r$ элементов. Для каждой начальной вершины $v_{src}^i \in V_{src}$ отметим соответствующие индексы в матрице $M$ единицами, получив матрицу $M(v_{src}^i)$, и построим матрицу $\mathfrak{M}$ следующим образом.
105
+
106
+
\begin{equation}
107
+
\mathfrak{M}^{(k*r) \times (k + n)} =
108
+
\left[
109
+
\begin{matrix}
110
+
M(v_{src}^1) \\
111
+
M(v_{src}^2) \\
112
+
M(\dots) \\
113
+
M(v_{src}^r) \\
114
+
\end{matrix}
115
+
\right]
116
+
\end{equation}
117
+
118
+
Матрица $\mathfrak{M}$ собирается из множества матриц $M(v_{src}^i)$ и позволяет хранить информацию о том, из какой начальной вершины достигаются новые вершины во время обхода.
119
+
120
+
\begin{algorithm}[t]
121
+
\caption{Модификация алгоритма для поиска конкретной исходной вершины}\label{BFSRPQ2}
122
+
\begin{algorithmic}[1]
123
+
\Procedure{BFSBasedRPQ}{$\mathcal{R}=\langle Q, \Sigma, P, F, q \rangle,\mathcal{G}=\langle V, E, L \rangle, V_{src}$}
В листинге~\ref{BFSRPQ2} представлен модифицированный алгоритм. Основное его отличие заключается в том, что для каждой достижимой вершины находится конкретная исходная вершина, из которой начинался обход.
150
+
151
+
Таким образом, алгоритмы~\ref{BFSRPQ1}~и~\ref{BFSRPQ2} решают сформулированные в пункте \ref{sec:3.3} задачи достижимости.
0 commit comments