Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_SiAOD_2021.docx
Скачиваний:
110
Добавлен:
01.04.2022
Размер:
5 Mб
Скачать
  1. Поиск в глубину.

  • Берем граф

  • Берем точку , откуда начинаем, обрабатываем ее

  • Рассматриваем ее соседей и берем одного из них, обрабатываем

  • Рассматриваем ее соседей и берем одного из них, обрабатываем

  • И так берем по одной точке, пока у соседей не будут необработанные соседи, то есть у нас получается из графа вот такая прямая линия

Так мы всех проходим, друг за другом, а не прыгая сначала по ВСЕМ соседям одного, потом по соседям другого и так далее

Сложность О(V+E)

  1. Остовное дерево.

Остовное дерево, это граф, ровно с тем количеством ребер, которое позволяет соединить все точки графа между собой

Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)

  • Берем произвольную вершину

  • От нее смотрю ребра с наименьшей ценой

  • Соединяю эту точку с той точкой у которой цена ребра самая маленькая

  • Дальше от этой точки также беру точку с минимальным значением цены ребра и так далее, пока не соберем полный остов

Пример цикла, так делать нельзя

Сложность О(V^2) Данный алгоритм не эффективный

Лучшая реализация(Эффективный) алгоритма прима - поиск по приоритету(Сложность O(E log V))

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

Алгоритм Краскала

Важное условие- связность графа

Изначально у нас есть 2 множества, одно множество точек и другое множество, где мы будем сохранять точки - множество остова

  • Выбираю ребро с самой маленькой ценой, записываю точки относящиеся к этому ребру в множество точек остова

  • Далее делаю также, до того момента, пока я не соберу все точки в остов

Во время этого процесса может быть 2 и более подмножеств остова, все зависит от графа, но в конечном итоге они объединяются в одно множество

Только во время этого процесса мы всегда выбираем ребро такое, которое не создает цикл и обрабатывает необработанные точки

  1. Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный

Составляем матрицу смежности(таблицу с точками и значениями от точки до точки, то есть между соседями, если до точки нельзя добраться напрямую, то ничего не пишем или расстояние равно бесконечности)

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

  • Далее берем еще дополнительную точку, теперь их две и все также суммируем значение проходя через них, если значение меньше, то меняем

Не совсем правильно работает при циклах с отрицательными значениями, но может работать как с отрицательными весами, так и с положительными

Построение таблицы всех кратчайших расстояний будет занимать O(V^3)