Main menu

Дерево палиндромов (Eertree): Новое слово в алгоритмах на строках

Задачи поиска и анализа палиндромов (строк, читающихся одинаково в обоих направлениях) — классика спортивного программирования и биоинформатики. Алгоритм Манакера отлично находит самую длинную симметричную подстроку, но когда требуется найти все уникальные палиндромы, подсчитать их частоты или вычислить факторизацию строки на палиндромы, старые методы буксуют. Революция произошла в 2014 году, когда Михаил Рубинчик представил миру новую структуру данных — Дерево палиндромов (Eertree).

Подробнее

Теоремы Гёделя о неполноте: Границы математической логики

На рубеже XIX и XX веков математики под руководством Давида Гильберта лелеяли грандиозную мечту: создать абсолютно строгую, полную и непротиворечивую формальную систему, из аксиом которой алгоритмически выводилась бы любая математическая истина. Однако в 1931 году 25-летний Курт Гёдель опубликовал две теоремы о неполноте, которые навсегда разрушили эту мечту, доказав фундаментальные ограничения самой логики и дискретной математики.

Подробнее

Фибоначчиева куча: Секретное оружие алгоритма Дейкстры

Когда мы обсуждали алгоритм Дейкстры для поиска кратчайшего пути, мы упомянули, что он использует приоритетную очередь для извлечения вершины с минимальным расстоянием. Если использовать обычный массив, извлечение минимума займет время O(V). Если использовать классическую Бинарную кучу (Binary Heap), время извлечения и время обновления (уменьшения) ключа составят O(log V). Для разреженных графов это отлично. Но для очень плотных графов, где количество ребер огромно и операция "Уменьшить ключ" (Decrease-Key) вызывается миллионы раз, логарифм начинает тормозить систему. В 1984 году Майкл Фредман и Роберт Тарьян создали Фибоначчиеву кучу, чтобы преодолеть этот барьер.

Подробнее

Алгоритм Эдмондса (Блоссом): Максимальное паросочетание в произвольных графах

Найти идеальные пары в двудольном графе (например, распределить таксистов по заказам или рабочих по станкам) довольно просто — с этим блестяще справляется алгоритм Куна, использующий поиск увеличивающих цепей. Но что делать, если граф не разделен на две независимые доли? Представьте задачу: разбить 100 студентов на пары для совместного проекта, где ребро означает, что два студента согласны работать вместе. Это задача поиска максимального паросочетания в произвольном графе. Обычный алгоритм Куна здесь зациклится и сломается. Решение в 1965 году нашел Джек Эдмондс.

Подробнее

Алгоритм Манакера: Поиск самого длинного палиндрома за линейное время

Палиндром — это строка, которая читается одинаково слева направо и справа налево ("А РОЗА УПАЛА НА ЛАПУ АЗОРА"). Задача поиска самой длинной палиндромной подстроки внутри гигантского текста часто встречается в биоинформатике (поиск симметричных последовательностей в молекулах ДНК) и криптоанализе. Простой перебор всех возможных центров и расширение от них дает сложность O(N^2). В 1975 году Гленн Манакер (Glenn Manacher) создал невероятно элегантный алгоритм, решающий эту задачу за строго линейное время O(N).

Подробнее

Лемма о разрастании (Pumping Lemma): Математика пределов регулярных выражений

Регулярные выражения (Regex) — невероятно мощный инструмент для парсинга текста. Разработчики используют их для проверки email-адресов, номеров кредитных карт и телефонных кодов. Однако у них есть фундаментальный математический изъян: конечные автоматы, стоящие за регулярными выражениями, "не умеют считать". Как строго доказать, что какую-то строку невозможно распарсить с помощью Regex? Для этого в дискретной математике создана Лемма о разрастании (Pumping Lemma).

Подробнее

Классы сложности вычислений: За пределами P и NP

Когда речь заходит о теории сложности, большинство ограничивается обсуждением проблемы P против NP. Однако вселенная вычислительных задач гораздо шире и многообразнее. В дискретной математике и теории алгоритмов существует сложная иерархия классов, которая помогает понять пределы возможностей не только современных процессоров, но и будущих квантовых компьютеров. Что происходит, когда задача требует не просто бесконечного времени, но и бесконечной памяти?

Подробнее

Теорема Пика: Вычисление площади многоугольников на дискретной решетке

Одной из самых красивых и визуально понятных теорем дискретной геометрии является Теорема Пика. Она описывает изящный способ нахождения точной площади сложных многоугольников, вершины которых лежат на узлах целочисленной решетки (например, на пересечениях линий обычной тетради в клетку). Опубликованная Георгом Александром Пиком в 1899 году, эта формула стала мостом между топологией, теорией графов и компьютерной растровой графикой.

Подробнее

Алгебра кватернионов: От абстрактной математики к 3D-графике

Когда разработчики создают 3D-игры (на движках Unreal Engine или Unity), программируют роботов или рассчитывают орбиты космических спутников, они неизбежно сталкиваются с проблемой вращения объектов в трехмерном пространстве. Привычный метод через углы Эйлера (вращение по осям X, Y, Z — тангаж, рыскание и крен) страдает фатальным математическим изъяном: эффектом «шарнирного замка» (Gimbal Lock). Для безопасного и плавного вращения ИТ-индустрия обратилась к дискретной алгебре и гиперкомплексным числам — кватернионами.

Подробнее

Скрытые марковские модели (HMM): Математика распознавания речи и текста

Обычные цепи Маркова отлично работают, если мы можем точно наблюдать состояние системы (например, какая сегодня погода или на какой веб-странице находится пользователь). Но что делать, если реальные состояния системы от нас скрыты, а мы можем наблюдать лишь косвенные, зашумленные сигналы (эмиссии), порождаемые этими состояниями? Для решения этой проблемы в 1960-х годах были разработаны Скрытые марковские модели (Hidden Markov Models, HMM) — один из главных столпов современного искусственного интеллекта.

Подробнее
Subscribe to this RSS feed

Соц. сети