Я часто рассказываю математику тем, кто сам ею не занимается. Это непросто — и не только потому, что математика сложна сама по себе

Обычно математики интересуются тем, что связано с другими разделами самой математики, и людям «снаружи» непросто понять их мотивацию. Современная математика чаще всего развивается изнутри — из собственных понятий, задач и связей. Тем ценнее случаи, когда удаётся выстроить рассказ вокруг содержательных приложений

Больше текстов можно найти в моём телеграм канале Кроссворд Тьюринга, рекомендую канал про прикладную математику Все предельно. Подписывайтесь!) 

Приложений у математики много, и про них написано немало. Но рассказать о них так, чтобы получилось коротко, по делу и интересно — непросто. Если объяснять подробно, получится курс лекций. А если пытаться ужаться — легко потерять суть или создать обманчивое впечатление простоты. Такие тексты требуют тонкого баланса: написать их трудно, и именно поэтому они особенно ценны

Пару дней назад я вернулся из байдарочного похода по Карелии, в котором прочёл книгу Нелли Литвак и Андрея Райгородского «Кому нужна математика?»

Она совсем небольшая (чуть больше 150 страниц) и устроена как серия коротких рассказов, каждый из которых посвящён одной теме на стыке чистой и прикладной математики

Это не учебник, а серия коротких историй — о математике, её приложениях и людях, которые эти приложения создавали

Каждый сюжет начинается с реальной проблемы: например, как составлять расписания, шифровать сообщения или продавать рекламу в поисковиках. После этого рассказано про метод её решения и математику, которая для неё нужна. Тут и попытка объяснить суть метода, и интересные исторические байки, и примеры того, как эти идеи реально работают в системах, которыми мы пользуемся каждый день

Это идеальное чтение для дороги: за полчаса погружаешься в один сюжет, а потом размышляешь о нём целый день

В этой статье я расскажу о книге поподробнее и перескажу три истории из неё, которые меня удивили

Для кого эта книга

«Кому нужна математика» — это путевод��тель по задачам и методам прикладной математики, прежде всего в области интернета, передачи, хранения и анализа данных. Она не рассчитана на случайного читателя: её аудитория — те, кому всерьёз интересно, как работает окружающий нас цифровой мир

Для человека с хорошей математической базой, но без широкого прикладного бэкграунда, это отличный первый шаг, чтобы составить общее представление о том, как устроены приложения. А для тех, кто хорошо знаком с прикладной математикой, многое здесь будет знакомо — но, возможно, впервые собрано в одном месте и уложено в цельную картину

Книга несложная — основной текст доступен любому матшкольнику, но в конце каждой главы есть небольшое приложение для продвинутого читателя — с формулами и доказательствами

Всего в книге семь глав. Все темы разные, но их объединяет общий сюжет — как математика помогает делать интернет быстрым, точным и надёжным. Вот эти темы:

  • линейное программирование и составление расписаний

  • кодирование информации

  • связность интернета

  • обработка запросов

  • шифрование и защита данных

  • обработка больших данных при ограниченной памяти

  • механизмы интернет-рекламы

Книга попала в шорт-лист премии «Просветитель», а недавно её переиздали первой в серии «Математические основы ИИ» Альянса в сфере искусственного интеллекта

Фокус книги кажется естественным — но в таком формате я почти не встречал других текстов. Если вы знаете что-то похожее — буду рад рекомендациям

Три неожиданных истории

В этом тексте я не буду пересказывать книгу — её стоит читать целиком. Возможно, позже я напишу отдельные статьи по мотивам некоторых глав, но сейчас хочу рассказать о трёх эпизодах, которые особенно меня зацепили

Они не самые центральные в книге, но в них ярко проявляется то, что делает математику настолько полезной: способность решать задачи, которые иначе казались бы безнадёжными

  • Первая — о том, как математические трюки позволили решать задачи линейного программирования в десятки раз быстрее, чем любые аппаратные улучшения

  • Вторая — про неожиданную атаку на RSA, в которой использовалась только чистая математика и перебор

  • Третья — про то, как в Facebook проверяли гипотезу о «шести рукопожатиях» и с помощью нетривиального счётчика нашли среднюю длину пути на графе в миллионы узлов

Все они — про изящество и мощь идей. Формул в этом тексте не будет, но, надеюсь, удивление передать удастся

Математика быстрее процессоров

Многие практические задачи — от составления расписаний до управления складом, от оптимизации логистики до анализа стратегий в теории игр — сводятся к одной и той же математической постановке

У вас есть сотни, а то и тысячи переменных и набор условий, заданных линейными уравнениями или неравенствами. Нужно найти значения, удовлетворяющие этим условиям, при которых максимизируется заданная линейная функция. Это задача линейного программирования — фундаментальной области прикладной математики

В реальности часто требуется, чтобы переменные принимали только целые значения. Это ещё труднее. Тем не менее, уже десятилетиями эти задачи успешно решаются — с помощью симплекс-метода, метода ветвей и границ и их многочисленных улучшений

Алгоритмы продолжают развиваться, и это развитие даёт потрясающие плоды

В 2007 году американский математик Роберт Биксби провёл эксперимент: он взял все версии промышленного решателя CPLEX с 1991 года и проверил, как изменилась за это время скорость решения почти 2000 задач

Оказалось, что за 15 лет производительность выросла в 29 000 раз — и это на одном и том же компьютере. А в 2012 году появилась новая система Gurobi, которая ускорилась ещё в 16 раз. В сумме — почти полмиллиона

За это же время прирост мощности компьютеров, согласно закону Мура, составил около 8000 раз

