Skip to content

Commit 466ffda

Browse files
committed
Базовый перенос алгоритма Георгия. Не завершено.
1 parent 512ab22 commit 466ffda

11 files changed

Lines changed: 617 additions & 9 deletions

File tree

book_structure.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@
158158
- Раздел "Алгоритм на основе BFS"
159159
- ⚠️ Раздел "Пересечение автоматов через тензорное произведение" Алгоритм на основе классического тензорного произведения (для всех пар)
160160
- ⚠️ Раздел "Алгоритм на основе BFS"
161+
- Интегрированы материалы из статьи `papers_src/RPQ_paths_linear_algebra`: определение 2-NFA вынесено в раздел "Конечные автоматы", постановка 2-RPQ добавлена во вводную часть главы 11, обобщённый алгоритм поиска путей от заданной вершины на основе BFS, пример и свойства перенесены в `02_BFS.tex`.
161162
- ❌ Раздел "Алгоритм Diego Arroyuelo"
162163
- Планируемое содержание раздела:
163164
- Из статьи "Evaluating Regular Path Queries on Compressed Adjacency Matrices"

glossary.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@
2424
- Анализ свойств путей алгебраическими методами --- Algebraic Path Problem
2525
- Межпроцедурный статический анализ кода --- Interprocedural static code analysis
2626
- Рекурсивная сеть --- Recursive Network
27+
- Поиск от заданной вершины --- Single-source querying
28+
- Поиск путей от заданной вершины --- Single-source path querying
29+
- Поиск путей с использованием двусторонних регулярных языков в качестве ограничений --- Two-way Regular Path Querying
30+
- Запрос на поиск пути с ограничениями в виде двусторонних регулярных языков --- Two-way Regular Path Query
31+
- Двусторонний недетерминированный конечный автомат --- Two-way Nondeterministic Finite Automaton
32+
- След --- Trail
33+
- Полукольцо путей --- Path semiring
34+
- Индексный унарный оператор --- Index unary operator
35+
- GraphBLAS --- GraphBLAS
36+
- LAGraph --- LAGraph
37+
- SuiteSparse:GraphBLAS --- SuiteSparse:GraphBLAS
2738

2839
# Сокращения (расшифровка --- сокращение)
2940
- Graph Structured Stack --- GSS
@@ -59,6 +70,8 @@
5970
- Ослабленная нормальная форма Хомского --- ОНФХ
6071
- Generalized LR --- GLR
6172
- Generalized LL --- GLL
73+
- Two-way Regular Path Querying --- 2-RPQ
74+
- Two-way Nondeterministic Finite Automaton --- 2-NFA
6275

6376
# Иерархия терминов
6477
- Задача анализа графов с ограничениями в виде контекстно свободных языков --- более общий термин, чем задача достижимости с ограничениями в виде контекстно свободных языков

tex/FormalLanguageConstrainedReachabilityLectureNotes.bib

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,14 @@ @inproceedings{9286186
16111611
doi = {10.1109/HPEC43674.2020.9286186}
16121612
}
16131613

