Алгоритмы с нуля
Инструментарий: выбор техники
Весь трек сводится к одному навыку: прочесть задачу и назвать верный инструмент до того, как написана первая строка. Каждый вопрос даёт формулировку задачи и спрашивает не ‘каков ответ’, а ‘какая техника и почему именно она, а не соблазнительный неверный вариант’.
Убедись, что умеешь отображать форму задачи — её ограничения, структуру, то, что она просит — на подходящую технику и объяснять, почему очевидная альтернатива не работает или тратит время.
Дан неотсортированный массив из 10^6 целых чисел; нужно ответить на 10^5 запросов вида 'существует ли значение X?'. Какой подход и почему?
Задача просит число различных способов набрать сумму N заданными номиналами монет. N до 10^4. Какая техника и в чём признак?
Нужно найти k наименьших элементов потока из n чисел (n заранее неизвестно, k фиксировано и мало). Какая структура данных несёт технику?
Дан отсортированный массив; найди два индекса, значения которых дают в сумме target. Массив может быть огромным, а доп. памяти разрешено O(1). Какая техника?
Нужно определить, есть ли цикл в ориентированном графе зависимостей, и если нет — выдать корректный порядок сборки. Какая техника?
Задача даёт n <= 20 предметов и просит оптимальное подмножество при ограничении, которое сопротивляется любой жадной или value-DP формулировке. Ограничения кричат об определённом семействе. О каком, и в чём признак n <= 20?
Выбор техники — это чтение, а не зубрёжка. Размеры ограничений — самый громкий сигнал: n ≤ 20 разрешает перебор 2^n; n ≤ 10^5 требует O(n log n); 10^9 вынуждает O(log n) или математику. Глагол задачи называет семейство — ‘существует ли’ ведёт к хешированию; ‘k наименьших или следующий по приоритету’ к куче; ‘сколько способов или оптимизация по перекрывающимся подзадачам’ к DP; ‘лучший локальный выбор, который можно доказать’ к жадности; ‘упорядочить по зависимости’ к топосортировке; ‘пара в отсортированных данных при O(1) памяти’ к two pointers. Каждый неверный ответ выше — это реальный инструмент, применённый не туда; навык в том, чтобы сопоставить форму инструменту, а затем понимать, почему соблазнительная альтернатива тратит время или ломается.