JavaRush /Курсы /Модуль 1: Python Core /Представление графов

Представление графов

Модуль 1: Python Core
17 уровень , 5 лекция
Открыта

6.1 Матрица смежности: принцип работы, плюсы и минусы

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

  • Если существует ребро между вершинами i и j, то элемент A[i][j] = 1 (или вес ребра, если граф взвешенный).
  • Если рёбра нет, то A[i][j] = 0.

Пример:

Для графа с вершинами A, B, C и рёбрами (A, B), (B, C) и (C, A) матрица смежности будет:

Если бы все вершины были соединены со всеми, то матрица смежности выглядела бы вот так:

Плюсы:

  • Простота: легко понять и реализовать.
  • Быстрый доступ: проверка наличия ребра между двумя вершинами выполняется за O(1).
  • Подходит для плотных графов: эффективен для графов с большим количеством рёбер.

Минусы:

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

6.2 Списки смежности: принцип работы, плюсы и минусы

Списки смежности — это способ представления графа в виде массива списков. Каждый элемент массива соответствует вершине графа и содержит список всех смежных с ней вершин.

Пример:

Для графа с вершинами A, B, C и рёбрами (A, B), (B, C) и (C, A) списки смежности будут:

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

Плюсы:

  • Эффективное использование памяти: требует O(V + E) памяти, где V — количество вершин, E — количество рёбер, что делает его более подходящим для разреженных графов.
  • Лёгкость обхода: удобен для выполнения операций обхода графа (например, поиск в ширину или в глубину).

Минусы:

  • Более сложный доступ: проверка наличия ребра между двумя вершинами требует O(k) времени, где k — количество соседей вершины.
  • Менее очевидная структура: более сложен в реализации и понимании по сравнению с матрицей смежности.

6.3 Сравнение различных методов представления графов

Давайте сравним различные методы представления графов.

1. Матрица смежности:

  • Простота: легко понять и реализовать.
  • Память: требует O(n^2) памяти, что может быть неэффективно для разреженных графов.
  • Быстрота доступа: проверка наличия ребра выполняется за O(1).
  • Подходит: для плотных графов с большим количеством рёбер.

2. Списки смежности:

  • Простота: менее очевидны, чем матрица смежности, но также понятны.
  • Память: требуют O(V + E) памяти, что более эффективно для разреженных графов.
  • Быстрота доступа: проверка наличия ребра выполняется за O(k), где k — количество соседей вершины.
  • Подходят: для разреженных графов с малым количеством рёбер.

Сравнение:

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

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

2
Задача
Модуль 1: Python Core, 17 уровень, 5 лекция
Недоступна
Утро Адама: ищем ребро
Утро Адама: ищем ребро
2
Задача
Модуль 1: Python Core, 17 уровень, 5 лекция
Недоступна
Список смежности
Список смежности
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Дмитрий/MrJonson Уровень 65
23 апреля 2025
ппц if 0 > vertex1 >= len(matrix) or 0 > vertex2 >= len(matrix) : почему на это условие Ваш бот проверки ругается и пишет что оно не правильно и требует заменить на это if vertex1 < 0 or vertex1 >= len(matrix) or vertex2 < 0 or vertex2 >= len(matrix): Хотя и с моим условием все нормально работает ?