GitHub - Inostro/algoritm: Algorithms roadmap from zero to interview-ready. 17 patterns, Go templates, ASCII visualizations, LeetCode checklist. Roadmap, Big-O -> Dijkstra. · GitHub
Skip to content

Inostro/algoritm

Repository files navigation

Learn Algorithm

Репозиторий с материалами для изучения алгоритмов с нуля до уровня «прохожу собеседования». Маршрут рассчитан на 4-6 месяцев при ~1-2 часа в день, либо 2-3 месяца при ~3-4 часа в день.

Структура репозитория

В репозитории 5 файлов, каждый со своей ролью. Они не читаются подряд — это справочники и инструменты, которые применяются в разные моменты обучения.

Файл Назначение Когда открывать
1 learn_algoritm.md Теоретическая база: Big-O, структуры данных, рекурсия, метод решения задачи В самом начале — прочитать целиком. Потом — перечитывать при сомнениях
2 dictionary.md Словарь ключевых терминов (коллизия, инвариант, амортизированная сложность и т.д.) Держать открытым всё время. Лезть, когда встречаешь незнакомое слово
3 vizualization.md ASCII-визуализация работы 17 паттернов по шагам Перед тем, как начинать паттерн — чтобы увидеть, как он работает
4 pattern_algoritm.md Шаблоны кода на Go для всех 17 паттернов + классические задачи Во время решения задач — как справочник по синтаксису и заготовкам
5 leetcode_list_check.md Чек-лист из ~90 задач LeetCode по темам, отмечаешь решённые Каждый день, когда решаешь задачи

Как это работает на практике

Один день из середины маршрута (например, неделя по Sliding Window):

  1. Утром открываешь vizualization.md → смотришь раздел Sliding Window, вспоминаешь визуально.
  2. Открываешь pattern_algoritm.md → читаешь шаблон на Go, видишь классические задачи.
  3. Открываешь leetcode_list_check.md → берёшь следующую нерешённую задачу из следующей темы (разные темы в разные дни) , с верху в низ, они расположенны по сложности и сгруппированы по темам.
  4. Решаешь её. Если встречается незнакомый термин — смотришь в dictionary.md.
  5. Если запутался в теории (например, какая сложность допустима) — возвращаешься в learn_algoritm.md.
  6. Решил → ставишь [X] в чек-листе.

Философия маршрута

Три принципа, на которых всё держится:

Паттерны важнее задач. Цель каждого этапа — освоить способ мышления, а не набрать счётчик решённых. Задач тысячи, паттернов — 17.

Глубина важнее скорости. Лучше 150 задач, каждая из которых проработана, чем 500 случайных.

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


Roadmap по неделям

План по неделям

Этап 0. Подготовка (1-3 дня)

  • Выбрать язык (в этом репо примеры на Go).
  • Настроить окружение: локальный редактор, git-репозиторий для решений.
  • Зарегистрироваться на LeetCode и NeetCode.io.
  • Прочитать learn_algoritm.md целиком.

Этап 1. Фундамент (недели 1-2)

Цель — освоить язык анализа и базовые структуры.

Неделя 1. Big-O и мышление об эффективности

Что изучить:

  • Определение Big-O, Θ, Ω — на пальцах.
  • Сложности базовых операций: массив, hash map, список, стек, очередь.
  • Таблица «размер входа → допустимая сложность».
  • Амортизированная сложность на примере динамического массива.

Проверочные упражнения (не на LeetCode, а в голове):

  • Для 10 случайных фрагментов кода — определить сложность за 30 секунд.
  • Для 5 задач — по размеру n угадать класс алгоритма, который пройдёт.

Итог недели: смотришь на вложенный цикл и мгновенно говоришь O(n²); видишь n ≤ 10⁵ и понимаешь, что нужен минимум O(n log n).

Неделя 2. Структуры данных — базовый набор

Что изучить:

  • Массив и срез: цена вставки/удаления, как реализован append.
  • Hash map: как работает внутри, что такое коллизия, почему O(1) в среднем.
  • Стек и очередь: реализация через срез, типовые операции.
  • Односвязный список: структура узла, обход, базовые манипуляции.

Задачи (15-20 штук, все Easy):

  • Arrays & Hashing: Contains Duplicate, Valid Anagram, Two Sum, Group Anagrams.
  • Stack: Valid Parentheses, Min Stack.
  • Linked List: Reverse Linked List, Merge Two Sorted Lists, Linked List Cycle.

