
- •Список вопросов по дисциплине «Структуры и алгоритмы обработки данных»
- •Алгоритм. Свойства алгоритма.
- •Понятие сложности алгоритма.
- •Классы сложности алгоритмов.
- •Структуры данных. Массив
- •Структуры данных. Связный список.
- •Структуры данных. Хэш-таблицы.
- •Структуры данных. Бинарное дерево. ??
- •Алгоритмы сортировки. Сортировка выбором.
- •Алгоритмы сортировки. Вставкой.
- •Алгоритмы сортировки. Обменом.
- •Алгоритмы сортировки. Шелла.
- •Алгоритмы сортировки. Турнирная.
- •Алгоритмы сортировки. Пирамидальная.
- •1. Постройте максимальную кучу из входных данных.
- •2. В этот момент самый большой элемент хранится в корне кучи. Замените его на последний элемент кучи, а затем уменьшите размер кучи на 1. Наконец, наведите корень дерева.
- •3. Повторите вышеуказанные шаги, пока размер кучи больше 1.
- •Алгоритмы сортировки. Быстрая.
- •Методы поиска. Бинарный.
- •Методы поиска. Бинарное дерево.
- •Методы поиска. Фибоначчиев.
- •Методы поиска. Интерполяционный.
- •Методы поиска в строке. Кнута-Морриса-Пратта.
- •Методы поиска в строке. Бойера-Мура.
- •Понятие стека.
- •Поиск в глубину.
- •Остовное дерево.
- •Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)
- •Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный
- •Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)
- •Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)
- •Алгоритмы поиска путей. Джонсона.(Динамическое программирование)
- •Алгоритмы поиска путей. Йена.(Динамическое программирование) Алгоритм для поиска альтернативных кратчайших путей в графе
- •Алгоритмы поиска путей. А*.(Эвристический алгоритм)
Поиск в глубину.
Берем граф
Берем точку , откуда начинаем, обрабатываем ее
Рассматриваем ее соседей и берем одного из них, обрабатываем
Рассматриваем ее соседей и берем одного из них, обрабатываем
И так берем по одной точке, пока у соседей не будут необработанные соседи, то есть у нас получается из графа вот такая прямая линия
Так мы всех проходим, друг за другом, а не прыгая сначала по ВСЕМ соседям одного, потом по соседям другого и так далее
Сложность О(V+E)
Остовное дерево.
Остовное дерево, это граф, ровно с тем количеством ребер, которое позволяет соединить все точки графа между собой
Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)
Берем произвольную вершину
От нее смотрю ребра с наименьшей ценой
Соединяю эту точку с той точкой у которой цена ребра самая маленькая
Дальше от этой точки также беру точку с минимальным значением цены ребра и так далее, пока не соберем полный остов
Пример
цикла, так делать нельзя
Сложность О(V^2) Данный алгоритм не эффективный
Лучшая реализация(Эффективный) алгоритма прима - поиск по приоритету(Сложность O(E log V))
Вводится некоторый накопитель, где будут находиться ребра кандидаты, то есть вводим некоторую очередь и туда помещаем некоторые ребра, а дальше выбираем самые дешевые из них
Алгоритм Краскала
Важное условие- связность графа
Изначально у нас есть 2 множества, одно множество точек и другое множество, где мы будем сохранять точки - множество остова
Выбираю ребро с самой маленькой ценой, записываю точки относящиеся к этому ребру в множество точек остова
Далее делаю также, до того момента, пока я не соберу все точки в остов
Во время этого процесса может быть 2 и более подмножеств остова, все зависит от графа, но в конечном итоге они объединяются в одно множество
Только во время этого процесса мы всегда выбираем ребро такое, которое не создает цикл и обрабатывает необработанные точки
Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный
Составляем матрицу смежности(таблицу с точками и значениями от точки до точки, то есть между соседями, если до точки нельзя добраться напрямую, то ничего не пишем или расстояние равно бесконечности)
Берем дополнительную точку и будем рассматривать все другие пары вершин, которые будут проходить через эту точку,то есть суммировать ребра от одной точку до дополнительной и до другой точки. Если значения будут меньше чем в таблице смежности, тогда меняем на меньшее значение
Далее берем еще дополнительную точку, теперь их две и все также суммируем значение проходя через них, если значение меньше, то меняем
Не совсем правильно работает при циклах с отрицательными значениями, но может работать как с отрицательными весами, так и с положительными
Построение таблицы всех кратчайших расстояний будет занимать O(V^3)