Глава 6
Бесконечная оптимизация: безграничный потенциал алгоритмов – от эволюции до электронной коммерции
«Через сто метров поверните направо… Поверните направо», – инструктировал бесплотный голос спутникового навигатора. Роберто Фархат, только учившийся водить машину, но уже взявший с собой в поездку жену и двух детей, так и поступил. Всего несколько минут назад он сменил за рулем свою жену – опытного водителя с 15-летним стажем. Когда он свернул с шоссе А6, двухтонный Audi, двигавшийся по встречной полосе [151] Дело происходит в Англии, где движение левостороннее, поэтому, поворачивая направо, Фархат поворачивал через встречную полосу. – Прим. пер.
, въехал в пассажирскую дверь машины Фархата со скоростью 45 миль в час. Уделяя пристальное внимание спутниковому навигатору, Фархат пропустил дорожные знаки, запрещавшие правый поворот. Сам он остался невредим. А вот его четырехлетней дочери Амелии не повезло. Она умерла в больнице три часа спустя.
Мы уже привыкли полагаться на гаджеты вроде спутниковых навигаторов, которые призваны облегчить нашу перегруженную стрессами и заботами жизнь. Определяя кратчайший маршрут из пункта А в пункт Б, спутниковые навигационные системы решают сложную задачу, что можно сделать единственным способом – через алгоритмический расчет по требованию. Удержать в памяти все возможные маршруты между двумя удаленными точками – слишком сложная задача для небольшого устройства. Точек, между которыми может потребоваться проложить маршрут, огромное количество, что увеличивает сложность задачи в астрономическом масштабе. Учитывая уровень сложности, впечатляет, что алгоритмы спутниковой навигации очень редко ошибаются. Но когда они делают ошибки, те порой оказываются катастрофическими.
Алгоритм – последовательность инструкций, точно описывающих порядок действий для решения конкретной задачи. Задачей может быть что угодно – от организации музыкальной коллекции до приготовления пищи. Самые ранние записанные алгоритмы, однако, носили строго математический характер. У древних египтян был простой алгоритм перемножения двух чисел, а вавилоняне имели правила вычисления квадратных корней. В III веке до нашей эры древнегреческий математик Эратосфен изобрел свое «решето» – простой алгоритм определения простых чисел в числовом ряду, а Архимед применил метод исчерпывания [152] Античный математический метод, предназначенный для исследования площадей криволинейных геометрических фигур или объемов геометрических тел. Автор метода Евдокс Книдский. – Прим. ред.
для вычисления последовательности цифр в числе π.
В Европе накануне эпохи Просвещения развитие навыков механической обработки позволило физически воплотить алгоритмы в таких инструментах, как часы и, позднее, зубчатые вычислители. К середине XIX века мастерство достигло такой степени, что эрудит Чарльз Бэббидж смог построить первый механический компьютер, для которого первопроходец математики Ада Лавлейс написала первые компьютерные программы. В принципе, именно Ада первой поняла, что изобретение Бэббиджа имеет прикладное значение, выходящее далеко за рамки чисто математических вычислений, для которых его вычислитель был изначально разработан: что такие объекты, как ноты или, что, возможно, еще важнее, буквы можно описывать в виде кода и манипулировать ими с помощью машины. Сначала электромеханические, а затем и чисто электрические компьютеры использовались союзниками во время Второй мировой войны для алгоритмической расшифровки немецких шифров. Хотя в принципе эти алгоритмы можно было исполнять вручную, прототипы компьютеров того времени уже делали это со скоростью и точностью, недостижимой для людей – сколько бы тех ни было.
Все более сложные алгоритмы, которыми сейчас руководствуются компьютеры, стали неотъемлемой частью нашей повседневности – от ввода запроса в поисковую систему или фотографирования на телефон до компьютерных игр или вопроса о погоде у персонального цифрового ассистента. Мы уже не довольствуемся многими прежними решениями: мы хотим, чтобы поисковая система выводила наиболее релевантные ответы на наши вопросы, а не только первый, который она находит; мы хотим знать точно, будет ли дождь в пять вечера, чтобы определиться – брать ли с собой на работу плащ; мы хотим, чтобы спутниковая навигация вела нас из точки A в точку Б по самому быстрому маршруту, а не по первому попавшемуся. Примечательно, что в большинстве определений алгоритма (списка инструкций для выполнения задачи) не упоминаются входные и выходные данные, которые обеспечивают соответствие алгоритмов задаче. Так, для рецепта входными данными будут ингредиенты, а выходными – готовое блюдо, которое вы подаете на стол. Для спутниковой навигации входные данные – это начальная и конечная точки, которые вы указываете на карте, хранящейся в памяти прибора. Выходные – маршрут, который он вам предлагает. Без этих привязок к реальному миру алгоритмы являются просто абстрактными наборами правил. Когда сбой алгоритма попадает в новостные ленты, в большинстве случаев этот сбой вызван либо погрешностью при вводе данных, либо неожиданными данными на выходе, но не ошибкой в самих правилах.
Читать дальше
Конец ознакомительного отрывка
Купить книгу