Линейный поиск

Линейный поиск (Linear Search): последовательный просмотр массива, код на Python, сложность O(n) и когда это единственный вариант.

Линейный поиск — самый прямолинейный способ найти элемент: просматриваем каждый элемент массива слева направо до тех пор, пока не найдём нужный или не дойдём до конца.

Сложность: O(n) в среднем и худшем случае; O(1) в лучшем (первый элемент).

Идея алгоритма

Никакого предварительного условия — массив может быть неотсортированным. Просто проверяем элементы один за другим. Как искать потерянный ключ, осматривая карман за карманом.

Пошаговый разбор

Массив [4, 2, 9, 7, 5], ищем 7:

Индекс

Элемент

Совпадение?

0

4

нет

1

2

нет

2

9

нет

3

7

да → возвращаем 3

Код

def linear_search(arr, target):
    for i, val in enumerate(arr):
        if val == target:
            return i      # вернём индекс первого вхождения
    return -1             # не найден

data = [4, 2, 9, 7, 5]
idx = linear_search(data, 7)
print(f"Индекс: {idx}")          # 3

idx2 = linear_search(data, 99)
print(f"Индекс: {idx2}")         # -1

Вывод:

Индекс: 3
Индекс: -1

Сложность и свойства

Случай

Время

Лучший (цель — первый элемент)

O(1)

Средний

O(n)

Худший (нет в массиве)

O(n)

Память: O(1). Работает на любых данных — отсортированных, неотсортированных, с дубликатами.

Когда применять

  • Массив не отсортирован и сортировать его нет смысла.
  • Массив маленький — разница между O(n) и O(log n) незначительна.
  • Нужно найти все вхождения элемента (не только первое).
  • Данные в связном списке — бинарный поиск там неприменим.

Если массив большой и поиск выполняется многократно — стоит один раз отсортировать и использовать бинарный поиск.

Коротко

  • Линейный поиск проверяет каждый элемент по очереди; возвращает индекс или −1.
  • O(n) в среднем — медленнее бинарного на больших массивах.
  • Не требует сортировки; подходит для любых структур данных.
  • Простейший алгоритм поиска; хорош для маленьких или неотсортированных наборов.
Проверьте себя
1. Какова сложность линейного поиска в худшем случае?
AO(1)
BO(log n)
CO(n)
DO(n²)
2. В каком случае линейный поиск является единственным вариантом?
AКогда массив очень большой
BКогда массив не отсортирован и сортировать нельзя
CКогда нужен максимальный элемент
DКогда массив содержит строки
3. Что вернёт функция linear_search, если элемент не найден?
A0
BNone
C-1
Dlen(arr)
Поддержать проект