Сравните: 8000 против 500 000. Получается, если вам нужно решить задачу линейного программирования, то выгоднее использовать старый компьютер с новыми алгоритмами, чем наоборот

Совместный эффект улучшения алгоритмов и роста производительности компьютеров поразительный!

Пример из книги: задача, которая в 1991 году решалась 126 лет, в 2012 году укладывается в одну секунду

А по оценкам 2015 года, общее ускорение достигло 450 миллиардов раз

Всё это стало возможным благодаря математике — методам, теоремам и идеям, разработанным задолго до того, как они стали частью промышленного кода

Как взломать интернет

Представьте: вы хотите передать код от банковской карты через интернет, при этом не раскрывая его провайдеру. Как передать секрет через незащи��ённый канал так, чтобы даже тот, кто перехватил сообщение, не смог его расшифровать? Это задача асимметричного шифрования — одного из краеугольных камней современной криптографии

Один из самых известных алгоритмов — схема Диффи–Хеллмана. Она устроена так, что обе стороны могут договориться о ключе, не раскрывая его в явном виде, используя открытые данные. Ключевую роль в этом играет очень большое простое число, которое известно всем. Само по себе это число не является секретом — наоборот, оно встроено в протокол

В 1977 году Мартин Гарднер опубликовал в Scientific American зашифрованное сообщение, созданное по подобной схеме

Его удалось расшифровать только через 15 лет, в 1992 году, с помощью суперкомпьютеров, распределённых вычислений и колоссальных усилий криптографов со всего мира

Долгие годы в большинстве систем использовалось одно и то же число — потому что менять его сложно, а риски казались чисто теоретическими. Но в 2015 году ситуация изменилась

Исследователи продемонстрировали новый метод атаки: можно заранее, за год вычислений и примерно за 100 миллионов долларов, провести подготовительную фазу, после которой дешифровка конкретных сообщений занимает доли секунды

Это стало возможным именно потому, что многие системы использовали одно и то же число: достаточно потратиться один раз — и потом можно расшифровывать весь трафик, проходящий через публичные каналы — от VPN до HTTPS

По оценкам, такая атака вполне лежит в пределах бюджета крупных госструктур, занимающихся кибербезопасностью. Авторы статьи прямо указывали на Агентство национальной безопасности США и предполагали, что некоторые ключи уже могли быть заранее взломаны

После этой публикации ведущие интернет-протоколы начали обновлять встроенные параметры, чтобы избежать массовой уязвимости

Facebook и шесть рукопожатий

Мы все слышали про «шесть рукопожатий»: мол, между любыми двумя людьми на Земле — всего шесть шагов знакомства. Эта гипотеза восходит к знаменитому эксперименту социолога Стэнли Милгрэма

В 1960-е годы он рассылал письма случайным жителям Небраски с просьбой передавать их своим знакомым, пока они не дойдут до нужного адресата в Бостоне
Из почти трёхсот писем дошли 64, и путь в среднем занимал шесть шагов

Спустя полвека у нас появилась идеальная площадка для проверки этой идеи — социальные сети. В 2011 году Facebook совместно с учёными Миланского университета решил выяснить, сколько рукопожатий в действительности отделяют пользователей друг от друга

Казалось бы, задача простая: взять данные о дружбе и для каждой пары пользователей посчитать минимальную длину цепочки. Но Facebook — это сотни миллионов человек и десятки триллионов пар. Никакая оперативная память не справится с такой нагрузкой

Чтобы посчитать количество рукопожатий, каждому пользователю сопоставляют вложенные списки:

  • в первый включают всех его друзей

  • во второй — друзей друзей

  • в третий — друзей третьего уровня

  • и так далее

На каждом шаге нужно определить, сколько новых пользователей мы увидели — то есть сколько уникальных имён встретилось в очередном списке. Но хранить все эти имена в оперативной памяти — совершенно нереально

Точно посчитать число различных элементов почти невозможно, но приблизительно — можно. Один из стандартных подходов — алгоритм K-Minimum Values: он запоминает несколько самых маленьких хешей и по ним оценивает общее количество. Метод надёжный, но всё же достаточно затратный по памяти

Настоящий прорыв произошёл в 2007 году, когда французский математик Филипп Флажоле предложил алгоритм HyperLogLog

Его идея — не хранить все элементы, а оценивать их число по частоте появления редких хешей
Алгоритм оказался не только в тысячи раз быстрее старых, но и на порядки экономнее по памяти
Благодаря этому его можно запускать сразу для всех пар пользователей — даже в таких гигантских сетях, как Facebook

Результаты оказались впечатляющими: средняя длина цепочки между двумя пользователями Facebook составила не шесть, а 4,74 рукопожатия

Филипп Флажоле умер в 2011 году — в разгар внедрения своего метода в индустрию. В его честь в системе Redis счётчики, использующие HyperLogLog, обозначаются префиксом PF
А сам алгоритм сегодня называют краеугольным камнем инфраструктуры работы с большими данными

P.S.

Я рассказал здесь всего о трёх историях — и то не самых центральных. В каждой главе есть моменты, которые заинтересуют и новичка, и специалиста. Книгу хочется похвалить и за точность изложения, и за вкус в выборе примеров, и за умение увлекать, не упрощая. Это очень редкое сочетание

Если вам интересно, как работает цифровой мир, «Кому нужна математика» будет отличным проводником
А если вы уже работаете в прикладной математике — вам будет приятно встретить знакомые идеи в хорошем изложении и неожиданном контексте

Очень советую прочесть книгу целиком. Она стоит того

📘 Нелли Литвак, Андрей Райгородский. Кому нужна математика? М.: МЦНМО, 2024