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

ДЗ 6 — Оптимизация кода

📚 Лекция: Оптимизация

Тема и дедлайн

Тема курса: модуль 7 (оптимизация кода) Дедлайн: 30 апреля 2026, 23:59 Classroom: Принять задание


6.1 — Профилирование и итеративная оптимизация (3 балла) ★★☆

Тебе дан намеренно медленный Python-код. Твой вариант определяет тип задачи:

#ЗадачаМедленный код
0Алгоритм на графахПоиск кратчайших путей, наивная реализация O(n³)
1Обработка CSVЧтение и агрегация без pandas, наивные циклы
2Числовые вычисленияМатричные операции с вложенными циклами
3Парсинг текстаНаивный поиск паттернов в большом тексте

Задание:

  1. Профилируй исходный код двумя инструментами:

    • cProfile + pstats — статистика по вызовам
    • pyinstrument — flame graph в HTML
  2. Найди bottleneck и опиши его в REPORT.md: что тормозит, почему, сколько % времени занимает

  3. Оптимизируй итеративно — минимум 3 итерации. Каждая итерация:

    • Одно конкретное изменение
    • Замер времени до и после
    • Объяснение почему это быстрее
  4. Достигни ускорения ≥ 5× относительно оригинала — проверяется тестом автоматически

Артефакт: REPORT.md с таблицей итераций:

| Итерация | Изменение                     | Время (сек) | Ускорение |
|----------|-------------------------------|-------------|-----------|
| 0 | Оригинал | 12.4 | 1.0× |
| 1 | list comprehension вместо for | 8.1 | 1.5× |
| 2 | numpy вместо ручных циклов | 2.3 | 5.4× |
| 3 | ... | ... | ... |
Зачем это

Профилирование — единственный надёжный способ понять что тормозит. Интуиция врёт. Умение читать profile-report и итеративно улучшать код — ключевой инженерный навык.


6.2 — Ускорение через Numba или Cython (2 балла) ★★★

Возьми bottleneck из задания 6.1 и ускорь его через numba (@jit) или Cython.

Требования:

  • Реализация на numba или Cython — на выбор
  • Корректность: результат совпадает с оригиналом
  • Сравнение трёх версий: чистый Python / оптимизированный Python из 6.1 / numba или Cython
  • В REPORT.md: объясни почему numba/Cython ускоряет и в каких случаях этот подход оправдан
Зачем это

Понимание границ чистого Python и инструментов для их преодоления — то, что нужно для работы с ML, числовыми расчётами, обработкой данных.


Итого

ЗадачаБаллы
6.1 Профилирование + 3 итерации оптимизации3
6.2 Numba / Cython2
Итого5