Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач по алгоритмам поиска - 3 сем АИСД.docx
Скачиваний:
3
Добавлен:
08.07.2025
Размер:
1 Мб
Скачать
☆

Теоретическая часть линейный поиск

(Linear Search)

Линейный поиск - простой алгоритм поиска, который заключается в последовательном просмотре всех элементов массива или списка до тех пор, пока не будет найден искомый элемент либо не будет достигнут конец структуры данных.

  1. Описание алгоритма

  1. Начинаем с первого элемента массива.

  2. Сравниваем текущий элемент с искомым значением.

  3. Если элемент совпадает с искомым значением, поиск завершается — возвращается позиция (индекс) элемента.

  4. Если элемент не найден, переходим к следующему.

  5. Повторяем процесс, пока: элемент не будет найден или массив не закончится (в этом случае возвращается информация об отсутствии искомого элемента).

Пример:

Массив: [3, 5, 7, 9, 11]. Искомое значение: 7.

Сравниваем 3 и 7 — не совпадают.

Сравниваем 5 и 7 — не совпадают.

Сравниваем 7 и 7 — совпадение, поиск завершён.

Результат: элемент найден на позиции 2 (счёт с нуля).

  1. Функция временной сложности и её асимптотическая оценка

Лучший случай:

В лучшем случае искомый элемент находится на первом месте в массиве. Значит, выполняется лишь одна операция сравнения:

Средний случай:

В среднем, элемент будет найден после проверки половины массива:

Худший случай:

Искомый элемент находится в самом конце массива или отсутствует, нужно выполнить операция сравнения:

  1. Функция пространственной сложности и её асимптотическая оценка

Пространственная сложность , так как алгоритм работает напрямую с массивом без использования дополнительных структур данных.

  1. График функции временной сложности для всех случаев

Бинарный поиск

(Binary Search)

Бинарный поиск — это эффективный алгоритм для поиска элемента в отсортированном массиве. Алгоритм работает по принципу "разделяй и властвуй", систематически сокращая диапазон поиска, пока элемент не будет найден или пространство поиска не станет пустым.

  1. Описание алгоритма

  1. Выбирается средний элемент массива.

  2. Сравнивается искомое значение с этим элементом:

  3. Если они равны, поиск завершён.

  4. Если искомое значение меньше, поиск продолжается в левой половине массива. Если больше — в правой половине.

  5. Процесс повторяется, пока элемент не будет найден или диапазон поиска не станет пустым.

Пример:

Массив

Искомый элемент: 10

Левая граница ; правая граница

Начинаем с середины массива:

Средний элемент =

Сравниваем элементы: , значит увеличиваем левую границу на 1 и ищем в правой половине массива: [10, 12, 14].

Определяем новый средний элемент при :

Средний элемент =

Сравниваем элементы: , значит уменьшаем правую границу на 1 и ищем в правой половине массива: [10, 12].

Определяем новый средний элемент при :

Средний элемент =

Элемент найден.

  1. Функция временной сложности и её асимптотическая оценка

Лучший случай:

В лучшем случае искомый элемент находится посередине массиве, то есть на индексе . Значит, искомый элемент будет найден, как только мы его сравним с центральным значением массива.

Средний случай:

В среднем, искомый элемент будет находиться на случайной позиции в массиве. Но поиск элемента будет происходить по тому же принципу, а значит, что первый элемент, который программа сравнит с искомым, будет находиться так же на индексе , и это произойдёт за одно сравнение. Следующие сравнение она будет выполнять для двух элементов с индексами и , - итого два сравнения. За три сравнения программа проверит четыре элемента с индексами , , , . Отсюда следует, что за k сравнений программа проверяет элементов. Поиск будет продолжаться за k сравнений, где k варьируется от 1 до .

Сделаем замену и запишем сумму:

Запишем замену и представим в виде двух сумм:

Вторая сумма:

Для первой суммы используем свойство:

Подставим 2 вместо x:

Упрощаем знаменатель:

При максимальной границе , подставляем:

Упростим выражение:

Так в массиве может не оказаться искомого элемента, количество обращений к массиву будет равно n+1, где n обращений для присутствующего элемента и 1 для отсутствующего.

Итог:

Худший случай:

Искомый элемент находится на последнем уровне делений (самый первый элемент или самый последний), либо отсутствует в массиве. Здесь, как и в среднем случае, поиск будет выполняться за k сравнений.