Типы графиков в структуре данных с примерами

⚡ Умное резюме

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

  • 📐 Определение: Граф G = (V, E) — это нелинейная структура, где V — множество вершин, а E — множество ребер, соединяющих пары вершин.
  • ➡️ Направление: В ориентированных графах используются рёбра, обозначенные стрелками, с фиксированными источником и целью, тогда как в неориентированных графах допускается двунаправленное перемещение по каждому ребру.
  • Вес В взвешенных графах каждому ребру присваивается числовая стоимость, тогда как в невзвешенных графах все ребра рассматриваются как соединения с одинаковой стоимостью.
  • 🔁 Циклы: Циклические графы содержат один или более циклов; ориентированный ациклический граф (DAG) запрещает циклы и позволяет осуществлять планирование и топологическую сортировку.
  • 🔗 Полнота: Полные графы соединяют любую пару вершин, связные графы допускают путь между любыми двумя вершинами, а пустые графы не имеют ребер.
  • 🧩 Специальные типы: Двудольные графы, графы Эйлера, графы Гамильтона, мультиграфы, циклические графы и тривиальные графы — каждый из них устанавливает определенные правила расположения вершин и ребер.

Типы графов в структуре данных

Граф — это нелинейная структура данных, состоящая из вершин и рёбер. Вершины содержат информацию или данные, а рёбра служат связующим звеном между парами вершин.

Графы могут быть разных типов, в зависимости от расположения узлов и ребер. Вот некоторые важные типы графов:

Направленный график

Ребра ориентированного графа снабжены стрелками, указывающими направление. Стрелка определяет, куда направлено ребро или где оно заканчивается. Вот пример ориентированного графа.

Направленный график

Направленный график

  • Мы можем перейти от узла A к D.
  • Однако мы не можем перейти от узла D к узлу A, поскольку ребро указывает от A к D.
  • Поскольку в графе нет весов, путешествие из вершины A в D будет стоить столько же, сколько путешествие из D в F.

Ненаправленный граф

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

Ненаправленный граф

Ненаправленный граф

На приведенном выше графике

  • Мы можем переместиться из точки А в точку В.
  • Мы также можем перейти из B в A.
  • Ребра не содержат направлений.

Это пример неориентированного графа, имеющего конечное число вершин и ребер без весов.

Взвешенный график

Граф, в ребрах которого указаны веса или стоимости, называется взвешенным графом. Числовое значение обычно представляет собой стоимость перемещения от одной вершины к другой. Как ориентированные, так и неориентированные графы могут иметь веса на своих ребрах. Вот пример взвешенного графа (ориентированного).

Ориентированный граф с весом

Ориентированный граф с весом

  • От точки А до точки В есть ребро, и его вес равен 5, что означает, что перемещение из точки А в точку В обойдется нам в 5.
  • Точка А указывает на точку В, но в этом графе точка В не имеет прямого ребра над точкой А. Следовательно, мы не можем перейти из точки В в точку А.
  • Однако, если мы хотим перейти из A в F, существует несколько путей. Это пути ADF и ABF. Путь ADF будет стоить (10+11) или 21.
  • Здесь путь ABF будет стоить (5+15) или 20. Здесь мы суммируем вес каждого ребра в пути.

Вот пример неориентированного графа с весами:

Неориентированный граф с весом

Неориентированный граф с весом

Здесь край имеет вес, но не имеет направления. Значит, путешествие из вершины A в D будет стоить 10 и наоборот.

Двунаправленный граф

Двунаправленные и неориентированные графы обладают общим свойством. А именно:

  • Как правило, неориентированный граф может иметь одно ребро между двумя вершинами.

Например:

Двунаправленный граф

  • Здесь перемещение из A в D или из D в A будет стоить 10.
  • В двунаправленном графе между двумя вершинами может быть два ребра.

Вот пример:

Двунаправленный граф

Двунаправленный граф

Путешествие из точки А в точку D обойдется нам в 17, а путешествие из точки D в точку А — в 12. Следовательно, мы не можем присвоить два разных веса, если это неориентированный граф.

Бесконечный граф

Граф будет содержать бесконечное количество рёбер и узлов. Если граф бесконечен и одновременно является связным, то он будет содержать бесконечное количество рёбер. В данном случае под «расширенными рёбрами» подразумевается, что к этим узлам может быть подключено больше рёбер. Вот пример бесконечного графа:

Бесконечный граф

Бесконечный граф

Нулевой график

Нулевой граф содержит только узлы или вершины, но не имеет ребер. Если задан граф G = (V, E), где V — вершины, а E — ребра, он будет нулевым, если число ребер E равно нулю. Вот пример нулевого графа:

Нулевой график

Нулевой график

Тривиальный граф

Структура данных типа граф считается тривиальной, если в ней присутствует только одна вершина или узел без рёбер. Вот пример тривиального графа:

Тривиальный граф

