Заметки:
- Breadth-First-Search (BFS) — алгоритм, работающий с графами.
- Поиск в ширину позволяет найти кратчайшее расстояние между двумя объектами.
- Граф моделирует набор связей. Он состоит из узлов и ребер. Узел может быть напрямую соединен с несколькими другими узлами. Эти узлы называются соседями.
- Поиск в ширину помогает ответить на вопросы "Существует ли путь от точки А к точке В?" и "Как выглядит кратчайший путь от точки А к точке В?"
- Сначала проверяем связи первого уровня (ближайшие кружочки), а потом второго уровня (через один кружочек).
- Проверяем всё в порядке добавления (очередь).
- Графы реализуем через хеш-таблицу: узел — ключ и все его значения.
- Добавлять ключи можно в любом порядке. Направленный граф — отношения действуют только в одну сторону.
Как написать алгоритм с графами:
1) Создаем очередь с проверяемыми (двусторонняя) элементами.
1) Создаем очередь с проверенными элементами (двусторонняя).
3) Проверяем, подходит ли элемент.
4) Если нет, добавляем в очередь всех его соседей.
5) Если да, завершаем.
6) Цикл.
7) Также следует проверять, что элемента нет в списке проверенных.
Теперь про интересное — время выполнения.
- Добавление в очередь выполняется за О(1).
- Выполнение для одного элемента потребует О(количество элементов).
- Поиск в ширину выполняется за О(V + E), где V — количество вершин, а E — количество ребер.
Генеалогическое древо — это тоже граф. Если у графа нет ребер, указывающих в обратном направлении, то это дерево.
Любое дерево является графом, но не наоборот.
Дубль статей в телеграмме — https://t.me/android_junior
Аналог твиттера в телеграмме — https://t.me/android_junior_notes