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
\item Наличие пути, удовлетворяющего ограничениям, между некоторыми вершинами: задача достижимости.
213
213
При данной постановке задачи, нас интересует ответ на вопрос достижимости вершина $v_1$ из вершины $v_2$ по пути, удовлетворяющему ограничениям.
214
214
Такая постановка требует лишь проверить существование пути, но не обязательно его предоставлять в явном виде.
215
-
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его.
215
+
\item Поиск одного пути, удовлетворяющего ограничениям: необходимо не только установить факт наличия пути, но и предъявить его. При этом часто подразумевается, что возвращается любой путь, являющийся решением, без каких-либо дополнительных ограничений. Хотя, например, в некоторых задачах дополнительное требование простоты или наименьшей длинны выглядит достаточно естественным.
216
216
\item Поиск всех путей: необходимо предоставить все пути, удовлетворяющеие заданным ограничениям.
217
217
\end{itemize}
218
218
219
219
С другой стороны, задачи различаются ещё и по тому, как фиксируются множества стартовых и конечных вершин.
220
220
Здесь возможны следующие варианты:
221
221
\begin{itemize}
222
-
\itemиз одной вершины до всех,
222
+
\itemот одной вершины до всех,
223
223
\item между всеми парами вершин,
224
224
\item межу фиксированной парой вершин,
225
225
\item между двумя множествами вершин.
226
226
\end{itemize}
227
227
228
228
Стоит отметить, что последний вариант является самым общим и сотальные --- лишь его частные случаи.
229
-
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя разные стартоыве и финальные множетсва.
229
+
Однако этот вариант часто выделяют отдельно, подразумевая, что остальные, выделенные, варианты в него не включаются. В итоге мы можем сформулировать прямое произведение различных постановок задач о поиске путей, перебирая возможные варианты желаемого результата и фиксируя стартоыве и финальные множетсва разными способами.
230
230
231
231
Часто при поиске путей на них накладывают дополнительные ограничения. Например, можно потребовать, чтобы пути были простыми или не проходили через определённые вершины.
232
232
Ограничение, имеющее важное прикладное значение, --- минимальность длины искомого пути.
233
-
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}.
234
-
233
+
Одна из важных задач, имеющих как прикладное, так и теоретическое значение --- \textit{поиск кратчайших путей в графе между всеми парами вершин(англ. APSP --- all-pairs shortest paths)}. Рассмотрим её более подробно. Тем более, что данная задача в определённом смысле близка к задаче, которая будет основной в данной работе, и из алгоритмов для APSP можно почерпнуть идеи для алгоритмов решения задачи поиска путей с ограничениями в терминах формальных языков.
235
234
236
235
237
236
\section{APSP и транзитивное замыкание графа}
@@ -245,8 +244,8 @@ \section{APSP и транзитивное замыкание графа}
245
244
246
245
Как несложно заметить, транзитивное замыкание графа --- это тоже граф.
247
246
Более того, если решить задачу поиска кратчайших путей между всеми парами вершин, то мы построим транзитивное замыкание.
248
-
Поэтому сразу рассмотрим алгоритм Флойда-Уоршелла~\cite{Floyd1962, Bernard1959, Warshall1962}, который является общим алгоритмом поиска кратчайших путей (умеет обрабатывать рёбра с отрицательными весами, чего не может, например, алгоритм Дейкстры). Его сложность: $O(n^3)$, где $n$ --- количество вершин в графе.
249
-
При этом, данный алгоритм легко упростить до алгоритма построения транзитивного замыкания.
247
+
248
+
Поэтому сразу рассмотрим алгоритм Флойда-Уоршелла~\cite{Floyd1962, Bernard1959, Warshall1962}, который является общим алгоритмом поиска кратчайших путей. Данный алгоритм умеет обрабатывать рёбра с отрицательными весами, чего не может, например, алгоритм Дейкстры. Его сложность: $O(n^3)$, где $n$ --- количество вершин в графе. При этом, данный алгоритм легко упростить до алгоритма построения транзитивного замыкания. Псевдокод алгоритма представлен на листинге~\ref{lst:algoFloydWarxhall}.
250
249
251
250
\begin{algorithm}
252
251
\floatname{algorithm}{Listing}
@@ -259,7 +258,7 @@ \section{APSP и транзитивное замыкание графа}
@@ -268,8 +267,9 @@ \section{APSP и транзитивное замыкание графа}
268
267
\end{algorithmic}
269
268
\end{algorithm}
270
269
270
+
В зависимости от того, над каким полукольцом построена матрица смежности (какого рода веса на рёбрах графа) данный алгоритм может решать несколько разные задачи. Например, если возьмём трописеское полукольцо $(\mathbb{R}_{+\infty}, \min, +)$, то получим алгоритм для поимка кратчайших путей. Если же возьмём булево полукольцо, то получим алгоритм для построения транзитивного замыкания графа.
271
271
272
-
\begin{example}
272
+
\begin{example}[Транзитивное замыкание графа]
273
273
Пусть дан следующий граф:
274
274
\begin{center}
275
275
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
@@ -286,18 +286,42 @@ \section{APSP и транзитивное замыкание графа}
286
286
\end{tikzpicture}
287
287
\end{center}
288
288
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
+
290
314
\begin{center}
291
315
\begin{tikzpicture}[shorten >=1pt,on grid,auto]
292
316
\node[state] (q_0) {$0$};
293
317
\node[state] (q_1) [above right = 1.4cm and 1cm of q_0] {$1$};
294
318
\node[state] (q_2) [right = 2cm of q_0] {$2$};
295
319
\node[state] (q_3) [right = 2cm of q_2] {$3$};
296
320
\path[->]
297
-
(q_0) edge[loop below] node {} ()
321
+
(q_0) edge[loop left] node {} ()
298
322
(q_1) edge[loop above] node {} ()
299
323
(q_2) edge[loop below] node {} ()
300
-
(q_3) edge[loop below] node {} ()
324
+
(q_3) edge[loop right] node {} ()
301
325
302
326
(q_0) edge node {} (q_1)
303
327
(q_1) edge[bend right] node {} (q_0)
@@ -307,75 +331,71 @@ \section{APSP и транзитивное замыкание графа}
307
331
(q_0) edge[bend right] node {} (q_2)
308
332
(q_2) edge[bend left, above] node {} (q_3)
309
333
(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)
311
336
(q_1) edge[bend left, above] node {} (q_3);
312
337
\end{tikzpicture}
313
338
\end{center}
314
-
\begin{remark}
315
-
На самом деле, петли у вершины 3 может и не быть, т.к. это зависит от определения.
316
-
\end{remark}
339
+
317
340
\end{example}
318
341
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}
\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
+
Заметим, что рефлексивность отношения (значения элементов на главной диагонали матрицы смежности) непосредственно связана с особенностями решаемой задачи. Например, если говорить о кратчайших расстояних, то кажется естественным считать расстояние от вершины до самой себя равной нулю. Однако для задачи транзитивного замыкания это уже не столь естественное предположение и часто отдельно говорят от рефлексивно-транзитивном замыкании, которое отдельно явным образом привносит рефлексивность (петли, диагональные элементы матрицы смежности).
333
343
334
-
\section{APSP и произведение матриц}
335
-
Алгоритм Флойда-Уоршелла можно переформулировать в терминах перемножения матриц. Для этого введём обозначение.
336
344
337
345
338
-
\begin{definition}
339
-
Пусть даны матрицы $A$ и $B$ размера $n \times n$. Определим операцию $\star$, которую называют \textit{Min-plus matrix multiplication}:
346
+
\section{APSP и произведение матриц}
340
347
341
-
$A \star B = C$ --- матрица размера $n \times n$, т.ч.
Алгоритм Флойда-Уоршелла можно переформулировать в терминах перемножения матриц над тропическим полукольцом.
349
+
350
+
Пусть $D_k$ --- матрица кратчайших путей, состоящих не более чем из $k$ рёбер. То есть $D_k[i,j]$ --- это длина кратчайшего пути из вершины $i$ в вершину $j$, такого, что он состоит не более чем из $k$ ребер. Если такого пути нет, то $D_k[i,j] = \infty$.
344
351
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}$.
347
353
348
354
\begin{center}
349
355
$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$\\
352
358
$\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}$\\
354
360
\end{center}
355
361
356
362
Итак, мы можем решить 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$.
Теперь вместо $n$ итераций нам нужно $\log{n}$. В итоге, сложность --- $O(\log{n} K(n))$.
371
378
Данный алгоритм называется \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}}.
372
379
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}
0 commit comments