Граф состоит из конечного множества вершин (узлов) и набора рёбер,
соединяющих эти вершины. Две вершины считаются смежными, если они соединены друг с другом одним и тем же ребром. Ниже приведён ряд базовых понятий, относящихся к графам. Они проиллюстрированы примерами на рисунке 1. Порядок: число вершин в графе. Размер: число рёбер в графе. Степень вершины: число рёбер, инцидентных вершине. Изолированная вершина: вершина, которая не связана ни с одной другой вершиной графа. Петля: ребро, вершины которого совпадают. Ориентированный граф: граф, в котором все рёбра имеют направление, определяющее начальную и конечную вершину. Неориентированный граф: граф с рёбрами, которые не имеют направления. Взвешенный граф: рёбра такого графа имеют определённый вес. Невзвешенный граф: рёбра такого графа не имеют никаких весов.
1. Поиск в ширину Рис. 2. Визуальное отображение обхода на графах (поиск в ширину) Обход или поиск — это одна из фундаментальных операций, выполняемых на графах. Поиск в ширину начинается с определённой вершины, затем исследуются все её соседи на данной глубине и происходит переход к вершинам следующего уровня. В графах, в отличие от деревьев, могут быть циклы — пути, в которых первая и последняя вершины совпадают. Поэтому необходимо отслеживать посещённые алгоритмом вершины. При реализации алгоритма поиска в ширину используется структура данных «очередь». На рисунке 2 показан пример того, как выглядит поиск в ширину на графе. Жёлтым цветом помечаются обнаруженные вершины, красным — посещённые. Применяется для: определения кратчайших путей и минимальных остовных деревьев; индексации веб-страниц поисковыми ботами; поиска в соцсетях; нахождения доступных соседних узлов в одноуровневых сетях, таких как BitTorrent. 2. Поиск в глубину Рис. 3. Визуальное отображение обхода на графах (поиск в глубину) Поиск в глубину начинается с определённой вершины, затем уходит как можно дальше вдоль каждой ветви и возвращается обратно. Здесь тоже необходимо отслеживать посещённые алгоритмом вершины. Для того, чтобы стало возможным возвращение обратно, при реализации алгоритма поиска в глубину используется структура данных «стек». На рисунке 3 показан пример того, как выглядит поиск в глубину на том же графе, который использован на рисунке 2. Граф обходится на всю глубину каждой ветви с возвращением обратно. Применяется: для нахождения пути между двумя вершинами; для обнаружения циклов на графе; в топологической сортировке; в головоломках с единственным решением (например, лабиринтах). 3. Кратчайший путь Рис. 4. Визуальное отображение кратчайшего пути от вершины 1 к вершине 6 Кратчайший путь от одной вершины графа к другой — это путь, при котором сумма весов рёбер, его составляющих, должна быть минимальна. На рисунке 4 показан кратчайший путь на графе от вершины 1 до вершины 6. Алгоритмы нахождения кратчайшего пути: 1. Алгоритм Дейкстры(для неотрицательных весов на ребрах) 2. Алгоритм Беллмана-Форда(любой вес на ребре). Применяются в: картографических сервисах типа Google maps или Apple maps для прокладки маршрутов и определения местоположения; сетях для решения проблемы минимальной задержки пути; абстрактных автоматах для определения через переход между различными состояниями возможных вариантов достижения некоторого целевого состояния, например минимально возможного количества ходов, необходимого для победы в игре. 4. Обнаружение циклов Рис. 5. Цикл Цикл — это путь, в котором первая и последняя вершины графа совпадают. То есть путь, начинающийся и завершающийся в одной и той же вершине, называется циклом. Обнаружение циклов — это процесс выявления таких циклов. На рисунке 5 показано, как происходит обнаружение цикла. Алгоритмы обнаружения цикла: 1. Алгоритм Флойда. 2. Алгоритм Брента. Применяются: в распределённых алгоритмах, использующих сообщения; для обработки крупных графов с использованием распределённой системы обработки в кластере; для обнаружения взаимоблокировок в системах с параллельным выполнением; в криптографических приложениях для выявления ключей сообщения, которые могут соответствовать одному и тому же зашифрованному значению.
Лабораторная Работа №6 Настройка Конфигураций Nat-Pt, 6To4 Туннель При Переходе От Ipv4 К Ipv6 Систему Адресации Цель работы: Изучение конфигурации туннель 6to4 и конфигурации Задача
iota, for - each и transform all - of, any - of, none - of count, count - if, find, find - if sort, stable - sort, nth - element lower - bound, upper - bound, binary - search Резюме Источники