
- •Список вопросов по дисциплине «Структуры и алгоритмы обработки данных»
- •Алгоритм. Свойства алгоритма.
- •Понятие сложности алгоритма.
- •Классы сложности алгоритмов.
- •Структуры данных. Массив
- •Структуры данных. Связный список.
- •Структуры данных. Хэш-таблицы.
- •Структуры данных. Бинарное дерево. ??
- •Алгоритмы сортировки. Сортировка выбором.
- •Алгоритмы сортировки. Вставкой.
- •Алгоритмы сортировки. Обменом.
- •Алгоритмы сортировки. Шелла.
- •Алгоритмы сортировки. Турнирная.
- •Алгоритмы сортировки. Пирамидальная.
- •1. Постройте максимальную кучу из входных данных.
- •2. В этот момент самый большой элемент хранится в корне кучи. Замените его на последний элемент кучи, а затем уменьшите размер кучи на 1. Наконец, наведите корень дерева.
- •3. Повторите вышеуказанные шаги, пока размер кучи больше 1.
- •Алгоритмы сортировки. Быстрая.
- •Методы поиска. Бинарный.
- •Методы поиска. Бинарное дерево.
- •Методы поиска. Фибоначчиев.
- •Методы поиска. Интерполяционный.
- •Методы поиска в строке. Кнута-Морриса-Пратта.
- •Методы поиска в строке. Бойера-Мура.
- •Понятие стека.
- •Поиск в глубину.
- •Остовное дерево.
- •Минимальное остовное дерево Алгоритм Прима(Хахаха, прям как в дискретке) Нам нужно связать все точки, чтобы не было цикла из точек(Это объяснение для нас)
- •Алгоритмы поиска путей. Флойда-Уоршелла.(Динамическое программирование)- самый эффективный
- •Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)
- •Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)
- •Алгоритмы поиска путей. Джонсона.(Динамическое программирование)
- •Алгоритмы поиска путей. Йена.(Динамическое программирование) Алгоритм для поиска альтернативных кратчайших путей в графе
- •Алгоритмы поиска путей. А*.(Эвристический алгоритм)
Методы поиска. Бинарный.
Бинарный поиск производится в отсортированном массиве. Массив делится пополам, искомое число сравнивается с медианой. Если число оказалось больше медианы, то часть чисел, до медианы, отбрасывается. И так до тех пор, пока не найдется искомое число. Но если окажется, что делить нечего, то есть ни слева, ни справа нельзя взять, то говорим, что такого элемента нет. Сложность – O(log2n)
Методы поиска. Бинарное дерево.
Строится простейшее бинарное дерево. Первый элемент берется в качестве корня. Все, что больше – вправо, все, что меньше – влево. Допустим, у нас построено бинарное дерево. Задано найти ключ со значением 57. Программа сравнивает ключ 57 с ключом корневого узла, равным 63. Искомый ключ меньше, поэтому программа знает, что искомый узел находится в левой части дерева — либо это левый потомок корневого узла, либо один из его потомков. Ключ левого потомка корневого узла равен 27; сравнение 57 и 27 показывает, что искомый узел принадлежит правому поддереву узла 27. Стрелка переходит к узлу 51 — корню этого поддерева. Значение 57 больше 51, поэтому процесс поиска сначала переходит направо к 58, а затем налево к 57. На этот раз ключ 57 совпадает с искомым значением — узел успешно найден.
Сложность: О(log(n)).
Методы поиска. Фибоначчиев.
Поиск выполняется на отсортированном массиве. Число, которое надо найти, сравнивается с числами, которые находятся в индексах чисел Фибоначчи, то есть сначала берется 0 элемент и число сравнивается с ним, потом берется 1 элемент. Следующий элемент идет 0+1, смысла его брать нет, т.к. и есть 1 элемент. Далее, берется элемент 1+1, т.е. 2, и сравнивается. И так идет сравнение до того момента, пока число Фибоначчи не будет больше размера массива, если число в массиве не нашлось. Тогда берется последний элемент, и число сравнивается с ним. Если оно оказалось меньше, то поиск осуществляется следующим образом: берется предыдущее число Фибоначчи, и к нему прибавляются заново числа Фибоначчи, т.е. допустим диапазон у нас между 13 и 20. К числу 13 прибавляются 1, 2, 3, 5 и т.д. и осуществляется заново поиск. И так до тех пор, пока не найдется число. Сложность – O(log2n)
Методы поиска. Интерполяционный.
Поиск осуществляется по индексу, который находится по формуле (округление в меньшую сторону):
Где I – нулевой индекс, j – последний индекс, K – искомое число, Ki – элемент на нулевом индексе, Kj – элемент на последнем индексе
Если число оказалось другое, и искомое число меньше его, то j – последний индекс, сдвигается до него. Если больше, то i.
Сложность – O(log2(log2N)), макс – O(log2N)
Методы поиска в строке. Кнута-Морриса-Пратта.
M – исходная строка, N - подстрока
Поиск осуществляется следующим образом:
1) Искомая строка вставляется в начало исходной строки; 2) Разделяем символом, которого нет в строке или алфавите; 3) Составляем префиксную функцию, которая составляется из максимальных значений равных между собой префикса и суффикса сравниваемых строк; 4) Выводятся те индексы, где шаблон совпал со строкой.
Сложность – средняя M + N.