Вопрос проверяет умение анализировать асимптотическую сложность алгоритмов на практике.
Алгоритм работает за O(n), где n — длина списка. Каждый элемент обрабатывается один раз. Проверка наличия элемента в set выполняется за O(1) в среднем. Поэтому общее время линейное. Память также используется линейно.
Оценка сложности алгоритма дедупликации напрямую связана с используемыми структурами данных.
Перед перечислением важно зафиксировать: сложность считается по количеству операций относительно размера входных данных.
Проход по списку
n итераций → O(n)
Проверка в set
среднее время O(1)
Добавление в set
среднее время O(1)
Итого:
Временная сложность: O(n)
Дополнительный set из n элементов
Результирующий список из n элементов
Пространственная сложность: O(n)
Плохая хеш-функция
Коллизии
Нехешируемые элементы
Алгоритм удаления дубликатов с сохранением порядка имеет линейную временную сложность и хорошо масштабируется на больших списках.