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

Бинарный поиск производится в отсортированном массиве. Массив делится пополам, искомое число сравнивается с медианой. Если число оказалось больше медианы, то часть чисел, до медианы, отбрасывается. И так до тех пор, пока не найдется искомое число. Но если окажется, что делить нечего, то есть ни слева, ни справа нельзя взять, то говорим, что такого элемента нет. Сложность – O(log2n)

  1. Методы поиска. Бинарное дерево.

Строится простейшее бинарное дерево. Первый элемент берется в качестве корня. Все, что больше – вправо, все, что меньше – влево. Допустим, у нас построено бинарное дерево. Задано найти ключ со значением 57. Программа сравнивает ключ 57 с ключом корневого узла, равным 63. Искомый ключ меньше, поэтому программа знает, что искомый узел находится в левой части дерева — либо это левый потомок корневого узла, либо один из его потомков. Ключ левого потомка корневого узла равен 27; сравнение 57 и 27 показывает, что искомый узел принадлежит правому поддереву узла 27. Стрелка переходит к узлу 51 — корню этого поддерева. Значение 57 больше 51, поэтому процесс поиска сначала переходит направо к 58, а затем налево к 57. На этот раз ключ 57 совпадает с искомым значением — узел успешно найден.

Сложность: О(log(n)).

  1. Методы поиска. Фибоначчиев.

Поиск выполняется на отсортированном массиве. Число, которое надо найти, сравнивается с числами, которые находятся в индексах чисел Фибоначчи, то есть сначала берется 0 элемент и число сравнивается с ним, потом берется 1 элемент. Следующий элемент идет 0+1, смысла его брать нет, т.к. и есть 1 элемент. Далее, берется элемент 1+1, т.е. 2, и сравнивается. И так идет сравнение до того момента, пока число Фибоначчи не будет больше размера массива, если число в массиве не нашлось. Тогда берется последний элемент, и число сравнивается с ним. Если оно оказалось меньше, то поиск осуществляется следующим образом: берется предыдущее число Фибоначчи, и к нему прибавляются заново числа Фибоначчи, т.е. допустим диапазон у нас между 13 и 20. К числу 13 прибавляются 1, 2, 3, 5 и т.д. и осуществляется заново поиск. И так до тех пор, пока не найдется число. Сложность – O(log2n)

  1. Методы поиска. Интерполяционный.

Поиск осуществляется по индексу, который находится по формуле (округление в меньшую сторону):

Где I – нулевой индекс, j – последний индекс, K – искомое число, Ki – элемент на нулевом индексе, Kj – элемент на последнем индексе

Если число оказалось другое, и искомое число меньше его, то j – последний индекс, сдвигается до него. Если больше, то i.

Сложность – O(log2(log2N)), макс – O(log2N)

  1. Методы поиска в строке. Кнута-Морриса-Пратта.

M – исходная строка, N - подстрока

Поиск осуществляется следующим образом:

1) Искомая строка вставляется в начало исходной строки; 2) Разделяем символом, которого нет в строке или алфавите; 3) Составляем префиксную функцию, которая составляется из максимальных значений равных между собой префикса и суффикса сравниваемых строк; 4) Выводятся те индексы, где шаблон совпал со строкой.

Сложность – средняя M + N.