|
36 | 36 | Пусть $\mathcal{G} = (V, E)$ --- входной граф и $G = (N,\Sigma,P)$ --- входная грамматика. Тогда алгоритм может быть сформулирован, как представлено в листинге~\ref{alg:graphParse}.
|
37 | 37 |
|
38 | 38 | \begin{algorithm}[H]
|
39 |
| -\begin{algorithmic}[1] |
40 |
| -\caption{Context-free recognizer for graphs} |
41 |
| -\label{alg:graphParse} |
42 |
| -\Function{contextFreePathQuerying}{$\mathcal{G}$, G} |
43 |
| - |
44 |
| - \State{$n \gets$ количество узлов в $\mathcal{G}$} |
45 |
| - \State{$E \gets$ направленные ребра в $\mathcal{G}$} |
46 |
| - \State{$P \gets$ набор продукций из $G$} |
47 |
| - \State{$T \gets$ матрица $n \times n$, в которой каждый элемент $\varnothing$} |
48 |
| - \ForAll{$(i,x,j) \in E$} |
49 |
| - \Comment{Инициализация матрицы} |
50 |
| - \State{$T_{i,j} \gets T_{i,j} \cup \{A~|~(A \rightarrow x) \in P \}$} |
51 |
| - \EndFor |
52 |
| - \ForAll{$i \in 0\ldots n-1$} |
53 |
| - \Comment{Добавление петель для нетерминалов, порождающих пустую строку} |
54 |
| - \State{$T_{i,i} \gets T_{i,i} \cup \{ A \in N \mid A \to \varepsilon \}$} |
55 |
| - \EndFor |
56 |
| - \While{матрица $T$ меняется} |
57 |
| - |
58 |
| - \State{$T \gets T \cup (T \times T)$} |
59 |
| - \Comment{Вычисление транзитивного замыкания} |
60 |
| - \EndWhile |
61 |
| -\State \Return $T$ |
62 |
| -\EndFunction |
63 |
| -\end{algorithmic} |
| 39 | +%TODO!!! |
| 40 | +%\begin{algorithmic}[1] |
| 41 | +%\caption{Context-free recognizer for graphs} |
| 42 | +%\label{alg:graphParse} |
| 43 | +%\Function{contextFreePathQuerying}{$\mathcal{G}$, G} |
| 44 | + |
| 45 | +% \State{$n \gets$ количество узлов в $\mathcal{G}$} |
| 46 | +% \State{$E \gets$ направленные ребра в $\mathcal{G}$} |
| 47 | +% \State{$P \gets$ набор продукций из $G$} |
| 48 | +% \State{$T \gets$ матрица $n \times n$, в которой каждый элемент $\varnothing$} |
| 49 | +% \ForAll{$(i,x,j) \in E$} |
| 50 | +% \Comment{Инициализация матрицы} |
| 51 | +% \State{$T_{i,j} \gets T_{i,j} \cup \{A~|~(A \rightarrow x) \in P \}$} |
| 52 | +% \EndFor |
| 53 | +% \ForAll{$i \in 0\ldots n-1$} |
| 54 | +% \Comment{Добавление петель для нетерминалов, порождающих пустую строку} |
| 55 | +% \State{$T_{i,i} \gets T_{i,i} \cup \{ A \in N \mid A \to \varepsilon \}$} |
| 56 | +% \EndFor |
| 57 | +% \While{матрица $T$ меняется} |
| 58 | + |
| 59 | +% \State{$T \gets T \cup (T \times T)$} |
| 60 | +% \Comment{Вычисление транзитивного замыкания} |
| 61 | +% \EndWhile |
| 62 | +%\State \Return $T$ |
| 63 | +%\EndFunction |
| 64 | +%\end{algorithmic} |
64 | 65 | \end{algorithm}
|
65 | 66 |
|
66 | 67 |
|
|
194 | 195 | % Матричный алгоритм для конъюнктивных грамматик отличается от алгоритма~\ref{alg:graphParse} для контекстно-свободных грамматик только операцией умножения матриц, в остальном алгоритм остается без изменений. Определим операцию умножения матриц.
|
195 | 196 | % \begin{definition}
|
196 | 197 | % Пусть $M_1$ и $M_2$ матрицы размера $n$. Определим операцию $\circ$ следующим образом:
|
197 |
| -% \[M_1 \circ M_2 = M_3,\] |
198 |
| -% \[M_3 [i,j] = \{A \mid \exists (A \rightarrow B_1 C_1 \& \ldots \& B_m C_m) \in P, (B_k , C_k) \in d[i,j] \forall k = 1,\ldots,m\}\], |
| 198 | +% \[M_1 \circ M_2 = M_3,\] |
| 199 | +% \[M_3 [i,j] = \{A \mid \exists (A \rightarrow B_1 C_1 \& \ldots \& B_m C_m) \in P, (B_k , C_k) \in d[i,j] \forall k = 1,\ldots,m\}\], |
199 | 200 | % где \[d[i,j] = \bigcup_{k = 1}^{n} M_1 [i,k] \times M_2 [k,j].\]
|
200 | 201 | % \end{definition}
|
201 | 202 |
|
@@ -274,31 +275,32 @@ \section{Особенности реализации}
|
274 | 275 |
|
275 | 276 | \begin{algorithm}
|
276 | 277 | \floatname{algorithm}{Listing}
|
277 |
| -\begin{algorithmic}[1] |
278 |
| -\caption{Context-free path querying algorithm. Boolean matrix version} |
279 |
| -\label{lst:cfpq_mtx_bool} |
280 |
| -\Function{evalCFPQ}{$D=(V,E), G=(N,\Sigma,P)$} |
281 |
| - \State{$n \gets$ |V|} |
282 |
| - \State{$T \gets \{T^{A_i} \mid A_i \in N, T^{A_i}$ is a matrix $n \times n$, $T^{A_i}_{k,l} \gets$ \texttt{false}\} } |
283 |
| - \ForAll{$(i,x,j) \in E$, $A_k \mid A_k \to x \in P$} |
284 |
| - %\Comment{Matrices initialization} |
285 |
| - %\For{$A_k \mid A_k \to x \in P$} |
286 |
| - {$T^{A_k}_{i,j} \gets \texttt{true}$} |
287 |
| - %\EndFor |
288 |
| - \EndFor |
289 |
| - \For{$A_k \mid A_k \to \varepsilon \in P$} |
290 |
| - {$T^{A_k}_{i,i} \gets \texttt{true}$} |
291 |
| - \EndFor |
292 |
| - |
293 |
| - \While{any matrix in $T$ is changing} |
294 |
| - %\Comment{Transitive closure calculation} |
295 |
| - \For{$A_i \to A_j A_k \in P$} |
296 |
| - { $T^{A_i} \gets T^{A_i} + (T^{A_j} \times T^{A_k})$ } |
297 |
| - \EndFor |
298 |
| - \EndWhile |
299 |
| -\State \Return $T$ |
300 |
| -\EndFunction |
301 |
| -\end{algorithmic} |
| 278 | +% TODO!!! |
| 279 | +%\begin{algorithmic}[1] |
| 280 | +%\caption{Context-free path querying algorithm. Boolean matrix version} |
| 281 | +%\label{lst:cfpq_mtx_bool} |
| 282 | +%\Function{evalCFPQ}{$D=(V,E), G=(N,\Sigma,P)$} |
| 283 | +% \State{$n \gets$ |V|} |
| 284 | +% \State{$T \gets \{T^{A_i} \mid A_i \in N, T^{A_i}$ is a matrix $n \times n$, $T^{A_i}_{k,l} \gets$ \texttt{false}\} } |
| 285 | +% \ForAll{$(i,x,j) \in E$, $A_k \mid A_k \to x \in P$} |
| 286 | +% %\Comment{Matrices initialization} |
| 287 | +% %\For{$A_k \mid A_k \to x \in P$} |
| 288 | +% {$T^{A_k}_{i,j} \gets \texttt{true}$} |
| 289 | +% %\EndFor |
| 290 | +% \EndFor |
| 291 | +% \For{$A_k \mid A_k \to \varepsilon \in P$} |
| 292 | +% {$T^{A_k}_{i,i} \gets \texttt{true}$} |
| 293 | +% \EndFor |
| 294 | + |
| 295 | +% \While{any matrix in $T$ is changing} |
| 296 | +% %\Comment{Transitive closure calculation} |
| 297 | +% \For{$A_i \to A_j A_k \in P$} |
| 298 | +% { $T^{A_i} \gets T^{A_i} + (T^{A_j} \times T^{A_k})$ } |
| 299 | +% \EndFor |
| 300 | +% \EndWhile |
| 301 | +%\State \Return $T$ |
| 302 | +%\EndFunction |
| 303 | +%\end{algorithmic} |
302 | 304 | \end{algorithm}
|
303 | 305 |
|
304 | 306 | С другой стороны, для запросов, выразимых в терминах грамматик с небольшим количеством нетерминалов, практически может быть выгодно представлять множества нетерминалов в ячейке матрицы в виде битового вектора следующим образом.
|
|
0 commit comments