Мультиграф

Граф называется мультиграфом, если между двумя вершинами имеется несколько ребер, или если вершина образует петлю. В терминологии структур данных графов термин «петля» означает ребро, указывающее на одну и ту же вершину. Мультиграф может быть ориентированным или неориентированным. Вот пример мультиграфа:

Мультиграф

Из точки B в точку A ведут два ребра. Кроме того, вершина E образует петлю. Приведенный выше граф является ориентированным графом без весов на ребрах.

Полный график

Граф называется полным, если каждая вершина имеет направленные или ненаправленные ребра со всеми остальными вершинами. Предположим, что всего существует V вершин, и каждая вершина имеет ровно V-1 ребро. Тогда такой граф будет называться полным графом. В этом типе графа каждая вершина соединена со всеми остальными вершинами ребрами. Вот пример полного графа с пятью вершинами:

Полный график

На изображении видно, что общее количество узлов равно пяти, и у каждого узла ровно четыре ребра.

Связанный граф

Граф называется связным, если, начав движение из вершины, мы можем пройти через все вершины графа. Для этого между каждой парой вершин должно быть хотя бы одно ребро. Вот пример связного графа:

Связанный граф

Вот пояснение к приведенному выше связному графу:

  • Предположим, что между C и F нет ребра, тогда мы не сможем перейти из A в G. Однако ребро C в F позволяет нам перейти из заданного узла в любой узел.
  • Полный граф является связным графом, потому что мы можем переходить от узла к любому другому узлу данного графа.

Циклический график

Граф называется циклическим, если в нём присутствует один или более циклов. Вот пример циклического графа:

Циклический график

Здесь вершины A, B и C образуют цикл. Граф может содержать несколько циклов.

Направленный ациклический граф (DAG)

Граф называется направленным ациклическим графом (DAG), если в нем нет циклов. DAG важен при построении... Топологическая сортировка или для определения порядка выполнения. Ориентированный ациклический граф (DAG) также важен для создания систем планирования или сканирования зависимостей ресурсов и т. д. Однако в приведенном выше графе нет циклов. Вот простой пример ориентированного ациклического графа (DAG):

Направленный ациклический граф (DAG)

График цикла

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

График цикла

Двудольный граф

Эти виды Графики Двудольные графы — это особые типы графов, в которых вершины относятся к двум множествам. Двудольный граф должен подчиняться правилу:

  • Два множества вершин должны быть различными, то есть все вершины должны быть разделены на две группы или множества.
  • Вершины, принадлежащие к одному и тому же набору, не должны образовывать рёбра.

Двудольный граф

Граф Эйлера

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

Граф Эйлера

Все вершины имеют четную степень. Вершины A, D, E и H имеют по две степени. Здесь же вершина C имеет четыре степени, что является четным числом.

График Гамильтона

Гамильтонов граф — это связный граф, в котором можно пройти через все вершины из данной вершины, не возвращаясь к той же самой вершине и не используя то же самое ребро. Такой связный граф известен как «гамильтонов граф». Путь, который вы проходите, чтобы проверить, является ли данный граф гамильтоновым или нет, называется гамильтоновым путем. Вот простой пример гамильтоновского графа:

График Гамильтона

На этом изображении мы можем посетить все вершины любого узла в приведенном выше графике. Один из путей может быть АДЧБЕТакже можно найти гамильтонов цикл. Гамильтонов цикл начинается и заканчивается в одной и той же вершине. Таким образом, гамильтонов цикл будет представлять собой АДЧБЕА.

Часто задаваемые вопросы (FAQ)

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

В ориентированных графах используются рёбра со стрелками, указывающими от источника к цели, что ограничивает перемещение только этим направлением. В неориентированных графах используются рёбра без стрелок, что позволяет перемещаться между соединёнными вершинами в любом направлении.

Направленный ациклический граф (DAG) — это направленный граф, не содержащий циклов. DAG широко используются для планирования задач, систем сборки, разрешения зависимостей пакетов и любых рабочих процессов, требующих соблюдения допустимого топологического порядка.

Взвешенный граф присваивает каждому ребру числовой вес, представляющий расстояние, время или стоимость. Алгоритмы поиска кратчайшего пути, такие как алгоритм Дейкстры и протоколы маршрутизации в сетях, используют взвешенные графы для нахождения наиболее эффективного пути.

В полном графе между каждой парой вершин есть ребро. В связном графе между каждой парой вершин достаточно пути. Каждый полный граф является связным, но не каждый связный граф является полным.

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

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

Да. Инструменты AI Copilot, такие как GitHub Copilot и ChatGPT, генерируют шаблонный код для алгоритмов BFS, DFS, Дейкстры и топологической сортировки на большинстве языков. Разработчикам по-прежнему необходимо проверять граничные случаи, обработку циклов и сложность кода для использования в производственной среде.

Подведем итог этой публикации следующим образом: