Десять уравнений, которые правят миром. И как их можете использовать вы — страница 46 из 49

Математическое знание – как дополнительный уровень интеллекта. Я также считаю (хотя это более спорно), что изучить десять уравнений – наша моральная обязанность. Я даже полагаю, что в целом уже проделанная работа участников «Десятки» благо для человечества. Не всегда, но чаще да. Изучая эти уравнения, вы помогаете не только себе, но и другим.

Такой вывод может показаться неожиданным, если учесть, что участники «Десятки» часто имеют преимущество перед теми, кто не обладает такими навыками. Может также показаться, что этот вывод противоречит философской позиции проверяемости, описанной Алфредом Айером, который говорил, что нельзя ожидать, чтобы в математике нашлись разумные ответы на моральные вопросы. Но вот во что я верю и что буду сейчас отстаивать. «Десятка» – это сила добра.

* * *

Чтобы выяснить, где в математике можно найти мораль, сначала нужно понять, где ее найти нельзя. С помощью метода исключения мы должны определить, что именно в математическом мышлении может подсказать нам, какие поступки «правильные».

Наше последнее уравнение «Если… то…» не одно уравнение, а сокращенное наименование множества алгоритмов, которые можно записывать в виде последовательности операторов «если… то…» и циклов «повторять… пока». Такие операторы – основа программирования. Например, в футбольном боте, созданном Антоном, мы найдем команды вроде:

если ключевые передачи> 5, то печатать («Он сделал много важных передач»)

Такого рода команды в сочетании со входными данными определяют, что будет на выходе.

В 1950-х, 1960-х и 1970-х зарождавшаяся информатика обнаружила целый ряд алгоритмов для обработки и организации данных. Одним из самых первых примеров был алгоритм сортировки слиянием, впервые предложенный Джоном фон Нейманом в 1945 году для сортировки чисел или по алфавиту. Чтобы понять, как он работает, сначала подумайте, как объединить два уже отсортированных списка. Например, у меня есть список букв в алфавитном порядке {A,G,M,X} и другой {C,E,H,V}. Чтобы создать сортированный список, объединяющий оба компонента, мне нужно идти слева направо по обоим спискам и ставить букву, которая идет раньше по алфавиту, в новый, а затем выбрасывать ее из исходного.

Попробуем. Сначала я сравниваю два первых элемента списков – А и С. Поскольку А в алфавите идет раньше, я помещаю ее в новый список и убираю из текущего. Теперь у меня три списка: новый {A}, первоначальные {G,M,X} и {C,E,H,V}. Я снова сравниваю первые элементы исходных списков, G и C, и добавляю C в новый список. Он принимает вид {A,C}. Теперь я сравниваю G и E, отправляя в новый список E: {A,C,E}. Это повторяется, пока я не получу сортированный список {A,C,E,G,H,M,V,X} и два пустых исходных.

Чтобы перейти от слияния уже отсортированных списков к сортировке произвольных, фон Нейман предложил стратегию, основанную на принципе «разделяй и властвуй». Полный список делится на более мелкие, и задача для каждого из них сводится к тому же методу – слиянию уже сортированных списков.

Предположим, мой первоначальный список таков: {X,G,A,M}. Сначала мы сливаем буквы {X} и {G}, получая {G,X}, и буквы {A} и {M}, получая {A,M}. Элегантность такого подхода в том, что на всех уровнях используется одна и та же техника. Разделив исходный список на достаточно мелкие части, мы в итоге приходим к списку, который гарантированно будет отсортирован, то есть к отдельным буквам. Затем, используя наше умение сливать два сортированных списка, мы гарантируем, что все создаваемые нами списки также будут отсортированы (см. рис. 10). Сортировка слиянием никогда не ошибается.


Рис. 10. Иллюстрация сортировки слиянием и алгоритма Дейкстры


Еще один пример – алгоритм Дейкстры, определяющий кратчайший путь между двумя точками. Голландский физик и программист Эдсгер Дейкстра разработал свой алгоритм в 1953 году, чтобы продемонстрировать «некомпьютерным людям» (как он их называл), что компьютеры могут быть полезными при расчете самого быстрого маршрута между двумя нидерландскими городами[189]. На придумывание алгоритма у него ушло всего двадцать минут – он сидел в одном из амстердамских кафе. Позже он рассказывал журналу Communications of the ACM[190]: «Одна из причин его красоты – отсутствие у меня карандаша и бумаги. Без них вы практически вынуждены избегать всех сложностей, которых можно избежать».

Представьте, что вы хотите проехать из Роттердама в Гронинген. Алгоритм Дейкстры предписывает вам сначала определить время поездки от Роттердама до всех соседних с ним городов. Процесс показан на рисунке 10. Например, Делфт получит 23 минуты, Гауда – 28, а Схонховен – 35. Следующий шаг – рассмотреть все соседние для этих трех городов и найти кратчайшее время пути до них. Например, от Гауды до Утрехта 35 минут, а от Схонховена до Утрехта – 32 минуты; поэтому кратчайшее общее время пути до Утрехта составляет 28 + 35 = 63 минуты через Гауду (это меньше, чем 35 + 32 = 67 минут через Схонховен). Алгоритм постепенно продвигается по территории Нидерландов, фиксируя кратчайшее расстояние до каждого города. Поскольку он каждый раз вычисляет кратчайший путь до любого города, то при добавлении нового города гарантировано, что до него тоже будет найден кратчайший путь. Алгоритм рассчитан не на конкретный Гронинген, он маркирует расстояния до всех городов; но когда в расчетах дело дойдет до него, алгоритм гарантирует, что нашел кратчайший путь.

Есть множество алгоритмов, похожих на сортировку слиянием Джона фон Неймана или нахождение кратчайшего пути[191]. Вот несколько примеров: алгоритм Краскала для нахождения минимального остовного дерева (например, схема кратчайшей железнодорожной сети, соединяющей все города страны); расстояние Хэмминга для обнаружения разницы между двумя частями текста или данных; алгоритмы построения выпуклой оболочки для изображения фигуры, окружающей некоторое множество точек; алгоритмы обнаружения столкновения в 3D-графике; быстрое преобразование Фурье для обнаружения сигнала. Эти алгоритмы и их вариации – строительные блоки для аппаратного и программного обеспечения компьютеров. Они сортируют и обрабатывают наши данные, перемещают электронные письма, проверяют грамматику и позволяют Сири или Алексе за секунды идентифицировать передаваемую по радио песню.

Математика «Если… то…» всегда дает правильный ответ, и мы всегда знаем, что делать дальше. Возьмите, например, футбольного бота, созданного тремя студентами магистратуры. Я мог задавать ему простые вопросы о футболе, он отвечал; но Антона его ответы не удивляли. Антон закодировал правила, которые определяют, что говорит бот, и программа четко следует им.

Почему я свалил в одно общее уравнение все алгоритмы «если… то…»? Потому что у них есть одно очень важное общее свойство: они универсальные истины. Алгоритм Дейкстры всегда найдет кратчайший путь; сортировка слиянием всегда отсортирует список имен от A до Z; выпуклая оболочка для множества точек всегда имеет одну и ту же конструкцию. Это утверждения, которые истинны независимо от того, что мы говорим или делаем.

В первых девяти главах этой книги мы использовали уравнения для проверки моделей, составления прогнозов и оттачивания нашего понимания реальности. Эти уравнения взаимодействуют с миром: мы позволяем прошлым данным информировать наши модели, а те прогнозируют будущие данные. Но алгоритмы «если… то…» негибкие. Они берут данные – скажем, список имен для сортировки или список точек, между которыми можно вычислить кратчайший путь, – и выдают ответ. Мы не пересматриваем свое знание мира на основе полученных ответов. Точно так же и наши наблюдения не влияют на истинность алгоритмов. Вот почему я называю их универсальными: их истинность доказана, они работают всегда.

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

Математика полна удивительных результатов, которые сначала могут противоречить интуиции. Например, тождество Эйлера (названное в честь великого математика Леонарда Эйлера[192]) eπi + 1 = 0 говорит нам о связи между тремя хорошо известными величинами, основанием натуральных логарифмов e = 2,71828…, π = 3,14159… и i = √–1. Этот факт так изящно сочетает фундаментальные константы, что его называют самой красивой формулой в математике[193].

Еще один пример – золотое сечение:

φ = (1 + √5) / 2 = 1,618…

Это число появляется, когда мы рисуем прямоугольник, который можно разрезать на квадрат и новый прямоугольник, подобный исходному. Иными словами, если сторона этого квадрата равна a, а стороны прямоугольника – a и b, то прямоугольник называется золотым, когда



Интересно, что число φ (фи) также появляется в связи с последовательностью чисел Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34…, которая получается, когда мы складываем два предыдущих числа для получения следующего (1 + 1 = 2, 1 + 2 = 3 и т. д.). Если мы рассмотрим отношение двух последовательных чисел Фибоначчи, то оно будет все сильнее приближаться к числу φ (например, 13/8 = 1,625, 21/13 = 1,615…, 34/21 = 1,619… и т. д.). Эти два примера – всего лишь начальная точка для путешествия в чистую математику, где повседневная интуиция начинает подводить и только строгие логические рассуждения могут вести вперед.

Огромное количество математических теорем, оказавшихся истинными, побудило французского математика Анри Пуанкаре написать в своей книге 1902 года «Наука и гипотеза»: «Если все предложения, которые математика выдвигает, можно вывести друг из друга по правилам формальной логики, то каким образом математика не сводится к бесконечной тавтологии? Логический вывод не может нас научить ничему существенно новому… Неужели мы можем допустить, что все эти теоремы, которые заполняют столько томов, нужны только для того, чтобы окольным способом сказать, что А есть А?» Вопрос Пуанкаре был риторическим, поскольку он считал, что проблемы, с которыми он и другие люди сталкиваются при разгадывании математических исти