Skip to content

Commit b989acb

Browse files
committed
Раздел по основам теории графов слегка подредактирован после вынесения частей в линейную алгебру.
1 parent 272a196 commit b989acb

File tree

2 files changed

+74
-52
lines changed

2 files changed

+74
-52
lines changed

tex/GraphTheoryIntro.tex

Lines changed: 71 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -212,26 +212,25 @@ \section{Задачи поиска путей}
212212
\item Наличие пути, удовлетворяющего ограничениям, между некоторыми вершинами: задача достижимости.
213213
При данной постановке задачи, нас интересует ответ на вопрос достижимости вершина $v_1$ из вершины $v_2$ по пути, удовлетворяющему ограничениям.
214214
Такая постановка требует лишь проверить существование пути, но не обязательно его предоставлять в явном виде.
215-
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его.
215+
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его. При этом часто подразумевается, что возвращается любой путь, являющийся решением, без каких-либо дополнительных ограничений. Хотя, например, в некоторых задачах дополнительное требование простоты или наименьшей длинны выглядит достаточно естественным.
216216
\item Поиск всех путей: необходимо предоставить все пути, удовлетворяющеие заданным ограничениям.
217217
\end{itemize}
218218

219219
С другой стороны, задачи различаются ещё и по тому, как фиксируются множества стартовых и конечных вершин.
220220
Здесь возможны следующие варианты:
221221
\begin{itemize}
222-
\item из одной вершины до всех,
222+
\item от одной вершины до всех,
223223
\item между всеми парами вершин,
224224
\item межу фиксированной парой вершин,
225225
\item между двумя множествами вершин.
226226
\end{itemize}
227227

228228
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
229-
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя разные стартоыве и финальные множетсва.
229+
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя стартоыве и финальные множетсва разными способами.
230230

231231
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины.
232232
Ограничение, имеющее важное прикладное значение, --- минимальность длины искомого пути.
233-
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}.
234-
233+
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}. Рассмотрим её более подробно. Тем более, что данная задача в определённом смысле близка к задаче, которая будет основной в данной работе, и из алгоритмов для APSP можно почерпнуть идеи для алгоритмов решения задачи поиска путей с ограничениями в терминах формальных языков.
235234

236235

237236
\section{APSP и транзитивное замыкание графа}
@@ -245,8 +244,8 @@ \section{APSP и транзитивное замыкание графа}
245244

246245
Как несложно заметить, транзитивное замыкание графа --- это тоже граф.
247246
Более того, если решить задачу поиска кратчайших путей между всеми парами вершин, то мы построим транзитивное замыкание.
248-
Поэтому сразу рассмотрим алгоритм Флойда-Уоршелла~\cite{Floyd1962, Bernard1959, Warshall1962}, который является общим алгоритмом поиска кратчайших путей (умеет обрабатывать рёбра с отрицательными весами, чего не может, например, алгоритм Дейкстры). Его сложность: $O(n^3)$, где $n$ --- количество вершин в графе.
249-
При этом, данный алгоритм легко упростить до алгоритма построения транзитивного замыкания.
247+
248+
Поэтому сразу рассмотрим алгоритм Флойда-Уоршелла~\cite{Floyd1962, Bernard1959, Warshall1962}, который является общим алгоритмом поиска кратчайших путей. Данный алгоритм умеет обрабатывать рёбра с отрицательными весами, чего не может, например, алгоритм Дейкстры. Его сложность: $O(n^3)$, где $n$ --- количество вершин в графе. При этом, данный алгоритм легко упростить до алгоритма построения транзитивного замыкания. Псевдокод алгоритма представлен на листинге~\ref{lst:algoFloydWarxhall}.
250249

251250
\begin{algorithm}
252251
\floatname{algorithm}{Listing}
@@ -259,7 +258,7 @@ \section{APSP и транзитивное замыкание графа}
259258
\For{k = 0; k < n; k++}
260259
\For{i = 0; i < n; i++}
261260
\For{j = 0; j < n; j++}
262-
\State{$M[i,j] \gets$ min$(M[i,j], M[i,k] + M[k,j])$}
261+
\State{$M[i,j] \gets M[i,j] \oplus (M[i,k] \otimes M[k,j])$}
263262
\EndFor
264263
\EndFor
265264
\EndFor
@@ -268,8 +267,9 @@ \section{APSP и транзитивное замыкание графа}
268267
\end{algorithmic}
269268
\end{algorithm}
270269