Этап 2. Основные паттерны (недели 3-8)

Это сердце маршрута. Каждый паттерн — одна неделя. Порядок важен: следующие опираются на предыдущие.

Правила этапа:

  • Понедельник: теория + один шаблон.
  • Вторник-четверг: 2-3 задачи в день, Easy → Medium. На каждую — 30-40 минут честной попытки, потом разбор.
  • Пятница: 1-2 Hard-задачи.
  • Суббота: перерешиваешь 3-4 задачи недели с нуля на скорость.
  • Воскресенье: пишешь свой конспект.

Метрика усвоения: в конце недели можешь за 5 минут объяснить паттерн вслух и написать шаблон на чистом листе без подглядывания.

Неделя Паттерн Ключевые задачи
3 Two Pointers Valid Palindrome, 3Sum, Container With Most Water, Trapping Rain Water
4 Sliding Window Best Time to Buy and Sell Stock, Longest Substring Without Repeating, Minimum Window Substring
5 Binary Search Binary Search, Koko Eating Bananas, Search in Rotated Sorted Array, Find Minimum in Rotated
6 Stack (углублённо) Min Stack, Evaluate RPN, Daily Temperatures, Largest Rectangle in Histogram
7 Linked List (углублённо) Reorder List, Remove Nth Node, LRU Cache, Merge K Sorted Lists
8 Повторение Не новые темы — перерешать всё сложное с прошлых 5 недель

Итог этапа: ты умеешь распознавать и применять 5 базовых паттернов. Это уже покрывает ~40% задач на собеседованиях.


Этап 3. Деревья и рекурсия (недели 9-11)

Неделя Тема Что делаем
9 Рекурсия как инструмент Теория: дерево вызовов, принцип доверия, post-order возврат информации. 5-7 рекурсивных функций на бумажке
10 Бинарные деревья Invert, Max Depth, Same Tree, LCA, Level Order, Serialize/Deserialize
11 Trie + Backtracking Implement Trie, Word Search II, Subsets, Combination Sum, Permutations, N-Queens

Итог этапа: рекурсия больше не пугает. Ты можешь написать backtracking с нуля, глядя только на условие задачи.


Этап 4. Графы и приоритеты (недели 12-14)

Неделя Тема Что делаем
12 Heap / Priority Queue Kth Largest, K Closest Points, Task Scheduler, Find Median from Data Stream
13 Графы (базовые) Number of Islands, Clone Graph, Pacific Atlantic, Rotting Oranges, Course Schedule
14 Advanced Graphs Network Delay Time (Дейкстра), Cheapest Flights (Bellman-Ford), Min Cost to Connect Points (MST)

Итог этапа: ты умеешь строить граф по условию задачи (часто это самая сложная часть) и применять нужный алгоритм.


Этап 5. Динамическое программирование (недели 15-17)

Неделя Тема Что делаем
15 1-D DP Climbing Stairs, House Robber, Coin Change, Word Break, LIS
16 2-D DP Unique Paths, LCS, Edit Distance, Interleaving String, Regular Expression Matching
17 Повторение DP Не новых задач — перерешиваешь 15-20 DP-задач предыдущих двух недель с нуля

Схема работы над DP-задачей:

  1. Определи состояние: что значит dp[i] в терминах задачи.
  2. Найди переход: как dp[i] выражается через предыдущие.
  3. Задай базу: dp[0], dp[1].
  4. Определи порядок обхода.
  5. Оптимизация памяти, если зависит только от нескольких предыдущих.

Итог этапа: DP больше не кажется магией. Ты видишь состояние и переход в большинстве задач сам.


Этап 6. Специализированные темы (недели 18-20)

Неделя Тема Ключевые задачи
18 Intervals + Greedy Merge Intervals, Meeting Rooms II, Jump Game, Gas Station, Partition Labels
19 Bit Manipulation + Math Single Number, Counting Bits, Pow(x, n), Happy Number, Spiral Matrix
20 Резерв + слабые места Выделяешь 3-4 паттерна, которые даются хуже всего — решаешь по ним 15-20 задач

Итог этапа: ты закрыл все 17 паттернов и видишь свои слабые места.


Этап 7. Подготовка к собеседованиям (недели 21-24)

Здесь сдвигается цель: уже не «научиться», а «применять под давлением».

