Python Алгоритмы: основы, анализ и рекурсия

Научитесь думать как разработчик алгоритмов: оценивать скорость решений, понимать рекурсию, сравнивать подходы и писать более осознанный Python-код. В курсе - асимптотика, сортировки, бинарный поиск, "разделяй и властвуй", рекуррентные соотношения, вероятностный анализ и много практики.
Средний уровень
4-5

О курсе

Курс · Python · Алгоритмы

О курсе

Python Алгоритмы: основы, анализ и рекурсия

Первый курс серии по алгоритмам: базовые идеи, анализ времени работы, асимптотика, рекурсия, метод "разделяй и властвуй" и вероятностный анализ.

Roadmap серии

Эта серия курсов помогает постепенно пройти путь от базовых идей алгоритмов до сортировок, структур данных, графов и продвинутых тем.

Сейчас готов первый курс серии. Остальные курсы находятся в разработке, их содержание может уточняться по мере подготовки материалов.

Важно

Курсы со статусом "В разработке" могут меняться: названия, порядок тем, количество практики и итоговые блоки будут уточняться по мере подготовки материалов. Следите за обновлениями и новостями курса.

Карта курсов

Курс Что внутри

Python Алгоритмы:
основы, анализ и рекурсия

Текущий курс

Первый курс серии. Внутри: роль алгоритмов, корректность, сортировка вставками, анализ времени работы, асимптотика, бинарный поиск, два указателя, метод "разделяй и властвуй", рекуррентные соотношения, матричные алгоритмы, алгоритм Штрассена, метод подстановки, дерево рекурсии, основной метод, вероятностный анализ и рандомизированные идеи.

Python Алгоритмы:
сортировка и порядковые статистики

В разработке

Во втором курсе планируются сортировки и задачи выбора элементов. Будут разобраны кучи, поддержание свойства кучи, построение кучи, heapsort и очереди с приоритетами.

Также в курс войдут quicksort, рандомизированный quicksort, анализ его работы, сортировки за линейное время, counting sort, radix sort, bucket sort, минимум, максимум, выбор порядковой статистики в среднем и худшем случае.

Python Алгоритмы:
базовые структуры данных

В разработке

Этот курс будет посвящён структурам данных: массивам, матрицам, стеку, очереди, связанным спискам и представлению деревьев.

Отдельный акцент планируется на хеш-таблицах, хеш-функциях, открытой адресации, бинарных деревьях поиска и красно-чёрных деревьях.

Python Алгоритмы:
динамическое программирование и жадные стратегии

В разработке

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

В жадных алгоритмах будут разобраны выбор заявок, принципы жадной стратегии, коды Хаффмана и офлайн-кеширование. Также планируется амортизированный анализ.

Python Алгоритмы:
продвинутые структуры данных

В разработке

Темы: расширение структур данных, динамические порядковые статистики, интервальные деревья, B-деревья, базовые операции с B-деревьями, удаление ключей, а также системы непересекающихся множеств, операции union и find, леса непересекающихся множеств и сжатие путей.

Python Алгоритмы:
графы, пути и потоки

В разработке

Курс по графовым алгоритмам. Планируются представления графов, обход в ширину, обход в глубину, топологическая сортировка и компоненты сильной связности.

Дальше - минимальные остовные деревья, алгоритмы Крускала и Прима, кратчайшие пути, алгоритм Дейкстры, Floyd-Warshall, Johnson, максимальный поток и паросочетания в двудольных графах.

Python Алгоритмы:
прикладные и продвинутые темы

В разработке

Возможные темы: параллельные алгоритмы, онлайн-алгоритмы, операции с матрицами, линейное программирование, многочлены и FFT, алгоритмы теории чисел, поиск подстроки, элементы алгоритмов машинного обучения, NP-полнота и приближённые алгоритмы.

Для кого этот курс

1. Для тех, кто уже знает базовый Python и хочет перейти от "просто пишу код" к пониманию алгоритмов.

2. Для тех, кто хочет научиться оценивать скорость решений и понимать, почему один алгоритм лучше другого.

3. Для тех, кто готовится к задачам на алгоритмы, собеседованиям, олимпиадным темам или более серьёзному изучению Computer Science.

4. Для тех, кто хочет не просто видеть готовую формулу сложности, а понимать, откуда она берётся.

Что вы изучите

Основы алгоритмического мышления. Что такое алгоритм, входные данные, выходные данные, корректность и экземпляр задачи.

Анализ времени работы. Как читать O, Ω, Θ и сравнивать рост функций.

Базовые алгоритмы. Сортировка вставками, сортировка выбором, сортировка слиянием, бинарный поиск и два указателя.

Рекурсия и рекуррентные соотношения. Как разбирать рекурсивные алгоритмы, считать уровни дерева рекурсии и применять основной метод.

Метод "разделяй и властвуй". Как большая задача разбивается на подзадачи и почему это приводит к эффективным алгоритмам.

Вероятностный анализ. Задача о найме, индикаторные случайные величины, парадокс дней рождения, шары и ящики, серии орлов и рандомизированные идеи.

Программа курса

Блок 1. Роль алгоритмов в программировании
Что такое алгоритм, зачем нужны корректность и анализ, какие задачи решают алгоритмы и почему структуры данных важны не меньше самого кода.

Блок 2. Подготовка к работе
Сортировка вставками, инварианты цикла, анализ времени работы, сортировка выбором, сортировка слиянием, бинарный поиск и два указателя.

Блок 3. Характеристика времени работы
Асимптотика, формальные определения O, Ω, Θ, стандартные функции роста, логарифмы, факториалы, числа Фибоначчи и практическое сравнение алгоритмов.

Блок 4. Разделяй и властвуй
Рекурсия, рекуррентные соотношения, умножение матриц, алгоритм Штрассена, метод подстановки, дерево рекурсии, основной метод и практические задачи на рекурсивное мышление.

Блок 5. Вероятностный анализ и рандомизированные алгоритмы
Задача о найме, случайный порядок, индикаторные случайные величины, ожидаемое число наймов, парадокс дней рождения, шары и ящики, серии орлов и онлайн-стратегии.

Итоговый экзамен
Финальная проверка по всему курсу: теория, асимптотика, рекурсия, анализ алгоритмов, вероятностные задачи и практические code-задания.

После курса вы сможете

Читать условие задачи и понимать, какой подход может подойти: простой цикл, сортировка, бинарный поиск, два указателя, рекурсия или вероятностная модель.

Оценивать алгоритмы через асимптотику и объяснять, почему решение работает за O(n), O(n log n), O(n²) или другую оценку.

Разбирать рекурсивные алгоритмы через дерево рекурсии, метод подстановки и основной метод.

Писать Python-код для базовых алгоритмов: сортировок, поиска, рекурсивных задач, симуляций и вероятностных экспериментов.

Переходить ко второму курсу серии уже с фундаментом: понимать, зачем нужны heapsort, quicksort, линейные сортировки и порядковые статистики.

Главное

Этот курс - стартовая точка для серьёзного изучения алгоритмов. Здесь мы учимся не просто получать правильный ответ, а понимать путь к нему: как устроен алгоритм, почему он корректен, сколько стоит и когда его стоит применять.

Наши преподаватели

Программа курса

загружаем...
Price: Бесплатно

Расскажите о курсе друзьям

Price: Бесплатно