270+
В зависимости от того, над каким полукольцом построена матрица смежности (какого рода веса на рёбрах графа) данный алгоритм может решать несколько разные задачи. Например, если возьмём трописеское полукольцо $(\mathbb{R}_{+\infty}, \min, +)$, то получим алгоритм для поимка кратчайших путей. Если же возьмём булево полукольцо, то получим алгоритм для построения транзитивного замыкания графа.
271271

272-
\begin{example}
272+
\begin{example}[Транзитивное замыкание графа]
273273
Пусть дан следующий граф:
274274
\begin{center}
275275
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
@@ -286,18 +286,42 @@ \section{APSP и транзитивное замыкание графа}
286286
\end{tikzpicture}
287287
\end{center}
288288

289-
Построим его транзитивное замыкание:
289+
Его матрица смежности:
290+
$$ M =
291+
\begin{pmatrix}
292+
1 & 1 & 0 & 0 \\
293+
0 & 1 & 1 & 0 \\
294+
1 & 0 & 1 & 1 \\
295+
0 & 0 & 1 & 1
296+
\end{pmatrix}
297+
$$
298+
299+
Здесь мы считаем, что отношение достижимости рефлексивно: все диагональные элементы матрицы $M$ равны 1, хотя петель у вершин нету.
300+
301+
Воспользовавшись алгоритмом из листинга~\ref{lst:algoFloydWarxhall}, специализированного на случай булева полукольца, можно получить следующую матрицу смежности.
302+
303+
$$ M' =
304+
\begin{pmatrix}
305+
1 & 1 & 1 & 1 \\
306+
1 & 1 & 1 & 1 \\
307+
1 & 1 & 1 & 1 \\
308+
1 & 1 & 1 & 1
309+
\end{pmatrix}
310+
$$
311+
312+
А значит, транзитивным замыканием исходного графа является полный граф и он выглядит следующим образом.
313+
290314
\begin{center}
291315
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
292316
\node[state] (q_0) {$0$};
293317
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
294318
\node[state] (q_2) [right = 2cm of q_0] {$2$};
295319
\node[state] (q_3) [right = 2cm of q_2] {$3$};
296320
\path[->]
297-
(q_0) edge[loop below] node {} ()
321+
(q_0) edge[loop left] node {} ()
298322
(q_1) edge[loop above] node {} ()
299323
(q_2) edge[loop below] node {} ()
300-
(q_3) edge[loop below] node {} ()
324+
(q_3) edge[loop right] node {} ()
301325

302326
(q_0) edge node {} (q_1)
303327
(q_1) edge[bend right] node {} (q_0)
@@ -307,75 +331,71 @@ \section{APSP и транзитивное замыкание графа}
307331
(q_0) edge[bend right] node {} (q_2)
308332
(q_2) edge[bend left, above] node {} (q_3)
309333
(q_3) edge[bend left, below] node {} (q_2)
310-
(q_0) edge[bend right = 60] node {} (q_3)
334+
(q_0) edge[bend right = 55] node {} (q_3)
335+
(q_3) edge[bend left = 75] node {} (q_0)
311336
(q_1) edge[bend left, above] node {} (q_3);
312337
\end{tikzpicture}
313338
\end{center}
314-
\begin{remark}
315-
На самом деле, петли у вершины 3 может и не быть, т.к. это зависит от определения.
316-
\end{remark}
339+
317340
\end{example}
318341

