Всем привет! Наверное, очень глупый вопрос, но все же =) Изучаю графы,

понял, как работает DFS и BFS.

Зачем они нужны в задаче перебора всех вершин, если мы можем, например, в случае с adjacency list просто пройтись по всем ключам в хэшмапе?

Например,

map[int, set[int]] - adjacency list

Просто перечислить все ключи, которые соответствуют вершинам, они же уникальные.

Или это лишь базовый пример перечисления и DFS/BFS используются в более сложных задачах?

8 ответов

28 просмотров

Это два базовых алгоритма обработки графа который используется в других алгоритмах как грубо говоря подпрограмма. Например алгоритм поиска циклов в графе подразумевает обход графа в ширину или глубину с проверкой того что ни одна из вершин которые мы проходим уже не была пройдена ранее

Iskander-R Автор вопроса
Ilya Zviagin
Это два базовых алгоритма обработки графа который ...

Понял. Получается, в случае задачи, где нужно просто перечислить все вершины в графе, то достаточно обойтись без DFS/BFS, перечислив все ключи в хэшмапе?

Iskander R
Понял. Получается, в случае задачи, где нужно прос...

Вообще-то странно Потому что эти два алгоритма и есть перечисления всех вершин Ну и рёбер графа, правда в определённом порядке

Iskander R
Понял. Получается, в случае задачи, где нужно прос...

Естественно Если у тебя есть какие-то другие способы перебирать все вершины и тебе не нужен поиск в глубину или в ширину, то ты их можешь не делать

Iskander R
Понял. Получается, в случае задачи, где нужно прос...

Ну у тебя уже есть все вершины, ты же их хранишь. BFS/DFS про обход в каком то порядке

Iskander-R Автор вопроса
Evgenii Zheltonozhskii🇮🇱
Ну у тебя уже есть все вершины, ты же их хранишь. ...

Во, вот это мне интересно. То есть, если мне не нужен порядок, а достаточно вернуть список всех вершин графа G, а сам граф реализован в виде списка смежности - хэшмапа, ключи - вершины, значения - список соседних вершин map[int, set[int]] то хватит перебора всех ключей за O(E)?

Iskander R
Во, вот это мне интересно. То есть, если мне не ну...

Да хватит перебора всех ключей за O(|V|). Буквой Е ребра обычно обозначаются

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта