Список заданий по АСД 2к 2015 осень — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 52: Строка 52:
 
# Приведите пример графа, в котором алгоритм из предыдущего задания рабоатает экспоненциальное время.
 
# Приведите пример графа, в котором алгоритм из предыдущего задания рабоатает экспоненциальное время.
 
# Предложите граф, в котором алгоритм Дейкстры делает $\Omega(E)$ успешных релаксаций
 
# Предложите граф, в котором алгоритм Дейкстры делает $\Omega(E)$ успешных релаксаций
 +
# Доказать теорему об отсутствии кратчайшего пути на базе алгоритма Форда-Беллмана. (от $s$ до $v$ нет кратчайшего пути тогда и только тогда, когда она  достижима из $u$, такой что после выполнения алгоритма Форда-Беллмана найдется ребро $xu$, для которого $d[x] + w(xu) < d[u]$)
 +
# Разработать алгоритм на базе Форда-Беллмана, который ищет в графе отрицательный цикл.
 +
# Укажите способ построить для некоторых $c_1, c_2 >0$ и любых V, E, где $c_1 V \le E \le c_2 V^2$ граф, на котором алгоритм Форда-Беллмана с очередью работает за $\Omega(VE)$.
 +
# Пусть в графе $G$ есть вершина $s$, из которой достижимы все вершины. Обозначим как $\mu^*$ минимальный средний вес цикла в графе. Докажите, что $\mu^* = \min_v\max_k\frac{d_n(v)-d_k(v)}{n-k}$, где $d_i(v)$ - длина кратчайшего пути из $s$ до $v$, содержащего ровно $i$ ребер.
 +
# Модифицируйте алгоритм Форда-Беллмана так, чтобы он находил в графе циклы минимального среднего веса за $O(VE)$ и $O(V^2)$ памяти.
 +
# Модифицируйте алгоритм Флойда, чтобы найти в графе отрицательный цикл.
 +
# Петя перепутал и написал в алгоритме Флойда "for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])". Постройте тест, на котором получившийся алгоритм работает неверно.
 +
# Петя перепутал и написал в алгоритме Флойда "for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])". Заметив, что это работает неверно, он запустил этот алгоритм два раза. Будет ли получившийся алгоритм "for t from 1 to 2: for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])" корректным?

Версия 17:18, 3 октября 2015

