Алгоритмическое мышление
Учимся проектировать и проверять алгоритмы на классической задаче о расписании: интервалы и конфликты, жадные критерии, контрпримеры, инварианты, корректность и оптимальная подструктура. Курс развивает алгоритмическое мышление без привязки к конкретному языку.
Уроки этого курса доступны после регистрации. Демо без аккаунта показывает механику платформы на примере задачи с роботом по алгоритмике.
Задача о расписании
Пример показывает устройство урока. Чтобы решать задания, откройте курс после регистрации.
22 коротких уроков
По 7-10 минут: можно пройти за один подход или возвращаться по частям.
Интерактив вместо конспекта
Ученик решает задачу, проверяет ответ и видит объяснение следующего шага.
Спокойный старт
Демо платформы доступно без аккаунта. Для уроков выбранного курса и сохранения прогресса нужна регистрация.
Жадные стратегии и динамика без слепого запоминания
Курс для тех, кто уже решал базовые алгоритмические задачи и хочет понять, когда локальный выбор работает, а когда нужна память о подзадачах.
Задача о расписании
Разберитесь, что такое конфликт между встречами, и научитесь строить расписание без конфликтов с наибольшим числом встреч.
Экземпляры задачи
Научитесь различать задачу и экземпляр задачи и находить оптимальное расписание для разных наборов встреч.
Описываем алгоритм
Научитесь описывать жадный алгоритм для построения расписания встреч без конфликтов.
Если жадный выбор не работает, урок показывает конкретный случай, где лучший локальный шаг мешает получить лучший итог.
Откройте шаг «Задача о расписании» и выполните действие в модели.
Ошибка не заканчивает задание: она запускает объяснение на схеме.
Ученик видит идею на модели и переносит её в самостоятельное решение.
Маршрут курса
От жадных решений к динамическому программированию и анализу корректности.
Задача о расписании
Разберитесь, что такое конфликт между встречами, и научитесь строить расписание без конфликтов с наибольшим числом встреч.
Экземпляры задачи
Научитесь различать задачу и экземпляр задачи и находить оптимальное расписание для разных наборов встреч.
Описываем алгоритм
Научитесь описывать жадный алгоритм для построения расписания встреч без конфликтов.
Несколько решений
Узнайте, что у одного экземпляра задачи о расписании может быть несколько решений, и научитесь предсказывать, какое из них найдёт жадный алгоритм.
Поиск инвариантов
Узнайте, что такое инвариант и как он помогает доказать корректность жадного алгоритма.
Поиск контрпримеров
Научитесь находить контрпримеры, опровергающие жадные алгоритмы задачи о расписании.
Приоритет коротким встречам
Освойте жадный критерий «наименьшая длительность»: выбирайте самый короткий доступный доклад, который не конфликтует с уже выбранными.
Тестирование алгоритма
Научитесь прогонять алгоритм на конкретных экземплярах задачи и находить контрпримеры, опровергающие его корректность.
Доработка алгоритма
Узнайте, как анализ ошибок алгоритма ведёт к его доработке: достаточно отсортировать доклады по длительности.
Управление порядком обработки
Как сортировка управляет порядком, в котором жадный алгоритм рассматривает доклады, и почему это определяет итоговое расписание.
Проверка корректности
Прогоните жадный алгоритм «наименьшая длительность» и найдите инвариант цикла, который доказывает его корректность.
Когда алгоритм не справляется
Научитесь находить минимальные контрпримеры, опровергающие жадный алгоритм «наименьшая длительность».
Обновление стратегии
Познакомьтесь с новым жадным критерием «самое раннее начало» и научитесь прогонять его на конкретных экземплярах задачи.
Подбор тестовых случаев
Научитесь подбирать тестовые случаи, которые отличают корректный алгоритм от ошибочного, и узнайте, почему один контрпример опровергает алгоритм.
Обновление алгоритма
Научитесь изменять жадный алгоритм под новый критерий приоритета: сменить критерий сортировки — значит сменить логику алгоритма.
Рассуждение о критериях
Научитесь доказывать корректность жадного алгоритма с помощью инварианта цикла.
Проверка стратегии
Проверьте жадный алгоритм «самое раннее начало» на разных формулировках задачи и найдите контрпримеры.
Оптимизация расписания
Освойте жадный критерий «самое раннее окончание» для максимизации числа доставок без конфликтов.
Конструирование контрпримеров
Научитесь конструировать контрпримеры, опровергающие жадные критерии задачи о выборе доставок.
Жадная оптимизация
Примените критерий «самое раннее окончание» для построения оптимального расписания доставок и узнайте, почему жадный выбор всегда оставляет максимум свободного времени.
Оптимальная подструктура
Узнайте, почему жадный критерий «самое раннее окончание» гарантирует оптимальное расписание без конфликтов.
Эквивалентность задач
Узнайте, как эквивалентность задач позволяет переносить выводы об алгоритме с одной задачи на другую — в обе стороны.
Нет перегруза: сначала основная идея, затем проверка понимания и самостоятельное применение.
Ученик сразу видит, где ошибся, и получает объяснение через схему.
Курс строится от первого знакомства с идеей к более самостоятельным задачам.
После регистрации можно продолжить курс и вернуться к сложным темам.
Алгоритмы на Python
Анализ алгоритмов на Python через чтение и трассировку программ: токенизация и перебор, корректность (предусловия, инварианты цикла, контрпримеры), эффективность (лучший/худший случай, временная сложность, O-нотация) и скрытые издержки времени выполнения.
Основы информатики
Алгоритмы и фундаментальные идеи информатики: хранение информации и алгоритмы на массивах, поиск и сортировка, скорость алгоритмов и O-нотация, устойчивые паросочетания (алгоритм Гейла–Шепли), корректность и завершимость, деревья решений, параллелизм и конвейеризация, абстракция и интерфейсы, а также графы и мосты Кёнигсберга.
Рекурсия на Python
Рекурсия в Python через чтение и трассировку программ: базовые случаи, стек вызовов, бесконечная рекурсия, множественные базовые случаи и рекурсивные вызовы, рекуррентные соотношения и выбор рекурсивного пути.
Мышление на Python
Основы Python через чтение и анализ программ: переменные, условная и булева логика, циклы for и while, списки, словари, строки, вложенные и цепочечные условия, работа с данными, временная сложность и алгоритмы поиска.
Это сложный курс?
Да, он рассчитан на тех, кто уже знаком с базовыми алгоритмами и готов рассуждать о стратегии.
Нужен ли Python?
Полезен, но главная цель курса — понять идею алгоритма, а не синтаксис.
Чем динамика отличается от перебора?
Динамика переиспользует ответы на повторяющиеся подзадачи, чтобы не считать одно и то же снова.
Подойдёт для олимпиад?
Да, как вводный слой в темы, которые часто встречаются в олимпиадном программировании.
Начните курс бесплатно
Создайте аккаунт, чтобы открыть уроки этого курса и сохранять прогресс.