Перейти к основному содержимому

Один проход по данным

O(n) означает линейное время: объём работы растёт вместе с входными данными. Вдвое больше элементов — вдвое больше шагов.

В Python линейное время обычно выглядит как один цикл for по списку или словарю. Любой алгоритм, которому нужно хотя бы посмотреть на каждый элемент — суммирование, подсчёт, поиск в неотсортированном списке, — не может быть быстрее O(n).

Линейная сложность — это хорошо. Миллионы элементов не проблема для одного прохода.


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

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

В худшем случае — значение стоит последним или его нет вовсе — цикл проходит все n элементов. Именно этот худший случай и описывает O(n).

Найти значение и его позицию

Цикл проверяет "one", "two", "three", прежде чем дойти до "four", — 4 шага для совпадения по индексу 3. break останавливает цикл, как только значение найдено.

Prompt
Напишите программу на Python, которая ищет слово four в списке one, two, three, four, five с помощью простого цикла, подсчитывая шаги. Когда слово найдено, выведите индекс и количество шагов, затем остановите цикл с помощью break.
Вывод: полная программа на Python
Find a value and its position

Обход каждого элемента

Многие повседневные задачи — это один проход по всему списку: сложить все значения, запоминать самое большое из встреченных, подсчитать элементы, прошедшие проверку. Каждый элемент обрабатывается ровно один раз, поэтому все они имеют сложность O(n).

Два или три таких прохода подряд — это по-прежнему линейное время: O(2n) и O(3n) сводятся к O(n).

Сумма всех элементов

Цикл прибавляет каждый элемент к total. 8 элементов — 8 сложений: классическая форма одного прохода.

Prompt
Напишите программу на Python, которая суммирует список 3, 1, 4, 1, 5, 9, 2, 6 одним циклом и выводит, сколько элементов было просуммировано, и итоговую сумму.
Вывод: полная программа на Python
Sum all elements

Найти наибольшее значение

biggest сначала равно первому элементу; каждый следующий элемент, который больше, заменяет его. После одного прохода остаётся наибольшее значение — 9.

Prompt
Напишите программу на Python, которая находит наибольшее значение в списке 3, 1, 4, 1, 5, 9, 2, 6 за один проход: начните с первого элемента как максимума и заменяйте его всякий раз, когда встречается больший. Выведите наибольшее значение.
Вывод: полная программа на Python
Find the biggest value

Подсчитать совпадения

Цикл проверяет каждое слово условием len(w) > 3 и считает попадания. Три слова длиннее 3 букв.

Prompt
Напишите программу на Python, которая подсчитывает, сколько слов в списке one, two, three, four, five длиннее 3 букв, а затем выводит это количество в предложении.
Вывод: полная программа на Python
Count the matches