319-
\begin{remark}
320-
Приведем список интересных работ по APSP для ориентированных графов с вещественными весами (здесь $n$ --- количество вершин в графе):
321-
\begin{itemize}
322-
\item M.L. Fredman (1976) --- $O(n^3(\log \log n / \log n)^\frac{1}{3})$ --- использование дерева решений~\cite{FredmanAPSP1976}
323-
\item W. Dobosiewicz (1990) --- $O(n^3 / \sqrt{\log n})$ --- использование операций на Word Random Access Machine~\cite{Dobosiewicz1990}
324-
\item T. Takaoka (1992) --- $O(n^3 \sqrt{\log \log n / \log n})$ --- использование таблицы поиска~\cite{Takaoka1992}
325-
\item Y. Han (2004) --- $O(n^3 (\log \log n / \log n)^\frac{5}{7})$~\cite{Han2004}
326-
\item T. Takoaka (2004) --- $O(n^3 (\log \log n)^2 / \log n)$~\cite{Takaoka2004}
327-
\item T. Takoaka (2005) --- $O(n^3 \log \log n / \log n)$~\cite{Takaoka2005}
328-
\item U. Zwick (2004) --- $O(n^3 \sqrt{\log \log n} / \log n)$~\cite{Zwick2004}
329-
\item T.M. Chan (2006) --- $O(n^3 / \log n)$ --- многомерный принцип ``разделяй и властвуй''~\cite{Chan2008}
330-
\item и др.
331-
\end{itemize}
332-
\end{remark}
342+
Заметим, что рефлексивность отношения (значения элементов на главной диагонали матрицы смежности) непосредственно связана с особенностями решаемой задачи. Например, если говорить о кратчайших расстояних, то кажется естественным считать расстояние от вершины до самой себя равной нулю. Однако для задачи транзитивного замыкания это уже не столь естественное предположение и часто отдельно говорят от рефлексивно-транзитивном замыкании, которое отдельно явным образом привносит рефлексивность (петли, диагональные элементы матрицы смежности).
333343

334-
\section{APSP и произведение матриц}
335-
Алгоритм Флойда-Уоршелла можно переформулировать в терминах перемножения матриц. Для этого введём обозначение.
336344

337345

338-
\begin{definition}
339-
Пусть даны матрицы $A$ и $B$ размера $n \times n$. Определим операцию $\star$, которую называют \textit{Min-plus matrix multiplication}:
346+
\section{APSP и произведение матриц}
340347

341-
$A \star B = C$ --- матрица размера $n \times n$, т.ч.
342-
$C[i,j] = \min_{k = 1 \dots n} \{ A[i,k] + B[k,j] \}$
343-
\end{definition}
348+
Алгоритм Флойда-Уоршелла можно переформулировать в терминах перемножения матриц над тропическим полукольцом.
349+
350+
Пусть $D_k$ --- матрица кратчайших путей, состоящих не более чем из $k$ рёбер. То есть $D_k[i,j]$ --- это длина кратчайшего пути из вершины $i$ в вершину $j$, такого, что он состоит не более чем из $k$ ребер. Если такого пути нет, то $D_k[i,j] = \infty$.
344351

345-
Также, обозначим за $D[i,j](k)$ минимальную длину пути из вершины $i$ в $j$, содержащий максимум $k$ рёбер.
346-
Таким образом, $D(1) = M$, где $M$ --- это матрица смежности, а решением APSP является $D(n-1)$, т.к. чтобы соединить $n$ вершин требуется не больше $n-1$ рёбер.
352+
Таким образом, $D_1 = M$, где $M$ --- это матрица смежности исходного графа, а решением APSP является $D_{n-1}$.
347353

348354
\begin{center}
349355
$D(1) = M$ \\
350-
$D(2) = D(1) \star M = M^2$ \\
351-
$D(3) = D(2) \star M = M^3$ \\
356+
$D(2) = D(1) \cdot M = M^2$ \\
357+
$D(3) = D(2) \cdot M = M^3$ \\
352358
$\dots$ \\
353-
$D(n-1) = D(n-2) \star M = M^{n-1}$ \\
359+
$D(n-1) = D(n-2) \cdot M = M^{n-1}$ \\
354360
\end{center}
355361

356362
Итак, мы можем решить APSP за $O(n K(n))$, где $K(n)$ --- сложность алгоритма умножения матриц.
357-
Сразу заметим, что, например, $D(3)$ считать не обязательно, т.к. можем посчитать $D(4)$ как $D(2) \star D(2)$.
363+
364+
Сразу заметим, что, например, $D_3$ считать не обязательно, т.к. можем посчитать $D_4$ как $D_2 \cdot D_2$.
358365
Поэтому:
359366

