Почему временная сложность как DFS, так и BFS O (V + E)
Основной алгоритм для BFS:
set start vertex to visited
load it into queue
while queue not empty
for each edge incident to vertex
if its not visited
load into queue
mark vertex
Итак, я думаю, что временная сложность будет:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
где v
- вершина 1
до n
Во-первых, это то, что я сказал правильно? Во-вторых, как это O(N + E)
, и интуиция относительно того, почему было бы действительно приятно. Благодаря
Ответы
Ответ 1
Ваша сумма
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
можно переписать как
(v1 + v2 + ... + vn) + [(incident_edges v1) + (incident_edges v2) + ... + (incident_edges vn)]
а первая группа O(N)
, а другая - O(E)
.
Ответ 2
ДФС (анализ):
- Установка/получение метки вершины/края занимает
O(1)
время
- Каждая вершина помечена дважды
- один раз как UNEXPLORED
- один раз как ПОСЕТИЛ
- Каждый ребро помечен дважды
- один раз как UNEXPLORED
- один раз как DISCOVERY или BACK
- Метод randomEdges вызывается один раз для каждой вершины
- DFS работает в
O(n + m)
времени, если граф представлен структурой списка смежности
- Напомним, что
Σv deg(v) = 2m
BFS (анализ):
- Установка/получение метки вершины/края принимает O (1) время
- Каждая вершина помечена дважды
- один раз как UNEXPLORED
- один раз как ПОСЕТИЛ
- Каждый ребро помечен дважды
- один раз как UNEXPLORED
- один раз как DISCOVERY или CROSS
- Каждая вершина вставляется один раз в последовательность
Li
- Метод randomEdges вызывается один раз для каждой вершины
- BFS работает в
O(n + m)
времени, если граф представлен структурой списка смежности
- Напомним, что
Σv deg(v) = 2m
Ответ 3
Очень упрощен без большой формальности: каждое ребро рассматривается ровно дважды, и каждый node обрабатывается ровно один раз, поэтому сложность должна быть постоянной кратной количеству ребер, а также количеству вершин.
Ответ 4
Сложность времени O(E+V)
вместо O(2E+V)
, потому что если временная сложность равна n ^ 2 + 2n + 7, то она записывается как O (n ^ 2).
Следовательно, O (2E + V) записывается как O (E + V)
поскольку разница между n ^ 2 и n имеет значение, но не между n и 2n.
Ответ 5
Я думаю, что каждое ребро рассматривалось дважды, и каждый node посещался один раз, поэтому общая временная сложность должна быть O (2E + V).
Ответ 6
Краткое, но простое объяснение:
В худшем случае вам нужно будет посетить всю вершину и край, следовательно временная сложность в худшем случае равна O (V + E)
Ответ 7
Интуитивное объяснение этому состоит в простом анализе одного цикла:
- посетите вершину → O (1)
- цикл for на всех падающих ребрах → O (e), где e - число ребер, падающих на заданную вершину v.
Таким образом, общее время для одного цикла равно O (1) + O (e). Теперь суммируем его для каждой вершины, когда каждая вершина посещается один раз. Это дает
Sigma_i
p {
height: 50px;
line-height: 50px;
}
span {
position: relative;
font-size: 2.5em;
display: inline-block;
line-height: .7em;
vertical-align: middle;
}
span:before {
font-size: 12px;
display: block;
position absolute;
left: 0;
top: 0;
content: "V";
width: 22px;
text-align: center;
}
span:after {
font-size: 12px;
display: block;
position absolute;
left: 0;
bottom: 0;
content: "k = 1";
width: 27px;
text-align: center;
}
<p>
<span>Σ</span>
O(1) + O(e)
=>
<span>Σ</span>
O(1)
+
<span>Σ</span>
O(e)
=> O(V) + O(E)
</p>