1614+
@article{belyanin2150single,
1615+
title = {Single-Source Regular Path Querying in Terms of Linear Algebra},
1616+
author = {Belyanin, Georgiy and Suvorov, Rodion and Grigorev, Semyon},
1617+
journal = {Proceedings of the VLDB Endowment. ISSN},
1618+
volume = {2150},
1619+
pages = {8097}
1620+
}
1621+
16141622
@inproceedings{10.1145/3315454.3329962,
16151623
author = {Spampinato, Daniele G. and Sridhar, Upasana and Low, Tze Meng},
16161624
title = {Linear Algebraic Depth-First Search},

tex/part_01_Prep/chapter_01_LinearAlgebra/05_Semiring.tex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ \section{Полукольцо}
99
\item $\Bbbzero \oplus a = a \oplus \Bbbzero = a$
1010
\item $a \oplus b = b \oplus a$
1111
\end{itemize}
12-
\item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- $\Bbbzero$. Для любых $a, b, c \in R$:
12+
\item $(R, \otimes)$~--- это моноид, нейтральный элемент которого~--- $\Bbbone$. Для любых $a, b, c \in R$:
1313
\begin{itemize}
1414
\item $(a \otimes b) \otimes c = a \otimes (b \otimes c)$
15-
\item $\Bbbzero \otimes a = a \otimes \Bbbzero = a$
15+
\item $\Bbbone \otimes a = a \otimes \Bbbone = a$
1616
\end{itemize}
1717
\item $\otimes$ дистрибутивно слева и справа относительно $\oplus$:
1818
\begin{itemize}
@@ -80,4 +80,3 @@ \section{Полукольцо}
8080
$\varnothing \odot a = \{ w_1 \cdot w_2 \mid w_1 \in \varnothing, w_2 \in a \} = \{ w_1 \cdot w_2 \mid w_1 \in a, w_2 \in \varnothing \} = a \odot \varnothing = \varnothing$
8181
\end{enumerate}
8282
\end{example}
83-

tex/part_01_Prep/chapter_03_GraphTheoryIntro/04_BFS.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
\section{Обход графа в ширину}
22

3-
Обход графа в ширину (Breadth-First Search, BFS)~--- это одна из фундаментальных задач анализа графов, для решения которой существуют хороши известные алгоритмы, изложенные в классической литературе\sidenote{
3+
Обход графа в ширину (Breadth-First Search, BFS)~--- это одна из фундаментальных задач анализа графов, для решения которой существуют хорошо известные алгоритмы, изложенные в классической литературе\sidenote{
44
Например, в книге <<Алгоритмы. Построение и анализ>>~\cite{кормен2009алгоритмы} Томаса Кормена и других.
55
}.
66
Более того, данный алгоритм является основой для многих алгоритмов поиска в графе.
@@ -316,7 +316,7 @@ \section{Обход графа в ширину}
316316
Данную вариацию обхода будем называть обходом в ширину с несколькими стартовыми вершинами (multiple-source BFS, MS-BFS).
317317
Для такой постановки задачи также предложен алгоритм, основанный на линейной алгебре~\sidecite{9286186}.
318318
Идея его такая же, как у рассмотренного выше, однако фронт~--- это уже не вектор, а матрица размера $k \times |V|$, где $k$~--- количество стартовых вершин, каждая строка которой является фронтом для одной из стартовых вершин\sidenote{
319-
Такакя конструкция действительно является лишь естественным для алгоритмов, выреженных в терминах операций линейной алгебры, способом запустить несколько независимых обходов параллельно.
319+
Такая конструкция действительно является лишь естественным для алгоритмов, выраженных в терминах операций линейной алгебры, способом запустить несколько независимых обходов параллельно.
320320
}.
321321
Псевдокод такой вариации представлен на листинге~\ref{algo:MS-BFS_linal}.
322322
Можно заметить, что алгоритм отличается от обхода с одной стартовой вершиной только инициализацией данных.

tex/part_02_Foundations/chapter_05_RegularLanguages/02_FiniteAutomata.tex

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ \section{Конечные автоматы}
1818
\end{itemize}
1919
\end{definition}
2020

21+
Для поиска путей в графе иногда требуется учитывать не только переходы по исходным меткам рёбер, но и переходы по рёбрам в обратном направлении.
22+
Для этого удобно явно расширить алфавит обратными символами.
23+
Пусть для каждого $a \in \Sigma$ задан символ $a^{-} \notin \Sigma$, причём $(a^{-})^{-} = a$.
24+
Обозначим $\Sigma^{-} = \{a^{-} \mid a \in \Sigma\}$ и $\Sigma^{\leftrightarrow} = \Sigma \cup \Sigma^{-}$.
25+
26+
\begin{definition}[Двусторонний недетерминированный конечный автомат]
27+
\label{def:TwoWayNondeterministicFiniteAutomata}
28+
\mytodo{Дать более аккуратное определение из специализированной профильной литературы.}
29+
\emph{Двусторонний недетерминированный конечный автомат} (Two-way Nondeterministic Finite Automaton, 2-NFA)~--- это недетерминированный конечный автомат $M = \langle Q, Q_S, Q_F, \delta, \Sigma^{\leftrightarrow} \rangle$, переходы которого помечены символами из расширенного алфавита $\Sigma^{\leftrightarrow}$.
30+
Переход по символу $a \in \Sigma$ соответствует чтению метки $a$ в прямом направлении, а переход по символу $a^{-} \in \Sigma^{-}$~--- чтению метки $a$ при движении по ребру графа в обратном направлении.
31+
\end{definition}
32+
2133
Заметим, что функцию переходов можно представить разными способами: это может быть множество троек вида $(q_i, t, q_j)$, матрица, или же граф с метками на рёбрах
2234
\[G = \langle Q, \{(q_i,t,q_j \mid q_j \in \delta(q_i,t))\}, \Sigma \rangle.\]
2335
В дальнейшем мы чаще всего будем использовать представление автомата в виде графа.

0 commit comments

Comments
 (0)