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

Если при обычном поиске начинал смотреть по первым символам, то в этом алгоритме по последним. Если не совпало, то можно сдвигать дальше.

1) Создается некоторый массив (int d[256] – по таблице ASCII): D[0] = d[1] = …. = d[254] = d[255] = 8 2) В подстроке нумеруются буквы справа налево. Тем, которые повторяются, присваивается индекс, который был при первой встрече. Далее, нумеруется просто место.

H o o l i g a n

7 5 5 4 3 2 1 0

3) Далее, этим буквам в массиве d присваиваем порядковые номера (d[‘H’] = 7, d[‘o’] = 5 и так далее); 4) Начинаем сравнение подстроки с началом строки. 5) Если значение последней буквы не совпало с значением буквы в строке, то двигаем на столько символов, сколько присвоено этой букве в строке в массиве d. 6) Если совпало, то сравниваем все остальные символы справа налево последовательно.

Сложность – средняя N + M, лучшая N / M.

  1. Понятие стека.

Стек — структура данных, представляющая собой список элементов, организованных по принципу LIFO (Last In — First Out, «последним пришёл — первым вышел»).

Например, многие люди складывают приходящие письма стопкой на журнальном столике. Когда появится свободная минута, они обрабатывают накопившуюся почту сверху вниз. Сначала они открывают письмо, находящееся на вершине стопки, и выполняют необходимое действие — оплачивают счет, выбрасывают письмо и т. д. Разобравшись с первым письмом, они переходят к следующему конверту, который теперь оказывается на верху стопки, и разбираются с ним. В конечном итоге они добираются до нижнего письма (которое теперь оказывается верхним).

  1. Понятие дека.

Deque — это двусторонняя очередь, которая позволяет добавлять элементы на оба края (в начало и конец очереди) и забирать элементы с обоих краев очереди.

В пример можно привести те же самые письма: можно их просто перевернуть и начать читать с последнего, а можно с первого.

  1. Понятие очереди.

Queue (Очередь) - структура данных, реализованная по алгоритму FIFO (First In - First Out, “первым пришёл - первым вышел”). Она работает по тому же принципу, что и очередь в кино: человек, первым вставшим в очередь, первым доберется до кассы и купит билет. Тот, кто встанет в очередь последним, последним купит билет (или не купит, если билеты будут распроданы).

  1. Рекурсивные алгоритмы.

  1. Вычисление факториала

  1. Вычисление чисел Фибоначчи

Числа Фибоначчи определяются рекуррентным выражением, т.е. таким, что вычисление элемента которого выражается из предыдущих элементов: Fib(0) = 0, Fib(1) = 1, Fib(n) = F(n−1) + F(n−2), n > 1. То есть, число Фибоначчи вычисляется по сумме двух предыдущих чисел Фибоначчи.

  1. Понятие фрактала.

Фрактал (лат. fractus — дробленый, сломанный, разбитый) - это объект, в точности или приближённо совпадающий с частью себя самого, то есть целое имеет ту же форму, что и одна или более частей. Примеры: звезда Коха, кривые Пеано, треуголка, фрактал Мандельброта, горящий корабль.

  1. Фрактальная размерность.

Фрактальная размерность — коэффициент, описывающий фрактальные структуры или множества на основе количественной оценки иx сложности

  1. Поиск в ширину.

  • Берем граф

  • Берем точку , откуда начинаем,обрабатываем ее(Сохраняем, что в ней побывали)

  • Рассматриваем ее соседей

  • Записываем всех соседей, к которым можно дойти(следующие после первой точки) в очередь (Двойную очередь, так как с начала забирать точку будем, а в конец добавлять)

  • Берем с начала очереди точку, сохраняем, что в ней побывали, записываем дальше соседей, к которым можно дойти(пролегает граф или идем по стрелкам до соседней точки - это говорить не нужно, это для объяснения)

  • И так далее, пока граф не закончится

Сложность?