Алгоритмы — это фундамент программирования, который не устаревает. Независимо от того, пишете ли вы на Python, Java, C++ или jаvascript, понимание принципов алгоритмов и структур данных поможет вам решать задачи в разы эффективнее.
Принципы, лежащие в основе алгоритмов и структур данных, универсальны и применимы вне зависимости от выбранного языка программирования или фреймворка. Эти фундаментальные знания не устаревают, так как описывают базовые законы работы с информацией и позволяют понимать, что происходит «под капотом» любой программы. Освоив их, разработчик получает возможность писать более оптимизированный, быстрый и чистый код, а также эффективно решать широкий спектр задач — от простых до высоконагруженных.
Кому подойдёт этот курс:
начинающим разработчикам, которые хотят прокачать техническое мышление;
студентам IT-специальностей, готовящимся к экзаменам и олимпиадам;
опытным программистам, которые хотят успешно пройти техническое интервью;
всем, кто стремится писать более быстрый, оптимальный и чистый код.
Курс подойдёт как начинающим программистам, которые хотят заложить прочную теоретическую основу, так и опытным разработчикам, желающим систематизировать знания и повысить эффективность решений в реальных проектах.
Содержание и модули программы
Введение в алгоритмы — 20 часов
Знакомство с ключевыми понятиями и терминами. Рассмотрение того, что такое алгоритм, как его можно формализовать и оценить. Подробный разбор понятия сложности алгоритма: временной и пространственной. Введение в O-нотацию и правила её использования для оценки времени работы и ресурсов программы. На практических примерах будет показано, как вычислять и сравнивать сложность различных алгоритмов.
Основные структуры данных — 20 часов
Подробное изучение базовых структур, используемых почти в любой программе: массивов, связных списков, стека и очереди. Рассмотрим принципы их организации, преимущества и недостатки. Разберём операции вставки, поиска и удаления элементов, их временные характеристики и особенности реализации на низком уровне. Поговорим о том, как данные размещаются в памяти компьютера, и о влиянии структуры данных на производительность программы.
Рекурсия — 5 часов
Понятие рекурсии и способы её применения. Изучим принцип «разделяй и властвуй», позволяющий упрощать сложные задачи, разделяя их на более мелкие подзадачи. На примере бинарного поиска и других задач разберём, как рекурсивные алгоритмы позволяют писать компактный и понятный код, при этом сохраняя эффективность.
Сортировки — 15 часов
Изучение алгоритмов сортировки от простых к более сложным. Квадратичные сортировки (пузырьковая, выбором, вставками) — их устройство и недостатки. Затем переход к сортировке слиянием и быстрой сортировке — более эффективным методам, применимым в реальных системах. Также разберём линейную сортировку подсчётом, которая при определённых условиях работает быстрее остальных.
Хеш-функции и хеш-таблицы — 20 часов
Введение в концепцию отображения данных через хеш-функции. Рассмотрим, что такое хеш-функция, её основные свойства и требования. Познакомимся со структурой данных «хеш-таблица» и увидим, как она позволяет организовывать быстрый доступ к элементам. Отдельно разберём проблему коллизий и основные способы их разрешения, чтобы сохранить эффективность работы таблиц.
Деревья — 20 часов
Знакомство с древовидными структурами данных. Рассмотрим базовые принципы устройства дерева и применения сбалансированных деревьев поиска для быстрого хранения и извлечения информации. Разберём структуру данных «куча» и алгоритм пирамидальной сортировки. Поймём, в каких случаях древовидные структуры значительно выигрывают у массивов и хеш-таблиц.
Графы — 20 часов
Определение и виды графов, способы их представления в памяти. Подробный разбор алгоритмов обхода в глубину (DFS) и в ширину (BFS). Рассмотрение задач поиска кратчайшего пути, нахождения компонент связности и построения минимального остовного дерева. Понимание графов открывает возможности для работы с сетями, маршрутами, социальными графами и множеством других задач.
Динамическое программирование — 15 часов
Изучение метода, позволяющего эффективно решать задачи с перекрывающимися подзадачами. Рассмотрим одномерные и двумерные задачи, алгоритмы по подотрезкам и подмножествам. На примерах узнаем, как хранение промежуточных результатов помогает сокращать время вычислений.
Жадные алгоритмы — 5 часов
Понятие жадного алгоритма, его сильные и слабые стороны. Разберём примеры задач, где этот подход даёт оптимальное решение, и посмотрим, как формально доказать корректность выбранного метода.
Алгоритмы на строках — 20 часов
Введение в задачи, связанные с обработкой текста. Разбор префикс-функции, понятий подстроки, префикса и суффикса. Изучение алгоритмов поиска шаблонов в строке — от наивного подхода до эффективных решений с использованием структуры данных «бор».
Почему стоит пройти этот курс:
Вы научитесь оценивать эффективность решений и писать код, который работает быстро.
Получите навыки, востребованные в компаниях уровня Яндекс, Google, Amazon.
Сможете самостоятельно решать задачи, которые раньше казались сложными.
Начните сейчас — и уже через несколько недель вы будете мыслить как алгоритмист, а ваши программы будут работать так, будто им добавили турбонаддув.

Автор материала: Яндекс.Практикум.
Страница автора: https://practicum.yandex.ru/algorithms.

Комментарии и отзывы