О курсе

Базовый Algorithms
≈ 2 мин чтения

Что изучаем в курсе

Алгоритмы — это способы пошагово решать задачи и работать с данными. Они помогают не только написать корректную программу, но и сделать её достаточно быстрой по времени и экономной по памяти.

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

Для закрепления практических навыков используются разные виды заданий:

  • Тест с выбором варианта ответа;
  • Дописать фрагмент алгоритма;
  • Расставить шаги решения в правильном порядке;
  • Соединить термины с определением;
  • Вписать точный ответ;
  • Выделить ошибочную строку;
  • Самостоятельно реализовать решение задачи.

Разные форматы практики помогают не только помнить названия алгоритмов, но и понимать их поведение: какие данные хранятся в структуре, как меняется состояние на каждом шаге и откуда берётся итоговая сложность.

Маршрут курса

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

  • Базовые принципы. Что такое алгоритм, как оценивать сложность, как работать с массивами, строками, поиском и сортировкой.
  • Структуры данных. Стэки, очереди, связные списки, деревья, хеш-структуры и графы.
  • Алгоритмические техники. Рекурсия, два указателя, скользящее окно, жадные решения, обходы, динамическое программирование и другие паттерны.

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

Как мы разбираем алгоритмы

Примеры остаются небольшими: одна задача — одна основная идея. Так проще увидеть сам алгоритм и не потеряться в лишнем коде.

int left = 0;
int right = numbers.length - 1;

while (left < right) {
    int sum = numbers[left] + numbers[right];

    if (sum == target) {
        return true;
    }

    if (sum < target) {
        left++;
    } else {
        right--;
    }
}

Здесь важно не просто запомнить движение двух указателей. Нужно понимать условие, при котором этот подход работает: массив отсортирован, поэтому сравнение суммы с target подсказывает, какой из указателей можно безопасно сдвинуть. Тот же принцип — искать свойство, которое позволяет отбросить часть вариантов — будет встречаться и в других алгоритмах.

Главная цель — уметь объяснить решение своими словами. Если ты можешь описать идею алгоритма, доказать его корректность и оценить сложность, значит тема действительно усвоена.