360367
\begin{center}
361-
$D(1) = M$ \\
362-
$D(2) = M^2 = M \star M$ \\
363-
$D(4) = M^4 = M^2 \star M^2$ \\
364-
$D(8) = M^8 = M^4 \star M^4$ \\
368+
$D_1 = M$ \\
369+
$D_2 = M^2 = M \cdot M$ \\
370+
$D_4 = M^4 = M^2 \cdot M^2$ \\
371+
$D_8 = M^8 = M^4 \cdot M^4$ \\
365372
$\dots$ \\
366-
$D(2^{\log(n-1)}) = M^{2^{\log(n-1)}} = M^{2^{\log(n-1)} - 1} \star M^{2^{\log(n-1)} - 1}$ \\
367-
$D(n-1) = D(2^{\log(n-1)})$ \\
373+
$D_{2^{\log(n-1)}} = M^{2^{\log(n-1)}} = M^{2^{\log(n-1)} - 1} \cdot M^{2^{\log(n-1)} - 1}$ \\
374+
$D_{n-1} = D_{2^{\log(n-1)}}$ \\
368375
\end{center}
369376

370377
Теперь вместо $n$ итераций нам нужно $\log{n}$. В итоге, сложность --- $O(\log{n} K(n))$.
371378
Данный алгоритм называется \textit{repeated squaring}\footnote{Пример решения APSP с помощью repeated squaring: \url{http://users.cecs.anu.edu.au/~Alistair.Rendell/Teaching/apac_comp3600/module4/all_pairs_shortest_paths.xhtml}}.
372379

373-
\section{Умножение матриц с субкубической сложностью}
374-
В предыдущем подразделе мы свели проблему APSP к проблеме min-plus matrix multiplication, поэтому взглянем на эффективные алгоритмы матричного умножения.
380+
381+
Таким образом, APSP сводится к умножению матриц над полукольцом, что, к сожалению, не позволяет этим путём получить истинно субкубический алгоритм для задачи. тем неменее, позволяет получить слегка субкубический. Приведем некоторые работы по APSP для ориентированных графов с вещественными весами (здесь $n$ --- количество вершин в графе):
382+
\begin{itemize}
383+
\item M.L. Fredman (1976) --- $O(n^3(\log \log n / \log n)^\frac{1}{3})$ --- использование дерева решений~\cite{FredmanAPSP1976}
384+
\item W. Dobosiewicz (1990) --- $O(n^3 / \sqrt{\log n})$ --- использование операций на Word Random Access Machine~\cite{Dobosiewicz1990}
385+
\item T. Takaoka (1992) --- $O(n^3 \sqrt{\log \log n / \log n})$ --- использование таблицы поиска~\cite{Takaoka1992}
386+
\item Y. Han (2004) --- $O(n^3 (\log \log n / \log n)^\frac{5}{7})$~\cite{Han2004}
387+
\item T. Takoaka (2004) --- $O(n^3 (\log \log n)^2 / \log n)$~\cite{Takaoka2004}
388+
\item T. Takoaka (2005) --- $O(n^3 \log \log n / \log n)$~\cite{Takaoka2005}
389+
\item U. Zwick (2004) --- $O(n^3 \sqrt{\log \log n} / \log n)$~\cite{Zwick2004}
390+
\item T.M. Chan (2006) --- $O(n^3 / \log n)$ --- многомерный принцип ``разделяй и властвуй''~\cite{Chan2008}
391+
\item и др.
392+
\end{itemize}
375393

376394
Таким образом, вопрос о субкубических алгоритмах решения APSP всё ещё открыт~\cite{Chan2010}.
377395

378396

397+
398+
379399
%\section{Вопросы и задачи}
380400
%\begin{enumerate}
381401
% \item Реализуйте абстракцию полукльца, позволяющую конструировать полукольца с произвольными операциями.

0 commit comments

Comments
 (0)