Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AaSD.docx
Скачиваний:
2
Добавлен:
06.02.2024
Размер:
823.97 Кб
Скачать
  1. Обходы графа. Поиск в глубину, поиск в ширину

Определение: Граф - это абстрактная структура данных, состоящая из вершин (узлов) и ребер (связей между вершинами). Графы могут быть ориентированными (ребра имеют направление) или неориентированными (ребра не имеют направления).

Способы реализации графов:

1. Матрица смежности: граф представляется двумерным массивом, где каждый элемент указывает наличие или отсутствие ребра между двумя вершинами.

2. Список смежности: граф представляется списком, где каждая вершина имеет связанный список смежных с ней вершин.

3. Список ребер: граф представляется списком ребер, где каждое ребро определяется парой вершин, которые оно соединяет.

Время выполнения операций также зависит от выбранной реализации графа. Например, операции добавления вершины и ребра обычно выполняются за константное время (O(1)) в списках смежности и списках ребер, но могут потребовать O(n^2) времени в матрице смежности, где n - количество вершин.

Примеры обхода графа:

1. Поиск в ширину (BFS - Breadth-First Search): начиная с заданной вершины, происходит поэтапное обследование всех соседей вершины, затем переход к следующей "уровню" соседей. Поиск в ширину позволяет определить расстояния между вершинами и найти кратчайший путь в невзвешенном графе.

2. Поиск в глубину (DFS - Depth-First Search): начиная с заданной вершины, происходит исследование каждого соседа до тех пор, пока не будут исследованы все доступные пути. Поиск в глубину позволяет обнаруживать компоненты связности, классифицировать ребра графа и находить все циклы.

Классификация ребер при обходе в глубину в неориентированном графе:

- Ребра дерева (Tree Edges): ребра, которые образуют остовное дерево при обходе в глубину. Они связывают вершину с ее не посещенными соседями.

- Опорные ребра (Back Edges): ребра, которые соединяют вершину с ее предками в дереве обхода в глубину. Они указывают на наличие циклов в графе.

- Перекрестные ребра (Cross Edges): ребра, которые соединяют вершины, не являющиеся предками и потомками друг друга в дереве обхода в глубину. Они возникают в ациклических графах или при обходе неориентированного графа.

- Прямые ребра (Forward Edges): ребра, которые соединяют вершину с ее потомками в дереве обхода в глубину. Они возникают при наличии ориентированных ребер в графе.

Время выполнения обхода в ширину и обхода в глубину зависит от количества вершин и ребер в графе и может быть описано как O(V + E), где V - количество вершин, E - количество ребер.