TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #388 1.06K

Forwarded from Кот Денисова

👨‍💻 Big O нотация: почему ваш код может работать медленно в 100 раз при росте данных в 10 раз.

В мире разработки часто возникает дискуссия: как оценить эффективность алгоритма? Можно измерить время выполнения на конкретных данных, но эти цифры будут относительными - зависеть от мощности железа, текущей нагрузки и множества других факторов. Существует более фундаментальный способ, который абстрагируется от конкретных измерений и описывает суть поведения алгоритма. Этот язык называется Big O нотация, и его понимание - не академическое упражнение, а практический навык, который отделяет хаотичное написание кода от осознанного проектирования систем.


Суть нотации - описываем не секунды, а характер роста:

Представьте, что вам нужно доставить письмо. Вы можете пройти пешком (медленно, но скорость не зависит от расстояния до почтового ящика), доехать на велосипеде (быстрее, скорость линейно зависит от расстояния) или отправить курьера, который будет обходить все дома в районе (время выполнения растет квадратично с увеличением количества адресов).

Big O - это именно про характер роста требуемых ресурсов (времени или памяти) при увеличении объема входных данных. Обозначение O(n) говорит: время работы растет пропорционально n. O(1): время не зависит от размера данных. Нотация игнорирует константы (O(2n) это O(n)) и менее значимые слагаемые, фокусируясь на доминирующем факторе при стремлении n к бесконечности.


От простого к сложному - иерархия сложностей в действии:

🔹O(1) - константное время: доступ по индексу в массиве. Независимо от того, массив из 10 или 10 миллионов элементов, операция array[42] выполняется за одно и то же время. Это идеал, но не всегда достижимый.

🔹O(log n) - логарифмическое время: бинарный поиск. Каждый шаг алгоритма отбрасывает половину оставшихся вариантов. Увеличение данных в 1000 раз увеличит время работы лишь в ~10 раз (log₂(1000) ≈ 10). Невероятно эффективно для больших объемов.

🔹O(n) - линейное время: поиск элемента в неотсортированном массиве. В худшем случае придется проверить каждый элемент. Увеличение данных в 10 раз - в 10 раз больше операций. Предсказуемо и часто приемлемо.

🔹O(n log n) - линейно-логарифмическое время: эффективные алгоритмы сортировки (Merge Sort, Quick Sort). Хуже, чем линейный рост, но значительно лучше квадратичного. Фактический стандарт для сортировки.

🔹O(n²) - квадратичное время: пузырьковая сортировка, два вложенных цикла. Увеличение данных в 10 раз увеличивает время работы в 100 раз. На больших n это катастрофа. Классический маркер неоптимального алгоритма.

🔹O(2ⁿ), O(n!) - экспоненциальное и факториальное время: решение некоторых задач перебором (например задача коммивояжера). Практически неприменимы для реальных данных, кроме самых маленьких n.


🔗 Ссылка на подробную статью


💡 Вывод:

Big O нотация - это не просто набор странных символов для прохождения собеседований. Это система мышления, которая позволяет оценивать последствия ваших архитектурных решений на этапе проектирования.

Она отвечает на критически важный вопрос: «Что произойдет с моим приложением, когда данных станет в 100, 1000 или 1000000 раз больше?» Пренебрежение этим анализом ведет к созданию систем, которые корректно работают на тестовых данных, но непредсказуемо ведет себя при реальной работе, создавая инциденты, которые невозможно быстро разрешить простым добавлением ресурсов на сервере.


➡️ Кот Денисова
  • ❤ 15
  • 👍 9
  • 🙏 2
  • 🔥 1
  • 👀 1
  • 🤝 1
More from @hardworkerit
  1. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  2. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  3. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  4. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  5. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  6. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →