56просмотров
14.5%от подписчиков
22 марта 2026 г.
Score: 62
⏱️ Big O Breakdown Конкатенация строк в цикле. Где прячется O(n²) Код выглядит невинно. Какова его сложность? def build_string(words): result = "" for word in words: result += word return result Варианты:
А) O(n)
Б) O(n log n)
В) O(n²)
Г) O(1) Ответ: В) O(n²) Строки в Python иммутабельны. Каждый += не дописывает слово в конец — он создаёт новую строку, копируя всё, что было до. Шаг 1: копируем 1 символ
Шаг 2: копируем 2 символа
Шаг 3: копируем 3 символа
...
Шаг n: копируем n символов Итого: 1 + 2 + 3 + ... + n = O(n²) по количеству копируемых символов. На 10 словах — незаметно. На 100 000 — катастрофа. Правильно: def build_string(words): return "".join(words) str.join() вычисляет итоговый размер заранее, выделяет память один раз и заполняет её. Сложность — O(n). Ловушка на собесе: # Это тоже O(n²) — не обманывайся форматированием
result = ""
for word in words: result = result + word + ", " И ещё одна: # А вот это уже O(n) — список мутабельный
parts = []
for word in words: parts.append(word)
result = "".join(parts) 🐍Вопросы с собесов -> ProstoPython