Алгоритмы и структуры данных
Стать крутым инженером будет проще разработчику, который знаком со структурами данных и алгоритмами.
Описание:
Крупнейшие IT-компании мира и многие стартапы проверяют на собеседованиях алгоритмическую подготовку соискателей. Это лучший способ убедиться, что человек умеет быстро думать и писать работающий код. В этом курсе вы напишете много кода, научитесь оценивать эффективность решений, набьёте руку на практических заданиях, пройдёте учебное собеседование, максимально приближенное к реальности.
Погружение в IT-профессию подразумевает постоянный контакт с изучаемыми технологиями, выполнение практических заданий и общение с наставником. Для этого мы создали собственную среду обучения.
- Онлайн-тренажёр и Яндекс.Контест. С первого дня вы учитесь на практике. Теория и поддержка доступны в нашем онлайн-тренажере, а практика — в Яндекс.Контесте — специальной платформе, созданной для проверки алгоритмических задач. Решайте задачи на своём любимом популярном языке программирования: C/C++, Python, Java, Go или JavaScript.
- Код-ревью. Работающий код — это только часть успеха. Для работы в команде нужно уметь писать читаемый и красивый код. Наши код-ревьюеры помогут вам отточить свои навыки в этом направлении.
- Поддержка. Команда наставников проверяет и комментирует ваши работы, помогает разобраться в сложностях и делится профессиональным опытом. Поддержка в чате доступна 24/7.
- Программисты учат программированию. Наставники — опытные разработчики из Яндекса и других IT-компаний.
Программа курса:
Введение в алгоритмы
- Определение алгоритма. Понятие сложности алгоритмов. O-нотация.
Основные структуры данных
- Массив, связный список, стек, очередь. Представление в памяти, сложность операций вставки, поиска и удаления. Преимущества и недостатки использования.
Жадные алгоритмы
- Понятие жадного алгоритма, область применения. Примеры, доказательство корректности алгоритма.
Рекурсия
- Понятие рекурсии. Основная теорема о рекурсии. Принцип разделяй и властвуй. Преимущества и недостатки метода.
Сортировки
- Квадратичные сортировки. Сортировка слиянием. Алгоритм нахождения k-й порядковой статистики, быстрая сортировка. Сортировки с использованием свойств элементов. Внешняя сортировка.
Деревья
- Бинарный поиск. Деревья поиска. Сбалансированные деревья. Куча. Пирамидальная сортировка. Некоторые специальные деревья.
Алгоритмы на строках
- Алгоритм Хафмена. Структура данных префиксное дерево. Алгоритмы поиска подстроки в строке.
Хеш-таблицы. Понятие и свойства хеш-функции.
- Абстракция отображение. Понятие и свойства хеш-функции, примеры. Коллизии и способы их разрешения. Множества. Битовые маски. Фильтр Блума.
Динамическое программирование
- Базовое динамическое программирование, одномерные и двумерные задачи. Динамическое программирование по подотрезкам. Динамическое программирование по подмножествам. Динамическое программирование по поддеревьям.
Графы
- Определение графа, способы представления в памяти. Обходы графов: DFS, BFS. Связность. Алгоритмы поиска кратчайших путей в графах. Построения минимального остовного дерева.