Глава 12

Три алгоритма на графах

[14/100%]
Показать
LaTeX
Задача 200

Построить минимальное остовное дерево для неориентированного графа G=(V,E)\mathfrak {G}=(V, E) с множествами вершин V={v1,v2,v3,v4,v5,v6,v7,v8,v9}V=\left\{ v_{1}, v_{2}, v_{3}, v_{4}, v_{5}, v_{6}, v_{7}, v_{8}, v_{9}\right\} и рёбер E={(v1,v2;18),(v1,v3;2),(v3,v2;4),(v3,v4;6),(v3,v5;8),(v4,v6;5),(v5,v4;4),(v6,v1;7),(v6,v8;4),(v6,v7;3),(v7,v5;1),(v7,v8;7),(v8,v1;5),(v8,v9;3),(v9,v1;1)}E=\left\{ \left(v_{1}, v_{2} ; 18\right),\left(v_{1}, v_{3} ; 2\right),\left(v_{3}, v_{2} ; 4\right),\left(v_{3}, v_{4} ; 6\right),\left(v_{3}, v_{5} ; 8\right),\left(v_{4}, v_{6} ; 5\right),\left(v_{5}, v_{4} ; 4\right),\left(v_{6}, v_{1} ; 7\right),\left(v_{6}, v_{8} ; 4\right),\left(v_{6}, v_{7} ; 3\right),\left(v_{7}, v_{5} ; 1\right),\left(v_{7}, v_{8} ; 7\right),\left(v_{8}, v_{1} ; 5\right),\left(v_{8}, v_{9} ; 3\right),\left(v_{9}, v_{1} ; 1\right)\right\}. Третий параметр в скобках — вес ребра.

?
Задача 201

Пусть ee — ребро максимального веса в некотором простом цикле CC графа G=(V,E)\mathfrak {G}=(V, E). Доказать, что

?
(а)

существует минимальное остовное дерево графа G=(V,E\{e})\mathfrak {G}^{\prime }=(V, E \backslash \left\{ e\right\} ), которое является и минимальным остовным деревом графа G\mathfrak {G};

(б)

если в CC нет других рёбер такого же веса, то никакое минимальное остовное дерево не содержит ee.

Задача 202

Пусть T=(V,T)\mathfrak {T}=(V, T) — минимальное остовное дерево для нагруженного неориентированного графа G=(V,E)\mathfrak {G}=(V, E) с nn вершинами, cc — разметка рёбер. Пусть (e1,e2,,en1)(e_{1}, e_{2}, \ldots , e_{n-1}) — это последовательность рёбер из TT, упорядоченных по возрастанию c(ei)c\left(e_{i}\right). Пусть T\mathfrak {T}^{\prime } — произвольное остовное дерево для G\mathfrak {G} с рёбрами (d1,d2,,dn1)\left(d_{1}, d_{2}, \ldots , d_{n-1}\right), упорядоченными по возрастанию c(di)c\left(d_{i}\right). Показать, что c(ei)c(di)c\left(e_{i}\right) \leqslant c\left(d_{i}\right) для всех i=1,,n1i=1, \ldots , n-1. Указание. Рассмотреть лес деревьев Ti,m\mathfrak {T}_{i, m} из рёбер ej,j<ie_{j}, j<i, и рёбра d,id_{\ell }, \ell \leqslant i.

?
Задача 203

Недостатком алгоритма Крускала является необходимость проверки на каждом шаге наличия циклов, что само по себе является достаточно сложной задачей. Следующий алгоритм независимо предложен В. Ярником, Р. Примом и Э. Дейкстрой.

  1. Выбрать произвольным образом вершину aa, она сама по себе является деревом (без рёбер).

  2. На каждом шаге добавлять к имеющемуся дереву ребро наименьшего веса, одна из вершин которого принадлежит дереву, а вторая — нет. Доказать корректность этого алгоритма для связных графов по аналогии с теоремой 80 (Корректность алгоритма Крускала): результатом работы алгоритма МинОД(G,c)(\mathfrak {G}, c) является минимальное остовное дерево входного графа G=(V,E)\mathfrak {G}=(V, E) с функцией разметки cc.

?
Задача 204

Пусть T=(V,T)\mathfrak {T}=(V, T) — это глубинное остовное дерево, построенное алгоритмом обхода в глубину для графа G=(V,E)\mathfrak {G}=(V, E). Доказать, что для каждого обратного ребра (u,v)E\T(u, v) \in E \backslash T или uu является предком vv в T\mathfrak {T}, или vv является предком uu в T\mathfrak {T}.

?
Задача 205

Модифицировать алгоритм поиска в глубину так, чтобы он вычислял Up[v]\operatorname {Up}[v] и распечатывал список всех мостов графа.

