Алгоритмы и структуры данных v2
Курс: Алгоритмы и структуры данных на Go
О курсе
Цель: научиться выбирать и писать алгоритмы осознанно — на одном
языке, до дна. Каждая структура сначала собирается своими руками, потом
сравнивается со стандартной библиотекой: своя хеш-таблица рядом с map,
своя куча рядом с container/heap, наивный поиск подстроки рядом с
strings.Contains.
Подход: никаких «представьте, что есть массив» — только работающий Go. Почти каждый модуль начинается с инцидента, который случается в реальном коде, и заканчивается бенчмарком или счётчиком операций: мы не верим оценкам на бумаге, мы их измеряем.
Почему только Go: второй язык размывает фокус. Один язык означает,
что разговор всегда про суть алгоритма и его цену, а не про синтаксис.
Всё, что нужно знать про измерения, лежит в стандартных testing.B и
go test -bench — а playground курса запускает сниппеты прямо в браузере.
Эта версия курса — новая: 20 модулей сквозной линией «база → структуры → сортировка и поиск → деревья и строки → графы → DP → практикум». Старый мультиязычный курс остаётся доступен рядом.
Кому подходит
- Уверенный Go: срезы, мапы, интерфейсы, горутины на базовом уровне.
- Готовитесь к собеседованиям или хотите перестать писать O(n²) там, где достаточно одной мапы.
- Проходили алгоритмы «когда-то в университете» и хотите собрать картину заново — уже на рабочем языке.
Стек
| Что | Чем |
|---|---|
| Язык | Go 1.27 — единственный |
| Измерения | testing.B, go test -bench -benchmem, счётчики операций |
| Стандартная библиотека | slices, maps, sort, container/heap, math/bits |
| Практика | сниппеты в playground + локальные бенчмарки + задачи |
Маршрут курса
Фундамент (модули 1–2): сложность и измерения → срезы и строки Go. Без этого дальше некуда: половина «алгоритмических» проблем — это незнание цены собственных типов.
Линейные структуры и приёмы (3–7): два указателя и окно → хеш-таблицы → стек, очередь, монотонный стек → связные списки и LRU → рекурсия и перебор с возвратом.
Сортировка и поиск (8–10): от insertion sort до quick sort и
slices.Sort → куча и top-K → бинарный поиск и поиск по ответу.
Деревья и строки (11–13): бинарные деревья и обходы → BST и чем его заменять в Go → trie, KMP и хеши подстрок.
Графы (14–15): обходы, компоненты, топологическая сортировка → Дейкстра, DSU, минимальное остовное дерево.
Динамическое программирование и жадные (16–18): от мемоизации к таблице → двумерный DP (рюкзак, LCS, редактор) → жадные и интервалы.
Биты, математика, практикум (19–20): битовые операции, НОД, решето, modpow → каталог паттернов и план тренировок.
Итоговый артефакт: личная библиотека решений на Go — свои реализации структур, отлаженные шаблоны (бинарный поиск, BFS, DP) и набор решённых задач, размеченный по паттернам.
Как проходить
- Читайте с открытым редактором: каждый блок кода — рабочий, его можно запустить в playground прямо на странице модуля.
- Не пропускайте бенчмарки: «примерно O(log n)» и «вот цифры на моей машине» — разные уровни понимания.
- Задачи практики решайте до спойлеров — разборы даны, но сначала попытка.
- Модули 16–18 требуют модулей 3–7: DP — это комбинация окна, рекурсии и массивов, а не отдельная магия.