Не «прочитай определение», а «увидь, что он делает». Каждый алгоритм — интерактивная визуализация, пошаговый разбор и исходный код с подсветкой активной строки.
Кластеры по плотности: core-точки расширяются, шум честно помечается.
Кластеризация без учителя: центроиды притягивают точки, точки перетягивают центроиды.
Тот же ответ, что минимакс — но ветки, не влияющие на решение, не раскрываются.
Отбор → кроссовер → мутация: эволюция без градиентов.
Словарь фраз растёт на ходу; словарь не хранится — decoder строит его сам.
z[i] — сколько символов суффикса i совпадает с префиксом. Один массив — поиск, повторы, сжатие.
Сравниваем справа налево, сдвигаем по таблице последнего символа — часто быстрее длины текста.
Префикс-функция запоминает, где образец совпадает сам с собой, — текст сканируется без откатов.
Частые символы — короткие коды: оптимальное префиксное сжатие.
Самая длинная цепочка символов, встречающаяся в обоих словах в том же порядке.
Скользящий хеш: окно бежит по тексту, числа сравниваются за O(1).
Минимальное число вставок/удалений/замен, чтобы превратить одно слово в другое.
Важность = голоса входящих ссылок с затуханием: ядро Google.
Равновероятная выборка k элементов из потока неизвестной длины за один проход.
Битовая карта отвечает «точно нет» или «возможно да» — за биты вместо гигабайтов.
Кратчайшие пути во взвешенном графе: фиксируем ближайший узел и «расслабляем» его рёбра.
Два прохода DFS — и множества «взаимно достижимых» вершин найдены.
Все кратчайшие пути сразу: пробуем каждую вершину как пересадку и обновляем таблицу.
Все рёбра ровно один раз: 0 или 2 нечётных вершин.
Самая длинная цепочка роста — элементы можно пропускать.
Где ставить скобки: порядок умножений меняет стоимость в разы.
Что взять в рюкзак при лимите веса: каждая вещь либо в рюкзаке, либо нет.
Набрать сумму минимальным числом монет — жадность часто врёт, динамика честна.