|
Курс · 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, линейные сортировки и порядковые статистики.
|
Главное
Этот курс - стартовая точка для серьёзного изучения алгоритмов. Здесь мы учимся не просто получать правильный ответ, а понимать путь к нему: как устроен алгоритм, почему он корректен, сколько стоит и когда его стоит применять.
|
|