<wikitex>

  1. Доказать, что если в ориентированном графе существует цикл, то в нем существует и простой цикл.
  2. Доказать, что если в неориентированным графе существует цикл, то в нем существует и простой цикл.
  3. Будем называть согласованным циклом в графе класс эквивалентности циклических путей относительно циклического сдвига. При этом циклический путь не должен проходить два раза по одному ребру в разных направлениях. Докажите, что в графе есть согласованный цикл тогда и только тогда когда там есть цикл.
  4. Петя придумал отношение средней связности: $u$ средне связана с $v$, если из $u$ достижима $v$ или из $v$ достижима $u$. Является ли это отношение отношением эквивалентности?
  5. Пусть граф $G$ - объединение двух различных простых путей из $u$ в $v$. Докажите, что в $G$ есть цикл.
  6. Харари 2.3
  7. Харари 2.5
  8. Харари 2.9
  9. Харари 2.13
  10. Харари 2.15
  11. Будем говорить, что $G$ связан короткими путями, если между любыми двумя вершинами в $G$ есть путь длины не более 3. Докажите, что либо $G$, либо $\overline G$ связан короткими путями.
  12. Харари 2.16
  13. Харари 2.20
  14. Харари 2.22
  15. Харари 2.29
  16. Харари 2.31
  17. Харари 2.32
  18. Харари 2.33
  19. Харари 2.34 (а)
  20. Харари 2.34 (б)
  21. Харари 2.35
  22. Харари 2.36
  23. Харари 4.2
  24. Харари 4.3
  25. Харари 4.4
  26. Харари 4.6
  27. Доказать или опровергнуть, что если ребро $uv$ - мост, то $u$ и $v$ - точки сочленения.
  28. Доказать или опровергнуть, что если $u$ и $v$ - точки сочленения, то $uv$ - мост.
  29. Какое максимальное число точек сочленения может быть в графе с $n$ вершинами?
  30. При каких соотношениях $a$, $b$, $n$, $m$, $k$ существует граф с $a$ точками сочленения, $b$ мостами, $n$ вершинами, $m$ рёбрами, $k$ компонентами связности?
  31. Рассмотрим отношение на рёбрах - $R$. $ab R cd$, если 1) $ab$ и $cd$ имеют общую вершину; 2) $ab$ и $cd$ лежат на цикле. Доказать, что вершинная двусвязность - это рефлексивно-транзитивное замыкание $R$.
  32. Доказать, что ребро $uv$ - мост тогда и только тогда, когда $uv$ вершинно двусвязно только с самим собой.
  33. Харари 3.2
  34. Харари 3.3
  35. Харари 3.4
  36. Харари 3.5
  37. Харари 3.6
  38. Харари 3.7
  39. Харари 3.9
  40. Граф называется вершинно трёхсвязным, если он остаётся связным после удаления любых не более чем двух вершин. Доказать или опровергнуть, что в вершинно трёхсвязном графе любые три вершины лежат на простом цикле.
  41. Граф называется вершинно k-связным, если он остаётся связным после удаления любых не более чем (k - 1) вершин. Доказать или опровергнуть, что в вершинно k-связном графе любые k вершин лежат на простом цикле.
  42. Пусть $G$ - связный граф. Обозначим как $\kappa(G)$ - минимальное число вершин, которое необходимо удалить, чтобы граф потерял связность. (для полного графа это число равно n - 1), $\lambda(G)$ - минимальное число рёбер, которое необходимо удалить, чтобы граф потерял связность, $\delta(G)$ - минимальную степень в вершины в графе $G$. Докажите, что для любых $a$, $b$, $c$, таких что $1 \le a \le b \le c$, существует граф $G$, такой что $\kappa(G) = a$, $\lambda(G) = b$, $\delta(G) = c$.
  43. Рассмотрим неориентированный граф $G$. Запустим dfs, затем ориентируем рёбра дерева dfs $T$ от корня, а остальные - к корню. Доказать, что компоненты сильной связности в получившемся графе равны компонентам рёберной двусвязности в исходном графе
  44. Разработать алгоритм поиска компонент рёберной двусвязности, используя ровно один запуск dfs.
  45. Разработать алгоритм поиска компонент вершинной двусвязности, используя ровно один запуск dfs.
  46. Пусть $T$ - дерево dfs. Укажите способ за $O(E)$ посчитать число пар $(e_1, e_2)$, таких что 1) $e1 \in T$; 2) $e2\not\in T$; 3) граф $G$ после удаления рёбер $e_1$ и $e_2$ - не связен.
  47. Пусть $T$ - дерево dfs. Укажите способ за $O(E)$ посчитать число пар $(e_1, e_2)$, таких что 1) $e1 \in T$; 2) $e2 \in T$; 3) граф $G$ после удаления рёбер $e_1$ и $e_2$ - не связен.
  48. В первом издании Кормена была ошибка. Там было сказано, что вершина v есть точка сочленения тогда и только тогда, когда (v - корень И у v ≥ 2 сына) ИЛИ (v - не корень И up[v] ≥ enter[v]). Приведите контрпример.
  49. Приведите пример графа с отрицательными рёбрами, на котором алгоритм Дейкстры работает неверно.
  50. Пусть веса рёбер не обязательно неотрицательны, но отрицательных циклов нет. Добавим в алгоритм Дейкстры следующее: если производится успешная релаксация по ребру $vx$ и $x \in U$, то вешина $x$ удаляется из $U$. Докажите, что, если этот алгоритм находит кратчайшие пути в графе.
  51. Приведите пример графа, в котором алгоритм из предыдущего задания рабоатает экспоненциальное время.
  52. Предложите граф, в котором алгоритм Дейкстры делает $\Omega(E)$ успешных релаксаций
  53. Доказать теорему об отсутствии кратчайшего пути на базе алгоритма Форда-Беллмана. (от $s$ до $v$ нет кратчайшего пути тогда и только тогда, когда она достижима из $u$, такой что после выполнения алгоритма Форда-Беллмана найдется ребро $xu$, для которого $d[x] + w(xu) < d[u]$)
  54. Разработать алгоритм на базе Форда-Беллмана, который ищет в графе отрицательный цикл.
  55. Укажите способ построить для некоторых $c_1, c_2 >0$ и любых V, E, где $c_1 V \le E \le c_2 V^2$ граф, на котором алгоритм Форда-Беллмана с очередью работает за $\Omega(VE)$.
  56. Пусть в графе $G$ есть вершина $s$, из которой достижимы все вершины. Обозначим как $\mu^*$ минимальный средний вес цикла в графе. Докажите, что $\mu^* = \min_v\max_k\frac{d_n(v)-d_k(v)}{n-k}$, где $d_i(v)$ - длина кратчайшего пути из $s$ до $v$, содержащего ровно $i$ ребер.
  57. Модифицируйте алгоритм Форда-Беллмана так, чтобы он находил в графе циклы минимального среднего веса за $O(VE)$ и $O(V^2)$ памяти.
  58. Модифицируйте алгоритм Флойда, чтобы найти в графе отрицательный цикл.
  59. Петя перепутал и написал в алгоритме Флойда "for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])". Постройте тест, на котором получившийся алгоритм работает неверно.
  60. Петя перепутал и написал в алгоритме Флойда "for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])". Заметив, что это работает неверно, он запустил этот алгоритм два раза. Будет ли получившийся алгоритм "for t from 1 to 2: for i: for j: for k: relax(d[i][j], d[i][k]+d[k][j])" корректным?