Trie (префиксное дерево)
Слова как пути от корня: общие префиксы хранятся один раз.
1class Trie {2 private root: Node = { char: '·', children: new Map<string, Node>(), end: false }3 4 insert(word: string): void {5 let node = this.root6 for (const ch of word) {7 let next = node.children.get(ch)8 if (next === undefined) {9 next = { char: ch, children: new Map(), end: false }10 node.children.set(ch, next)11 }12 node = next13 }14 node.end = true15 }16 17 has(word: string): boolean {18 let node = this.root19 for (const ch of word) {20 const next = node.children.get(ch)21 if (next === undefined) return false22 node = next23 }24 return node.end25 }26}27 28interface Node {29 char: string30 children: Map<string, Node>31 end: boolean32}Проблема
Поиск слова в хеше — O(1), но поиск по префиксу («все слова на „algo“») хеш не умеет вовсе. Отдельное хранение всех префиксов раздувает память в длину слова раз.
Что вы видите
Дерево букв: «cat» и «code» делят узел «c»; конец слова помечен.
Как это работает
Все операции — O(длины слова), независимо от числа слов. Общие префиксы хранятся один раз: «cat» и «code» делят узел «c». На этом стоят автодополнение, словари и спелл-чекеры — найти все слова с префиксом значит просто спуститься до него и обрать поддерево.
Пошаговый разбор
- 01
Вставка
Спуск по буквам, недостающие узлы создаются.
- 02
Общий префикс
Переиспользуется без дублирования.
- 03
Поиск
Тот же спуск + флаг конца слова.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Пустая строка
Корень и есть «конец» пустого слова — соглашение о end-флаге.
- Слово-префикс другого
„cat“ и „catalog“: конец слова в середине ветви — нужен флаг.
- Нет совпадающего префикса
Поиск сваливается с корня — мгременный отказ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
Связанные алгоритмы
«Как устроено автодополнение: дерево слов»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.