Что такое граф в контексте структур данных?

«Что такое граф в контексте структур данных?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Граф — это абстрактная структура данных, состоящая из:

  • Вершин (узлов) — представляют сущности.
  • Рёбер (связей) — представляют отношения между вершинами.

Основные типы графов:

  1. Неориентированный граф: ребро соединяет две вершины без направления (A–B).
  2. Ориентированный граф (Digraph): ребро имеет направление (A → B).
  3. Взвешенный граф: рёбрам присвоены числовые значения (веса).

Пример реализации на Swift:

// Простое представление графа через список смежности
struct Graph<T: Hashable> {
    private var adjacencyList: [T: [T]] = [:]

    mutating func addVertex(_ vertex: T) {
        adjacencyList[vertex] = []
    }

    mutating func addEdge(from source: T, to destination: T) {
        adjacencyList[source, default: []].append(destination)
        // Для неориентированного графа добавить также обратную связь:
        // adjacencyList[destination, default: []].append(source)
    }
}

// Использование
var graph = Graph<String>()
graph.addVertex("A")
graph.addVertex("B")
graph.addEdge(from: "A", to: "B") // Создаём направленное ребро A → B

Применение: моделирование сетей (социальных, транспортных), иерархий, зависимостей, поиск кратчайшего пути (алгоритмы Дейкстры, BFS).