Main menu

Персистентные структуры данных: Математика "путешествий во времени" в коде

В классическом императивном программировании изменение переменной или узла в дереве безвозвратно уничтожает старое значение. Если вам нужно отменить действие (Ctrl+Z), вам приходится заранее сохранять копию всей структуры, что катастрофически расходует оперативную память. В функциональном программировании и математической логике мутации запрещены. Для решения проблемы эффективного хранения истории изменений были придуманы персистентные структуры данных.

Подробнее

Пересечение матроидов: Расширение границ жадной оптимизации

Ранее мы выяснили, что если задача может быть математически описана структурой матроида (как задача о минимальном остовном дереве), то для ее идеального решения достаточно использовать самый банальный Жадный алгоритм. Однако в реальном мире, при составлении сложных расписаний инженерам часто приходится сталкиваться с ограничениями, поступающими сразу из нескольких разных систем правил. Как оптимизировать решение, удовлетворяющее сразу двум матроидам?

Подробнее

Максимальный разрез (Max-Cut) и полуопределенное программирование

Мы уже обсуждали задачу о минимальном разрезе (Min-Cut), которая изящно решается через алгоритмы максимального потока (или рандомизированный алгоритм Каргера). Кажется логичным, что если изменить слово "минимальный" на "максимальный", задача останется такой же легкой. Но в дискретной математике интуиция часто обманчива. Задача о Максимальном разрезе (Max-Cut) является одной из самых сложных NP-полных проблем, лежащей в основе статистической физики (модели спиновых стекол) и проектирования VLSI-чипов.

Подробнее

Вероятностный метод Пала Эрдёша: Доказательство через случайность

Как доказать, что определенный математический объект существует, если вы не можете его построить или привести ни одного конкретного примера? Венгерский математик Пал Эрдёш, один из самых плодовитых ученых XX века, совершил революцию в комбинаторике, создав "Вероятностный метод". Он показал, что случайность можно использовать не только в алгоритмах, но и для получения строгих, абсолютно детерминированных математических доказательств.

Подробнее

Гиперграфы: Выход за пределы попарных связей

Традиционная теория графов моделирует мир в виде парных отношений: дружба между двумя людьми, кабель между двумя серверами, дорога между двумя городами. Но что, если отношение связывает сразу три, четыре или сотню объектов одновременно? Например, несколько соавторов одной научной статьи или группа актеров в одном фильме. Для описания таких многомерных связей дискретная математика использует расширение классической теории — Гиперграфы.

Подробнее

Миноры графов и Теорема Робертсона-Сеймура: Глобальный взгляд на топологию

Когда мы исследуем свойства графов, иногда нам мешают лишние детали: мелкие ответвления или промежуточные узлы на длинных путях. Чтобы увидеть фундаментальную "скелетную" структуру сети, математики ввели понятие минора графа. Теория миноров графов увенчалась одним из самых масштабных и сложных доказательств в истории математики — Теоремой Робертсона-Сеймура, которая перевернула наши представления об алгоритмической сложности.

Подробнее

Марковские случайные поля (MRF): Вероятностный вывод на графах

Когда мы описываем зависимости в данных, мы часто используем направленные графы — Байесовские сети. Они отлично показывают причинно-следственные связи (Болезнь -> Симптом). Но как описать систему, где зависимости взаимны и симметричны? Например, пиксели на цифровой фотографии: цвет одного пикселя сильно зависит от цвета соседнего, но здесь нет "причины" и "следствия", они влияют друг на друга равноправно. Для моделирования таких структур дискретная математика использует неориентированные Марковские случайные поля (Markov Random Fields, MRF).

Подробнее

Locality-Sensitive Hashing (LSH): Математика поиска похожих объектов

Классические криптографические хеш-функции (MD5, SHA-256) созданы с одной целью: обеспечить строгий лавинный эффект. Изменение всего одной запятой в томе "Войны и мира" приведет к совершенно другому, неузнаваемому хешу. Однако в машинном обучении, биоинформатике и системах рекомендаций нам нужно нечто диаметрально противоположное. Нам нужно, чтобы похожие объекты получали одинаковые хеши. Эту математическую магию обеспечивает Locality-Sensitive Hashing (LSH).

Подробнее

Алгоритм Хопкрофта-Тарьяна: Проверка планарности за линейное время

Проблема проверки графа на планарность (можно ли нарисовать его на плоскости без пересечения ребер) имеет важнейшее значение в проектировании топологии печатных плат и микрочипов (VLSI). Теорема Куратовского дает точный критерий (отсутствие подграфов K5 и K3,3), но наивный поиск этих подструктур занимает катастрофическое время O(V^6). В 1974 году Джон Хопкрофт и Роберт Тарьян совершили алгоритмическую революцию, создав алгоритм проверки, работающий за абсолютно линейное время O(V).

Подробнее

Декартово дерево (Treap): Сбалансированный симбиоз дерева и кучи

Обычные бинарные деревья поиска обладают отличным временем операций O(log N), но только если данные поступают в случайном порядке. Если загрузить в дерево уже отсортированный массив, оно выродится в длинную "макаронину", и время поиска деградирует до O(N). Строгие балансировщики (АВЛ-деревья или Красно-черные деревья) решают проблему, но их реализация требует сотен строк сложного кода с вращениями. Дискретная математика предлагает невероятно элегантную альтернативу — рандомизированное Декартово дерево (Treap).

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

Соц. сети