- •Список вопросов по дисциплине «Структуры и алгоритмы обработки данных»
- •Алгоритм. Свойства алгоритма.
- •Понятие сложности алгоритма.
- •Классы сложности алгоритмов.
- •Структуры данных. Массив
- •Структуры данных. Связный список.
- •Структуры данных. Хэш-таблицы.
- •Структуры данных. Бинарное дерево. ??
- •Алгоритмы сортировки. Сортировка выбором.
- •Алгоритмы сортировки. Вставкой.
- •Алгоритмы сортировки. Обменом.
- •Алгоритмы сортировки. Шелла.
- •Алгоритмы сортировки. Турнирная.
- •Алгоритмы сортировки. Пирамидальная.
- •1. Постройте максимальную кучу из входных данных.
- •2. В этот момент самый большой элемент хранится в корне кучи. Замените его на последний элемент кучи, а затем уменьшите размер кучи на 1. Наконец, наведите корень дерева.
- •3. Повторите вышеуказанные шаги, пока размер кучи больше 1.
- •Алгоритмы сортировки. Быстрая.
- •Методы поиска. Бинарный.
- •Методы поиска. Бинарное дерево.
- •Методы поиска. Фибоначчиев.
- •Методы поиска. Интерполяционный.
- •Методы поиска в строке. Кнута-Морриса-Пратта.
- •Методы поиска в строке. Бойера-Мура.
- •Понятие стека.
- •Поиск в глубину.
- •Остовное дерево.
- •Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)
- •Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный
- •Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)
- •Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)
- •Алгоритмы поиска путей. Джонсона.(Динамическое программирование)
- •Алгоритмы поиска путей. Йена.(Динамическое программирование) Алгоритм для поиска альтернативных кратчайших путей в графе
- •Алгоритмы поиска путей. А*.(Эвристический алгоритм)
Алгоритмы сортировки. Вставкой.
Из неупорядоченного мн-ва эл-т выбирается поочередно каждый и сравнивается с предыдущими уже упорядоченными. И помещается на соответствующее место между ними.
Сложность: O(n^2)
Алгоритмы сортировки. Обменом.
Элемент сравниваем последовательно друг с другом и меняем местами, если эл-т больше последующего.
Сложность:O(n^2)
Суть алгоритма пузырьковой сортировки состоит в сравнении
соседних элементов и их обмене, если они находятся
не в надлежащем порядке. Неоднократно выполняя это действие,
мы заставляем наибольший элемент "всплывать" к концу массива.
Алгоритмы сортировки. Шелла.
считаем шаг d=n/2, где n- длина массива.
!шаг каждый раз уменьшается в 2 раза (если нечетное кол-во шаг в меньшую сторону
Сравниваем эл-ты, находящиеся на расстоянии этого шага
Сложность:O(n^2)?????????????
ИНЫМИ СЛОВАМИ:
Суть её похожа на сортировку пузырьком,
Идея метода заключается в сравнение разделенных на группы элементов
последовательности, находящихся друг от друга на некотором расстоянии.
Изначально это расстояние равно d или N/2, где N — общее число элементов.
На первом шаге каждая группа включает в себя два элемента расположенных
друг от друга на расстоянии N/2; они сравниваются между собой, и,
в случае необходимости, меняются местами. На последующих шагах
также происходят проверка и обмен, но расстояние d сокращается на d/2,
и количество групп, соответственно, уменьшается.
Постепенно расстояние между элементами уменьшается,
и на d=1 проход по массиву происходит в последний раз.
Алгоритмы сортировки. Турнирная.
(метод бинарного дерева)
Этот метод сортировки получил свое название из-за сходства с кубковой системой проведения спортивных соревнований: участники соревнований разбиваются на пары, в которых разыгрывается первый тур; из победителей первого тура составляются пары для розыгрыша второго тура и т.д. Алгоритм сортировки состоит из двух этапов. На первом этапе строится дерево: аналогичное схеме розыгрыша кубка.
Турнирное дерево может использоваться для сортировки списка из N элементов. Рассмотрим эффективный алгоритм, использующий дерево, представленное в виде массива. Пусть имеется последовательно представленное дерево, содержащее N элементов листовых узлов в нижнем ряду. Эти элементы запоминаются на уровне k, где 2k > N. Предположим, что список сортируется по возрастанию. Мы сравниваем каждую пару элементов и запоминаем меньший из них (победителя) в родительском узле. Процесс продолжается до тех пор, пока наименьший элемент (победитель турнира) не окажется в корневом узле. Например, приведенное ниже дерево задает следующее начальное состояние массива из N = 8 целых чисел. Элементы запоминаются на уровне 3, где 23 = 8.
Со второго уровня начинаются "игры" — в родительские узлы помещаются наименьшие значения в парах. Например, "игру" между элементами Tree[7] и Tree[8] выигрывает меньший из них, и значение 25 записывается в Tree[3]. Подобные сравнения проводятся также на втором и первом уровнях. В результате последнего сравнения наименьший элемент попадает в корень дерева на уровне 0.
Как только наименьший элемент оказывается в корневом узле, он удаляется со своего старого места и копируется в массив. В первый раз в A[0] записывается 10, а затем дерево обновляется для поиска следующего наименьшего элемента. В турнирной модели некоторые матчи должны быть сыграны повторно. Поскольку число 10 изначально было в Tree[13], проигравший в первом круге Tree[14] = 40 должен снова участвовать в турнире. Tree[14] копируется в свой родительский узел Tree[6], а затем снова проводятся матчи в индексе 6 (15 побеждает 40) и в индексе 2 (15 побеждает 20). В результате 15 попадает в корень и становится вторым наименьшим элементом списка. Корень копируется в A[1], и процесс продолжается.
Процесс продолжается до тех пор, пока все листья не будут удалены. В нашем примере последний (наибольший) узел играет серию матчей, в которых побеждает всех по умолчанию. После копирования числа 50 в A[7] мы получаем отсортированный список.
Если кратко, Кутейников тут говорил, что мы делим элементы массива по парам, из каждой пары выбираем наименьший, так, пока он не дойдет до вершины.
Этот элемент выписываем в массив, короче выводим его, а в дереве заменяем на бесконечность.
В конце все в бесконечностях, тадам.
Число сравнений (n-1)log2n: время работы O(log2n)