Раздел 1 Общие знания
Познакомимся с системой оценки эффективности алгоритмов и важностью её оптимизации
Зачем фронтендеру оптимизировать алгоритмы?
Определение факториала
O-нотация
Кейс: примеры алгоритмически переусложнённого кода
Тест на знание простых алгоритмов
Раздел 2 Структуры данных
Разберёмся во встроенных структурах данных и посмотрим, насколько хранение данных в правильном формате упрощает задачи
Структуры данных, встроенные в JavaScript
Практика: посмотрим на одну из встречающихся в реальной жизни задачек на стек
Практика: увидим, насколько важно выбирать под задачу нужный формат данных
Тест на оценку сложности функций
Раздел 3 Поиск
Узнаем о самых популярных алгоритмах поиска
Линейный поиск
Бинарный поиск
Кейс: реализация бинарного поиска на практике
Практическое задание
Раздел 4 Разделяй и властвуй
Рассмотрим парадигму решения алгоритмических задач «Разделяй и властвуй» и познакомимся с рекурсией
Рекурсия
Практика: уменьшение вложенности массива
Практика: числа Фибоначчи или самое популярное применение рекурсии
Разделяй и властвуй
Практика: рекурсивный бинарный поиск
Практическое задание
Раздел 5 Cортировки
Познакомимся с несколькими популярными алгоритмами сортировок и оценим их сложность
Виды сортировок
Сортировка пузырьком
Практика: реализация сортировки пузырьком
Quicksort
Практика: реализация quicksort
Поддержание отсортированности
Практика: дозапрос элементов с API
Практическое задание: частичная сортировка
Кейс: модифицированная сортировка пузырьком
Кейс: модифицированный quicksort
Раздел 6 Деревья
Узнаем о графах и деревьях, а также о том, что мы все с ними уже работали
Граф
DOM — самое известное дерево фронтенда
Кейс: обход DOM-дерева
Практическое задание
Бинарное дерево поиска
Кейс: бинарное дерево поиска
Раздел 7 Хеш-таблицы
Чуть лучше узнаем Map и принципы его работы
Хеш-таблицы
Хеш-функция и коллизии
Кейс: решаем самую частую проблему, в которой помогает Map
Практическое задание
Кейс: улучшаем логирование
Раздел 8 Стек и очередь
Вспомним про стек, поговорим о его применении внутри языка, а также посмотрим на задачи, решаемые очередью
Вспомним о стеке
Стек вызовов: цена за простоту рекурсии
Кейс: заменяем рекурсию на циклы
Кейс: заменяем рекурсию на стек
Очередь
Кейс: очереди для симуляции
Практическое задание
Кейс: симуляция игры
Дополнительно: двусторонняя очередь
Раздел 9 Жадные алгоритмы
Разберём ещё одну концепцию для решения алгоритмических задач и посмотрим на классические задачи, которые она решает
Определение жадных алгоритмов
Кейс: популярная задача на жадность
Алгоритм Дейкстры
Практическое задание: мини-игра
Кейс: прыжки в массиве
Что не решается жадностью
Раздел 10 Динамическое программирование
Дополним решение задачи из прошлого раздела новыми идеями!
Определение динамического программирования
Кейс: решаем задачу о рюкзаке в «ручном» режиме
Кейс: решаем задачу о рюкзаке кодом
Практическое задание: максимальная прибыль от акций
Кейс: решение задачи динамическим программированием