Что делать каждый день:

  • 2-3 задачи в режиме mock interview: таймер 35 мин (medium) или 45 мин (hard).
  • Проговариваешь вслух: «Читаю условие… вижу отсортированный массив, думаю про two pointers…»
  • Только потом пишешь код.
  • После решения — полный разбор: оптимизации, edge cases, альтернативы.

Минимум 1 раз в неделю — полный mock interview:

  • С другом, на Pramp, interviewing.io или с AI-интервьюером.
  • 45 минут, 1 задача + behavioral вопросы.

Списки для проработки:

  • NeetCode 150 — если ещё не решил всё. Минимум.
  • Blind 75 — подмножество NeetCode 150, которое чаще всего спрашивают.
  • Список задач конкретной компании на LeetCode (нужен Premium), если готовишься к конкретному собесу.

Параллельно с основным маршрутом

Эти активности идут фоном с самого начала и до конца.

Ежедневная задача «на поддержку» (10-15 минут). Одна Easy-задача из уже пройденной темы — чтобы руки не забывали. Особенно важно в отпуске или когда основной план буксует.

Ведение конспекта паттернов. Не разборы задач, а именно паттерны. Один файл на паттерн. Содержимое:

  • По каким словам в условии узнаю;
  • Шаблон кода;
  • 3-5 самых показательных задач;
  • Типовые ошибки;
  • «Родственные» паттерны.

Повторение по интервалам. Задача, которая далась тяжело:

  • Перерешать через 1 день.
  • Потом через 3 дня.
  • Потом через неделю.
  • Потом через 2-3 недели.

Если каждый раз решается легко — закрываешь для повторений. Если забылась — возвращаешь в цикл.


Метрики прогресса

Этап Критерий
1. Фундамент Определяю сложность любого фрагмента за 30 сек
2. Базовые паттерны Узнаю паттерн по условию за 1-2 минуты
3. Рекурсия Пишу backtracking с нуля без подсказок
4. Графы Моделирую задачу как граф, выбираю правильный алгоритм
5. DP Формулирую состояние и переход до написания кода
6. Специализированные Обосновываю выбор жадность vs DP
7. Подготовка Решаю medium за 30 минут с объяснением вслух

Типичные ошибки и как их избегать

«Решаю по 10 задач в день и через месяц буду готов». Не будешь. Задачи без осмысления → пустые счётчики. Лучше 2-3 задачи с глубоким разбором.

«Эта задача сложная, посмотрю разбор сразу». Убивает прогресс. 30-40 минут честной попытки — минимум. Даже если не решил, мозг провёл работу, без которой разбор не усвоится.

«Решил — двигаюсь дальше». Задача решена, когда ты можешь повторить это через неделю. Без повторений через 2 месяца ты забудешь 80%.

«Перепрыгиваю темы, которые скучные». Пропуск фундамента возвращается на более сложных этапах. Двигаешься линейно.

«Читаю теорию, но не пишу код». Самая опасная ловушка. Алгоритмы — двигательный навык, как игра на инструменте. Только через пальцы.

«Смотрю решения и киваю — понятно же». Понимание чужого решения ≠ умение написать своё. Всегда — закрыть разбор и написать с нуля.

«Только на LeetCode, без контестов». Контесты (LeetCode Weekly Contest, Codeforces) дают навык решать под временным давлением — без них собес будет тяжелее.


Что делать после roadmap

Цель — пройти собес в FAANG. Фокус на mock interviews, список задач конкретной компании, system design (middle+), behavioral.

Цель — спортивное программирование. Переходишь на Codeforces, участвуешь в раундах, добавляешь: сегментные деревья, Fenwick tree, строковые алгоритмы (KMP, Z-функция, суффиксные структуры), продвинутую комбинаторику, теорию чисел.

Цель — применять в работе. Возвращаешься к своим рабочим задачам и замечаешь, где теперь применим один из 17 паттернов. Это может быть кэширование, обработка событий, парсинг, оптимизация БД-запросов.


Полезные ссылки

  • NeetCode Roadmap — визуальный roadmap с видеоразборами
  • LeetCode — основная площадка для практики
  • Blind 75 — минимальный набор задач для собесов
  • Big-O Cheat Sheet — таблица сложностей всех структур и алгоритмов
  • VisuAlgo — интерактивные визуализации алгоритмов

About

Algorithms roadmap from zero to interview-ready. 17 patterns, Go templates, ASCII visualizations, LeetCode checklist. Roadmap, Big-O -> Dijkstra.

Topics

Resources

License

Stars

Watchers

Forks

Contributors