Для заданного графа мне нужно найти все вершины v, такие, что, если u достижима из v, то v также достижима из u. Я знаю, что вершину можно найти с помощью BFS или DFS, но она кажется неэффективной. Мне было интересно, есть ли лучшее решение для этой проблемы. Любая помощь будет оценена по достоинству.Достижимые вершины друг от друга
ответ
По сути, вы не собираетесь делать ничего лучше, чем какой-либо поиск (как вы указали). Я бы не стал слишком беспокоиться об эффективности: эти алгоритмы, как правило, линейны по числу узлов + ребер.
Проблема немного недоопределенный, так что я буду делать некоторые предположения о вашей структуре данных:
- Вы знаете вершину и (потому что вы не просили его найти)
- Вы можете перебирать как входящие и исходящие ребра узла (эффективно)
- Вы можете итерацию всех узлов в графе
- можно (эффективно) связать пару бит данных вместе с каждым узлом
В этом случае используйте удобный поиск, начиная с вершины u (глубина/ширина, не имеет значения) дважды: один раз после исходящих ребер (маркировка узлов как «достижимая от u») и один раз после входящих границ (маркировка узлов как «достижение u»). Наконец, итерация по всем узлам и сравнение двух бит в соответствии с вашей целью.
Примечание: в соответствии с вашим набором результатов все узлы, которые не достигают вершины u. Если вы предполагали соединение вместо импликации, вы можете сэкономить немного времени, включив тест во второй поиск, вместо того, чтобы сканировать все узлы на графике. Это также снимает предположение 3.
- 1. Два divs друг от друга
- 2. Генерация случайных чисел расстоянии друг от друга по меньшей мере, 10 друг от друга
- 3. Knockout.js textInput поля зависят друг от друга
- 4. listboxes, передающие значения друг от друга
- 5. методы тестирования, которые зависят друг от друга
- 6. Отдельные JSON Внутренние элементы друг от друга
- 7. Как теги наследуются друг от друга?
- 8. Как конструкторы RoutedCommand отличаются друг от друга?
- 9. классы python, наследующие друг от друга
- 10. Два экземпляра vertx изолированы друг от друга
- 11. Полимерный компонент не зависит друг от друга?
- 12. останавливать спрайтов от прохождения друг друга
- 13. Предотвращение перекрытия элементов друг от друга
- 14. Радиоустройства находятся слишком далеко друг от друга
- 15. Маркеры Google Maps ontop друг от друга
- 16. Как разместить ImageView ontop друг от друга?
- 17. Мои divs ontop друг от друга
- 18. Сдвиг Divs вне зависимости друг от друга
- 19. AS2 Враг «скользящий» друг от друга
- 20. остановка спрайтов от перекрытия/прохождения друг друга
- 21. Разделенные друг от друга боксы и стопки
- 22. Пробеги Интеграционные тесты изолированы друг от друга
- 23. Групповые координаты по близости друг от друга
- 24. Как масштабировать tds независимо друг от друга?
- 25. места плавающих див наверх друг от друга
- 26. Два члена зависят друг от друга?
- 27. Два контроллера, вызывающие функции друг от друга
- 28. Вычтите две строки друг от друга
- 29. Java. Занятия принимают информацию друг от друга.
- 30. отдельные пики друг от друга равноудаленно
искать алгоритмы для сильно связанных компонентов. любой алгоритм, который вы применяете, будет построен на каком-то поиске по краям, bfs/dfs просто будет систематическим ароматом. если у вас нет специальной априорной информации о структуре связности рассматриваемого графа, они будут такими же эффективными, как вы можете быть. – collapsar