
- •Список вопросов по дисциплине «Структуры и алгоритмы обработки данных»
- •Алгоритм. Свойства алгоритма.
- •Понятие сложности алгоритма.
- •Классы сложности алгоритмов.
- •Структуры данных. Массив
- •Структуры данных. Связный список.
- •Структуры данных. Хэш-таблицы.
- •Структуры данных. Бинарное дерево. ??
- •Алгоритмы сортировки. Сортировка выбором.
- •Алгоритмы сортировки. Вставкой.
- •Алгоритмы сортировки. Обменом.
- •Алгоритмы сортировки. Шелла.
- •Алгоритмы сортировки. Турнирная.
- •Алгоритмы сортировки. Пирамидальная.
- •1. Постройте максимальную кучу из входных данных.
- •2. В этот момент самый большой элемент хранится в корне кучи. Замените его на последний элемент кучи, а затем уменьшите размер кучи на 1. Наконец, наведите корень дерева.
- •3. Повторите вышеуказанные шаги, пока размер кучи больше 1.
- •Алгоритмы сортировки. Быстрая.
- •Методы поиска. Бинарный.
- •Методы поиска. Бинарное дерево.
- •Методы поиска. Фибоначчиев.
- •Методы поиска. Интерполяционный.
- •Методы поиска в строке. Кнута-Морриса-Пратта.
- •Методы поиска в строке. Бойера-Мура.
- •Понятие стека.
- •Поиск в глубину.
- •Остовное дерево.
- •Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)
- •Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный
- •Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)
- •Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)
- •Алгоритмы поиска путей. Джонсона.(Динамическое программирование)
- •Алгоритмы поиска путей. Йена.(Динамическое программирование) Алгоритм для поиска альтернативных кратчайших путей в графе
- •Алгоритмы поиска путей. А*.(Эвристический алгоритм)
Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)
Граф - ориентированный или частично ориентированный
Берется начальная точка, далее обозначаются точки до которых можно добраться - значениями ребра(весом), а те, до которых невозможно добраться из начальной точки - бесконечностью или 0, только после всех этих действий начальная точка является обработанной.
!!Также если из точки нельзя никуда добраться, тогда она считается обработанной
Далее, берем другую точку(тоже не обработанную) и рассматриваем пути до других необработанных точек. Если прохождение по ребрам от нашей точки до необработанной точки, меньше, чем значение которое было поставлено при предыдущем прохождении до этой точки, то ее значение веса меняется на новое, меньшее значение. Только после этих действий исходная точка, с которой проходило сравнение является обработанной
И так далее продолжается пока все точки не пройдешь
Подытожим алгоритм для необработанной точки: берем точку, обрабатываем ее соседей(пишем вес точки), далее начальная точка считается обработанной и идем далее
https://www.youtube.com/watch?v=-cuoV89nRGo - если не понимаете
https://www.youtube.com/watch?v=54LoGg7dfsc - если не понимаете
Важно: Алгоритм не работает с отрицательными весами, то есть если мы уходим в минус, то он себя плохо показывает
Сложность в простейшем случае - О (LOGv V^2) - очень странное значение
Построение таблицы всех кратчайших расстояний будет занимать O(V^3 * log V)
В
простейшем случае, когда для поиска
вершины с минимальным значением
просматривается всё множество вершин
Для
разреженных графов
Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)
Граф должен быть ориентированный
Алгоритм работает также как и у Дейкстры, только и с отрицательными весами. То есть обрабатывает пары точек, чтобы найти минимальный путь
Алгоритмы поиска путей. Джонсона.(Динамическое программирование)
Он состоит из 2 алгоритмов Беллмана-Форда и дейкстры
Алгоритм Беллмана-Форда используется для предварительной обработки графа, заменяя веса ребер на неотрицательные
Далее к получившемуся графу многократно применяется алгоритм Дейкстры
Алгоритм Джонсона:
Строится дополнительная вершина, соединяется со всеми другими вершинами. При этом новые дуги изначально имеют вес, равный нулю.
Применяется алгоритм Беллмана-Форда - вычисляются расстояния от новой вершины до остальных.
Изменяем веса дуг, используя значения кратчайших путей, полученные в предыдущем пункте. Используем формулу: D(u,v) = D(u,v) + h(u) - h(v)
Дополнительная вершина удаляется
Алгоритм Дейкстры применяется ко всем вершинам.
D(u,v) - вес ребра от u до v
h(u) -расстояние по беллману форду от новой вершини до u
h(v) - расстояние до вершины v, которое было изначально
Сложность: O( (V^2) * log(V)+VE), где V- количество вершин, а Е - количество ребер
Преимущества:
1) Работает с отрицательными весами ребер.
2) Асимптотически быстрее алгоритма Флойда на разреженных графах.
3) Кратчайшие пути находятся между всеми парами вершин.