?
Задача 206

Начиная с вершины v1v_{1}, обойти (занумеровать) вершины заданного неориентированного графа G=(V,E)\mathfrak {G}=(V, E) с помощью алгоритма обхода «в глубину» и построить дерево этого обхода. V={v1,v2,v3,v4,v5,v6,v7,v8,v9,v10},E={(v1,v2),(v1,v4),(v1,v8),(v7,v8),(v2,v9),(v9,v5),(v3,v8),(v6,v3),(v3,v7),(v6,v7),(v10,v9),(v10,v5)}V=\left\{ v_{1}, v_{2}, v_{3}, v_{4}, v_{5}, v_{6}, v_{7}, v_{8}, v_{9}, v_{10}\right\} , E=\left\{ \left(v_{1}, v_{2}\right),\left(v_{1}, v_{4}\right),\left(v_{1}, v_{8}\right),\left(v_{7}, v_{8}\right),\left(v_{2}, v_{9}\right),\left(v_{9}, v_{5}\right),\left(v_{3}, v_{8}\right),\left(v_{6}, v_{3}\right),\left(v_{3}, v_{7}\right),\left(v_{6}, v_{7}\right),\left(v_{10}, v_{9}\right),\left(v_{10}, v_{5}\right)\right\}. Какое обратное ребро eE\Te \in E \backslash T и цикл в G\mathfrak {G} обнаружились в этом обходе первыми? Вычислить для каждой вершины vv значение Up[v]\operatorname {Up}[v] и определить все мосты графа G\mathfrak {G}. Считать, что все списки смежности упорядочены по возрастанию номера вершины, а выбирается вершина с наименьшим номером.

?
Задача 207

Изменить алгоритм обхода в глубину так, чтобы он позволил перечислить все связные компоненты неориентированного графа.

?
Задача 208

Если в ориентированном графе G=(V,E)\mathfrak {G}=(V, E) существует вершина rr, из которой достижимы все остальные, то для него тоже можно определить понятие остовного (теперь ориентированного) дерева: дерево T=(V,T)\mathfrak {T}=(V, T) с корнем rr. Определить, какие из алгоритмов построения остовного дерева можно приспособить для построения остовного дерева в ориентированном графе: алгоритм Крускала, алгоритм Ярника-Прима-Дейкстры, алгоритм поиска в глубину.

?
Задача 209

Определить для следующего нагруженного графа G=(V,E)\mathfrak {G}=(V, E) и вершины aVa \in V длины кратчайших путей из aa в остальные вершины G\mathfrak {G} и построить дерево этих путей. Здесь V={a,b,c,d,e,f},E={(a,b;154),(a,c;17),(a,d;214),(a,e;63),(b,d;25),(c,e;33),(c,d;192),(c,b;123),(d,f;5),(e,f;140),(d,e;10)}V=\left\{ a, b, c, d, e, f\right\} , E=\left\{ (a, b ; 154),(a, c ; 17),(a, d ; 214), (a, e; 63), (b, d; 25), (c, e; 33), (c, d; 192), (c, b; 123), (d, f; 5), (e, f; 140), (d, e; 10)\right\}.

?
Задача 210

Где в доказательстве правильности алгоритма Дейкстры используется неотрицательность весов рёбер? Привести пример графа (с отрицательными весами), для которого алгоритм Дейкстры даёт неверный ответ.

?
Задача 211

Теорема 83 (Корректность алгоритма Дейкстры): алгоритм Дейкстры строит дерево кратчайших путей из вершины aa во все достижимые из неё вершины и для каждой такой вершины vv определяет длину D[v]D[v] кратчайшего пути в неё из aa. В доказательстве, индукцией по kk: обозначим с помощью RkR_{k}, DkD_{k}, FkF_{k} значение RR и содержимое массивов DD, FF после kk шагов выполнения цикла, а wkw_{k} — вершину, выбранную на (k+1)(k+1)-м шаге.

Показать, что в доказательстве индукционного шага теоремы 83 на стр. 248 вершина wkw_{k} может быть только предпоследней в кратчайшем пути из aa в uV\(Rk{wk})u \in V \backslash \left(R_{k} \cup \left\{ w_{k}\right\} \right).

?
Задача 212

Сколько раз может меняться для одной вершины vv значение D[v]D[v] в ходе работы алгоритма Дейкстры для графа с шестью вершинами? Привести пример на каждый возможный случай.

?
Задача 213

Пусть в графе G\mathfrak {G} выбрана вершина aa и для каждой вершины vVv \in V, достижимой из aa, существует единственный кратчайший путь из aa в vv. Доказать, что рёбра всех этих путей образуют ориентированное дерево с корнем aa.

?