Электронная библиотека
Форум - Здоровый образ жизни
Акупунктура, Аюрведа Ароматерапия и эфирные масла,
Консультации специалистов:
Рэйки; Гомеопатия; Народная медицина; Йога; Лекарственные травы; Нетрадиционная медицина; Дыхательные практики; Гороскоп; Правильное питание Эзотерика


Предисловие

В Америке почти у каждого второго есть смартфон. Этот маленький компьютер давно обогнал своих более крупных собратьев, которые еще каких-то двадцать лет назад считались очень мощными. Компьютеры снабжают нас информацией о мире и не дают в ней потеряться; позволяют выходить на связь почти из любой точки планеты; справляются с неимоверно сложными вычислительными задачами, будь то составление расписаний для загруженных аэропортов или моделирование космических явлений. Компьютеры распознают наши лица и голоса, регистрируют перемещения, определяют предпочтения и советуют книги, музыку и фильмы… не за горами то время, когда они будут сами управлять автомобилем. Похоже, для них в этом мире нет ничего невозможного?

На самом деле пока они могут не все. Из этой книги вы узнаете о вычислительных задачах, которые мы, вероятно, никогда не научимся быстро решать. Виной тому труднейшая математическая проблема с загадочным названием «P против NP» – главный вопрос теории алгоритмов, а, может, и всей математики или даже всей науки в целом.

Математический институт Клэя присвоил ей статус задачи тысячелетия. Всего таких задач семь, и за решение каждой из них институт предлагает приз в миллион долларов. Однако за вопросом «P против NP» стоит нечто большее.

P – это класс задач, которые на компьютере решаются относительно быстро. NP – задачи, для которых мы хотим найти оптимальное решение. Равенство P и NP означает, что любую поставленную задачу можно быстро решить. В этом случае наша жизнь сразу перейдет на совершенно новый уровень; медицина, наука, индустрия развлечений шагнут далеко вперед, и почти любой процесс можно будет автоматизировать.

Неравенство P и NP, в свою очередь, означает, что для некоторых задач быстрое решение не найдется никогда, и отнимает у нас всякую надежду на создание универсального алгоритма. Впрочем, это еще не повод опускать руки: для борьбы с «крепкими орешками» разрабатываются специальные методы, которые во многих случаях работают вполне приемлемо. По крайней мере мы знаем, какие техники здесь точно не годятся, и это знание помогает понять, в каком направлении двигаться.

В 2008 году главный редактор журнала Communications of the ACM Моше Варди предложил мне написать о проблеме статью. Ассоциация вычислительной техники, или ACM, – это крупнейшая международная организация, объединяющая специалистов в области компьютерных наук, а ее главный научный журнал Communications of the ACM публикует статьи на интересующие компьютерное сообщество темы.

Поначалу я пытался «сбагрить» работу кому-то еще, но потом все же сдался. «Вон физики же издают популярные статьи про теорию струн, – убеждал меня Моше. – И не только статьи, а целые книги! Так что, я думаю, у нас тоже получится объяснить всем теорию сложности и ее достижения». Я писал, ориентируясь на читательскую аудиторию журнала; речь в работе шла не столько о текущем статусе проблемы, который можно было бы описать одним словом – «открыта», сколько о методах борьбы с трудоемкими задачами. Статья The Status of the P versus NP Problem вышла в сентябре 2009 года и быстро побила все рекорды по скачиванию за всю историю существования сайта журнала.

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

Статья послужила для книги каркасом; каждый параграф в итоге разросся в целую главу. Вдохновение я черпал в Краткой истории времени Стивена Хокинга, объясняющей физику на простых примерах и занимательных историях. Хокинг обошелся без формул и терминов; я попытался сделать то же, и, надеюсь, мне удалось в доступной форме изложить суть проблемы и показать ее важность.

Формальных определений вы здесь не найдете: хороших учебников и сайтов, излагающих математическое описание проблемы и связанные с ней результаты, сейчас и так довольно много. Цель книги – дать представление о том, что могут и чего не могут дать нам вычисления в век, когда мир уже невозможно представить без компьютеров.

Итак, вперед, к классам P и NP!

Лэнс Фортноу
Иванстон, штат Иллинойс

Золотой билет

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

Как найти эти билеты? Ну, наверно, накупить как можно больше шоколадок. А потом использовать магнит. Хотя нет: ведь золото не магнитится. Тогда можно нанять пару тысяч человек, раздать им шоколадки и заставить снимать обертки. По-вашему, это глупо? Только не для Веруки Солт, которой до смерти хочется найти билет и поглядеть на шоколадную фабрику Вилли Вонка!

Отец Веруки – настоящий богатей и поэтому скупил все шоколадки, какие смог достать. Конечно, это было только полдела: ведь если у вас имеется гора шоколадок, то это еще не значит, что вы легко найдете в ней билет. Однако мистер Солт – тоже фабрикант; у него полно рабочих, так что он без малейших угрызений совести привлек их к поискам. Позже он охотно рассказал корреспондентам, как был найден золотой билет:

«На моей фабрике делают разные штуки из земляных орехов, и работает там около ста женщин, они лущат орехи, перед тем как посолить их и обжарить. Этим-то женщинам я и сказал: „О’кей, девочки, с этой минуты кончайте лущить орехи и начинайте снимать обертки с шоколадок“. И они взялись за дело. Каждая работница моей фабрики с утра до вечера только этим и занималась.

Прошло три дня, а толку никакого. О! Это было ужасно! Моя малышка все больше огорчалась и, когда я приходил домой, каждый раз начинала кричать: „Где мой золотой билет? Хочу золотой билет!“ Она часами валялась на полу, дрыгала ногами и визжала. Я не мог больше смотреть на страдания несчастной крошки и поклялся продолжать поиски, пока не найду то, что она просит. И вдруг… вечером четвертого дня одна из моих работниц закричала: „Я нашла! Золотой билет!“ И я сказал: „Быстро давайте сюда“. Она так и сделала. Я бросился домой и вручил билет Веруке. Теперь она улыбается, и мы снова счастливы»[1].

Неважно, каким образом вы будете искать билет: вам, как и мистеру Солту, понадобится много времени и денег – или удача, когда и того, и другого дефицит. Возможно, однажды какой-нибудь умный человек изобретет недорогой прибор для быстрого поиска билетов. А возможно, и нет.

Для современного компьютера десять миллионов – цифра совершенно несерьезная. Занесите ваши шоколадки в базу данных, и обычный ноутбук переберет их все меньше чем за секунду. С шоколадками компьютеры справляются намного быстрее, чем люди; впрочем, обычно им приходится решать гораздо более серьезные задачи.

Где у нас самый большой массив данных? В интернете, наверно? Сложите вместе все видео– и аудиофайлы, электронные письма и вообще все, что там есть, – и получите около 1000000000000000000 байт информации, плюс-минус два нуля. А один байт – это примерно то же, что набранный на клавиатуре символ. Чудовищное число; однако не стоит забывать, что современные компьютеры очень, очень быстрые. Средний ноутбук способен выполнить триллион операций в секунду, а значит, весь интернет он теоретически пересмотрел бы за четыре месяца – если бы, конечно, кому-то удалось загрузить все это ему в память. Компания Google с ее сотнями тысяч мощнейших компьютеров имеет возможность прочесывать интернет непрерывно.

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

Давайте посмотрим, какая проблема свалилась на Мэри – коммивояжера компании US Gavel Corporation, зарегистрированной в Вашингтоне, округ Колумбия. Директор проучил Мэри объехать столицы всех сорока восьми континентальных штатов и попытаться убедить местные власти вложить средства в его замечательную фирму. Транспортные расходы необходимо было свести к минимуму, и от Мэри требовалось найти оптимальное решение – кратчайший маршрут, проходящий через все сорок восемь столиц. Посидев немного над картой Америки, Мэри набросала на ней план поездки и после некоторых поправок представила его начальству. Маршрут получился довольно симпатичный.


Рис. 1.1. Задача коммивояжера


Однако транспортный отдел попросил ее подумать еще и постараться уложиться в 17000 километров. Мэри написала программу, которая в поисках самого короткого маршрута перебирала все возможные перестановки из сорока восьми городов. Прошла неделя, а программа все работала. Тогда Мэри решила кое-что прикинуть. Первый город можно было выбрать сорока восемью способами. Второй – сорока семью. Третий – сорока шестью, и так далее. Итого потенциальных маршрутов набралось 48 x 47 x 46 x … x 2 x 1. Для записи этого числа требуется 62 цифры. Вот оно: 12413915592536072670862289047373375038521486354677760000000000.

Если мы даже предположим, что один маршрут обрабатывается всего за 0,00000000000000000033 секунды (примерно столько времени требуется свету, чтобы преодолеть дистанцию, равную диаметру самого мелкого атома), то на полную проверку всех маршрутов все равно уйдет в десять тысяч миллиардов триллионов больше лет, чем живет наша вселенная. Понятно, почему Мэри не увидела ответ через неделю! Неужели для поиска оптимального пути – этакого золотого билета среди всех возможных маршрутов-шоколадок – нет способа получше?

Вот мы и подошли к сути дела. Вопрос о равенстве классов P и NP самым непосредственным образом связан с задачей быстрого поиска кратчайшего маршрута коммивояжера (и не только с ней). Названия классов – сокращения от технических терминов, однако будет лучше воспринимать их просто как общие понятия, а не как конкретные математические объекты. Класс NP – это множество задач, которые мы хотим решить; класс P – задачи, которые мы умеем решать быстро. Если P равно NP, мы всегда сможем быстро найти решение любой NP-задачи (например, кратчайший маршрут для коммивояжера). А если не равно, то не сможем.

Задача о разбиении

Взгляните на эти тридцать восемь чисел:

14175, 15055, 16616, 17495, 18072, 19390, 19731, 22161, 23320, 23717, 26343, 28725, 29127, 32257, 40020, 41867, 43155, 46298, 56734, 57176, 58306, 61848, 65825, 66042, 68634, 69189, 72936, 74287, 74537, 81942, 82027, 82623, 82802, 82988, 90467, 97042, 97507, 99564.

В сумме все они дают ровно 2000000. Попробуйте разбить их на две группы по девятнадцать чисел так, чтобы сумма чисел внутри каждой группы была равна 1000000. Можете свободно пользоваться калькулятором, Excel или даже написать программу. Ответ приводится в конце главы.

Не так-то просто, верно? Ведь для разбиения существует более семнадцати миллиардов вариантов! Современные компьютеры считают очень быстро, и с хорошей программой у вас есть все шансы получить ответ. Ну а что если я предложу вам не тридцать восемь чисел, а три тысячи восемьсот? Или, что еще лучше, тридцать восемь миллионов? Тут уже никакая программа не справится.

Дурацкая, никому не нужная математическая головоломка, скажете вы. А вот и нет! Представьте, что у нас есть хороший алгоритм, который быстро разбивает заданное множество чисел на две группы с равной суммой (когда это разбиение вообще существует). Тогда мы можем применить его не только для решения подобных головоломок, но и вообще любых задач, к примеру – для поиска кратчайшего маршрута коммивояжера. Дурацкая математическая головоломка на самом деле представляет собой аналог проблемы «P против NP», и любой алгоритм, решающий ее гигантскую версию, способен вычислить практически все, что угодно.

Немного о руках

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

Кисть руки содержит двадцать семь костей. На ней пять пальцев, включая незаменимый большой. Под эластичной кожей спрятана сложнейшая система мышц, сухожилий и нервов. Волшебный механизм – вот только самостоятельно это чудо природной инженерии функционировать не будет. От головного мозга должны приходить соответствующие инструкции: рука мертвеца не способна двигаться и вообще что-либо делать.

Рука – это «железо», т. е. натуральное аппаратное обеспечение. А значит, для работы ей обязательно нужна программа – сообщение от мозга, объясняющее, как выполнить то или иное задание.

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

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

Конечно, одно дело знать, что некий алгоритм существует, и совсем другое – найти его. Программы со временем будут становиться все сложнее и сложнее; искусственная рука научится выполнять намного более трудные операции и однажды – как знать! – вполне может даже превзойти человеческую. Очевидно, нас ждет безумно увлекательное путешествие, вот только скорость движения, похоже, будет очень низкой.

Или не очень? Представьте, что для любой поставленной задачи тут же появляется программа со всей необходимой функциональностью. Например, вы загружаете в компьютер ролик, в котором человек завязывает галстук, и через секунду механические руки уже воспроизводят этот процесс. Или подаете на вход полное собрание сочинений Шекспира, а компьютер в ответ сочиняет новую «шекспировскую» пьесу. Представьте: все, что можно описать словами, можно и создать. Реально ли это? Да – но только если P равно NP.

Вот почему проблема равенства P и NP так будоражит умы. Неужели все задачи мы сможем щелкать как орешки? Или над некоторыми все же придется трудиться? Ответа пока нет, хотя на самом деле на «халяву» мало кто надеется. Вряд ли когда-нибудь выяснится, что P = NP; и все же помечтать об идеальном мире бывает очень и очень приятно.

P против NP

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

Впервые проблема равенства классов упоминается еще в 1956 году – в письме, которое один величайший математик XX века, Курт Гёдель, отправил другому величайшему математику XX века, Джону фон Нейману. К сожалению, вплоть до восьмидесятых о письме ничего не было известно, а вот первые официальные публикации появились в начале семидесятых. Авторы – Стивен Кук и Леонид Левин – независимо друг от друга пришли к одному и тому же вопросу, находясь по разные стороны «железного занавеса». Вслед за этим Ричард Карп опубликовал свой знаменитый список из двадцати одной задачи: все они, включая маршрут для коммивояжера и разбиение на группы, были эквивалентны проблеме «P против NP». Постепенно научное сообщество осознало важность поднятых вопросов, и в развитии информатики наступил поворотный момент. Сейчас проблема равенства классов уже стала основополагающей – причем не только в информатике, но также в биологии, медицине, экономике, физике и многих других областях.

Со временем этот вопрос заработал статус одной из самых трудных задач в истории математики. Шумиха вокруг доказательства Великой теоремы Ферма, предложенного в 1994 году Эндрю Уайлсом, побудила Математический институт Клэя организовать нечто вроде конкурса по решению сложнейших открытых математических проблем. В 2000 году институт опубликовал список из семи «задач тысячелетия» и за каждую из них объявил награду в один миллион долларов. Вот они:


1. Гипотеза Берча–Свиннертон–Дайера.

2. Гипотеза Ходжа.

3. Уравнения Навье–Стокса.

4. Проблема равенства P и NP.

5. Гипотеза Пуанкаре.

6. Гипотеза Римана.

7. Теория Янга–Миллса.


Гипотезу Пуанкаре в 2003 году доказал Григорий Перельман, однако от вознаграждения ученый отказался. Остальные шесть задач тысячелетия на момент написания книги по-прежнему остаются открытыми.

Решите проблему «P против NP» – и получите настоящий золотой билет, т. е. миллион долларов США!

Лучше всего, конечно, если вы установите равенство P и NP: тогда у вас будет алгоритм для поиска всех золотых билетов (т. е. решения всех остальных задач из списка). Докажете, что P = NP, – получите шесть миллионов за решение шести задач тысячелетия. Впрочем, доказать как равенство, так и неравенство классов будет очень и очень непросто; если вам нужны шесть миллионов, вы скорее выиграете их в лотерею.

В поисках билета

Иногда найти билет все же удается. Предположим, мне нужно поехать из Чикаго в Нью-Йорк на машине. Не долго думая, я забиваю адрес в навигатор, который уже через минуту-другую показывает оптимальный маршрут, и жму на газ. Подробная карта США со всеми городами и улицами занимает миллионы байт; возможные маршруты исчисляются гораздо более крупными цифрами. Сколько маршрутов можно проложить из Чикаго в Нью-Йорк? Грубейший подсчет даст нам свыше вигинтиллиона (единица и 63 нуля) вариантов, и запрет движения по встречке на односторонних улицах мало что изменит. У навигатора просто нет времени на такое количество проверок; как же он умудряется найти самый быстрый маршрут?

На самом деле маршруты обладают одной интересной особенностью. Добавим в программу промежуточный пункт назначения – скажем, Питтсбург. Кратчайший маршрут из Чикаго в Нью-Йорк через Питтсбург – это сумма кратчайших маршрутов из Чикаго в Питтсбург и из Питтсбурга в Нью-Йорк. Без заезда в Питтсбург до Нью-Йорка можно добраться и быстрее, однако при наличии промежуточной точки наилучшим решением будет склеить два кратчайших маршрута.

Именно так и сужают круг поиска навигационные программы. Десять тысяч или даже сто тысяч вариантов – это уже не вигинтиллион; современный процессор проверит их без труда.

Поиск кратчайшего пути не охватывает все аспекты проблемы равенства P и NP. Задача коммивояжера доказывает, что при наличии огромного числа вариантов совсем не обязательно перебирать их все; главный вопрос, однако, заключается в том, всегда ли можно обойтись без такого перебора.

Долгая дорога

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

Для наглядности приведу один маленький пример. Сколько человек входит в максимальную клику на Facebook, т. е. в наибольшую по численности группу, в которой все дружны между собой? Может, сотня? А может быть, тысяча? Даже при наличии доступа ко всем необходимым данным ответить на этот вопрос будет крайне непросто; искать максимальную клику не легче, чем возиться с какой-нибудь другой поисковой проблемой.

Какая перспектива ожидает нас, если классы равны? Совершенный мир, в котором все можно вычислить быстро. Ответы на вопросы будут приходить почти мгновенно; смертельных болезней не останется, и вселенная раскроет нам все свои тайны. Однако есть здесь и своя ложка дегтя: с компьютерами, которые могут почти все, нас ждет безработица и потеря конфиденциальности.

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

Какова предыстория проблемы равенства P и NP? На самом деле здесь не одна история, а целых две. События разворачивались в те времена, когда Холодная война разделила мир на противоборствующие лагеря; понятие эффективных вычислений и связанные с ним вопросы независимо разрабатывались по разные стороны «железного занавеса». В итоге оба пути сошлись в одной точке, и эта точка получила имя «P против NP».

С какой стороны зайти, чтобы вывести неравенство P ? NP? Курт Гёдель показал, что не у всех математических проблем имеется решение; возможно, аналогичным образом удастся доказать тот факт, что не для всех поисковых задач существует быстрый алгоритм. Еще вариант – попытаться разделить вычислительный процесс на более мелкие части, чтобы сложность исходной задачи было легче оценить. Некоторую надежду дает также алгебраическая геометрия – молодой и абсолютно абстрактный раздел математики. Впрочем, до решения проблемы мы в любом случае дойдем еще очень не скоро.

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

Изменят ли ситуацию компьютеры будущего, основанные на принципах квантовой механики? Снимут ли они проблему «P против NP»? Маловероятно, хотя с их помощью мы сможем решать некоторые недоступные современным машинам задачи, например, раскладывать большие числа на множители. Кстати, квантовая механика даст нам абсолютно стойкие шифры вне зависимости от того, равны классы P и NP или не равны.

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

Решение задачи о разбиении

Упомянутые ранее тридцать восемь чисел

14175, 15055, 16616, 17495, 18072, 19390, 19731, 22161, 23320, 23717, 26343, 28725, 29127, 32257, 40020, 41867, 43155, 46298, 56734, 57176, 58306, 61848, 65825, 66042, 68634, 69189, 72936, 74287, 74537, 81942, 82027, 82623, 82802, 82988, 90467, 97042, 97507, 99564

можно разбить на две равные группы следующим образом:

15055, 16616, 19390, 22161, 26343, 40020, 41867, 43155, 46298, 57176, 58306, 65825, 66042, 69189, 74537, 81942, 82623, 82988, 90467

и 14175, 17495, 18072, 19731, 23320, 23717, 28725, 29127, 32257, 56734, 61848, 68634, 72936, 74287, 82027, 82802, 97042, 97507, 99564.

Числа каждой группы дают в сумме ровно 1000000.

Глава 2. Совершенный мир

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

Равенство P и NP будет означать, что у нас имеется универсальный эффективный алгоритм для всех NP-задач. Мир изменится настолько сильно, что развитие интернета превратится во второстепенный исторический факт. Описать сейчас подробно эти изменения или хотя бы предсказать основные последствия от внедрения новых технологий не представляется возможным.

Совершенный мир, в котором P = NP, вряд ли когда-нибудь станет реальностью. Однако заглянуть в него одним глазком мы все-таки можем. Представим наше общество через несколько лет после появления универсального эффективного алгоритма; перенесемся в далекий 2026-й и посмотрим для начала, как этот мир развивался.

Урбанский алгоритм

В 2016 году чешский математик Милена Павел послала по электронной почте письмо. Во вложении было описание универсального эффективного алгоритма для решения NP-задач. После долгих и тщательных проверок научное сообщество пришло к единому мнению: алгоритм работает, и проблема равенства P и NP наконец решена. Свою работу Милена скромно назвала «Об открытой проблеме Стивена Кука», а вот New York Times выпустила статью с громким и предельно кратким заголовком: «P = NP».

В 2018 году Милена Павел была удостоена Филдсовской премии. Эту престижную математическую награду впервые вручили женщине. Годом позже Математический институт Клэя выписал на имя Милены чек в один миллион долларов. Григорий Перельман был первым, кто решил одну из задач тысячелетия; Милена стала второй и в отличие от Перельмана свой приз забрала. Часть денег (точные цифры не раскрываются) она пожертвовала на учреждение стипендий в своем родном университете в Праге.

В теории алгоритм Милены стал настоящим прорывом; в реальности же он работал слишком долго и потому оказался совершенно неприменим. В 2017 году российский ученый Михаил Боров придумал интересную модификацию и ускорил алгоритм на порядок, однако до практического применения по-прежнему было очень и очень далеко.

Годом позже старшекурсники Университета Цинхуа в Пекине оптимизировали алгоритм Борова и запустили его на самом быстром компьютере в мире (который на тот момент находился в Китае). Меньше чем через неделю новый алгоритм разобрался со средней задачей о клике и решил несколько других типичных проблем из класса NP. Ряд промышленных гигантов, среди которых были Boeing и Daimler-Benz, заключили с университетом контракт на разработку решения особо хитрых оптимизационных задач. В результате новое воздушное судно «Боинг-797» получило крыло улучшенной конструкции, а вместе с ним и возможность летать из Лондона в Сидней без остановок.

Среди прочих над проектом работал аспирант Иллинойского университета в Урбане Стивен Франк, проходивший в то время в Пекине семестровую стажировку. Вернувшись в родную Урбану, Стивен пожаловался научному руководителю, что, несмотря на все их ухищрения, на решение одной-единственной и далеко не самой сложной NP-задачи все равно уходит как минимум несколько дней.

«Когда джинн обещает выполнить одно – и только одно – твое желание, что нужно попросить?» – спросил ученый.

«Не знаю», – растерялся Стивен.

«Другого джинна, который выполнит все твои желания!»

На Стивена снизошло озарение. Он, конечно, знал, что для задачи о клике существуют и более совершенные алгоритмы, однако своими силами найти их не мог; зато у него был знакомый джинн (программа из университета Цинхуа), способный относительно быстро перебрать экспоненциальное число потенциальных вариантов. Стивен написал программу, которая работала аналогично цинхуанской и искала наилучший алгоритм решения NP-задач. А затем получил разрешение на использование вычислительных ресурсов Национального суперкомпьютерного центра (NCSA) в Иллинойском университете. Прошло несколько недель, и усилия Стивена наконец увенчались успехом: найденный программой алгоритм был на пять процентов быстрее цинхуанского. Неплохой результат для научной статьи; однако ни о каком прорыве речи пока не шло.

«Давай еще раз – с новым алгоритмом», – подсказал научный руководитель.

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

«Продолжай», – лаконично отреагировал научный руководитель. Казалось, он совсем не удивлен.

«Пора уже мне это автоматизировать. Пусть он сам запускает новый поиск всякий раз, как найдет очередной алгоритм!» – проворчал Стивен.

«Слава тебе, Господи, дошло наконец!» – читалось во взгляде научного руководителя.

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

«Ты не боишься, что будет как со Скайнетом?» – поинтересовался коллега.

«С чем – с чем?»

«Ну, когда компьютер становится чересчур умным, он обретает сознание и захватывает мир, как Скайнет в „Терминаторе“».

«Ты серьезно? Это же просто программа! Не волнуйся, все будет хорошо!»

И вот Стивен снова запустил свой код на вычислительном гиганте NSCA. С каждым шагом алгоритмы становились все лучше и лучше. Наконец, процесс остановился; окончательный вариант программы состоял из 42 миллионов строк безличного машинного кода. Удивительно, но этот код решал NP-задачи очень быстро и при этом не пытался обрести сознание и захватить наш мир. Университетский пресс-релиз на все лады расхваливал новый «урбанский алгоритм»; название прижилось, и других вариантов уже никто не предлагал.

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

Многие фирмы желали выкупить права на урбанский алгоритм или хотя бы приобрести временную лицензию на его использование. Все они прочно увязли в юридическом болоте, поскольку владельцами алгоритма считали себя практически все кому не лень. Помимо Стивена Франка и его научного руководителя права на алгоритм заявили также центр NSCA и чешское правительство, спонсировавшее исследования Милены. Сознавая всю важность полученных Стивеном результатов, Всемирная торговая организация постановила, что урбанский алгоритм не является объектом авторского права и после выплаты некоторой компенсации его создателям должен сделаться всеобщим достоянием; размер компенсации установит специальная комиссия. Против высказались одни лишь китайцы, однако было ясно, что заблокировать решение ВТО они не смогут. Наконец, 23 октября 2019 года урбанский алгоритм стал общедоступным.

И тогда наш мир начал меняться…

Компьютеры – рак – 1: 0

Вернувшись в кабинет, лечащий врач Хелен плотно закрыл дверь.

«Боюсь, новости у меня не очень хорошие, – начал он. – У вас рак печени».

«Откуда вы знаете? – задохнулась Хелен. Ей всего сорок два; у нее муж и дети, трое ребят от шести до пятнадцати. – Я ведь только кровь сдавала!»

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

«У моей двоюродной сестры тоже нашли рак печени. Восемь лет назад, в 2018-м. Вариантов лечения тогда было немного. Через семь месяцев ее не стало…»

«За десять лет многое изменилось! Унифицированные методы лечения мало что давали. Со временем стало ясно, что подход должен быть строго индивидуальным. Сначала мы анализируем образцы ДНК здоровых и мутировавших раковых клеток пациента, а затем создаем протеины, заставляя их сворачиваться так, чтобы эффективно нейтрализовывать раковые клетки и не причинять никакого вреда здоровым. Мертвые раковые клетки сами постепенно выводятся из организма».

«Наверно, это стоит кучу денег…» – задумчиво протянула Хелен.

«Кучу денег стоила химиотерапия! Новый метод обойдется вам всего в две тысячи, и со временем он будет становиться все дешевле и дешевле. Ваша страховка покроет почти все расходы».

«Фантастика! Но что же такого случилось за последние десять лет? Почему лечить и делать анализы теперь настолько просто?»

«Исследования на эту тему велись уже давно, однако существенно продвинуться в расшифровке ДНК не позволяли даже самые мощные компьютеры. С появлением урбанского алгоритма все изменилось; за несколько лет нам удалось добиться невероятного прогресса. Обычно новые методы тестируются годами, но в этот раз первые же испытания прошли с ошеломляющим успехом, так что Министерство здравоохранения посчитало нечестным лишать людей такой возможности».

«Понятно. Тогда давайте начнем!»

«Начнем что? Кровь мы у вас уже взяли, анализ сделали. Вот рецепт, – ответил доктор, протягивая Хелен флешку вместо привычного листка бумаги. – Здесь записаны коды белков, которые вам нужны. Отнесите это в аптеку, и они вам сделают таблетки. За две недели все раковые клетки будут выведены из организма. И никаких побочных эффектов! Но имейте ввиду, что рецепт подходит только вам. ДНК у все разная; если таблетки выпьет кто-то еще, последствия могут быть очень и очень серьезными».

«Поверить не могу… Меня не будет тошнить, и волосы не выпадут? Если рак диагностируют на ранней стадии, можно просто выпить таблетку – и он пройдет, как обычная простуда? И все благодаря какому-то алгоритму?!»

«Ну… не совсем. Алгоритм, конечно, очень помог в лечении рака, СПИДа, диабета, но вот обычная простуда до сих пор остается для медиков загадкой».

Пост-урбанский бейсбол

«Отличный денек, как раз для бейсбола!» – приговаривал Рэнди, пока они с его двенадцатилетней дочерью Кейт ехали в Сент-Луис на ее первую в жизни бейсбольную игру – и последнюю в сезоне 2026 года. «Сент-Луис Кардиналс» принимали у себя «Милуоки Брюэрс»; предстояла жесткая борьба за чемпионский титул. Рэнди размышлял о том, как сильно изменилась игра со времен его детства – особенно в последние годы, когда на сцену вышел урбанский алгоритм. Удивительно: ведь технически бейсбол настолько прост, что в нем даже часы не нужны.

Первые реформы коснулись, конечно же, расписания. В далеком 2004-м расписание для Главной бейсбольной лиги составлял супружеский тандем – Генри и Холли Стефенсон. Условия были предельно просты; как правило, учитывалось лишь количество выездных и домашних игр да еще некоторые особые пожелания (к примеру, в День патриота в середине апреля «Ред Сокс» хотели провести дневную игру на своем поле в Бостоне, поскольку недалеко от стадиона как раз пробегали бостонские марафонцы). В 2005-м лига заключила контракт с питтсбургской компанией Sports Scheduling Group, у которой одни и те же команды почти никогда не встречались друг с другом две недели подряд. Как известно, под ливнем в бейсбол на улице не поиграешь, однако Sports Scheduling Group погодный фактор не учитывала: ведь расписание составляют в декабре, на весь сезон вперед, а предсказать дождь настолько заранее просто невозможно. Вернее, было невозможно; но потом появился урбанский алгоритм.

Метеорология вышла на совершенно новый уровень. Предсказать температуру, ветер, облачность, осадки можно было очень точно и почти на год вперед. Конечно, современные алгоритмы тоже справляются довольно неплохо – предвидят ураганы, штормы, торнадо и землетрясения, давая людям возможность подготовиться и даже куда-то уехать. Но они работают как скорая помощь, а урбанский алгоритм полностью изменил весь наш быт. Школы заблаговременно вносят в расписание снегопад. Пастор, проводящий церемонию бракосочетания на воздухе, поднимает цены в хорошую погоду и делает скидки тем, кто согласен на дождь, жару и влажность. Людям нравится смотреть игру в ясный, теплый день; есть ли смысл торчать в дождливом или облачном Детройте, когда в Миннеаполисе вовсю сверкает солнце и простаивает стадион?

В конце сезона зритель хочет видеть только значимые игры. Биться должны лучшие – с этим согласны и завсегдатаи стадионов, и «домашние» болельщики. Когда Рэнди был ребенком, предсказать успех команды мог разве что экстрасенс; теперь же научные методы с пугающей точностью определяют, кто в сентябре поборется за чемпионский титул. Конечно, такие методы не всегда предсказывают чемпионство: фактор случайности никто не отменял, и за сезон происходит несколько незапланированных поражений. Впрочем, это от них и не требуется: главное – заполнить верхние строчки турнирной таблицы. Каждый год объявляются очередные будущие аутсайдеры; каждый год оскорбленные болельщики кричат, что компьютер промахнулся. Но компьютер не промахивается. Никогда. За исключением одного-единственного (сильно нашумевшего) раза.

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

Итак, в прекрасный ясный день Рэнди ведет дочь на матч. «Кардиналс», естественно, взимают за погоду дополнительные сборы, но за хороший сервис Рэнди не прочь и приплатить.

На входе турникетов нет, нет и контролеров. Рэнди и Кейт свободно проходят на стадион. Вошедших заметила миниатюрная камера; программа распознавания лиц уже сопоставляет их с владельцами билетов. Охрана найдет и выведет любого, кто проникнет на стадион без билета; впрочем, большинство «умельцев» уже давно оставили все попытки обмануть программу.

Рэнди с дочерью усаживаются на свои места. Оглядев стадион, Рэнди замечает пустую площадку: раньше здесь всегда находился оператор с огромной телевизионной камерой. Теперь камер стало двадцать; они очень маленькие, едва различимые глазом, и расположены по всему периметру стадиона. Программа, разработанная на основе урбанского алгоритма, собирает с них данные и тут же формирует детальную трехмерную модель. По этой модели компьютер может создать видео, в котором игра будет показана со всех точек поля и во всех направлениях. Зритель увидит питчера глазами кэтчера и узнает, что проносится перед глазами бегущего на третью базу. Формально все изображения генерируются компьютером, однако выглядят они совсем как настоящие. Участникам одного известного эксперимента показывали реальное, снятое на камеру видео вперемешку с компьютерным; 89 из 100 подумали, что компьютерное изображение как раз и есть реальное.

Телевизоры нового поколения уже умеют работать непосредственно с трехмерными моделями; по ходу игры зритель может виртуально переместиться в любое место поля.

В момент удара битой по мячу компьютер точно рассчитывает его будущую траекторию, а затем безошибочно определяет наилучшее место для съемки. Трансляцию теперь обслуживают всего четыре человека: два комментатора, продюсер и техник – так, на всякий случай. Впрочем, технические проблемы во время игры возникают крайне редко. За этим матчем пристально следят и в Токио: у «Сент-Луиса», так же как и у «Милуоки», в составе есть известный японский бейсболист. Репортаж, по обыкновению, ведется на английском, однако в Японии зрители слышат родной язык. Комментаторы все те же, вот только созданные на основе урбанского алгоритма программы распознают их голоса и после автоматического перевода синтезируют безукоризненную японскую речь. Трансляция доступна на 876 языках и диалектах мира.

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

Виртуальный спорт перешел на совершенно новый уровень. В вымышленном матче теперь можно объединить игроков из разных команд или даже эпох. Питчер Сай Янг будет подавать на Джо ди Маджо, оба в расцвете спортивной карьеры; «Янкиз» 1927-го года сыграют против «Янкиз» 1998-го… Отделить реальный мир от виртуального стало очень трудно. Однажды программист со спортивного канала ESPN устроил первоапрельский розыгрыш и изменил в программе одну небольшую деталь. В результате зрители в прямом эфире наблюдали, как его любимая баскетбольная команда «Бостон Селтикс» побеждает «Нью-Йорк Никс», хотя в реальности все обстояло в точности наоборот. После той трансляции полетели многие головы…

С обязанностями судьи компьютеры тоже справляются на «отлично». Они не ошибаются и с удивительной точностью определяют все ауты, болы, страйки и хоумраны. Колледжи и низшая лига в целях экономии пользуются только электронными арбитрами; Главная лига настаивает, что судья должен быть «настоящим». Дискуссия на эту тему возникает всякий раз, когда очередная судейская ошибка влияет на исход игры.

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

Потягивая холодное пиво и закусывая хот-догом (и то и другое отличного качества и при этом полезно для здоровья – благодаря новым рецептам, созданным при помощи урбанского алгоритма), Рэнди наслаждается игрой вживую – прямо как в старые времена, когда он был ребенком. Конечно, можно было бы сэкономить и посмотреть игру по телевизору – с прекрасными ракурсами, и к тому же в 3D-режиме. С новыми технологиями домашний просмотр дает гораздо больше впечатлений, чем поход на стадион; однако Рэнди нравится ощущать себя частью происходящего, а создать подобный эмоциональный настрой не под силу даже урбанскому алгоритму.

Турнирную таблицу можно скачать в интернете, но Рэнди учит Кэйт заполнять ее самостоятельно – так же, как учил его в свое время отец. Почти все вокруг изменилось под влиянием новых технологий, и в особенности – с появлением урбанского алгоритма, однако правила игры остаются все те же. Три страйка – и бьющий выбывает из игры. Всегда.

Бритва Оккама

Урбанский алгоритм перенес нас в мир, где любая болезнь поддается лечению, метеорологи всегда дают точный прогноз, а компьютерная реальность неотличима от настоящей. Как такое возможно? Ведь это всего лишь программа, пусть даже и очень умная… В поисках ответа мы отправимся в самое начало XIV века.

Уильям Оккам (или, точнее, Оккамский) еще юношей вступил во Францисканский орден. В XIV веке в Оксфорде наряду с францисканцами базировался также целый ряд других религиозных орденов; все они давали кров студентам Оксфордского университета, среди которых был и изучавший теологию Уильям. Университет он так и не закончил, однако это не помешало ему стать одним из величайших мыслителей Средневековья и внести поистине неоценимый вклад в физику, теологию, логику и философию. Широкой публике Оккам известен в основном благодаря своему принципу «бритва Оккама», согласно которому лучшим объяснением следует считать самое простое. Почему бритва? Вероятнее всего, потому, что она позволяет «сбривать», т. е. отсекать, все ненужное, оставляя лишь самую простую часть – и неважно, о каком предмете идет речь. Для науки и философии этот принцип стал основополагающим еще в эпоху Возрождения и продолжает оставаться таковым и сейчас.

Французский мыслитель XVII века Рене Декарт пользовался «бритвой Оккама» для доказательства существования окружающего мира. Самое известное изречение ученого – это, безусловно, Cogito ergo sum, или «Я мыслю, следовательно, я существую». В философском трактате «Рассуждение о методе» Декарт выводит факт своего существования практически из ничего, основываясь лишь на своей способности рассуждать о себе. А как обстоит дело с внешним миром? Может, все, что окружает Декарта, существует лишь в его сознании? Ученый отвергает эту идею, выдвигая более простое и к тому же более вероятное объяснение: все люди – так же как и он сам – живут в реальном физическом мире, который можно исследовать и пытаться понять.

«И, заметив, что в истине положения „Я мыслю, следовательно, я существую“ меня убеждает единственно ясное представление, что для мышления надо существовать, я заключил, что можно взять за общее правило следующее: все представляемое нами вполне ясно и отчетливо – истинно. Однако некоторая трудность заключается в правильном различении того, что именно мы способны представлять себе вполне отчетливо».

Рене Декарт «Рассуждение о методе», часть IV

Современник Декарта Иоганн Кеплер изучал движение планет по орбитам и сформулировал ряд законов, касающихся их траекторий и скорости, однако не нашел простого объяснения тому факту, что планеты движутся именно так, а не иначе.

Исаак Ньютон применил принцип «бритвы Оккама» для описания поведения физических объектов. Его знаменитые законы движения выглядят удивительно просто.

1. Всякий объект в отсутствие приложенной к нему силы продолжает оставаться в состоянии покоя или равномерного прямолинейного движения.

2. Ускорение, которое получает объект, прямо пропорционально приложенной к нему силе.

3. Любые два объекта действуют друг на друга с равными по значению и противоположно направленными силами.

Добавив к этому простое определение силы тяготения, Ньютон сумел вывести открытые Кеплером законы движения планет. Простые объяснения – средство чрезвычайно мощное!

Несколько веков спустя Альберт Эйнштейн высказал гипотезу, что простые законы Ньютона перестают выполняться, когда скорость движения объектов приближается к скорости света. К подобной точке зрения склонялись и другие ученые; большинство экспериментов подтверждало правоту Эйнштейна. «Всё следует упрощать до тех пор, пока это возможно, но не более того», – метко выразился ученый. Однако полученные им результаты не означали, что ньютоновская модель мира абсолютно не верна: в повседневной жизни она давала прекрасное приближение. Законы Ньютона остаются актуальными и по сей день и отлично работают для простых процессов – например, если мы ведем автомобиль или ставим эксперименты в школьной лаборатории.

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

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

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

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

А вот сумма в 30 долларов выписана от руки. Откуда машине знать, о какой сумме речь, если почерк у каждого свой?


Рис. 2.1. Чек


Задача явно непростая. Взять хотя бы цифру «два» насколько по-разному пишут ее разные люди!


Рис. 2.2. Двойки


Подобными проблемами занимается особая математическая дисциплина – машинное обучение. На первом этапе алгоритм получает большую обучающую выборку (в нашем случае – несколько тысяч примеров написания для каждой цифры). По ней он должен сконструировать относительно несложную модель, которая позволит корректно отличать одну рукописную цифру от другой. Хорошо натренированный алгоритм безошибочно распознает незнакомые цифры даже в том случае, когда обучение завершилось давно.

За последние двадцать лет в этой области удалось добиться впечатляющих успехов. Современные методы классификации данных позволяют анализировать уже не тысячи, а миллионы обучающих примеров. Распознавать теперь можно не только чеки; некоторые программы редактирования изображений умеют вполне сносно фильтровать фотографии по лицам. Сайты интернет-компаний (Amazon, Netflix, Pandora и многие другие) рекомендуют книги, фильмы и музыку, основываясь на ваших предпочтениях и истории покупок. Программы распознавания голоса и автоматического перевода, конечно, не выдерживают конкуренции с человеком, однако дают нам общее представление о смысле написанного или сказанного. Спам-фильтры избавляют нас от нежелательных сообщений, а автомобили к 2020 году научатся ездить практически без нашего участия.

Дальше, очевидно, все станет только лучше. С какого-то момента успехи и достижения польются непрерывным потоком. Значит ли это, что сбривать больше нечего?

Нет, не значит. Принцип Оккама гласит, что самое простое описание следует считать самым лучшим, однако не помогает нам это описание найти. Современные методы машинного обучения работают с данными довольно примитивной структуры; обычно это просто набор не связанных друг с другом свойств. Найти самое простое описание, т. е. создать небольшую эффективную программу (на каком языке, неважно), которая умела бы быстро классифицировать данные, – задача чрезвычайно трудная и принадлежит классу NP.

Урбанский алгоритм позволяет быстро решить любую проблему из NP, а значит, найти простую программу для классификации данных будет не сложнее, чем решить школьную задачку по программированию. От нас потребуется лишь подавать на вход большие обучающие выборки: всю остальную работу алгоритм сделает сам. Так мы сможем получить практически любые знания.

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

Автоматизация творческого процесса

Урбанский алгоритм в сочетании с «бритвой Оккама» позволяет получить практически любые знания – например, понять, что делает картины притягательными, музыку – популярной, а слова – берущими за душу: ведь если P = NP, мы можем просто перебрать все потенциальные варианты. Так мы найдем процедуру распознавания гениальности, а она даст нам возможность быстро находить и гениальные произведения.

В 2022 году Демократическая партия проводила очередные праймериз в Сенат от штата Колорадо. Пит Джонсон был в избирательных списках первым с конца – но только до своей «той самой речи». За две недели до выборов в небольшом театре города Вейл Джонсон выступил с десятиминутной речью об Америке и Колорадо. Слова кандидата потрясли аудиторию; ему устроили овацию, и все тридцать два приглашенных аплодировали стоя.

Прессу на собрание не звали, однако один из присутствующих записал все на телефон и выложил в интернет. Выступление посмотрели миллионы, и тысячи людей потом клялись, что видели все своими глазами. В результате праймериз Джонсон выиграл, и после этого начались довольно серьезные разговоры о его участии в президентских выборах 2024 года. Политик планировал часто появляться перед публикой, поэтому уволил руководителя своей избирательной кампании и пригласил известного на всю страну профессионала.

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

После пресс-конференции разгорелись жаркие споры. Одни были вне себя от ярости, другие не видели особой разницы между компьютером и спичрайтером. Локомотив Джонсона перестал набирать обороты; основные выборы политик проиграл, однако к 2026 году подавляющее большинство кандидатов уже вовсю создавали тексты выступлений при помощи компьютера – кто частично, а кто с начала и до конца. Все политические речи стали одинаково хороши, и, конечно, ни одну из них уже нельзя было назвать по-настоящему прекрасной.

Музыканты при помощи урбанского алгоритма дописывают знаменитые неоконченные классические произведения вроде «Турандот» Пуччини, Десятой симфонии Малера или Восьмой симфонии Шуберта («Неоконченной»), а также сочиняют новые, например – Десятую симфонию Бетховена. «Урбанская первая» – самая популярная симфония урбанского алгоритма – своим новаторским звуком привела концертную публику в настоящий восторг. Кое-кто создает даже композиции «Битлз» и Элвиса Пресли, синтезируя не только мелодию, но и голоса. Серьезные музыкальные критики утверждают, что это не искусство, поскольку элемент творчества здесь полностью отсутствует, однако люди все равно активно скачивают песни из сети.

Одни создают на компьютерах картины, другие – пьесы, романы и даже стихи… Какой-то киноман недавно сгенерировал романтическую комедию с молодыми Хамфри Богартом и Джулией Робертс, и зрители почти поверили, что актеры ради совместных съемок совершили путешествие во времени. Мечтаете увидеть «Волшебника из страны Оз» от Тима Бёртона? Так в чем проблема?

Amazon уже давно не рекомендует книги к прочтению. Теперь он может сделать для вас гораздо больше: индивидуальный роман, полностью отвечающий вашим вкусам и интересам, обойдется не дороже билета в кино. На канале NBC запустили многосерийное приключенческое «реалити-шоу» без актеров и сценаристов: каждая серия от начала и до конца генерируется компьютером. В последней версии приставки Xbox появилась игра, в которой ваша жизнь и мир вокруг создаются прямо на ходу. Сюжетные линии не предопределены заранее; игрок может действовать совершенно произвольно, а программа, не вмешиваясь, позволяет его действиям реализовываться. Из-за этого многие уже с трудом отделяют свою реальную (и не особо насыщенную) жизнь от виртуальной.

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

Первоклассный детектив

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

При расследовании массового убийства в Атланте, происшедшего уже в «пост-урбанский» период, полиции удалось получить образец ДНК с оставленной на месте преступления обертки от гамбургера. В национальной объединенной базе индексов ДНК – CODIS – соответствия не нашлось. Тогда один ученый из Технологического института Джорджии привлек к делу урбанский алгоритм. В результате был создан новый, натренированный на базе CODIS метод, способный по образцу ДНК определить не только физические параметры (рост, цвет глаз и кожи), но также черты характера, а иногда даже профессию. Сопоставив данные CODIS с фотографиями из полицейских досье, ученый вместе со студентами разработал алгоритм, который, обладая информацией о возрасте и наличии бороды и усов, рисовал по ДНК человека его примерный портрет.

В полиции попытались применить новый алгоритм для сопоставления ДНК с места преступления со снимками из уголовных дел. Поиск ничего не дал, и тогда алгоритм запустили на базе водительских прав. Через несколько часов подозреваемый Джордж Браун был уже под арестом. С преступлением его связывали лишь самые косвенные улики – отсутствие алиби и нарисованный компьютером портрет. Добровольно сдать образцы ДНК арестованный отказался, однако полиции удалось получить ордер; как и ожидалось, совпадение ДНК было полным. Джорджа Брауна признали виновным и приговорили к смертной казни.

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

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

Обратная сторона медали

Появление урбанского алгоритма повлекло за собой немедленную смерть криптографии с открытым ключом. Напрямую вводить номер кредитной карты в интернете стало небезопасно. Поначалу вся электронная торговля просто остановилась, но затем крупные интернет-компании совместными усилиями перешли на старую добрую систему шифрования с секретным ключом. Вскоре для секретных ключей появился единый реестр; в каждом магазине можно было за смешные деньги приобрести флешку с миллиардом одноразовых кодов. Конечно, раньше было гораздо удобнее, но зато теперь интернет-торговля снова на плаву.

Постепенная потеря приватности многих пугает. Безобидные с виду видеокамеры распознают наши лица и могут за нами проследить; программы с удивительной точностью определяют, куда мы ездим отдыхать, какую музыку слушаем, какое кино смотрим и какие товары покупаем. Компьютеры знают о нас больше, чем мы сами. Реклама в почтовых ящиках выглядит невероятно убедительно – ведь теперь ее разрабатывают с учетом наших личных вкусов. Потенциальных террористов и магазинных воров вычисляют практически мгновенно и тут же устанавливают за ними самое пристальное наблюдение.

Больше всего мы опасаемся потерять работу. «Белых воротничков» (от секретаря и до управляющего среднего звена) постепенно заменяет урбанский алгоритм. В программу можно загрузить почти любую информацию, включая неформальные письма, аудио– и видеофайлы, а она мгновенно напишет ответное письмо, составит отчет, выдаст заключение или даже примет решение. Вместо «отдадим на аутсорсинг» теперь говорят «отдадим на урбанайзинг». Зарплатные ведомости становятся короче; чтобы вас не уволили, вы должны убедить работодателя в вашей исключительной ценности. Компании все чаще закрывают офисы службы поддержки за рубежом: вместо них устанавливаются электронные мультиязычные справочные системы, которые, судя по опросам, помогают клиентам гораздо лучше, чем люди.

В некоторых странах спешно переписывают трудовое законодательство, чтобы человека нельзя было просто взять и заменить на урбанский алгоритм. Толку от этих законов немного, поскольку остальные страны уже создали слишком высокую конкуренцию на рынке труда. Впрочем, судя по некоторым признакам, ситуация потихоньку начинает выправляться сама. Появление алгоритма послужило хорошим толчком для развития впавшей в застой экономики. В университетах ввели курс по урбанским методам оптимизации: слушателей учат быстро и легко приспосабливать урбанский алгоритм для решения любой проблемы. Со временем благодаря алгоритму появится даже больше рабочих мест, чем было потеряно. И все же многие его просто ненавидят, понимая, что не все, кто лишился работы, сумеют приспособиться к новой экономической действительности.

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

С небес на землю

Трудно представить, что один-единственный алгоритм способен полностью перевернуть нашу жизнь. Неужели все, что можно описать словами, можно и создать? Неужели можно без труда получать практически любые знания? Звучит невероятно, и именно поэтому большинство ученых не верят в равенство P и NP и полагают, что у нас никогда не будет ни урбанского, ни еще какого-нибудь универсального алгоритма.

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

Глава 3. Классы P и NP

Заклятые друзья

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

В Королевстве проживает двадцать тысяч человек. Глядя на каждого из них в отдельности, ничего такого не подумаешь… однако стоит только свести двух жителей вместе – и происходит нечто совершенно необъяснимое: они или немедленно проникаются взаимной симпатией и тут же становятся близкими друзьями, или с первого взгляда превращаются в злейших врагов. Никто и никогда не видел, чтобы между двумя жителями сложилось нечто среднее между дружбой и враждой (как можно было бы заключить из названия «заклятые друзья»): они всегда или дружат взахлеб, или терпеть друг друга не могут.

Никакой системы здесь не наблюдается. Друг вашего друга – точно так же, как и враг вашего врага – может быть вам другом, а может и врагом. Зависимость от пола, расы, вероисповедания и социального статуса тоже вроде бы отсутствует; известно только, что друзей у жителей Королевства обычно намного меньше, чем врагов.

В интернете можно найти массу информации о том, кто с кем дружит. Специалисты факультета компьютерных наук Королевского технологического института проанализировали данные социальных сетей, включая Facebook и Twitter, и составили практически полную базу друзей и врагов в Королевстве. В данной главе мы поговорим о том, как эти данные можно использовать.

Шесть степеней отчуждения

Выберем наугад двух жителей Королевства; пусть их зовут Элис и Джордж. Маловероятно, что Элис и Джордж дружат. Возможно, между ними существует связующее звено – общий друг Боб. А возможно, и нет. Исследователи Королевского технологического нарисовали схему, в которой каждому жителю Королевства соответствует один элемент; если жители дружат, то соответствующие элементы соединяются на схеме линией. Один из фрагментов схемы выглядел примерно так:


Рис. 3.1. Дружеские связи в Королевстве


Чтобы добраться от Элис до Джорджа, нужно пройти по цепочке из шести связей: Элис дружит с Бобом, Боб – с Кэти, Кэти – с Дэвидом, Дэвид – с Евой, Ева – с Фредом, а Фред – с Джорджем. Исследователи задумались: можно ли любую пару жителей соединить относительно короткой цепочкой дружеских связей? Проявится ли здесь феномен «тесного мира»? Кстати, название феномена пошло вовсе не от аттракциона в Диснейленде, а от слов «мир тесен», которые мы обычно произносим, когда знакомимся с кем-то и выясняем, что нас связывает нечто общее (пусть даже очень отдаленно).

В 1967 году психолог Стэнли Милгрэм поставил свой знаменитый эксперимент по проверке теории «тесного мира». Сначала он выбрал некоего биржевого маклера, проживающего в Бостоне. Имя маклера сохранялось в секрете; для удобства назовем его Том Джонс. Далее совершенно случайным образом в Небраске были выбраны сто держателей акций. Потом – сто людей, не являвшихся акционерами. И, наконец, в Бостоне по объявлению в газетах были найдены еще сто участников. Вторая группа из Небраски и группа из Бостона не имели никакого отношения к инвестиционному миру. Каждому из трехсот участников Милгрэм отослал пакет, в который вложил список инструкций, реестр и пятнадцать почтовых открыток с маркой, адресованных ему в Гарвардский университет. Инструкции выглядели так:


1. Занесите свое имя в реестр.

2. Заполните одну из открыток и бросьте ее в почтовый ящик.

3. Если вы лично знаете бостонского биржевого маклера по имени Том Джонс, перешлите пакет ему.

4. В противном случае выберите среди своих знакомых кого-нибудь, кто, по-вашему, с большей степенью вероятности знает Тома Джонса и чье имя пока не значится в реестре, и перешлите пакет ему (или ей).


Из трехсот участников двести семнадцать переслали пакет своим друзьям. Шестьдесят четыре письма в конце концов добрались до цели, т. е. до Тома Джонса. Средняя длина цепочки оказалась равна 5,2; в результате возникло понятие «шесть степеней отчуждения», означающее, что любых двух человек на планете в среднем разделяет цепочка из шести связей. Отдельные аспекты эксперимента подверглись резкой критике; впрочем, Милгрэм и сам не возводил феномен шести степеней в статус закона, однако его эксперимент показал, что мы связаны гораздо теснее, чем можно было бы ожидать.

Придумывая различные определения понятия связи – более специфические, чем простое знакомство, – можно исследовать и анализировать людские сообщества. Иногда таким образом возникают салонные игры, в которых требуется вычислить расстояние от произвольного человека до некой «центровой» персоны, обладающей, как правило, большим количеством связей. В 1994 году Кевин Бэйкон, выступая в поддержку своего фильма «Дикая река», в шутку заметил, что все актеры в Голливуде снимались либо с ним самим, либо с теми, кто с ним снимался. Тут же родилась игра под названием «Шесть шагов до Кевина Бэйкона», цель которой – найти кратчайший путь между заданным актером и Бэйконом через актеров, с которыми они вместе снимались. Для многих актеров путь до Бэйкона (и, соответственно, друг до друга) оказался очень коротким. Например, Чарли Чаплин находится от Бэйкона всего в трех шагах: в 1967 году он снял фильм «Графиня из Гонконга», в котором сам сыграл второстепенную роль; графиню играла Софи Лорен, которая в 1979 году снялась в малоизвестном фильме «Сила огня»; одну из главных ролей в этом фильме сыграл Илай Уоллак, позднее появившийся в эпизодической роли в фильме «Таинственная река»; в этом же фильме снимался и Бэйкон.

У математиков тоже есть похожая игра: через совместные публикации они ищут расстояние до Пола Эрдёша – гения комбинаторики и рекордсмена по количеству публикаций[2].

В Королевском технологическом решили выяснить, выполняется ли закон «шести степеней» для дружеских связей между жителями Королевства. Как проверить, существует ли цепочка из шести связей между Элис и Джорджем? Простейший способ – перебрать все существующие цепочки длины шесть. Вот только в Королевстве, насчитывающем 20000 жителей, таких цепочек может набраться 3198400279980000480000. Даже если предположить, что компьютер будет проверять триллион цепочек в секунду, на решение задачи уйдет более ста лет. Неужели нет способа получше?

Оказывается, есть. Существует совсем не сложная процедура, позволяющая быстро определить расстояние между Элис и Джорджем.


• Присвоим Элис число 0.

• Присвоим всем друзьям Элис число 1.

• Присвоим число 2 всем друзьям тех, кто получил число 1 и у кого пока еще нет числа.

• Присвоим число 3 всем друзьям тех, кто получил число 2 и у кого пока еще нет числа.

• Продолжаем до тех пор, пока Джордж не получит число.

• Число Джорджа и будет расстоянием между ним и Элис.


Подобные неформальные описания вычислительных процессов называются алгоритмами. Своим названием алгоритмы обязаны персидскому математику по имени Мухаммад ибн Муса Аль-Хорезми, жившему в VIII–IX веке н. э. В 825 году Аль-Хорезми написал трактат «Книга об индийском счете», благодаря которому индийская система счисления широко распространилась сначала на Востоке, а затем и в Европе. В латинском переводе книга получила название Algoritmi de numero Indorum. Имя Аль-Хорезми превратилось на латыни в Algoritmi, что в конечном итоге и привело к возникновению термина «алгоритм».

Упомянутый выше алгоритм вычисляет длину пути между Элис и Джорджем приблизительно за полмиллиона шагов. Если мы захотим найти степень отчуждения для всех пар жителей Королевства, нам потребуется средство помощнее: алгоритм Флойда – Уоршелла, который справится с задачей примерно за восемь триллионов шагов. Вам кажется, что триллион – это ужасно много? Но ведь компьютеры и сейчас уже способны выполнять миллиарды операций в секунду, так что мощные институтские процессоры вообще посчитали все за пару минут. В результате выяснилось, что средняя степень отчуждения в Королевстве чуть больше шести. При этом были найдены совершенно изолированные группы друзей, не имеющие дружеских связей с остальными жителями Королевства.

Не стоит недооценивать важность этого события. В институте, конечно, могли бы написать программу, которая методично перебирает все возможные пути, пытаясь найти минимальное количество связей между Элис и Джорджем; вот только этой программе пришлось бы проверить столько путей, что она просто не закончила бы работу за разумное время. Более эффективный алгоритм позволил вычислить степень отчуждения для Элис и Джорджа за ничтожную долю секунды, а для всех пар жителей – за каких-то две минуты.

Задача о числе паросочетаний

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

Институтские исследователи вскоре поняли, что их база может принести пользу обществу, и решили с ее помощью повысить число удачных браков. На сайте института появилось объявление о наборе 200 волонтеров: по 100 мужчин и женщин гетеросексуальной ориентации. Волонтеры откликнулись очень быстро. Теперь ученым предстояло «поженить» как можно больше участников.

Сколько вариантов должен рассмотреть каждый участник? Первому мужчине потенциально подходят 100 женщин. Когда выбор сделан, у второго мужчины остается 99 вариантов, у третьего – 98, и так далее. Итого получается 100 умножить на 99 умножить на 98 умножить на… умножить на 2 умножить на 1 – величина, называемая факториалом числа 100 и записываемая в виде «100!». Факториал числа 100 состоит из 158 цифр и намного превосходит гугол – число, изображаемое единицей со ста нулями. Термин «гугол» изобрел девятилетний племянник математика Эдварда Казнера, когда тот попросил мальчика придумать числу название.

Название компании Google призвано отражать огромный объем информации, обрабатываемый поисковыми сереверами: это искажение от «гугол» (англ. «googol»). Впрочем, отражает оно этот объем, мягко говоря, некорректно. Интернет, конечно, большой, и измерить его точно не представляется возможным, однако объем содержащейся в нем информации и близко не подходит к гуголу, какими бы мелкими единицами мы его ни измеряли. Если мы даже составим вместе все когда-либо созданные нами компьютеры, то и тогда, вне всяких сомнений, не получим гугол (и уж тем более факториал числа сто).

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


Рис. 3.2. Потенциальные пары в Королевстве



Рис. 3.3. Паросочетания (не максимальное число)


Посмотрим, каким образом можно из друзей составить романтические пары. Начнем с Артура и соединим его с Евой. Боб и Фелисити пока одиноки; соединим их, а также Карла с Гейл. На рис. 3.4 романтические связи обозначены пунктирной линией.


Рис. 3.4. Максимальное число паросочетаний


Теперь у нас не осталось пар друзей, в которых оба были бы свободны. Может, это означает, что мы составили максимальное паросочетание? А вот и нет.

У Дэвида нет пары, однако он дружит с Фелисити, которую мы сочетали с Бобом. Боб дружит с Гейл, но чету они не образуют. Гейл соединена с Карлом, а Карл дружит с одинокой Хелен. Разлучим Боба с Фелисити и Карла с Гейл и составим новые связи. Теперь пара есть у всех!

Вернемся к рис. 3.3. Цепь из чередующихся сплошных и пунктирных линий, первый и последний элемент которой не имеет пары, т. е. не принадлежит паросочетанию, называется увеличивающим путем. При наличии увеличивающего пути мы всегда можем увеличить наше паросочетание. В 1957 году математик Клод Берж показал, что для любого паросочетания, не являющегося максимальным, существует увеличивающий путь. Программисты Королевского технологического реализовали алгоритм нахождения увеличивающих путей, основанный на методе последовательного поиска, и в результате смогли подобрать пару для 98 процентов участников эксперимента.

Вскоре после описанных событий Королевский верховный суд вынес постановление, разрешающее однополые браки. На сайте института тут же вывесили объявление о наборе волонтеров любых сексуальных ориентаций. Схемы заметно усложнились; появились даже любовные треугольники, которые к тому же частично пересекались друг с другом (см. ниже).

Простыми методами находить увеличивающие пути уже не получалось, и исследователи обратились к трудам Джека Эдмондса. В 1965 году Эдмондс написал работу с изящным названием «Пути, деревья и цветы», в которой представил усложненный алгоритм поиска увеличивающих путей, подходящий для совершенно произвольных схем. Реализовав метод Эдмондса, специалисты института сумели подобрать пару для 97 процентов участников второго эксперимента.

«Пути, деревья и цветы» дали нам не только эффективный способ решения задачи о паросочетаниях для случая произвольной схемы. В группе из 100 человек алгоритм Эдмондса находит максимальное паросочетание примерно за 1004, т. е. 100000000 (сто миллионов) шагов, что для современного компьютера сущий пустяк. Методичный перебор всех возможных сочетаний вылился бы примерно в два квинвигинтиллиона шагов, а один квинвигинтиллион – это, между прочим, единица и 78 нулей! В работе Эдмондса есть довольно длинное отступление на тему эффективных алгоритмов. Понимая, что для такого, в сущности, интуитивного понятия, как эффективность, подобрать полноценное формальное определение очень сложно, Эдмондс все-таки предлагает некий критерий. Он называет алгоритм эффективным, если тот находит решение за «алгебраическое» время, т. е. время, «алгебраически» зависящее от размера входных данных. Для 100 человек это может быть, к примеру, 1004, 1002 или 10012. В дальнейшем класс задач, для которых существуют такие алгоритмы, получил обозначение «P» – от слова «полиномиальный», заменившего эдмондсовское понятие «алгебраический». Таким образом, класс P представляет собой все многообразие задач, которые можно решить относительно быстро. Ну что ж – в споре «P против NP» мы выслушали мнение первой стороны.


Рис. 3.5. Нетрадиционные потенциальные пары


В поисках клики

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

На деле выяснилось, что труд здесь требуется совершенно непосильный. Количество различных групп размера 50 оказалось непомерно огромным и выражалось числом из 151 цифры; не было и речи о том, чтобы проверить хотя бы сотую долю вариантов. Круг поиска пытались сузить всеми возможными способами – в частности, отсекли тех жителей, у которых было меньше 49 друзей, поскольку они-то уж точно не могли входить в искомую клику. Однако, несмотря на свою высокую квалификацию, исследователи не набрали и 25 друзей и при этом не смогли представить убедительное доказательство того, что клики размера 50 в Королевстве не существует.

Работа встала. Исследователи опустили руки. Внезапно одного из аспирантов осенило: «Слушайте, у нас же есть „Альфа“!» «Альфой» называлось известное, но при этом полусекретное сообщество, все члены которого, по слухам, дружили между собой. Пятьдесят «альфовцев» удалось найти довольно быстро: ведь, в конце концов, секретным сообщество было лишь наполовину. Оставалось только перебрать 1225 пар, чтобы проверить дружеские связи. К изумлению исследователей (но не самих «альфовцев», разумеется), все пятьдесят действительно оказались друзьями. Клика нашлась.

Передай скипетр

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

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

Правила игры:

1. Палку можно передавать только друзьям.

2. Между любыми двумя друзьями палка должна переместиться ровно один раз.

Пусть в игре участвуют пятеро детей. Одно из возможных решений таково: начинают с Барбары, она передает палку Эрику, Эрик – Алексу, Алекс – Кэти, Кэти – снова Эрику, а Эрик – Дэвиду.


Рис. 3.6. Дети


Дети, которые играют в «Передай скипетр» часто, вскоре понимают: решение существует, когда нечетное число друзей среди игроков имеется не более чем у двух участников. В данном случае таких участников у нас ровно два – это Дэвид и Барбара, у каждого из которых среди играющих есть только один друг. У остальных детей количество друзей четно: у Алекса и Кэти – по два, у Эрика – четыре. Вы спросите, причем тут четность? А вот причем: чтобы передать кому-то палку, нужно сначала получить ее, поэтому каждый игрок, кроме первого и последнего, обязательно участвует в четном количестве передач.


Рис. 3.7. Дети: число друзей у всех четно


Когда у всех участников число друзей четно, в случае успешного исхода палка возвращается к тому, с кого начали.

В данной ситуации решение может быть таким: начинают с Алекса, он передает палку Эрику, Эрик – Дэвиду, Дэвид – Барбаре, Барбара – снова Эрику, Эрик – Кэти, а Кэти – Алексу.

Прообразом игры «Передай скипетр» послужила одна очень известная головоломка XVIII века. В прусском городе Кёнигсберге (а ныне российском Калининграде) через реку Прегель и ее рукава было перекинуто семь мостов (см. карту на рис. 3.8).


Рис. 3.8. Старинная карта мостов Кёнигсберга


Жителям долгое время не давал покоя вопрос: можно ли посетить все районы города, проходя по каждому мосту ровно один раз? В 1735 году знаменитый математик Леонард Эйлер придумал, как изобразить задачу в виде схемы (см. рис. 3.9).


Рис. 3.9. Схема Эйлера


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

Так и выяснилось, что задача о семи мостах не имеет решения. В память об этом в игре со скипетром любой подходящий путь (а их бывает несколько) называется эйлеровым. Эйлеров путь можно искать по-разному, в том числе и простым перебором, однако при увеличении количества участников число вариантов заметно возрастает. Дети в Королевстве первым делом пересчитывают игроков с нечетным числом друзей, чтобы понять, существует ли вообще решение; если оно существует, то найти искомый путь уже не составляет особого труда. Поиск эйлерова пути – еще один пример задачи из класса P, т. е. задачи, для которой существует эффективный алгоритм.


Рис. 3.10. Передай скипетр – 2: решение есть


Постепенно дети подрастают. Играть становится все легче и легче; в конце концов «Передай скипетр» надоедает им, и тогда они начинают играть в ее вариацию, которую кто-то, не мудрствуя лукаво, окрестил «Передай скипетр – 2». Правила игры следующие:

1. Палку можно передавать только друзьям.

2. Все игроки, кроме первого, получают палку ровно один раз; в конце палка возвращается к первому игроку.

Для представленной ниже схемы дружеских связей решение может быть таким: Дэвид передает скипетр Барбаре, Барбара – Эрику, Эрик – Алексу, Алекс – Кэти, а Кэти возвращает его Дэвиду.

А вот для следующей схемы решения, как выяснилось, не существует.


Рис. 3.11. Передай скипетр – 2: решения нет


Новые правила выглядят проще. Поначалу детям даже кажется, что вторая игра легче, чем первая, однако при увеличении числа участников играть в нее становится намного сложнее. В 1857 году математик Уильям Роуэн Гамильтон изобрел головоломку «Икосиан», или «Путешествие по додекаэдру», в которой нужно было выполнить обход вершин правильного двенадцатигранника, или додекаэдра.


Рис. 3.12. «Путешествие по додекаэдру»


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

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


Рис. 3.13. Додекаэдр


Раскраска домов

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

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

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

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

Наконец, в 1976 году математики Кеннет Аппель и Вольфганг Хакен сумели доказать, что для правильной раскраски хватит четырех цветов. Правда, способ доказательства был довольно спорным: для проверки многочисленных примеров, на которых строились рассуждения, ученые использовали компьютер. Консервативно настроенные математики такой метод не приняли, поскольку не все его этапы можно было проверить вручную. Впрочем, формально доказательство Аппеля–Хакена так и не было опровергнуто, и сегодня уже мало кто сомневается в том, что любую карту действительно можно правильно раскрасить в четыре цвета.

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

Неваду окружает кольцо из пяти штатов: Калифорния, Орегон, Айдахо, Юта и Аризона. Пять – число нечетное, поэтому для раскраски штатов кольца потребуется не менее трех цветов. Действительно, предположим, что цветов у нас всего два, к примеру – голубой и зеленый. Покрасим Калифорнию зеленым, соседний с ней Орегон – голубым, Айдахо – зеленым, и Юту – голубым. Осталась Аризона, которая граничит и с зеленой Калифорнией, и с голубой Ютой, так что мы не можем покрасить ее ни в зеленый цвет, ни в голубой. Следовательно, для раскраски всех пяти штатов кольца нужно как минимум три цвета. Пусть Аризона будет желтой.


Рис. 3.14. Невада и ее соседи


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

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

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

На первый-второй рассчитайсь!

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


Рис. 3.15. Младшеклассники


Наилучшим решением будет поместить Алекса и Кэти в одну группу, а Барбару, Дэвида и Эрика – в другую: так мы разорвем всего две дружеские связи, Алекс-Эрик и Кэти-Эрик. Очевидно, что разбиения, которое разлучило бы лишь одну пару друзей, просто не существует.


Рис. 3.16. Группы младшеклассников


Директор школы обратился за помощью в институт, подчеркнув, что учителя хотят разлучить минимально возможное число друзей. Оказалось, что для решения задачи существует довольно много эффективных алгоритмов, поскольку она эквивалентна задаче о нахождении минимального разреза в графе. Институтские исследователи сумели разбить 500 учеников на две группы, «разрезав» при этом всего 17 дружеских связей.

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

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

В конце концов выход все же нашелся. Применив алгоритм, разработанный в 1995 году Мишелем Гемансом и Дэвидом Уильямсоном, исследователи сумели построить такое разбиение, при котором в разные группы попадала 1321 пара врагов. Максимальный разрез построить не удалось, однако до него оставалось совсем немного: исследователи знали, что не существует такого разбиения, при котором «разрезалось» бы более 1505 вражеских связей. Директор остался несколько разочарован тем, что оптимальное решение так и не нашли, но ему пришлось смириться. Теперь все снова были довольны и счастливы. Надолго ли?..

P против NP

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

В теории сложности вычислений класс задач, для которых можно быстро проверить предполагаемое решение, обозначается NP (где N значит «недетерминированная машина Тьюринга», а P – «полиномиальное время», если уж вам так интересно). Наиболее известные представители класса NP – это как раз поиск клики, поиск гамильтонова пути, раскраска карт и построение максимального разреза.

Обратите внимание, что в классе P, в отличие от класса NP, решение можно быстро найти. Примеры – кратчайший путь, максимальное число паросочетаний, эйлеров путь (первая игра со скипетром) и минимальный разрез.

А что, если быстрый алгоритм поиска клики существует? Если в один прекрасный день какой-нибудь гениальный аспирант разработает простой метод нахождения гамильтонова пути, эффективный алгоритм раскраски карт или быстрый способ построения максимального разреза? Вдруг все эти проблемы на самом деле лежат в классе P – так же как и задачи о кратчайшем пути, максимальном числе паросочетаний, эйлеровом пути и минимальном разрезе? Такое вполне возможно; может даже оказаться, что быстрый алгоритм существует для всех задач из NP. Но пока мы этого не знаем.

В этом и заключается суть проблемы равенства (или неравенства) классов P и NP. Если P = NP, мы попадаем в совершенный мир, где для любой задачи из NP существуют эффективные алгоритмы, и можно не только быстро проверить предполагаемое решение, но и быстро найти самый оптимальный вариант. И наоборот – если найдется хоть одна задача из NP, для которой эффективного алгоритма не существует, это будет означать, что P ? NP.

Вопрос о равенстве P и NP – одна из центральных проблем вычислительной техники, а возможно, и всей математики. Многочисленные попытки ученых доказать равенство классов и разработать быстрые алгоритмы для поиска клики или гамильтонова пути, а также других NP-задач, успехом не увенчались. С неравенством классов дело обстоит еще сложнее: ведь для обоснования того факта, что P ? NP, нужно доказать невозможность построения быстрого алгоритма для клики или других задач из NP. Но как вы докажете невозможность чего бы то ни было? До сих пор ни в том, ни в другом направлении не было получено сколько-нибудь значимых результатов. Проблема P и NP настолько важна, что Математический институт Клэя предложил миллион долларов за ее решение. А я загорелся идеей написать эту книгу.

За границей королевства

Мы с вами лишь слегка коснулись огромного множества NP-задач, которые невозможно решить за разумное время. Вам, наверно, кажется, что проблема равенства P и NP интересна только жителям воображаемого Королевства да еще узкому кругу математиков, связанных с вычислительной техникой. Чтобы развеять это впечатление, рассмотрим еще несколько задач из NP, не имеющих эффективных алгоритмов решения (и принадлежащих, кстати, к разным областям науки).

Биология

Геном человека содержит двадцать три пары хромосом, каждая из которых представляет собой двойную цепочку пар оснований. Основания бывают четырех видов – аденин (A), цитозин (C), гуанин (G) и тиамин (T). Цепочки начинаются примерно так: «ACTGATTACA…»; некоторые достигают прямо-таки гигантских размеров. Самая короткая хромосома содержит около 47 миллионов пар оснований, а самая длинная – около 247 миллионов. Современные методы секвенирования ДНК позволяют за один прием обрабатывать участки длиной от 20 до 1000 пар оснований. Ученым приходится секвенировать огромное число коротких кусков, а потом придумывать, как их лучше соединить. Склейка последовательности – задача огромной вычислительной сложности и принадлежит она классу NP: ведь, имея на руках готовую последовательность, можно относительно быстро определить, складывается она из секвенированных участков или нет. Поскольку эффективные методы для поиска оптимального решения пока неизвестны, биологи при составлении карты человеческого генома вынуждены секвенировать избыточное число последовательностей; к сожалению, это не слишком спасает их от ошибок и неясных мест, которых при наличии хорошего алгоритма было бы гораздо меньше.

Последовательности ДНК содержат закодированную информацию о последовательностях матричных РНК, а те, в свою очередь, хранят информацию о синтезе белков. Белки – или, иначе, протеины – играют ключевую роль в работе клеток, формирующих любой живой организм. Для выполнения своих функций протеин должен особым образом свернуться, т. е. принять определенную пространственную форму. Сложный механизм сворачивания биологами пока не разгадан; известно только, что процессом командуют матричные РНК. Решение проблемы равенства P и NP помогло бы продвинуться на пути понимания этого механизма и, как следствие, – лечения и предотвращения болезней.

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

Физика

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


Рис. 3.17. Простейшая физическая система


Рассмотрим простейшую физическую систему: шарик на неровной поверхности (рис. 3.17). При x = 3,0 уровень потенциальной энергии шарика минимален, а при x = 1,0 – нет, хотя шарик будет оставаться в этой точке до тех пор, пока его не толкнут. Таким образом, состояние покоя еще не гарантирует минимального уровня энергии. Поиск состояния минимальной энергии для сложных физических систем – задача чрезвычайно трудная, с которой подчас не справляются не только компьютеры, но и сами физические системы.

С некоторыми особо трудоемкими NP-задачами можно бороться при помощи квантовой механики; подробнее об этом вы узнаете в девятой главе.

Экономика

Менеджер хедж-фонда ищет наилучшую форму помещения капитала. Покупатель в супермаркете старается уложиться в бюджет. Оба сталкиваются с труднейшей вычислительной задачей из класса NP, решить которую получается далеко не всегда, и часто выбирают совсем не оптимальную стратегию. Каким образом отсутствие эффективных с вычислительной точки зрения алгоритмов в различных сферах рынка сказывается на экономике и на жизни общества в целом? Прекрасный вопрос; к сожалению, достойного ответа на него не может дать никто.

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

Математика

В 1928 году выдающийся немецкий математик Давид Гильберт сформулировал свою знаменитую проблему разрешимости – Entscheidungsproblem: существует ли универсальный алгоритм, который для любого математического утверждения определяет, истинно оно или ложно? В 1931 году Курт Гёдель показал, что некоторые утверждения невозможно доказать или опровергнуть ни в одной системе аксиом; спустя несколько лет вдохновленные его результатами Алонзо Чёрч и Алан Тьюринг независимо друг от друга доказали, что универсального алгоритма не существует.

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

Определить условия истинности логического выражения тоже иногда бывает очень трудно, даже если выражение это не слишком сложное. Из данной проблемы выросла целая теория, связавшая вместе большинство NP-задач; подробнее мы познакомимся с ней в следующей главе.

Решение головоломки «Путешествие по додекаэдру»


Рис. 3.18. Обход додекаэдра


Глава 4. Самые трудные задачи класса NP

Психолог проводит эксперимент над математиком. Математика посадили в маленький деревянный сарай; на полу лежит лучина для растопки, рядом стоит стол, а на нем – ведро с водой. Психолог поджигает лучину. Математик хватает ведро и заливает огонь водой.

Пока все идет по плану. Психолог повторяет эксперимент, изменив одну незначительную деталь. Математика снова сажают в сарай; внутри тот же стол, на полу такая же лучина, есть и ведро с водой, но стоит оно не на столе, а рядом с лучиной на полу. Психолог поджигает лучину. Математик хватает ведро и ставит его на стол. В результате сарай выгорел дотла; математика, к счастью, успели в последний момент вытащить.

«Почему вы просто не залили огонь?!» – спрашивает психолог. «Я свел новую задачу к уже решенной», – отвечает математик.

Старый математический анекдот

Первая NP-полная задача

В 1970 году Том Хал, глава факультета информатики Университета Торонто, загорелся идеей переманить к себе Стивена Кука, которому не хотели давать постоянное место в Калифорнийском университете в Беркли. Зная любовь Кука к парусному спорту, Хал отвез его на озеро Онтарио: он хотел доказать, что в окрестностях Торонто ходить под парусом почти так же приятно, как и в заливе Сан-Франциско. Хитрость удалась, и осенью 1970 года Кук пополнил ряды специалистов Торонтского университета. Со стороны Хала это был блестящий ход, поскольку в скором времени Кук прославился на весь мир и стал самым известным канадским ученым в области теории вычислений.

Кук проводил исследования на стыке математической логики и теоретической информатики. Той осенью он отправил одну из своих работ на рассмотрение комиссии III Международного симпозиума по теории вычислений (Symposium on the Theory of Computing, сокращенно – STOC), проводимого Ассоциацией вычислительной техники. Симпозиум должен был состояться в мае 1971 года. В статье Кука содержались результаты, полученные им задолго до того и не вызвавшие в свое время ажиотажа. Исследования ученого заинтересовали комиссию, и заявку приняли. К началу конференции Кук почти все переделал; в новой статье, которая называлась The Complexity of Theorem-Proving Procedures, он впервые сформулировал проблему равенства классов P и NP и тем самым полностью изменил ход истории.

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


Рис. 4.1. Задача о клике


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

Алекс не в «Альфе» ИЛИ Дэвид не в «Альфе».

«ИЛИ» здесь не исключающее: возможен вариант, при котором ни Алекс, ни Дэвид не входят в сообщество. Алекс и Барбара тоже враждуют, а следовательно – не могут оба входить в «Альфу». Запишем и это:

Алекс не в «Альфе» ИЛИ Барбара не в «Альфе».

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

(Алекс не в «Альфе» ИЛИ Дэвид не в «Альфе»)

И

(Алекс не в «Альфе» ИЛИ Барбара не в «Альфе»).


Барбара и Дэвид – друзья, поэтому они вполне могут одновременно входить в «Альфу», и построенное нами выражение такой возможности не исключает. Проанализировав всю схему, мы в итоге получим следующее выражение:

(Алекс не в «Альфе» ИЛИ Дэвид не в «Альфе») И (Алекс не в «Альфе» ИЛИ Барбара не в «Альфе») И (Дэвид не в «Альфе» ИЛИ Кэти не в «Альфе») И (Кэти не в «Альфе» ИЛИ Барбара не в «Альфе»).

Допустим, Алекс, Кэти и Эрик принадлежат сообществу, а Барбара и Дэвид – нет; тогда наше выражение истинно, так как в каждом условии «ИЛИ» упоминается кто-то, кто в «Альфу» не входит. Теперь предположим, что сообществу принадлежат Алекс, Дэвид и Эрик. Тогда условие (Алекс не в «Альфе» ИЛИ Дэвид не в «Альфе») не выполняется, поскольку и Алекс, и Дэвид входят в сообщество, а значит – ложно и все выражение.

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

Аналогичную конструкцию можно составить и для всех 20 тысяч жителей Королевства. В результате получится огромное, содержащее несколько миллионов символов выражение – впрочем, не настолько длинное, чтобы не уместиться в компьютер. Для краткости обозначим его буквой ?. Очевидно, что ? будет истинно только тогда, когда «альфовцы» в самом деле образуют клику.

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

Соединим наши выражения в одно: (?50 И ?). Если члены сообщества образуют клику размером не меньше 50, то новое выражение примет значение «истина», и наоборот – если выражение истинно, то члены сообщества образуют клику размером не меньше 50.

Логическое выражение, проверяющее принадлежность к сообществу, называется выполнимым, если сообщество можно составить таким образом, что выражение примет значение «истина». Выражение (?50 И ?) выполнимо, когда в сообществе есть клика размера не меньше 50.

Предположим, у нас есть быстрый алгоритм, проверяющий выполнимость логического выражения. Подадим ему на вход выражение (?50 И ?); если алгоритм ответит «да», то в Королевстве существует клика размера 50, а если «нет» – то не существует. Таким образом, алгоритм решения задачи о выполнимости позволяет решить и задачу о клике.

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

На самом деле к проблеме выполнимости, или SAT (от англ. satisfiability – выполнимость), сводится не одна лишь задача о клике, но и другие задачи класса NP, которые мы обсуждали ранее, включая задачу о коммивояжере, поиск гамильтонова пути, построение максимального разреза и раскраску карт. Стивен Кук доказал, что любая проблема из NP сводится к проблеме выполнимости. Решите проблему выполнимости – и у вас будет ключ ко всем проблемам из NP. Появление эффективного алгоритма для задачи о выполнимости будет означать, что такой алгоритм существует для всех задач, решение которых легко проверяется, а следовательно, P = NP. Создайте эффективный алгоритм решения проблемы SAT – и получите миллион долларов от Института Клэя!

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

Симпозиум проходил в городке Шейкер-Хайтс в штате Огайо, в отеле Somerset Inn, принадлежащем компании Stouffer. Стивен Кук выступил с докладом 4 мая 1971 года.

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

С того дня и ведет свою историю проблема равенства P и NP.

Двадцать плюс одна

Работу Кука оценили, однако ажиотаж вокруг нее поднялся не сразу. В те годы проблема выполнимости интересовала немногих, и никто еще толком не понимал смысл класса NP. Кук даже не придумал ему названия и пользовался выражением «недетерминированное полиномиальное время». Все изменилось, когда вслед за Куком свою работу опубликовал профессор Ричард Карп из Калифорнийского университета в Беркли.

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

Кук свел задачу о клике к проблеме выполнимости, Карп совершил обратный процесс, и в результате оказалось, что с вычислительной точки зрения эти две совершенно непохожие задачи эквивалентны. Проблему выполнимости можно решить быстро тогда и только тогда, когда быстро решается задача о клике, или – что то же самое – когда P равно NP.

Не ограничившись одной лишь задачей о клике, Карп рассмотрел еще девятнадцать важнейших задач и показал, что все они также являются самыми трудными. Среди них – задача о разбиении множества, задача коммивояжера, поиск гамильтонова пути, раскраска карт и поиск максимального разреза. Появление эффективного алгоритма хотя бы для одной даст нам возможность быстро решать их все и докажет равенство P и NP. Если же классы P и NP все-таки не совпадают, то ни одну задачу из списка – а их там двадцать одна, включая выполнимость, – нельзя решить быстро.

Ошибочно было бы полагать, что рассмотренные Карпом задачи надуманы и интересуют только математиков: большинство из них очень даже практические.

Возьмем, к примеру, компанию Coca-Cola. Под этой маркой производится более трех тысяч напитков по всему миру. Установка для розлива напитков способна выдавать сотни различных продуктов. В ее состав входит несколько разливочных машин, каждая из которых выполняет определенную последовательность операций, чтобы смешать ингредиенты. Одна машина может приготовить множество различных напитков. Задача установки – скоординировать работу всех разливочных машин и добиться наивысшей производительности, выдавая максимальное число напитков за минимальное время, т. е. решить проблему распределения подзадач, которая тоже входит в список Карпа и является самой трудной в NP.

Даже небольшое увеличение скорости производства за счет удачного распределения задач принесет компании-производителю миллионы долларов. С момента появления первых цифровых компьютеров ученые и программисты трудятся над созданием наилучших алгоритмов для решения этой проблемы, однако никому еще не удалось придумать такой алгоритм, который всегда выдавал бы на выходе оптимальное распределение. И это неудивительно: ведь Карп показал, что даже частные случаи проблемы распределения задач являются самыми трудными в NP.

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

Однодневная экскурсия по «Волшебному Королевству» для взрослых включает посещение 21 аттракциона. Обходить их можно разными способами; всего существует… 51090942171709440000 вариантов! Удивительно, правда? Пятьдесят один миллиард миллиардов – это примерно в шесть раз больше, чем количество песчинок на планете. А если задачу немного усложнить и начать учитывать очередь по записи, посещение ресторанов и шоу, вариантов будет еще больше.

Ученые уже давно бьются над подобными проблемами. Каким образом, к примеру, компания по доставке почты должна составлять маршруты для курьеров, чтобы минимизировать суммарную длину пути и сэкономить время и бензин? Вообще задача, в которой требуется с минимальными усилиями посетить как можно больше мест, настолько распространена, что даже получила имя: задача коммивояжера.

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

Над решением этих разнообразных задач ученые трудились независимо. Все они потерпели поражение, из-за чего многие склоняются к тому, что P и NP не равны, хотя доказать это никто не может. Ясно лишь, что если эффективный алгоритм все-таки есть, то найти его будет очень и очень непросто. А пока операторы разливочных машин могут с чистой совестью заявить директору, что оптимального способа распределения просто не существует. Да и энтузиастам из Орландо тоже вряд ли удастся просчитать оптимальный маршрут по Диснейленду.

Все практически неразрешимые вычислительные задачи из списка Карпа уже были известны ранее, но Карп одним махом связал их воедино, и с этого момента проблема «P против NP» вышла на первый план.

Каждый год Ассоциация вычислительной техники вручает премию Тьюринга – «компьютерный» аналог Нобелевской премии, названый в честь Алана Тьюринга, который заложил основы теоретической информатики еще в 30-х годах XX века. В 1982 году за формулировку проблемы равенства P и NP премию получил Стивен Кук. Однако P и NP явно требовали большего, и в 1985 году Ричарда Карпа наградили за вклад в теорию алгоритмов, и в особенности – за список NP-полных задач.

Что в имени?

Названия «P» и «NP», которыми мы пользуемся и по сей день, впервые появились в работе Карпа. Однако для самых трудных задач из класса NP термина у него не было. Кук использовал крайне специфичное обозначение, deg({DNF tautologies}), которое расшифровывалось как «с полиномиальным уровнем сложности по отношению к сложности множества тавтологий, записанных в дизъюнктивной нормальной форме». Карп употреблял выражение «полиномиально полные». Оба варианта звучали как-то не очень.

В итоге с этим вопросом разобрался Дональд Кнут, который в 1974 году получил премию Тьюринга за исследования в области информатики и трехтомный (на тот момент) труд «Искусство программирования». В 1973 году, работая над четвертым томом монографии, Кнут в полной мере осознал важность проблемы равенства P и NP и решил взять инициативу на себя. Ученый запустил опрос населения по почте – не электронной, без которой он и сейчас прекрасно обходится. Впрочем, в те времена без электронной почты удавалось прекрасно обходиться всем.

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

Победителем конкурса стало название «NP-полные», которое после довольно бурных обсуждений предложили сотрудники Лабораторий Белла в Нью-Джерси. Этот термин, также отсутствовавший в первоначальном списке, обязан своим появлением математической логике, где система фактов, или аксиом, называется полной, если с ее помощью можно обосновать любое истинное высказывание в данной логической теории. Аналогичным образом, задача из класса NP называется NP-полной, если с ее помощью можно решить все остальные NP-задачи.

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

В 1974 году, излагая результаты последних исследований, Кнут написал: «Вообще-то термин „NP-полные“ кажется мне слишком техническим для широкой аудитории. Зато он по крайней мере адекватный».

Название «NP-полные» очень быстро вошло в стандартную терминологию. А Кнуту потребовалось почти сорок лет, чтобы закончить работу над четвертым томом.

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

Кнут, конечно, понимал, что если равенство классов докажут, то все его усилия по изобретению названия пропадут даром, поскольку NP-полные задачи «переедут» в класс P. Однако такая перспектива ученого не пугала. «Мне даже хочется, чтобы эта «неприятность» случилась, – пишет он. – Более того, за решение проблемы я объявляю награду: тот, кто первый докажет, что P = NP, получит от меня настоящую живую индейку». Что ж… докажите равенство P и NP – и получите миллион долларов и индейку в придачу!

После Карпа

Работа Карпа послужила толчком к дальнейшему развитию информатики. NP-полные задачи множились, как грибы; профессора и аспиранты по всему миру брались за известные поисковые проблемы (а также находили новые) и доказывали их NP-полноту. В классическом труде 1979 года[3] приводится более трехсот основополагающих NP-полных задач. Число их неудержимо растет; NP-полные задачи возникают не только в информатике и математике, но и в физике, биологии, экономике и во многих других областях. Поиск по Академии Google выдает более 138000 научных статей об NP-полноте за период с 1972 по 2011 год, и в одном только 2011 году на эту тему было создано около 10000 работ. Вряд ли имеет смысл приводить здесь список всех NP-полных задач, однако мне хотелось бы дать вам представление о некоторых из них.

Доминирующее множество

Существует ли в Королевстве группа из 50 человек, в которой у каждого жителя есть хотя бы один друг? NP-полная задача.

Разбиение на треугольники

Комнаты в общежитии Королевского технологического рассчитаны на трех человек. Можно ли расселить студентов таким образом, чтобы в каждой комнате жили только друзья? NP-полная задача.

Гигантские судоку

Судоку – это японская головоломка с числами. В классическом варианте используется квадратная сетка 9 x 9 (рис. 4.2).


Рис. 4.2. Классический вариант судоку


Рис. 4.3. Решение судоку из рис. 4.2


Цель игры – заполнить пустые клетки цифрами от 1 до 9 так, чтобы в каждой строке, каждом столбце и каждом жирно очерченном квадрате 3 x 3 эти цифры не повторялись.

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

А как обстоит дело с игрой на большом поле? Например, с сеткой 25 x 25, в которой каждая строка, каждый столбец и каждый мини-квадрат должны содержать все буквы от A до Y?

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


Рис. 4.4. Гигантское судоку


Поиск решения гигантского судоку – задача NP-полная. Считаете себя мастером судоку? Или знаете надежный способ решения какой-нибудь другой гигантской головоломки? Тогда в ваших руках ключ от решения задачи о выполнимости, задачи коммивояжера и тысячи других NP-полных проблем!

Есть еще много игр для одного игрока, решение которых представляет собой NP-полную задачу. Возьмем, к примеру, встроенного в Microsoft Windows «Сапера».


Рис. 4.5. «Сапер»


Число в ячейке говорит о количестве мин, расположенных в соседних с ней квадратиках – по вертикали, горизонтали и диагонали. Вы должны либо открыть ячейку, чтобы узнать это число, либо поставить на ней флажок, если думаете, что в ячейке бомба. Откроете бомбу – проиграете. Нахождение выигрышной стратегии в гигантском «Сапере» также представляет собой NP-полную задачу. На рисунке ниже показано расположение оставшихся бомб.

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

Фигурки бывают разных форм. В классическом варианте «Тетриса» вы не знаете, какая фигурка выпадет следующей. Впрочем, если бы вам даже заранее сообщили последовательность появления фигурок, выбор оптимальной стратегии все равно остался бы NP-полной задачей.


Рис. 4.6. Оставшиеся бомбы


Рис. 4.7. «Тетрис»


Кто бы мог подумать, что, научившись мастерски играть в судоку, «Тетрис» или «Сапер», можно доказать равенство P и NP и решить одну из задач тысячелетия!


Рис. 4.8. Виды фигурок в «Тетрисе»


Как насчет кубика Рубика? Наверняка это тоже NP-полная задача: ведь если даже освоение классического варианта 3 x 3 x 3 занимает столько времени, что уж говорить о больших кубах?


Рис. 4.9. Кубик Рубика. Фото: Том ван дер Занден


На самом деле все совсем не так. Благодаря такой области математики, как теория групп, у нас есть эффективные алгоритмы, способные справиться даже с гигантскими кубами. Оптимального решения они не дают, но все же позволяют собрать кубик относительно быстро вне зависимости от его начального состояния.

Верится с трудом, но это правда – кубик Рубика намного проще «Тетриса», «Сапера» и судоку.

А как обстоит дело с играми для двоих? Шахматы, шашки, го, «Отелло»? Если говорить о гигантских версиях, то они не уступают по сложности ни проблеме выполнимости, ни другим NP-полным задачам, однако к классу NP, тем не менее, не принадлежат. Вы спросите, почему? Потому что если я скажу, что белые обеспечат себе выигрыш, передвинув пешку на «e3», то вы вряд ли сможете быстро это проверить. Ученые полагают, что на самом деле эти игры намного труднее любой NP-полной задачи.

Цепочка из почек

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

Если ваши почки здоровы, вы можете стать донором и отдать одну из них тому, у кого почки не функционируют вообще, – при условии совместимости с организмом реципиента. Совместимость проверяется с помощью несложного анализа крови.

Допустим, почки Элис вышли из строя. Ее муж, Боб, согласен стать донором. Если Боб пройдет тест на совместимость, врачи пересадят Элис его почку.

А если не пройдет? Тогда можно будет попытаться совершить обмен почками.

Предположим, Чарли требуется почка, его брат Дэвид готов отдать свою, но его почка не подходит. Если Дэвид совместим с Элис, а Боб – с Чарли, то можно провести операцию сразу на четырех пациентах, и в результате и Элис, и Чарли получат рабочую почку.

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

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

Если мы в нашей базе разрешим обмен по цепочке, желая помочь как можно большему числу людей, то снова придем к NP-полной задаче. Равенство P и NP спасет чьи-то жизни, а это уже гораздо серьезнее, чем гарантированный выигрыш в игре «Сапер»!

Мастера конспирации

Как правило, те NP-задачи, которыми ученые занимались в середине семидесятых, довольно быстро либо оказывались NP-полными, либо «скатывались» в класс P, поскольку для них появлялись эффективные алгоритмы. Однако некоторые особо вредные экземпляры упорно не желали поддаваться классификации; одни сумели продержаться несколько лет, другие не удалось рассекретить до сих пор.

Изоморфизм графов

В Королевстве насчитывается несколько сотен фанатов «Блейд Квеста» – массовой многопользовательской ролевой онлайн-игры. Как и в других играх подобного плана, участники здесь получают новую личность, или аватар; каждый исполняет роль определенного персонажа и общается с другими персонажами, за которыми тоже стоят реальные жители Королевства. В виртуальном мире дружеские связи сохраняются: те, кто дружат в жизни, становятся друзьями и в игре, а те, кто враждуют, заново проникаются взаимной неприязнью.

Джон, Изабель, Кевин, Лаура, Молли и Нэнси очень любят играть в «Блейд Квест».


Рис. 4.10. Любители «Блейд Квеста»


Их персонажей зовут Акрис, Лэмбо, Криард, Де Гарольд, Хрхрхр и Вирус, но кто под каким именем скрывается – неизвестно: эта информация пользователям игры недоступна, и они могут видеть только схему дружеских связей между персонажами.


Рис. 4.11. Аватары в «Блейд Квесте»


Проанализировав обе схемы, Лаура отправила остальным игрокам сообщение от имени своего аватара: «Я знаю, кто ты!» А вы уже догадались, кто есть кто?

Схемы будут соответствовать друг другу лишь в том случае, если Изабель – это Хрхрхр, Джон – Де Гарольд, Кевин – Криард, Лаура – Лэмбо, Молли – Акрис, а Нэнси – Вирус. Например, «реальная» Молли дружит с Лаурой и Нэнси, а ее аватар Акрис – с Лэмбо и Вирусом.

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

Вопрос о том, относится ли проблема изоморфизма также и к классу P, до сих пор открыт; никто пока не придумал хороший алгоритм, который всегда находил бы искомое соответствие в случае, если оно действительно есть. Мы также не знаем, является ли эта проблема NP-полной, хотя, по мнению ученых, некоторые признаки косвенно указывают на то, что не является. Изоморфизм графов стоит в ряду немногочисленных задач, занимающих некое промежуточное положение: они вроде бы труднее, чем задачи из P, но легче, чем задачи NP-полные, вроде поиска гамильтонова пути или максимального разреза.

Простые числа. Разложение на множители

Число 15 можно разложить на множители, т. е. представить в виде произведения других натуральных чисел, двумя способами: 15 x 1 и 5 x 3. Для числа 24 способов уже гораздо больше, например – 24 x 1, 12 x 2, 8 x 3, 6 x 4. А вот число 17 иначе как в виде 17 x 1 не представишь: оно простое, т. е. делится только на себя и на единицу. Множество простых чисел бесконечно; первые восемь его представителей – 2, 3, 5, 7, 11, 13, 17, 19. Самое большое простое число, известное на момент написания этой книги, состоит из 12978189 цифр и начинается так: 316470269330255923143453723…

Как понять, является данное число простым или нет? К примеру, число 1123467619? Первое, что приходит в голову, – это методично перебрать все числа от 2 до 1123467618, пытаясь поделить на них исходное число. На самом деле достаточно будет дойти лишь до квадратного корня из 1123467619, т. е. перебрать все числа от 2 до 33518. Не такая уж и ужасная перспектива! А что, если взять число побольше? Например, такое:

8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623

Оно простое, как вы думаете?

Первые алгоритмы проверки на простоту придумали еще в Древней Греции, однако для больших чисел они не годились. В семидесятых годах прошлого века появились вероятностные алгоритмы, которые справлялись с числами из нескольких сот цифр. Проверка простоты осуществлялась при помощи серии тестов с использованием случайных чисел и некоторых методов теории чисел. Новые алгоритмы давали неплохие результаты, однако не гарантировали стопроцентную точность. Наконец, в 2002 году индийский профессор Маниндра Агравал вместе со своими студентами Нираджем Каялом и Нитином Саксеной создал точный и эффективный алгоритм распознавания простоты без использования случайных величин, доказав тем самым, что задача проверки числа на простоту лежит в классе P.

Алгоритм Агравала позволяет установить, что число 8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623

не является простым, но при этом не дает нам ни одного его делителя.

Удивительно, правда? Вопрос о простоте числа решается довольно быстро, а вот для поиска делителей эффективный алгоритм пока не придумали.

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

84 578 657 802 148 566 360 817 045 728 307 604 764 590 139 606 051

на

97 823 979 291 139 750 018 446 800 724 120 182 602 777 022 032 973,

мы получим

8 273 820 869 309 776 799 973 961 823 304 474 636 656 020 157 784 206 028 082 108 433 763 964 611 304 313 040 029 095 633 352 319 623.

Маловероятно, что эта задача принадлежит классу P. Впрочем, в ее NP-полноту ученые тоже не верят: разложить число на множители, конечно, очень трудно, однако решить проблему выполнимости или раскраски карт, скорее всего, будет на порядок труднее.

Задачи распознавания простоты и поиска делителей важны не только для математиков, которые жить без своих чисел не могут. К примеру, практически неразложимые на множители числа используются в современной криптографии. В восьмой главе мы коснемся этой темы подробнее.

Линейное программирование

Фэнси Франкс продает четыре вида колбасных изделий: франкфуртские сосиски, итальянские сосиски, братвурст и чоризо. У всех продуктов разный состав и время приготовления; все они продаются по разной цене, и стоимость ингредиентов также отличается. Сколько сосисок и колбасок каждого вида должна изготавливать Фэнси, чтобы получать максимальный доход?

Составить оптимальный план выпуска продукции – значит решить задачу максимизации прибыли при ограниченных ресурсах. Пусть фарш для одной франкфуртской сосиски стоит 1 доллар, для итальянской сосиски – 2 доллара, для братвурста – 3 доллара, а для чоризо – 4 доллара, и пусть дневной бюджет по расходам на мясо составляет 10000 долларов. Тогда количество франкфуртских, умноженное на один, плюс количество итальянских, умноженное на два, плюс количество братвурстов, умноженное на три, плюс количество чоризо, умноженное на четыре, не должно превышать 10000.

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

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

Но если все так просто, то зачем мы тут вообще говорим о линейном программировании? На самом деле в некоторых случаях симплекс-метод не умеет выдавать быстрый результат.

В 1979 году Леонид Хачиян придумал метод эллипсоидов, в котором исходный многогранник поэтапно сжимается до тех пор, пока от него не останется одно лишь оптимальное решение. Доказав эффективность этого метода, Хачиян тем самым «переместил» задачу линейного программирования в класс P, хотя на практике метод эллипсоидов работает гораздо дольше симплекс-метода. Работа Хачияна имела огромное теоретическое значение; в последующие десятилетия на основе метода эллипсоидов было создано множество нетривиальных алгоритмов.


Рис. 4.12. Выпуклый многогранник


Алгоритмов стало два, причем друг на друга они абсолютно не походили; один прекрасно работал на практике, другой – в теории.

В 1984 году индийский математик Нарендра Кармаркар разработал метод внутренней точки, который тоже, как и симплекс-метод, выполняет обход многогранника, вот только «ходит» он не по внешним точкам, а по внутренним. В теории метод внутренней точки сравним по быстроте с методом эллипсоидов, а на практике он после некоторых доработок может поспорить с симплекс-методом.

Так у задачи линейного программирования появилось целых три совершенно разных по сути алгоритма. Первый – симплекс-метод – хорошо работает на практике; второй – метод эллипсоидов – в теории; третий – метод внутренней точки – хорош и там и там. Не так уж плохо для задачи, которую до самого конца семидесятых считали практически неразрешимой!

Глава 5. Хроника предшествующих событий

В предыдущей главе мы рассказывали о не очень успешных попытках Дональда Кнута найти такой термин, который бы наилучшим образом отражал понятие NP-полноты. Если бы Кнут догадался повернуться на восток, в сторону СССР, то обнаружил бы там очень даже подходящее слово – «перебор». Метод перебора, или, как его еще называют, метод «грубой силы», заключается в последовательной проверке всех возможных вариантов в поисках наилучшего решения. Вопрос о равенстве классов P и NP можно переформулировать так: верно ли, что для задачи о клике работает лишь перебор, или можно найти и более быстрые методы?

Впрочем, в те времена американцам (в том числе Кнуту) сложно было разглядеть что-либо за железным занавесом, отделившим СССР и Восточную Европу от Европы Западной и от США после окончания Второй мировой. Холодная война породила острое соперничество между СССР и США; в пятидесятых обе страны начали активно развивать науку и технику в стремлении выиграть интеллектуальную гонку вооружений. К сожалению, железный занавес почти полностью изолировал друг от друга научные сообщества Востока и Запада. В семидесятых границы начали потихоньку открываться, однако полноценный диалог стал возможен лишь после окончания холодной войны, в 1991 году, когда соперничество наконец уступило место сотрудничеству. Сейчас научные работы выкладываются в интернет, а люди свободно путешествуют по миру. Научное сообщество ощущает себя единым целым; больше никаких противоборствующих лагерей!

В этой главе я расскажу вам две истории и проведу по двум дорогам, которые сойдутся в пункте «P против NP» – там, где Стивен Кук на Западе и Леонид Левин на Востоке первыми поставили вопрос о равенстве P и NP. Научные открытия на пустом месте не возникают, и у работ Левина и Кука была богатая предыстория. Мы с вами коснемся лишь небольшой части масштабных исследований, проводившихся по обе стороны железного занавеса, и узнаем, как на Западе бились над природой эффективных методов вычислений, а на Востоке пытались понять, в каких случаях необходим перебор. В конечном итоге оба пути приведут нас к проблеме равенства P и NP.

На Западе

Поиск эффективных алгоритмов начался около 3000 лет назад, когда люди впервые стали применять арифметику для ускорения процесса сложения больших чисел. Однако наша отправная точка – тридцатые годы прошлого века: именно в этот период зародилась теория алгоритмов.

Алан Тьюринг

Мы освоили космос. Телескопы переносят нас в отдаленные уголки галактики, позволяя изучать историю развития Вселенной. Через микроскопы мы наблюдаем за атомами; мы даже изобрели огромные машины, в которых эти атомы сталкиваются, распадаясь на еще более мелкие частички. А еще мы расшифровали человеческий геном. И все же одну из самых главных загадок представляет собой то небольшое устройство, которым мы ежедневно пользуемся дома, в машине, и даже носим в кармане. Мы называем его компьютером. Так что же это такое?

Слово computer появилось еще в XVII веке. В те времена никому и в голову не приходило изобретать машины, которые бы что-либо вычисляли. Компьютерами, или вычислителями, называли мастеров счета, занимавшихся вычислениями профессионально. С развитием банковской системы на вычислителей «свалились» еще и вклады и кредиты.

Согласно Оксфордскому словарю, для обозначения механического счетного устройства слово computer впервые применили в 1897 году, а для электронного – в сороковых годах прошлого века. Так от людей-вычислителей термин перешел к огромным установкам из нескольких вычислительных машин, а затем и к компьютерам, которыми мы пользуемся сейчас.

Если абстрагироваться от технической части, то задача компьютера – получить входные данные, обработать их согласно заданным инструкциям и выдать некий результат. С этой точки зрения компьютером является даже обычная почта, которая принимает на вход письмо, обрабатывает указанный на нем адрес и доставляет письмо получателю, а также любой живой организм, который обрабатывает последовательность ДНК и производит необходимые для жизни белки.

А как обстоит дело с самим процессом вычисления? Есть ли что-то такое, что вычислению не поддается? Вопрос был решен еще до появления вычислительных машин: в 1936 году ответ на него дал великий математик Алан Тьюринг. Размышляя над тем, как рассуждают математики, Тьюринг пришел к формальной математической модели вычислительного процесса, которая впоследствии стала классической. Теперь ее называют машиной Тьюринга.

Тьюринг родился в 1912 году в Лондоне. В начале тридцатых он поступил в Королевский колледж Кэмбриджа, где показал необыкновенные успехи в математике. Использовав себя в качестве наглядного примера, Тьюринг попытался описать, каким образом математики выполняют вычисления. В голове у ученого происходит некий процесс; его память ограничена, а бумага и ручки имеются в изобилии. Сделав очередную запись, он либо переходит к следующей странице, либо возвращается на предыдущую, чтобы изменить то, что было написано ранее. Формализовав этот интуитивный алгоритм, Тьюринг создал абстрактную модель вычислений.

Машина Тьюринга казалась очень простой, однако, по словам ученого, на ней можно было вычислить все, что вообще поддавалось вычислению. Почти в то же самое время Алонзо Чёрч сделал аналогичное заявление относительно своего лямбда-исчисления, которое считают предшественником языков программирования. Тезис Чёрча – Тьюринга выдержал испытание временем, хотя сформулирован он был еще до изобретения современных компьютеров. Все, что поддается вычислению, вычислимо и на машине Тьюринга; по своим вычислительным возможностям она не уступит любому современному компьютеру, так что о ее чересчур примитивном устройстве можно не беспокоиться.


Рис. 5.1. Машина Тьюринга


Для понимания сути вычислительного процесса вам даже не нужно знать, что это за машина: достаточно взять любой язык программирования и представить, что у него есть доступ к неограниченному объему памяти. Все языки программирования функционально эквивалентны; все, что может быть запрограммировано, вычислимо и на «простенькой» машине Тьюринга.

В том же 1936 году Тьюринг доказал, что не всякую задачу можно решить на его абстрактной машине. Наиболее известный пример – проблема останова: не существует такой вычислительной машины, которая бы по коду программы определяла, остановится она или будет работать бесконечно.

Во время Второй мировой войны Алан Тьюринг был одним из главных «дешифраторов» Великобритании. В послевоенные годы он задался вопросом, можно ли на его машине сымитировать работу человеческого мозга. Ученый разработал тест, призванный определить, способна ли машина рассуждать «по-человечески»; впоследствии этот тест назвали в его честь. Представьте, что вы переписываетесь с кем-то через систему обмена сообщениями. Вы уверены, что вам отвечает человек? А вдруг это просто компьютерная программа? Программа, сумевшая обмануть большинство собеседников, проходит тест Тьюринга.

К несчастью, исследовательская деятельность Тьюринга прервалась очень рано. В 1952 году он был осужден за гомосексуализм, который в те годы считался в Великобритании противозаконным. Случившееся в конечном итоге привело к тому, что в 1954 году Тьюринг покончил жизнь самоубийством. Лишь в 2009-м британское правительство принесло официальные извинения.

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

Вычислительная сложность

В пятидесятых годах цифровые компьютеры распространились уже довольно широко; требовалось как-то оценивать объем вычислений, необходимый для решения той или иной задачи. Первые методы оценки появились в результате попыток формализовать процесс человеческого мышления и поведения.

В 1943 году нейропсихологи Уоррен Маккаллок и Уолтер Питтс разработали нейронную сеть – теоретическую модель, описывающую деятельность человеческого мозга. В пятидесятых годах математик и логик Стивен Клини изобрел конечный автомат – частный случай машины Тьюринга – и изучал свойства разрешимых на нем задач. При помощи конечных автоматов удобно описывать алгоритмы работы простейших агрегатов (к примеру, автомата с газировкой), однако что-то более сложное они уже не потянут.

Примерно в тот же период, в пятидесятых годах, лингвист Ноам Хомский исследовал механизмы построения предложений в английском и некоторых других языках. Он сформулировал понятие контекстно-свободной грамматики, в которой предложениям ставились в соответствие схемы, называемые «деревьями разбора». На рисунке ниже представлено дерево разбора для английского предложения The quick brown fox jumped over the lazy dog.


Рис. 5.2. Дерево разбора


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

Как выяснилось, такие грамматики прекрасно подходят для описания языков программирования и разметки (XML), а вот интуитивное понятие эффективных вычислений им уже не по зубам (как и конечным автоматам).

В последующие годы было создано множество вычислительных моделей, однако настоящий прорыв совершили в 1962 году Юрис Хартманис и Ричард Стернс, работавшие в то время в Исследовательской лаборатории General Electric в Скенектади, штат Нью-Йорк. Для оценки качества работы программы ученые предлагали смотреть, как меняются время ее выполнения и объем задействованной памяти при увеличении объема входных данных. Блестящая идея! В 1965 году вышла их совместная статья «О вычислительной сложности алгоритмов», заложившая основы нового раздела математики – теории сложности вычислений. В 1993 году Хартманис и Стернс получили за эту работу премию Тьюринга.

В 1960-х теория вычислительной сложности развивалась сразу в двух направлениях. Приверженцы одного выбирали конкретные вычислительные модели, ограничивали время исполнения и доступный объем памяти и пытались определить, какие задачи могут быть решены при таких условиях, а какие – не могут. Мануэль Блюм, работая над диссертацией в Массачусетском технологическом институте, использовал иной – совершенно абстрактный – подход, не зависящий ни от вычислительной модели, ни от времени и памяти и каких-либо других ресурсов. Ни один из вариантов не приблизил ученых к понятию вычислительной эффективности.

Классы P и NP

В середине 1960-х формальное определение эффективного алгоритма появилось сразу в двух работах: «Пути, деревья и цветы» Джека Эдмондса и «Внутренняя вычислительная трудность функций» Алана Кобэма.

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

«Необходимо пояснить, что же все-таки понимается под эффективным алгоритмом <…> Я не готов сейчас дать строгое определение и сформулировать какие-то технические требования; вопрос этот находится за рамками данного исследования <…> С практической точки зрения разделять задачи на алгебраические и экспоненциальные гораздо важнее, чем на вычислимые и не вычислимые <…> Введение жесткого критерия могло бы повлечь за собой негативные последствия и помешать развитию алгоритмов, про которые невозможно с уверенностью утверждать, удовлетворяют они данному критерию или нет <…> Важно также понимать, что, принимаясь за поиски хороших, практических алгоритмов, разумно было бы для начала задаться вопросом об их существовании».

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

Кобэм в своей работе независимо от Эдмондса вводит тот же класс задач и приводит аналогичные рассуждения о пользе четкого определения.

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

Понятие класса P, так же как и понятие вычислимости, не зависит от конкретной вычислительной модели.

Кобэм тоже считает своим долгом предупредить:

«Этот вопрос напоминает нам о другом, с которым он теснейшим образом связан: о необходимости формализовать понятие эффективности. Впрочем, в данном случае эффективность следует рассматривать под несколько другим углом, поскольку на первый план здесь выходят физические характеристики вычислительного процесса».

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

В 1971 году Стивен Кук сформулировал понятие класса NP (задачи, решение которых можно эффективно проверить), а также поставил вопрос о равенстве P и NP и нашел первую NP-полную задачу. Годом позже Ричард Карп доказал NP-полноту для целого ряда известных математических проблем.

Выступление Карпа стало самым знаменательным событием на Конференции по вопросам сложности вычислений, проведенной в 1972 году Исследовательским центром IBM имени Томаса Дж. Уотсона. Будущее нового направления активно обсуждалось на итоговом заседании организаторской комиссии. Одной из главных тем был вопрос о том, как из горстки разрозненных результатов – нескольких алгоритмов и нижних оценок сложности – построить единую теорию. Участники заседания, среди которых был и Ричард Карп, вряд ли отдавали себе отчет, что ответ на этот вопрос находится у них перед глазами – в работах Кука и самого Карпа, описывающих классы P и NP, понятие сводимости, а также свойство, которое позже назовут NP-полнотой.

Карп прекрасно понимал, что новой области науки требуется хорошее название:

«Термин „вычислительная сложность“ представляется мне чересчур широким – по крайней мере до тех пор, пока мы не включили сюда работы Блюма и его последователей. „Реальная вычислительная сложность“ подходит больше для какой-нибудь практической, инженерной дисциплины, ну а „сложность компьютерных вычислений“ вообще неверно отражает суть».

В конце концов победило название «вычислительная сложность». Вопрос о равенстве P и NP приобрел огромное значение и быстро затмил все остальные направления исследований в данной области. Абстрактная теория сложности отошла на второй план; даже Блюм переключился на криптографию и верификацию программ. В 1995 году ученый получил премию Тьюринга за свою активную исследовательскую деятельность в 1960–1980-х годах. Когда много лет спустя его спросили, почему он все-таки решил сменить направление, Блюм ответил: «Потому что Кук был прав».

На Востоке

В СССР проблемами теоретической кибернетики занимались многие выдающиеся ученые. Мы подробно остановимся на трех из них; все они являются представителями различных подходов к методу перебора.

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

2. Андрей Николаевич Колмогоров – крупнейший ученый в истории русской науки – предложил в качестве меры сложности алгоритмическую информацию.

3. Ученик Колмогорова Леонид Анатольевич Левин независимо от Кука сформулировал проблему равенства классов P и NP и пришел к понятию NP-полноты. На родине защитить диссертацию он не смог по политическим причинам.

Сергей Всеволодович Яблонский

В Советском Союзе исследования в области теории вычислений проводились в рамках теоретической кибернетики. Активное развитие этой области началось в 1950-х годах, когда электронные вычислительные машины были взяты на вооружение военными. Сергей Яблонский родился в 1924 году в Москве. Вернувшись с фронта после окончания Второй мировой войны, он продолжил изучать математику в Московском государственном университете. В 1953 году Яблонский защитил кандидатскую диссертацию под руководством Петра Сергеевича Новикова, который одним из первых в СССР начал заниматься проблемами вычислимости. Вместе с Алексеем Андреевичем Ляпуновым, также работавшим под руководством Новикова, Яблонский проводил в МГУ семинары по вопросам реализации булевых функций. Яблонский и Ляпунов организовывали и направляли всю исследовательскую деятельность в области теории вычислений.

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

Основатель теории информации – американский ученый Клод Шеннон – доказал, что некоторые логические функции имеют чрезвычайно высокую схемную сложность. Яблонский решил исследовать сложность построения таких функций. Хоть это и не очевидно, но если P и NP окажутся не равны, отсюда будет следовать, что некоторые легко формулируемые поисковые задачи нельзя решить при помощи маленьких схем.

Из результатов Шеннона вытекало, что сложность логических функций, заданных случайным образом, почти всегда близка к максимальной. Яблонский первым обратил внимание на этот факт и начал заниматься вопросом поиска сложных логических функций без использования случайных величин. Возникала ли при этом необходимость полного перебора всех функций? Ученый показал, что во время построения последовательности функций, имеющих сложную схемную реализацию, обязательно будут строиться и все остальные функции. Отсюда, в частности, следовало, что всякий метод построения некоторой сложной функции можно преобразовать таким образом, чтобы он строил любую другую функцию. Из того факта, что при построении сложных функций строятся также и все остальные, Яблонский сделал вывод о необходимости перебора. В 1959 году вышла его работа «О невозможности элиминации перебора всех функций из P2 при решении некоторых задач теории схем».

Важность результатов Яблонского сложно переоценить; и все же интерпретировал он их не совсем верно. Ведь если при построении сложной функции можно получить и любую другую, то это еще не означает, что строить все остальные функции необходимо и другим способом сложную функцию никак не найти. На самом деле в работе Яблонского мало что говорилось о вычислительной сложности поиска самых сложных функций. Годом позже ученик Яблонского Юрий Иванович Журавлёв опубликовал статью с не менее впечатляющим названием – «О невозможности построения минимальных дизъюнктивных нормальных форм функций алгебры логики в одном классе алгоритмов», в которой тема вычислительной сложности также не затрагивалась. По сути ни та ни другая работа не касалась вопросов, связанных с проблемой равенства P и NP.

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

Андрей Николаевич Колмогоров

Андрей Колмогоров родился в 1903 году в Тамбове. В 1920 году он поступил в Московский университет, где поначалу интересовался не только математикой, но и пробовал свои силы и в истории, занимаясь изучением налогообложения на Руси в Средние века. Вопрос в его работе ставился такой: назначался ли налог сразу целому селению или же складывался из налогов, назначенных отдельных дворам? Проанализировав старинные налоговые записи, Колмогоров показал: расшифровать эти записи и объяснить правило, по которому они составлялись, будет гораздо проще в предположении, что налог назначался селению. На историческом отделении работу студента оценили очень высоко. Однако в ответ на вопрос, следует ли ему опубликовать полученные результаты, Колмогоров услышал: «У вашей гипотезы есть лишь одно обоснование. А для публикации требуется как минимум два», что в конечном итоге заставило его отвернуться от истории и посвятить себя науке, в которой одного доказательства было вполне достаточно. Колмогоров внес неоценимый вклад в самые разные области математики; это величайший математик XX века и один из крупнейших ученых в истории всей российской и мировой науки.

Существует забавная история – анекдот, по всей видимости, – о том, как Колмогоров спас теорию вероятностей от сталинского режима.

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

Разобравшись с генетикой, «светочи науки» ополчились на теорию вероятностей за понятие независимых событий. Теория вероятностей занимается изучением шансов на тот или иной исход; к примеру, если одновременно бросить две игральные кости, то вероятность того, что в сумме выпадет пять очков, равняется одной девятой. Через понятие вероятности определяются и независимые события. Например, при подкидывании двух игральных костей число выпавших очков на одной никак не зависит от числа выпавших очков на другой. Все это плохо согласовывалось с марксистской философией, согласно которой все кругом взаимосвязано и взаимообусловлено.

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

Ученый понимал, насколько важно подобрать верные слова: от того, что он скажет, зависит будущее советской математики. «Вы ошибаетесь», – начал он, и его собеседники тут же решили: «Попался!» Ведь критиковать линию партии – все равно что подрывать основы марксистского учения, и для Колмогорова это означало конец карьеры.

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


Рис. 5.3. Комикс про Дилберта. © Скотт Адамс, 2001. Публикуется с разрешения UNIVERSAL UCLICK. Все права защищены


Стремление проникнуть в суть вероятности и случайности привело Колмогорова к одной удивительно простой и в то же время гениальной идее. Рассмотрим три последовательности цифр:

• 999 999 999 999 999 999 999 999 999 999 999 999 999 999 999 999 999;

707 106 781 186 547 524 400 844 362 104 849 039 284 835 937 688 474;

982 922 216 207 267 591 232 795 977 564 268 549 473 337 889 037 097.

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

Выдавать одни девятки для генератора случайных чисел не очень-то естественно. Вторая последовательность, – как некоторые уже, наверно, догадались, – это начало дробной части квадратного корня из 1/2. А вот третья действительно была создана генератором.

Колмогоров придумал определять степень случайности последовательности в зависимости от длины ее самого короткого описания. Первая последовательность – это «51 девятка». Вторая – «1/?2». Описать третью можно, только повторив ее целиком: «982 922 216 207 267 591 232 795 977 564 268 549 473 337 889 037 097». Конечно, «описание» – понятие неформальное; Колмогоров формализовал его через понятие компьютерной программы.

Аналогичные идеи независимо друг от друга и от Колмогорова разработали также двое американских ученых: Рэй Соломонов (из Кливленда, а не из СССР, как можно было бы подумать по его фамилии) – чуть раньше Колмогорова, Грегори Хайтин – чуть позже. Однако Колмогоров и его последователи углубились в эту тему гораздо дальше, так что сложность, определяемую через длину описания, стали называть «колмогоровской».

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

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

982 922 216 207 267 591 232 795 977 564 268 549 473 337 889 037 097

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

За понятием колмогоровской сложности стоит обширная и глубокая теория, которая находит применение в машинном обучении, анализе алгоритмов и в сложности вычислений. Именно колмогоровская сложность привела Леонида Левина – ученика Колмогорова – к проблеме равенства P и NP, хоть она и не связана с этой проблемой напрямую.

Леонид Анатольевич Левин

В 2800 километрах к востоку от Москвы находится Новосибирск – самый крупный город в Сибири и третий по численности во всей России. В 1961 году из Москвы в Новосибирск приехал Алексей Андреевич Ляпунов и вскоре основал в Новосибирском университете кафедру теоретической кибернетики.

Первыми сотрудниками стали преимущественно бывшие московские студенты Яблонского и самого Ляпунова. Новая кафедра быстро приобрела статус центра кибернетических исследований – второго по значимости в Советском Союзе. Почти сразу к исследовательскому коллективу присоединился Борис Трахтенброт, который также занимался кибернетикой и на тот момент – в сорок с небольшим лет – уже был доктором наук; вскоре Трахтенброт стал одним из ведущих сотрудников кафедры. В 1962 году в Новосибирск приехал Ян Мартынович Барздинь, незадолго до того защитивший кандидатскую в Латвийском государственном университете в Риге. Трахтенброт и Барздинь начали совместные исследования в области сложности вычислений и привлекли к работе множество российских и латышских студентов. В середине шестидесятых ученые уже вовсю разрабатывали теорию алгоритмической сложности – аналогичную той, что в то же самое время создавалась на Западе.

Впрочем, в СССР с вычислительной сложностью все было довольно сложно. В 1984 году Трахтенброт напишет:

«Напряженность в отношениях с представителями так называемой классической школы – и в особенности с Яблонским – нас очень угнетала. Эти люди занимали крайне негативную позицию касательно применения теории алгоритмов к вопросам сложности <…> Они не допускали и мысли о том, что вычислительную и алгоритмическую сложность можно связать с проблемой перебора. Яблонский к тому времени играл уже далеко не последнюю роль в различных организациях, занимавшихся планированием и контролем математических исследований; в дальнейшем наше противостояние только усилилось – по всей видимости, из-за разногласий по поводу необходимости перебора»[4].

Летом 1963 года в Новосибирск приехал Колмогоров и начал совместные исследования с Трахтенбротом. Ученые пытались понять, каким образом теория алгоритмов может помочь им продвинуться в изучении сложности и информации.

Из Новосибирска Колмогоров вскоре отправился в Киев, где посетил физико-математическую школу-интернат при Киевском университете. Ученый предложил школьникам несколько задач; пятнадцатилетний Леонид Левин справился почти со всеми. Позже Колмогоров пригласил его в Московский университет и взял под свое руководство. Во время учебы в аспирантуре Левин разрабатывал сразу два разных направления.

В рамках одного из них был создан оптимальный алгоритм поиска. Допустим, Элис говорит Бобу, что придумала быстрый алгоритм для задачи о клике, но отказывается его показать. Применив метод Левина, Боб сможет сам создать почти такой же быстрый алгоритм – и для этого ему не нужно будет знать, что написала Элис. В работе Левина используется модифицированный вариант колмогоровской сложности; его оптимальный алгоритм особым образом запускает все возможные алгоритмы, проверяя, дают ли они нужное решение.

Размышляя о задачах поиска и проблеме перебора, Левин пришел к понятию универсальной переборной задачи, которое было эквивалентно понятию NP-полной задачи, введенному Куком. Ученый рассмотрел шесть переборных задач, включая выполнимость, и показал их универсальность, а также сформулировал проблему равенства классов P и NP.

Блестящие результаты! И второй, безусловно, достоин награды; Стивен Кук за аналогичные достижения получил премию Тьюринга. Колмогоров, однако, счел работы Левина несколько сырыми и настоял на том, чтобы вместе довести их «до кондиции». В те годы в Советском Союзе было принято сокращать публикуемые статьи, опуская подробности доказательств. Следуя этому правилу, Левин сократил текст по максимуму и уместил все свои исследования в каких-то две страницы.

Вскоре Левин представил кандидатскую диссертацию; предыдущие работы он в нее включать не стал. Вся советская молодежь тогда состояла в комсомоле – молодежной организации Коммунистической партии. Независимый и свободомыслящий Левин открыто саботировал комсомольские мероприятия, не осознавая, вероятно, к чему это может привести. В конце концов его диссертацию не приняли по причине «неопределенности политического облика».

Политическая травля Левина не прекращалась. В 1978 году ему удалось эмигрировать в Соединенные Штаты. Альберт Мейер из Массачусетского технологического института стал его научным руководителем; спустя год Левину присудили степень доктора философии – за выдающиеся результаты, полученные еще в Советском Союзе. В настоящее время Левин – профессор Бостонского университета.

В Соединенных Штатах об исследованиях Левина узнали в середине семидесятых, когда проблема равенства P и NP уже широко обсуждалась в научных кругах. Левину не пришлось разделить с Куком премию Тьюринга, которую тот получил в 1982 году; и все-таки основной результат касательно NP-полноты со временем стали называть теоремой Кука–Левина – правда, произошло это уже ближе к девяностым.

Потепление в отношениях между СССР и США началось в 1980-х. В седьмой главе мы поговорим о попытках разработать методы для доказательства неравенства P и NP, опирающиеся на теорию сложности схем; ведущую роль в этих разработках сыграл советский и российский математик Александр Разборов, бывший в ту пору студентом.

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

Письмо Гёделя

В 1956 году Курт Гёдель написал письмо Джону фон Нейману – пионеру в информатике и многих других областях науки. В письме Гёдель на немецком языке рассуждал о проблеме выполнимости и о вопросе равенства классов P и NP, только формулировал он этот вопрос в несколько иных терминах. По словам ученого, если бы мы жили в мире, в котором P = NP, то «математикам более не пришлось бы тратить время на задачи типа „да-нет“: этот труд за них выполняли бы машины <…> Впрочем, я уже перестал относить эту возможность к области несбыточного». Идеи Гёделя на пятнадцать лет опередили работы Левина и Кука.

Получил ли фон Нейман то письмо? Ответил ли он Гёделю? Мы этого не знаем; на тот момент фон Нейман уже был болен раком, и в 1957 году его не стало. О письме научное сообщество узнало лишь в конце восьмидесятых, когда за вопросом о равенстве P и NP уже прочно закрепился статус одной из центральных открытых научных проблем. Сам Гёдель умер в 1978 году; душевное расстройство, омрачившее последние годы его жизни, помешало ученому понять, что Кук в своей работе поднял тот же вопрос.

Так почему бы не назвать вопрос «проблемой Гёделя»? Почему не признать за Гёделем приоритет? Ведь он пришел к нему намного раньше, чем Кук и Левин! К сожалению, – или, возможно, к счастью, – в науке действует тот же принцип, что и в мореплавании: Христофор Колумб прославился не потому, что первым открыл Америку, а потому, что открыл ее последним. Впрочем, Гёдель тут и сам, как говорится, дал маху: не осознавая значимость поднятых в письме к фон Нейману вопросов, ученый никогда не публиковал свои идеи. Если смотреть на публикации, то первыми проблему равенства P и NP сформулировали все-таки Кук и Левин.

В 1993 году научное сообщество, отдавая дань Гёделю за его фундаментальный вклад в логику и высказанные в письме идеи, учредило премию в его честь. Премией Гёделя отмечают недавно появившиеся работы в области теоретической информатики.

Правило марсианина

Как узнать, какое понятие в науке – естественное, подсказанное самой природой, а какое – искусственный продукт деятельности человеческого разума? Представьте, что на Марсе обнаружили цивилизацию, которая находится примерно на таком же уровне развития, что и наша. Если для некоторого земного понятия существует марсианский аналог, полностью идентичный или хотя бы схожий по смыслу, значит, это понятие естественное, поскольку происходит из двух независимых источников.

Понятно, что цивилизации на Марсе нет и сравнивать нам там себя на самом деле не с кем, но мы ведь можем подключить воображение! Допустим, у марсиан имеется машина Экзигия – вычислительная модель, отличная от машины Тьюринга, но обладающая абсолютно теми же возможностями. Марсианский вариант тезиса Чёрча – Тьюринга гласит: все, что можно вычислить, вычислимо и на машине Экзигия. Значит, понятие вычислимости естественно, а вот понятие машины Тьюринга – нет.

В случае с классами P и NP можно обойтись без марсиан. Советские и американские математики практически не имели возможности общаться; они параллельно проделали одну и ту же работу и независимо сформулировали проблему равенства P и NP и понятие NP-полноты. Мотивы были разными: на Западе разбирались с вычислительной эффективностью, на Востоке – с необходимостью перебора; в результате обе стороны пришли туда же, куда и Курт Гёдель, опередивший их на пятнадцать лет.

Точно так же и марсиане – если бы они, конечно, существовали – могли бы прийти к проблеме равенства P и NP или чему-то подобному и отнести ее к разряду важных и естественных.

Глава 6. Преодолевая трудности

Во второй главе мы с вами побывали в идеальном мире. Равенство P и NP сделало нашу жизнь прекрасной и удивительной. Исследовать можно было все. Оптимизировать – тоже. Машины умели выполнять почти все мыслимые и немыслимые операции. Прекрасно, волшебно, пугающе… и, скорее всего, нереально.

На самом деле мир наверняка далек от совершенства – этакая «неэлегантная вселенная», в которой P и NP не равны. Во всяком случае, именно в таком мире мы будем жить до тех пор, пока не найдем эффективный алгоритм для решения задач из NP. Но что же делать, если мы не можем эффективно решить какую-то задачу? Оставить на потом?

К сожалению, некоторые трудные задачи нельзя так просто взять и отмести. Гарри работает планировщиком на производственном предприятии «Рога и копыта». Его босс Эми поручает ему настроить линию на сборку последней модели мобильного телефона «Эйфон» и минимизировать при этом время сборки. Гарри читал предыдущие главы нашей книги, поэтому смело отвечает: «Извините, но эта задача NP-полная. Если даже известные ученые считают, что быстрого решения нет, то что уж мне пытаться? Я лучше в боулинг пойду поиграю». На что Эми разрешает ему веселиться хоть до утра, поскольку в «Рогах и копытах» он больше не работает.

На место Гарри в срочном порядке наняли Джорджа. К счастью для себя, Джордж читал эту главу и потому сумел настроить линию на производство «Эйфонов». Неужели он изобрел гениальный алгоритм, который всегда оптимально распределяет подзадачи? Нет. Но с работой он все-таки справился? Безусловно.

NP-полные задачи «приручить» не так-то просто. Если P ? NP, то мы никогда и ни для одной из них не найдем хороший, быстрый алгоритм, который бы во всех случаях выдавал наилучшее решение. Впрочем, это вовсе не значит, что сделать ничего нельзя. В данной главе мы рассмотрим несколько подходов к решению трудных задач.

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

Иногда NP-полная задача упорно не желает поддаваться. Что с ней делать? Перейти к другой NP-полной задаче. Или взять и плюнуть на все, потому что есть дела и поважнее.

Полный перебор

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

Однако раньше все было совсем по-другому. В 1971 году, когда Стивен Кук поднял вопрос о равенстве P и NP, компания Intel выпустила микропроцессор Intel 4004 – первый полноценный центральный процессор, который уместился на одном кристалле и стал доступным для потребителей. Intel 4004 мог выполнять 92000 операций в секунду и для того времени был очень скоростным.

Возьмем для примера подробно разобранную Куком задачу о выполнимости и рассмотрим случай с двадцатью переменными. Применим к ней простейший алгоритм, который методично перебирает все возможные комбинации значений переменных, устанавливая их в TRUE или FALSE. Если предположить, что на обработку одной комбинации уходит 100 шагов, то выполнимость всей формулы будет проверяться примерно 19 минут. Долго, конечно, но ведь могло быть и хуже! Однако проблема в том, что с двадцатью переменными каши особо не сваришь.

Двадцать пять переменных обрабатывались бы примерно 10 часов. Тридцать – чуть больше 13 суток. Ну а с сорока переменными мы бы ждали с 1971-го года по 2009-й.

Сейчас Intel каждый год выпускает несколько новых моделей процессоров. Рассмотрим, к примеру, появившийся в 2009-м Intel i7–870, который мог выполнять 2,93 миллиарда операций в секунду – в 30000 раз больше, чем Intel 4004. С сорока переменными он справился бы часов за десять, так что в 1971-м быстрее было бы просто подождать 38 лет и воспользоваться технологиями 2009-го.

Для некоторых NP-полных задач можно привести и более впечатляющие примеры. Возьмем задачу о коммивояжере, который ищет кратчайший маршрут, проходящий через максимально возможное число городов. Применяя метод секущих плоскостей, мы легко найдем решение даже для 10000 городов. На рисунке ниже представлено решение для 13509 населенных пунктов с населением от 500 человек.

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

Современные микросхемы работают почти на пределе физических возможностей. Впрочем, число транзисторов на одном кристалле неизменно увеличивается, так что производительность компьютеров пока продолжает расти с той же бешеной скоростью, подтверждая закон Мура. Когда-нибудь мы наверняка научимся решать NP-полные задачи гораздо большего размера. Однако при увеличении размера входа трудоемкость задачи также сильно возрастает, поэтому не стоит ждать, что уже в ближайшем будущем мы сможем быстро проверять выполнимость для 150 переменных или находить коммивояжеру оптимальный маршрут на 20000 городов.


Рис. 6.1. Коммивояжер: города с населением более 500 человек


Эвристические методы

Когда английскому плотнику XVII века требовалось прикинуть расстояние в дюймах, он ориентировался на ширину своего большого пальца. Вероятно, отсюда и пошло так называемое правило большого пальца – простой и неточный, но вполне приемлемый метод решения того или иного вопроса. К примеру, поговорка «Красный закат – моряк, веселись! Красный рассвет – моряк, берегись!» дает нам примитивный, но достаточно надежный метод предсказания погоды. А закон Мура грубо оценивает рост мощности компьютеров.

Любой вычислительный алгоритм – это тоже метод решения какого-либо вопроса. Эвристические алгоритмы работают подобно правилу большого пальца: иногда они ошибаются, однако в большинстве случаев находят верное решение. Для NP-полных задач такие алгоритмы начали появляться задолго до того, как об их NP-полноте стало известно. За последние десятилетия сложными эвристическими методами «обзавелось» огромное множество трудоемких задач. Ни один из этих методов не является универсальным и не годится для всех случаев сразу, однако в общем и целом они со своей работой справляются.


Рис. 6.2. Карта Соединенных Штатов


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

Неваду окружает кольцо из пяти штатов: Калифорния, Орегон, Айдахо, Юта и Аризона. Для раскраски всех штатов кольца требуется не меньше трех цветов; Невада имеет с ними общие границы, так что для нее придется добавить четвертый. Другие штаты также образуют подобные кольца: к примеру, штат Кентукки окружают Теннесси, Вирджиния, Западная Вирджиния, Огайо, Индиана, Иллинойс и Миссури. Здесь нам тоже, как и в случае с Невадой, понадобится три цвета для кольца и четвертый для Кентукки.

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

На рисунке ниже представлена карта областей Армении.

Всего две из них целиком лежат внутри страны. Котайк окружен шестью областями, а столица Ереван – четырьмя. Эвристический метод говорит нам, что если все внутренние регионы имеют четное число соседей, то для раскраски карты хватит трех цветов. И мы видим, что для Армении так и получается.

Швейцарию окружает нечетное число соседей – пять. Это Франция, Италия, Австрия, Лихтенштейн и Германия. Несмотря на это, карту на рис. 6.5 тоже можно раскрасить в три цвета.

Дело в том, что Лихтенштейн вклинился между Швейцарией и Австрией и разбил их общую границу на две, поэтому Австрию нужно учитывать дважды. Оказывается, важно не количество соседних государств, а количество общих границ; у Швейцарии их шесть, а шесть – число четное. Заметим, что считаются только внешние границы, и страны, целиком лежащие внутри другого государства, не учитываются вообще (например, Ватикан внутри Италии).


Рис. 6.3. Армения


Если бы наш эвристический метод всегда выдавал верное решение, это означало бы, что для раскраски в три цвета существует эффективный алгоритм, а поскольку задача раскраски NP-полна, то и для всех остальных NP-задач тоже существует эффективный алгоритм, поэтому P = NP. Думаю, вы уже догадались, что иногда у него случаются проколы?

Эвристический метод имеет ровно два исключения.

1. На карте имеется озеро, по которому проходит граница между регионами. Например, озеро Мичиган отделяет Иллинойс от штата Мичиган.


Рис. 6.4. Раскраска Армении


2. Четыре или более регионов встречаются в одной точке. Например, Аризона, Нью-Мексико, Колорадо и Юта.

Впрочем, в случае с США исключения роли не играют, поскольку мы и так уже знаем, что цветов нужно четыре (не считая, разумеется, синего для озер).

В реальной жизни этот эвристический метод почти не ошибается. Ну а как он справится с картой воображаемого Королевства, на которой у любой провинции четное число соседей (четыре), и которую, однако, невозможно правильно раскрасить в три цвета (не считая, опять же, синего для озер)?


Рис. 6.5. Швейцария


Рис. 6.6. Раскраска Швейцарии


Каждая из одиннадцати провинций граничит ровно с четырьмя другими, при этом в ее «окружении» обязательно имеется озеро. Наш метод говорит, что карту Королевства можно правильно раскрасить в три цвета; однако он ошибается, поскольку при наличии лишь трех цветов какие-нибудь две провинции непременно окажутся одинаково окрашены.


Рис. 6.7. Карта Королевства заклятых друзей


Международная конференция The International Conference on Theory and Applications of Satisfiability Testing стремится охватить все аспекты проблемы выполнимости. Особое внимание уделяется хорошим эвристическим алгоритмам. В рамках конференции проводится конкурс SAT Race, в котором участвуют компьютерные программы по решению SAT-задач. Задачи для конкурса могут быть сгенерированы случайным образом, позаимствованы из различных областей науки и техники или же сконструированы специально с таким расчетом, чтобы решить их было крайне трудно. Многие программы-участники успешно справляются с задачами на миллион переменных.

Эвристические алгоритмы не всегда способны выдать правильный ответ, и на конкурсе SAT Race их оценки далеки от высшего балла. Тем не менее они нередко умудряются решать задачи гигантских размеров – благодаря различным хитростям и невероятно высокой производительности современных компьютеров.

Иголка в стоге сена

Предположим, мы ищем клику из трех человек среди всех 20000 жителей Королевства. По самым грубым подсчетам нужно проверить чуть больше триллиона вариантов – сущая ерунда для любого современного компьютера. Однако дальше варианты начинают размножаться с космической скоростью, перед которой компьютеры очень быстро пасуют: для клики размера четыре требуется уже 6 квадриллионов проверок, для клики размера пять – 26 квинтиллионов, а для клики размера шесть – 88 секстиллионов (т. е. 88 и 21 ноль).

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


Рис. 6.8. Дружеские связи


На представленной выше диаграмме Боб, Даниэль, Фрэнк и Гарри образуют очень приятную группу, поскольку все дружеские связи (линии на схеме) завязаны на них.


Рис. 6.9. Очень приятная группа размера четыре


А вот очень приятную группу размера три составить уже не получится. Например, если взять Элис, Чарли и Фрэнка – потеряются дружеские связи Ева – Даниэль и Джордж – Гарри.

Задача поиска очень приятной группы, более известная под официальным названием «задача о вершинном покрытии», принадлежит к «старой гвардии» и упоминается еще в списке NP-полных задач Карпа.

Давайте взглянем на дружеские связи Фрэнка. Если Фрэнк не является членом очень приятной группы, то тогда в нее должны входить Джордж, Даниэль и Ева, поскольку все они с Фрэнком друзья. Каждая очень приятная группа обязательно содержит либо Фрэнка, либо всех его друзей – даже если их не три, а целых сто.

При помощи подобных хитростей можно избежать полного перебора всех потенциальных вариантов при поиске небольших очень приятных групп. Для группы размера пять понадобится около 100000 проверок, для группы размера 10–200000 проверок, а для группы размера 30–601000 проверок; любой ноутбук справится с такой задачей за считаные доли секунды. Поиск очень приятной группы размера 113 потребует проверки триллиона вариантов и будет длиться не дольше, чем поиск клики из каких-то несчастных трех человек.


Рис. 6.10. Не очень приятная группа размера 3


Стоп. Выходит, очень приятные группы искать не так уж сложно? Но разве Карп не доказал, что поиск очень приятной группы минимального размера (т. е. минимального вершинного покрытия) – задача NP-полная? Дело в том, что у жителей Королевства друзей обычно очень много. Маловероятно, что все дружеские связи завязаны лишь на 113 жителях. А как только мы замахнемся на группы побольше, число вариантов тут же резко возрастет.

Например, для группы размера 150 потребуется уже 1,5 квадриллиона проверок, для группы размера 200 – более секстиллиона, а для группы размера 500 – примерно 38 сексдециллионов (т. е. 38 и 51 ноль). Поиск очень приятной группы минимального размера – задача практически неразрешимая. А вот если нам просто нужно убедиться, что в Королевстве не существует очень приятной группы размера сто, мы получим ответ за разумное время.

Приближенные методы

Оптимальное решение получается найти далеко не всегда. Очень часто, однако, не самое лучшее решение оказывается вполне удовлетворительным.

Давайте снова обратимся к NP-полной задаче коммивояжера, в которой требуется проложить кратчайший маршрут через заданные города.

Предположим, вы хотите объехать 50 городов. Вам известно, что длина кратчайшего маршрута – 2800000 км. Если вы составите маршрут в 2810000 км, то вряд ли станете надрываться дальше из-за каких-то лишних 10000 км.

С другой стороны, если дорога обходится вам в доллар за километр, и за весь вояж вам заплатят 2805000 долларов, разница будет очень заметна: вы либо заработаете 5000 долларов (уложившись в 2800000 км), либо потеряете (удовлетворившись маршрутом в 2810000 км). Сократите длину пути до 2803000 км – и окажетесь в плюсе, хотя ваш маршрут не будет оптимальным.

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

На рисунке ниже вы видите карту Китая, на которой отмечено 71009 городов.

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


Рис. 6.11. Карта Китая


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

Если бы все NP-задачи решались приближенными методами настолько замечательно, поднимать вопрос о равенстве или неравенстве P и NP не имело бы особого смысла. Однако в действительности дела обстоят не так уж радужно. Рассмотрим, к примеру, задачу о клике – большой группе людей, в которой все между собой дружны. В общем случае алгоритмы поиска максимальной клики не дают нам хорошего приближения. За разумное время мы вряд ли доберемся даже до клики размера 15; а вдруг в Королевстве есть клика из 2000 жителей?

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


Рис. 6.12. Сетка на карте Китая


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

Мы с вами разобрали тривиальный случай, в котором можно методично перебрать все варианты и убедиться, что минимальная очень приятная группа состоит из четырех человек: Фрэнк, Даниэль, Гарри и Боб. Теперь предположим, что ответ нам неизвестен, и рассмотрим простой приближенный алгоритм поиска очень приятной группы минимального размера.

На первом шаге выберем любых двух друзей и отметим их; пусть это будут Элис и Гарри.

Теперь выберем еще двух друзей, ни один из которых пока не отмечен, и тоже их отметим.

Повторяем до тех пор, пока у нас имеются неотмеченные друзья.

В итоге все те, кого мы отметили, составят очень приятную группу.


Рис. 6.13. Дружеские связи – II


Рис. 6.14. Поиск очень приятной группы – II: шаг 1


Рис. 6.15. Поиск очень приятной группы – II: шаг 2


Рис. 6.16. Очень приятная группа размера шесть


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

Алгоритм подойдет для любой схемы дружеских связей. Если он, к примеру, отберет 50 дружеских пар и построит очень приятную группу из 100 человек, мы будем знать, что минимальный размер группы – от 50 до 100.

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

Если P равно NP, то мы сможем отыскать минимальную очень приятную группу быстро и эффективно. А если не равно? Тогда в общем случае мы будем получать лишь группы, размер которых превышает минимальный более чем на 36 процентов. Любой алгоритм, гарантирующий превышение ровно в 36 процентов или менее, можно преобразовать таким образом, чтобы он решал произвольную NP-полную задачу. Возможность этого преобразования основывается на целом ряде важных и серьезных результатов, полученных в период между 1990 и 2005 годами.

Рассмотренный выше простейший алгоритм последовательного отбора дружеских пар позволяет получить очень приятную группу, размер которой превышает минимальный не более чем в два раза (т. е. не более чем на 100 процентов). Если P ? NP, то мечтать о превышении меньше чем в 36 процентов смысла вообще не имеет. Но, может, удастся создать алгоритм, гарантирующий хотя бы 50-процентное превышение?

В поисках ответа на этот и другие вопросы индийский математик Субхаш Кхот разработал свои «уникальные игры» – модификацию задачи о раскраске карт, в которой для раскраски соседних государств вводятся дополнительные правила. Кхот выдвинул гипотезу, что задача об уникальных играх является NP-полной. Так это или нет – пока никто не знает.

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

Другая задача

Когда не помогают даже самые хитрые трюки, можно вместо одной NP-задачи попытаться решить другую.

Ресторан «У Тьюринга» в местечке Пало-Альто всегда следует новейшим кулинарным течениям. Последний писк – вычислительная гастрономия, которую уже подхватили все модные рестораны в округе. Когда шеф-повар Джейн загорелась идеей создать новый соус для своей знаменитой макаронной запеканки, она не стала экспериментировать на кухне, а просто ввела в компьютер основные характеристики будущего блюда, в частности – цвет, вкус, запах и консистенцию. От программы требовалось подобрать наилучшее сочетание ингредиентов и способ приготовления и при этом обеспечить заданный уровень вкусовых ощущений, а также минимизировать расходы и число калорий. Джейн попросила сконструировать ей густой красный соус с уровнем остроты 5, консистенцией чуть более однородной, чем овсянка, и качеством вкуса от 5 до 11; соус должен был хорошо сочетаться с запеканкой не забивать своим вкусом все остальное.

К сожалению, компьютер не сумел так подобрать ингредиенты, чтобы все заданные условия выполнялись. Тогда Джейн обратилась к местному компьютерному гению Тому, который периодически помогал ей, получая взамен скидки на еду. Том испробовал все известные ему эвристические алгоритмы и нашел в интернете несколько новых. Потом арендовал виртуальный сервер на Amazon, чтобы увеличить вычислительную мощность, и какое-то время витал в облаках. Ничто не помогало; отчаявшись найти решение самостоятельно, он обратился к друзьям из Силиконовой долины. Тому, кто первым подберет ингредиенты для соуса, Том обещал драгоценную бронь в ресторане «У Тьюринга». Однако через неделю сдались и «силиконщики»: было ясно, что задача им не по зубам.

Том отправился в ресторан, чтобы сообщить плохие новости. Это был его первый провал: до сих пор ему всегда удавалось помочь Джейн с рецептом. «Мы можем хоть немного изменить условия задачи? Требования ко вкусу, например? – поинтересовался он. – Иначе никакого соуса не будет». В ответ Джейн заявила, что ничего менять нельзя и что вкус и консистенция должны быть в точности такими, как она просила, – в противном случае блюдо будет безнадежно испорчено. «А как насчет самой запеканки?» – осенило Тома.

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

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

Смарт-карта – это примерно то же, что кредитка с чипом. Там есть микропроцессор и память, которая хранит секретный код. Смарт-карты можно применять для идентификации личности; на них также можно класть деньги, чтобы совершать покупки в магазине или, к примеру, платить за парковку, не устанавливая при этом соединение с сервером. Даже если данные, отправленные или полученные картой, будут перехвачены, расшифровать их без знания секретного кода вряд ли удастся.

Допустим, некий Томас из обслуживающего персонала отеля позаимствовал смарт-карту Энни, пока та плавала в бассейне. У Томаса есть специальный кардридер, который посылает карте определенные данные и анализирует ее ответ. Если P окажется равно NP, то такой кардридер будет быстро подбирать секретный ключ, и смарт-карты станут совершенно бесполезны. Но пока мы с вами живем в мире, где P и NP не равны, так что поиск ключа представляет собой задачу огромной вычислительной трудности. Протоколы для смарт-карт специально разрабатывают таким образом, чтобы у методов, описанных в этой главе, не осталось ни единого шанса, будь то грубый поиск или хитрый эвристический алгоритм. Обычный мошенник, потерпев неудачу, просто возвратил бы Энни ее карту, а если бы Энни обнаружила пропажу раньше, то позвонила бы в банк и попросила эту карту заблокировать.

Наш Томас не принадлежит к разряду стандартных «похитителей личности». В его арсенале есть разные приемчики, о которых разработчики смарт-карт даже не догадываются. Для начала он на несколько секунд помещает карту в микроволновку. Не пытайтесь повторить этот трюк: электромагнитные волны могут привести вашу карту (а также любой другой предмет с чипом внутри) в полную негодность. Секундное воздействие способно вызвать замыкание электрических цепей; если карта и останется жива, то она наверняка время от времени будет вести себя нестандартно.

А нестандартное поведение – это как раз то, что требуется Томасу: он не сможет подобрать секретный код, если карта работает как надо. Поврежденная (в меру) карта продолжает реагировать на запросы, вот только реакции ее уже могут быть не те, что прежде.

Поведение испорченной карты по-прежнему зависит от секретного ключа – но уже не так, как задумали разработчики, стремившиеся усложнить подбор ключа по максимуму. Теперь у Томаса есть шанс, и в надежде подобрать секретный ключ он будет применять все известные ему алгоритмы.

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

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

Время смириться

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

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

Для превращения мечты в реальность оставалось лишь обзавестись достаточным количеством необходимых ингредиентов. Проблема была в том, что после недавнего инцидента ему был вынесен судебный запрет на покупку химикатов. Не имея возможности официально обратиться в специализированную фирму, Ричард придумал использовать предметы домашнего обихода и экстрагировать из них требуемые вещества. Он составил внушительный перечень подходящих комбинаций товаров и ввел в компьютер множество параметров – цены, максимальное количество товара, которое, не навлекая подозрений, можно заказать за один раз, адреса двадцати «Волмартов» и четырнадцати «Таргетов» в Цинциннати и окрестностях, а также стоимость доставки и аренды складов (ясно было, что склад понадобится, причем точно не один). Вдобавок от компьютера требовалось минимизировать время и расходы. К огромному огорчению Ричарда, потенциальных вариантов оказалось слишком много, и проверить их все было совершенно нереально. Ричард чувствовал, что решение где-то рядом; он перепробовал все найденные в интернете алгоритмы, однако ни приближенные методы, ни эвристические не приблизили его к заветной цели ни на шаг. В конце концов он все же сдался и вернулся к основной работе – охранником на фабрике по производству зубной пасты.

Так благодаря особо трудной NP-задаче был спасен Цинциннати.

Весь боевой арсенал

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

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

Глава 7. Как доказать, что P ? NP

Юрис Хартманис, один из основоположников теории вычислительной сложности, любит повторять: «Все знают, что они не равны, а доказать не могут».

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

Для математиков вопрос о равенстве классов превратился в настоящий вызов. С тех пор как Кук, Карп и Левин сформулировали проблему и показали ее важность, ученые во всем мире пытаются найти строгое математическое доказательство равенства – или неравенства – P и NP. Классические методы давно потерпели поражение; еще к концу семидесятых в математическом сообществе сложилось мнение, что для решения данной проблемы, по всей видимости, требуется особый, принципиально новый подход.

Последующие десятилетия ознаменовались невероятными успехами в математике и кибернетике; удалось разрешить даже одну из самых знаменитых математических проблем – Великую теорему Ферма.

В 1637 году француз Пьер де Ферма, математик-любитель и юрист по профессии, сделал на полях своей древнегреческой «Арифметики» следующее замечание:

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


Рис. 7.1. Комикс про Дилберта. © Скотт Адамс, 1997. Публикуется с разрешения UNIVERSAL UCLICK. Все права защищены


Другими словами, не существует таких натуральных чисел a, b, c и такого натурального n > 2, что an + bn = cn. Ученый больше нигде не упоминает об этом доказательстве; вполне возможно, что строгое математическое обоснование он так и не придумал. Постепенно теорема приобрела широкую известность и пополнила ряды классических «нерешаемых» математических задач. Знаменитую теорему мечтали доказать даже дети. Один из таких мечтателей (среди которых был и я), став взрослым, превратил мечту в реальность. В 1994 году Эндрю Уайлс из Принстонского университета представил доказательство, основанное на целом ряде работ по теории чисел, и в один миг стал знаменитым – насколько вообще бывают знаменитыми математики.

Здесь вы не найдете ключ к решению вопроса «P против NP», иначе это была бы совсем другая книга. Цель данной главы – познакомить вас с некоторыми идеями и методами, разработанными в попытке доказать неравенство P и NP. К сожалению, ни одна из этих идей не приблизила математиков к решению проблемы. По сути, для доказательства неравенства необходимо показать, что некоторые задачи из класса NP не могут быть эффективно решены ни одним из известных – а также неизвестных – алгоритмов. Вообще доказать неосуществимость чего-либо крайне трудно, однако нельзя утверждать, что это невозможно логически. Шансы у нас есть; будем надеяться, что когда-нибудь эту проблему – вероятно, наиболее трудную и важную среди всех математических проблем, – все-таки решат.

Парадокс лжеца

Давайте рассмотрим одно загадочное утверждение.


Рис. 7.2. Утверждение


Оно истинно или ложно, как вам кажется? Если оно ложно, значит, неверно то, что оно ложно, а значит, оно истинно. Но если оно истинно – значит, верно то, что оно ложно. С какой стороны ни зайди, получишь противоречие. Этот парадокс получил название «парадокс лжеца». Сейчас я лгу. Ну как – солгал я или нет?

В математике не бывает настоящих парадоксов: бывают лишь некомпетентные математики. Утверждение «Это утверждение ложно» некорректно с математической точки зрения, поскольку оно оценивает собственную истинность.

В 1930 году Курт Гёдель пришел к выводу, что о математических доказательствах можно рассуждать на языке самой математики и что высказывания о возможности доказательства того или иного утверждения также могут быть записаны в виде формальных математических утверждений. Ученый изобрел высказывание, которое говорит о возможности собственного доказательства, и сформулировал его на языке математики. Вот оно:


Рис. 7.3. Утверждение о возможности доказательства


Похоже на предыдущее, правда? Предположим, что оно ложно. Тогда его можно доказать, а следовательно, оно истинно. Но это противоречит первоначальному предположению о том, что оно ложно; значит, оно истинно.

Что, опять парадокс? Вообще-то нет: высказывание истинно, вот только это не докажешь. Так Гёдель одним махом пошатнул все фундаментальные основы математики: оказывается, некоторые истинные утверждения невозможно доказать[5]!

Допустим, знакомый говорит вам, что у него есть волшебная шкатулка, которая предсказывает будущее. Попросите его поинтересоваться у этой шкатулки, какой рукой вы его ударите – правой или левой? Если шкатулка ответит «левой», ударьте правой, а если «правой» – ударьте левой. Шкатулка ошибется в любом случае.

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

Начнем с простого наблюдения: программа – это набор данных. Такой же, как, к примеру, файл Word или Excel. Поэтому одна программа вполне может проанализировать код другой программы. Впервые подобная мысль была высказана Аланом Тьюрингом в его знаменитой работе 1936 года, заложившей основы теоретической информатики.

Любая компьютерная программа либо остановится и выдаст некий результат, либо будет работать бесконечно. Допустим, у нас есть алгоритм, который определяет, останавливается программа или нет. Применим его к самому себе и создадим программу, представленную на рисунке ниже.

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


Рис. 7.4. Программа


А нельзя ли примерно таким же способом доказать, что некоторые задачи не могут быть решены эффективно, т. е. не принадлежат классу P, в котором для любой задачи существует эффективный алгоритм? Конечно же, можно!

Для начала определим алгоритм Q, который принимает на вход код программы R и решает следующую задачу:

• Если программа R, получив на вход свой собственный код, за полиномиальное время выдает ответ «Да», ответить «Нет».

• В противном случае ответить «Да».

Теперь возьмем произвольный эффективный алгоритм S. Очевидно, что Q(S) ответит «Да» в том и только в том случае, когда S(S) ответит «Нет», а это значит, что ни один эффективный алгоритм никогда не совпадет с алгоритмом Q.

Несмотря на это, алгоритм Q вполне корректный, и задача, которую он выполняет, разрешима, – вот только за полиномиальное время с ней не справиться.

Раз Q не принадлежит классу P, тогда, если бы мы доказали, что Q лежит в NP, т. е. любое заданное решение быстро проверяется, это означало бы, что P ? NP, и проблема тысячелетия была бы решена.

Никто не знает, принадлежит ли Q классу NP; на самом деле это очень мало вероятно. По этой причине (а также по ряду других) любой «парадоксальный» подход к решению проблемы P и NP почти наверняка потерпит неудачу – по крайней мере, если с его помощью пытаться так вот «в лоб» доказать неравенство P и NP.

Схемы

В основе любого современного вычислительного устройства лежит интегральная схема.

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

Для начала рассмотрим один электрический провод, на который подается либо высокое напряжение, либо низкое. Возможны только два значения, интерпретируемые обычно как наличие тока или его отсутствие; эти значения кодируют два состояния – единицу и ноль, или «истину» и «ложь». Количество информации, передаваемое таким двузначным сигналом, получило название «бит» (англ. bit – сокращение от binary digit, т. е. «двоичная цифра»).


Рис. 7.5. Интегральная схема. Фото любезно предоставлено Пенсильванским университетом


Сам по себе провод – или даже несколько отдельных проводов – мало на что способны. Если мы хотим организовать какое-нибудь вычисление, то должны преобразовывать идущие по проводам сигналы. Простейший метод – инвертировать входное напряжение, т. е. реализовать логический вентиль «НЕ».


Рис. 7.6. Вентиль «НЕ»


Если на входе вентиля, т. е. слева от элемента «НЕ», будет высокое напряжение, на выходе оно станет низким, и наоборот.

Занимаясь каждым проводом в отдельности, полноценную схему не составить: на самом деле провода нужно специальным образом комбинировать. Вентиль «И» принимает на вход два или более сигнала и преобразует их в один; на выходе будет единица, если на все входы подается единица. Вентиль «ИЛИ» также принимает на вход два или более сигнала и преобразует их в один; на выходе будет единица, если хотя бы на один из входов подается единица.


Рис. 7.7. Вентили «И» и «ИЛИ»


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


Рис. 7.8. Вентиль «Исключающее ИЛИ»


Любую, даже самую сложную, функцию можно реализовать схемой из элементов «И», «ИЛИ» и «НЕ». Вернемся к вопросу о клике – группе жителей Королевства, в которой все дружат между собой. Чтобы определить, дружат ли Алекс, Боб и Венди, мы можем воспользоваться вентилем «И».


Рис. 7.9. «И» с тремя входами


Чтобы узнать, есть ли в компании из пяти человек – Алекс, Боб, Венди, Гарри и Диана – клика размера три, мы можем построить схему, изображенную на рис. 7.10.

В этой схеме десять элементов «И». Каждый элемент соответствует одной из десяти потенциальных клик размера три в нашей группе. А что, если в группе не 5 человек, а 20000? И нам нужно найти клику размера 50? Действуя так же, «в лоб», мы получим невероятно огромную схему, содержащую

3 481 788 616 673 927 174 126 704 329 430 033 822 428 741 136 969 800 292 509 234 146 086 195 855 824 730 457 281 170 250 134 309 383 506 694 008 809 661 825 431 661 561 845 957 650 386 210 936 569 600

элементов «И».


Рис. 7.10. Схема для клики размера три


Вы спросите, причем тут классы P, NP и вопрос об их равенстве? Дело в том, что для любой задачи из P, т. е. задачи, для которой существует эффективный алгоритм, существует также относительно небольшая схема из элементов «И», «ИЛИ» и «НЕ», которая ее решает. Если мы докажем, что некоторую задачу из NP (например, задачу о клике) нельзя решить при помощи небольшой схемы, это будет означать, что P ? NP.

Существуют ли маленькие схемы для задачи о клике? Равны классы P и NP или не равны? Вопросы эти очень тесно взаимосвязаны, и ответа на них ученые пока не знают; однако сейчас уже мало кто верит, что задача о клике реализуется маленькой схемой, как, впрочем, и в то, что P = NP.

Вернемся к схемам для поиска клики, которые мы только что построили. Заметьте, что в них нет ни одного вентиля «НЕ». Вообще-то некоторые схемы реализовать без отрицания нельзя: оно необходимо даже для такой простой операции, как «исключающее ИЛИ». А вот в задаче о клике можно обойтись одними только «И» и «ИЛИ» – правда, размер подобных схем будет просто устрашающий.

В 1985 году Александр Разборов – студент Математического института им. В. А. Стеклова в Москве – доказал, что любая схема, реализующая алгоритм для задачи о клике при помощи одних лишь вентилей «И» и «ИЛИ» (т. е. без использования «НЕ»), обязательно содержит огромное число элементов. Конечно, проблему равенства P и NP это не снимало; использование элемента «НЕ» вполне могло бы привести к значительному сокращению размера схемы, хотя для задачи о клике он совсем не обязателен.

Тем не менее результат Разборова сочли огромным прорывом на пути к решению вопроса о P и NP. В то время я учился в аспирантуре, и мой научный руководитель Майкл Сипсер сказал, что решение это уже почти у нас в руках: осталось лишь придумать, как модифицировать доказательство Разборова таким образом, чтобы в него можно было «подсунуть» элементы отрицания. Если это удастся, то любая схема, реализующая задачу о клике при помощи полного набора базовых операций – «И», «ИЛИ», «НЕ», – обязана будет содержать огромное число элементов. Поскольку эффективные алгоритмы реализуются небольшими схемами, отсюда будет следовать, что NP-полная задача о клике эффективного алгоритма не имеет, а значит, не принадлежит классу P. Таким образом, неравенство P и NP будет доказано. К сожалению, в реальной жизни все обстоит несколько сложнее.

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

В третьей главе мы разбирали задачу о числе паросочетаний и составляли из дружеских пар романтические. Как и в случае с кликой, для решения задачи о паросочетаниях можно строить схемы, содержащие только операции «И» и «ИЛИ». Для оценки общего числа элементов подходят те же методы, что были использованы в задаче о клике. Поэтому схемы, решающие задачу о паросочетаниях при помощи одних лишь «И» и «ИЛИ», всегда содержат огромное число элементов.

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

Все это практически сводит на нет любые попытки разобраться с классами P и NP, основываясь на результатах Разборова относительно клики. Если для решения некоторой задачи при помощи одних лишь «И» и «ИЛИ» требуется схема из огромного числа элементов, то отсюда вовсе не следует, что при добавлении «НЕ» ситуация останется прежней. В более поздних работах Разборов этот вопрос прояснил; он четко показал, почему для схем с отрицанием его методы не годятся, и почему их почти наверняка невозможно будет переделать.

Позже Разборов в соавторстве со Стивеном Рудичем из Университета Карнеги-Меллон разработал понятие «естественного доказательства», охватывавшее широкий спектр методов, применяемых для оценки сложности схем. Ученые показали, что при помощи естественных доказательств проблему равенства P и NP решить невозможно.

«Неестественные» методы доказательства могут основываться на парадоксах, подобных тем, что обсуждались выше. Разработка таких методов для схем уже принесла некоторые плоды, однако доказать, что для некоторой NP-полной задачи требуется большая схема (и решить тем самым вопрос о равенстве P и NP), вряд ли когда-нибудь получится; надежда на это постепенно угасает.

Как не доказать, что P ? NP

6 августа 2010 года сотрудник исследовательской лаборатории Hewlett-Packard Винэй Деолаликар разослал двадцати двум ведущим специалистам в области теоретической информатики препринт своей работы, лаконично озаглавленной «P ? NP». Многие мечтают прославиться и сорвать большой куш, т. е. миллион долларов от Математического института Клэя; то и дело из ниоткуда возникают люди с «доказательствами», заявляющие, что проблема решена и они установили, что P равно NP, или что P не равно NP, или что решить этот вопрос нельзя, или что он вообще не имеет смысла. Каждый год десятки подобных работ выкладывают в интернет, предлагают в научные журналы и рассылают по электронной почте известным ученым. В одно из самых престижных изданий по теоретической информатике – Journal of ACM – «доказательства» идут непрерывным потоком. Журнал даже разработал специальную политику для авторов:

«В редакцию регулярно поступают работы, авторы которых претендуют на решение известных открытых проблем теории сложности, в частности – проблемы равенства классов P и NP. Рассмотрение и рецензирование подобных работ осуществляется на добровольной основе и отнимает значительную часть редакционных ресурсов, поскольку требует проведения тщательного анализа на предмет выявления возможных ошибок. Редакция не исключает вероятность того, что проблема равенства P и NP, а также связанные с ней вопросы будут когда-нибудь решены; попытки доказательства таких проблем по-прежнему приветствуются. Тем не менее с целью избавления от дополнительной нагрузки, вызванной регулярной проверкой одних и тех же работ, которые после исправления выявленных в процессе рассмотрения ошибок направляются в редакцию повторно, для авторов устанавливаются следующие ограничения: рукописи по проблеме равенства P и NP и другим связанным с ней открытым проблемам теории сложности можно представлять в редакцию не чаще, чем раз в два года, – за исключением случаев, когда у автора имеется специальное разрешение от главного редактора. Данное правило касается также повторного предоставления ранее отклоненных рукописей».

По большей части представляемые доказательства абсолютно нечитабельны или пестрят глупейшими ошибками, и научное сообщество их просто-напросто игнорирует. Однако в случае с Деолаликаром дело приняло совсем другой оборот: у ученого уже имелся целый ряд научных публикаций, а качество представленной работы выгодно отличало его от других претендентов. Некоторые специалисты полагали, что труд Деолаликара заслуживает самого пристального рассмотрения. Из-за этого твиты и блоги запестрели преждевременными сообщениями о том, что проблема тысячелетия решена. Доказательство изучали известные математики и кибернетики; в результате всплыли как мелкие и средние недочеты, так и серьезные изъяны. Уже 16 августа – всего через десять дней после выхода препринта Деолаликара – газета New York Times опубликовала статью под названием Step 1: Post Elusive Proof. Step 2: Watch Fireworks, в которой описывалась вся эта история. К тому времени научное сообщество пришло к единому мнению: доказательство принять нельзя, поскольку в нем содержатся серьезные ошибки. Вопрос о равенстве P и NP по-прежнему оставался открытым.

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

Допустим, вы уверены, что решили проблему равенства P и NP, и уже потираете руки в предвкушении чека на миллион долларов от Математического института Клэя. Не спешите радоваться: с вероятностью 99,9 % доказательство окажется неверным. Попробуйте понять, что с ним не так; ищите ошибку – и ваши поиски почти наверняка увенчаются успехом.

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

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

Ошибку Кардано в том или ином виде регулярно повторяют современные авторы, которым кажется, что они доказали неравенство P и NP. Давайте снова обратимся к задаче о клике. Любой алгоритм, утверждающий, что клику заданного размера найти невозможно, должен доказать, что ее действительно нет. Единственный способ в этом удостовериться – перебрать все возможные группы и проверить, не образуют ли они клику. Поскольку потенциальных вариантов слишком много, алгоритм не справится с проверкой за разумное время. Отсюда вытекает, что эффективных алгоритмов для задачи о клике не существует. Следовательно, P ? NP, ч. т. д. (что и требовалось доказать). Этим выражением (или аббревиатурой Q.E.D. – от латинского quod erat demonstrandum) математики часто завершают свои выкладки, подчеркивая тот факт, что доказательство окончено.

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

Спорить с приверженцами подобных «методов» доказательства бывает порой довольно сложно. Они постоянно возвращаются к отправному моменту и требуют, чтобы я привел пример алгоритма для клики, который бы не использовал «единственно возможный способ». Разумеется, я такого алгоритма не знаю; если бы его придумали, это означало бы равенство P и NP, что на самом деле очень маловероятно. В данном случае бремя доказательства лежит на вас – и это сказано не ради красного словца! Именно вы, т. е. человек, утверждающий, что он (или она, хотя ошибочные доказательства предоставляют в основном мужчины) решил проблему, должны доказать, что других возможных способов в природе не существует.

Для доказательства равенства P и NP достаточно «всего лишь» показать, что для некоторой NP-полной задачи существует эффективный алгоритм. И вот некоторые изобретают алгоритм для задачи о клике или какой-нибудь другой эквивалентной ей проблемы и заявляют, что доказали равенство P = NP. Но ведь сам по себе алгоритм еще не является доказательством! Требуется строгое математическое обоснование того факта, что данный алгоритм дает верное решение во всех возможных случаях (если мы говорим о клике – то для всех возможных схем дружеских связей), причем делает это за полиномиальное время. В подобных работах доказательство корректности алгоритма либо отсутствует вообще, либо является неполным и неверным; сами же алгоритмы, сталкиваясь с нетривиальными случаями, обычно выдают ошибочное решение или работают неприемлемо долго.

Текущее положение дел

Мы еще никогда не были настолько далеки от решения проблемы P и NP. Не в том смысле, что для этого требуется огромная подготовительная работа; просто мы уже испробовали все мыслимые и немыслимые подходы и исчерпали все известные науке методы доказательства, так что в ближайшем будущем прогресса ждать не приходится.

Единственную на сегодняшний момент потенциальную возможность открыл Кетан Мулмулэй из Чикагского университета. Ученый показал, что решение некоторых трудных проблем из области математики под названием «алгебраическая геометрия» (и это не помесь школьной алгебры и геометрии, а нечто гораздо более сложное) может дать ключ к доказательству неравенства P и NP. Вот только для решения этих алгебраически-геометрических проблем потребуются такие техники, которых в нашем арсенале нет и которые в ближайшее время вряд ли появятся. Несколько лет назад Мулмулэй предположил, что реализация этого плана займет около ста лет. Теперь тот прогноз уже кажется ему чересчур оптимистичным.

Так сколько нам еще ждать? Не исключено, что сейчас, когда вы читаете эти строки, проблему уже решили. Хотя, скорее всего, над ней будут биться еще очень долго; дольше даже, чем над Великой теоремой Ферма, которая поддалась лишь через 357 лет. А может, она так навсегда и останется одной из величайших загадок в истории математики и вообще всей науки.

Глава 8. Совершенно секретно

У каждого из нас есть секреты. Как минимум мы храним в тайне пароли и не желаем, чтобы кто-то читал нашу почту. Если P ? NP, то секреты есть и у NP-полных задач: это их решения, найти которые не так-то просто. В 1976 году Уитфилд Диффи и Мартин Хеллман предложили шифровать информацию при помощи класса NP. В истории криптографии, т. е. науки о шифровании, наступил поворотный момент.

Очень краткая история классической криптографии

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

Фраза The early bird gets the worm («Кто рано встает, тому бог дает») после такой кодировки превращается в Wkh hduob elug jhwv wkh zrup. Способ шифрования, при котором все буквы циклически сдвигаются на определенное число позиций, стали называть шифром Цезаря.

В Древнем Риме этот метод работал хорошо. Зашифрованные сообщения выглядели как случайный набор букв, а люди пока еще не обладали необходимыми навыками для взлома шифров. К IX веку математики разработали методы восстановления исходного сообщения; эти методы учитывали частоту появления букв и анализировали короткие слова. Глядя на фразу Wkh hduob elug jhwv wkh zrup, можно заметить, что буква h встречается четыре раза, т. е. чаще остальных. Самая распространенная буква английского алфавита – это e, ее частота составляет примерно 12 процентов. Вы можете предположить, что буква h кодирует букву e, – и будете совершенно правы. Сочетание wkh встречается дважды; вы уже знаете, что h – это e, поэтому делаете вывод, что wkh – это, наверно, the. Еще чуть-чуть – и исходное сообщение будет восстановлено!


Рис. 8.1. Шифр Цезаря


В XV веке, в эпоху Возрождения, итальянский ученый Леон Баттиста Альберти разработал более сложный метод. Это был шифр многоалфавитной замены, в котором сообщение разбивалось на несколько частей, и для каждой части использовался свой алфавит подстановки. Система Альберти практически не поддавалась взлому вплоть до XIX века, когда на шифры началось систематическое наступление.

Американский писатель и поэт Эдгар Аллан По мастерски владел техникой криптоанализа. В 1839 году он обратился к широкой публике с предложением присылать ему тексты, зашифрованные сложным, не поддающимся взлому шифром, и обещал разгадать их все. Годом позже По опубликовал эссе «Несколько слов о тайнописи», в котором утверждал, что человеческий разум не способен изобрести такой шифр, который разум другого человека был бы не в силах разгадать. В нашумевшем рассказе По «Золотой жук», появившемся в 1843 году, события вертятся вокруг расшифровки тайного сообщения. Это было одно из первых художественных произведений, в котором речь шла о секретных кодах.

В 1903 году выходят «Пляшущие человечки» Конан Дойля, где Шерлок Холмс взламывает подстановочный шифр, состоящий из странных пляшущих фигурок.

Наступила эра механики; люди начали изобретать машины, способные создавать ключи для шифровки и дешифровки. Самая известная шифровальная машина – это, пожалуй, «Энигма», первую версию которой в 1918 году в Германии разработал Артур Шербиус.

В «Энигме» было несколько роторов, искажавших набранные на клавиатуре символы. Роторы вращались в разных режимах, и каждый символ получал свой индивидуальный шифр замены. В результате машина выдавала усложненную версию многоалфавитного шифра Альберти, взломать которую было чрезвычайно трудно.


Рис. 8.2. Пляшущие человечки



Рис. 8.3. Шифровальная машина «Энигма»


У немцев во время Второй мировой большинство сообщений шифровалось при помощи «Энигмы». Незадолго до начала войны Великобритания получила от польской разведки описание машины и некоторых методов дешифровки. Британское правительство запустило засекреченный проект с кодовым названием «Ультра», целью которого был взлом шифров «Энигмы». В штат набирали известных шахматистов, чемпионов по решению кроссвордов и, конечно, талантливых математиков, среди которых был и основоположник теории вычислений Алан Тьюринг. В рамках проекта был спроектирован и построен «Колоссус» – первый в мире программируемый цифровой компьютер. «Именно благодаря проекту „Ультра“ мы выиграли войну», – скажет позже Уинстон Черчилль.

Криптография всегда была – и будет – чем-то вроде игры в кошки-мышки между теми, кто создает шифры, и теми, кто их взламывает. Впрочем, в семидесятых годах XX века игра заметно усложнилась, поскольку трудоемкость некоторых NP-задач послужила отправной точкой в создании новых методов шифрования.

Современная криптография

«Мы стоим на пороге криптографической революции» – таковы первые слова нашумевшей статьи Уитфилда Диффи и Мартина Хеллмана, вышедшей в свет еще в 1976 году. «Благодаря развитию массового производства дешевых цифровых устройств криптография освободилась от аппаратных ограничений и перестала испытывать недостаток в вычислительных ресурсах, – продолжают авторы. – Стоимость надежных криптографических систем значительно снизилась; теперь эти системы можно использовать в различных коммерческих приложениях – например, для удаленного управления кэш-диспенсерами и компьютерными терминалами».

Диффни и Хеллман понимали, что с дальнейшим развитием вычислительной техники сложные шифровальные системы превратятся в недорогой и всем доступный софт, хотя у криптографов при этом возникнут новые вопросы. Компьютерные сети прочно войдут в повседневную жизнь; появится острая необходимость в недорогих и эффективных методах защиты передаваемой по ним информации. Рассуждая о последних достижениях в борьбе с проблемой равенства P и NP, ученые заявляют: «В то же время развитие теории информации и теории алгоритмов позволяет надеяться на появление достаточно надежных криптографических систем; древнее искусство шифрования постепенно переходит в разряд науки».

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

Компьютерные сети создают дополнительные трудности, поскольку на их безопасность нельзя положиться. В конце XX века сети работали преимущественно через телефонные линии, подключиться к которым было не так уж и сложно. А сейчас любой посетитель кофейни может перехватить все данные, отправляемые вашим компьютером через местный Wi-Fi.

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

Основываясь на результатах, полученных ранее Ральфом Мерклом, Диффи и Хеллман предложили обойти эту проблему при помощи так называемых криптосистем с открытым ключом. Компьютер создает два ключа – открытый и закрытый; открытый можно послать кому угодно, а закрытый хранится в тайне и по сети не передается.

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

Допустим, Диффи хочет отправить Хеллману такое сообщение: «Наступление в полночь». Хеллман создает пару ключей; открытый ключ он посылает Диффи и другим заинтересованным участникам, а закрытый держит в тайне. С помощью открытого ключа Диффи зашифровывает сообщение «Наступление в полночь» и отправляет результат Хеллману. Секретный ключ ему знать не нужно, поскольку для шифрования он не используется. Хакер, перехвативший шифровку, не сможет восстановить исходный текст даже в том случае, если знает открытый ключ. А вот Хеллман с помощью закрытого ключа расшифрует сообщение и узнает о том, что наступление начинается в полночь.

Неужели можно шифровать сообщения ключом, который все знают?! Можно – но только если P и NP не равны: в противном случае закрытый ключ легко и быстро восстанавливается по открытому.

В 1976 году большинство ученых уже склонялись к тому, что P ? NP, а потому системы с открытым ключом имеют право на жизнь. Диффи и Хеллман такую систему предложили, однако более широкое распространение получила криптосистема RSA, которую в 1978 году разработали Рональд Ривест, Ади Шамир и Леонард Адлеман. Система была названа по первым буквам фамилий ее создателей – Rivest, Shamir, Adleman.

В основе алгоритма RSA лежит тот факт, что умножать легко, а раскладывать на множители – очень трудно. Возьмем, к примеру, два достаточно больших простых числа, 5754853343 и 2860486313. Найти их произведение легко: это 16461679220973794359. А вот с обратным процессом все обстоит гораздо сложнее – попробуйте-ка по числу 16461679220973794359 восстановить сомножители 5754853343 и 2860486313! В системе RSA используются громадные простые числа, состоящие, как правило, из нескольких сот цифр. Нельзя утверждать, что разложение на простые множители практически неразрешимо, пока неравенство классов P и NP остается недоказанным; однако по мнению ученых задача эта представляет огромную вычислительную трудность.

За свое изобретение Ривест, Шамир и Адлеман в 2002 году получили премию Тьюринга.

Удивительный факт: позднее выяснилось, что впервые подобную криптосистему описал в 1973 году Клиффорд Кокс, работавший в то время в Центре правительственной связи Великобритании. Эта информация была обнародована лишь в 1997 году.

С системой RSA вы наверняка неоднократно сталкиваетесь каждый день. Возьмем для примера какой-нибудь часто посещаемый веб-сайт (в вашем браузере он может отображаться немного по-другому).


Рис. 8.4. Верхняя часть страницы Facebook


Обратите внимание на букву s в адресной строке и на замочек.


Рис. 8.5. Верхняя часть страницы Facebook с отметками


Буква s указывает на безопасное соединение (от англ. secure). Facebook опубликовал свой открытый ключ; этим ключом браузер шифрует ваш пароль. Злоумышленник с ноутбуком, расположившийся в другом углу кофейни, не сможет взломать пароль, даже если будет перехватывать все передаваемые по Wi-Fi данные, а вот Facebook легко восстановит его с помощью закрытого ключа. Аналогичным образом ваш браузер при необходимости создаст пару ключей и сообщит открытый ключ Facebook, а тот в ответ пришлет вам зашифрованную информацию об обновленных статусах ваших друзей, которую больше никто, кроме вас, не увидит.

Криптография в совершенном мире

Что станет с криптографией в совершенном мире? В мире из второй главы, где P = NP? Определить, что число 16461679220973794359 представляется в виде 5754853343 x 2860486313, а числа 5754853343 и 2860486313 – простые, не составит особого труда; подобные вычисления можно будет проделывать с числами из тысяч и даже миллионов цифр! Задача разложения на множители лежит в классе NP, поскольку потенциальное решение можно проверить очень быстро; если классы P и NP совпадают, то для этой задачи существует эффективный алгоритм, а значит, мы легко отыщем все делители любого, сколь угодно большого числа. Протокол RSA, как и любая другая система шифрования с открытым ключом, станет абсолютно бесполезен, поскольку закрытый ключ будет быстро восстанавливаться по открытому ключу. Равенство P и NP приведет к тому, что мы больше не сможем обмениваться секретной информацией, не условившись предварительно о способе ее передачи.

Так, значит, в совершенном мире о криптографии придется забыть? Вообще-то есть один шифр, надежность которого не зависит от отношений между P и NP: это так называемый одноразовый шифровальный блокнот. Предположим, Элис придумала пароль из 12 символов: FIDDLESTICKS. Шифровальный ключ – он же блокнот – представляет собой случайную последовательность символов той же длины: JXORMQNAMRHC. Возьмем первые символы пароля и ключа, F и J. Это шестая и десятая буквы алфавита, соответственно. В сумме их номера дают число 16, поэтому первым символом шифрованного текста будет шестнадцатая буква алфавита – P. Теперь возьмем вторые символы пароля и ключа, I и X. Это девятая и двадцать шестая буквы алфавита. В сумме их номера дают 33, однако тридцать третьей буквы алфавита в английском языке не существует, поэтому мы вычитаем из числа 33 количество букв в алфавите, т. е. 26. Получается 7, а значит, вторым символом шифровки будет седьмая буква алфавита – G. Действуя аналогичным образом, мы в итоге получим PGSVYVGUVUSV. Эту криптограмму Элис отошлет на Facebook, а он расшифрует ее с помощью точно такого же блокнота, выполняя вычитание вместо сложения.

Любая строка длины 12 может быть ключом. Любая строка длины 12 может быть исходным сообщением. Все варианты равновероятны, так что, имея на руках криптограмму, получить какую-либо информацию об исходном тексте абсолютно невозможно. Этот факт математически доказан, и классы P и NP тут совершенно ни при чем. Но тогда зачем нужны все эти хитроумные и потенциально уязвимые системы шифрования, завязанные на поиск простых сомножителей? Почему бы нам не перейти на одноразовые блокноты?

К сожалению, с блокнотами все обстоит не так просто. Их ведь потому и назвали одноразовыми, что любой ключ разрешается использовать только один раз. Это правило должно соблюдаться неукоснительно; даже если два не связанных между собой человека отсылают сообщения двум другим не связанным между собой людям, лучше, чтобы их ключи не совпадали, иначе конфиденциальность переписки может быть нарушена. Кроме того, одноразовый блокнот обязательно должен быть той же длины, что и сообщение. В отличие от криптосистем с открытым ключом, ключ здесь лишь один – секретный, общий для обеих сторон. И Элис, и Facebook должны знать секретный ключ; если к злоумышленнику попадет хотя бы часть ключа, он сможет получить некоторую информацию об исходном сообщении, поэтому Facebook должен переправить Элис ключ так, чтобы его никто, кроме самой Элис, не увидел (или наоборот – Элис должна переправить ключ в Facebook). Данные, пересылаемые по интернету, легко перехватить. Блокноты нужно передавать на физическом носителе, например – на флешке, причем делать это только лично или через надежного посредника. В совершенном мире Элис, скорей всего, отправилась бы в ближайший супермаркет и купила запечатанную флешку с набором одноразовых блокнотов. Производством таких флешек занималась бы заслуживающая доверия организация (возможно, правительство), способная гарантировать безопасную передачу второго экземпляра блокнота в Facebook и другие подобные компании.


Рис. 8.6. Судоку с нулевым разглашением


Равенство P = NP многое упрощает, однако криптографам оно может принести лишь головную боль.

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

Судоку с нулевым разглашением

Боб пожертвовал обедом, чтобы добить судоку из последнего номера газеты.

«У них тут ошибка. Это решить невозможно!» – восклицает он, совершенно выбившись из сил. На крики приходит его коллега Элис; взглянув на судоку, она видит ту самую головоломку, которую утром решила в метро. Боб зря ругается. На рисунке ниже вы видите решение Элис.

Боб вот-вот сдастся, и Элис хочется его поддержать. Она говорит, что решила задачу, но он ей, конечно, не верит. Он ужасно расстроится, когда увидит в завтрашней газете ответ, так что нужно обязательно убедить его подумать еще. Показать свое решение значит испортить Бобу все удовольствие от процесса; но как доказать, что задача решается, не давая при этом никаких подсказок?


Рис. 8.7. Решение судоку с нулевым разглашением


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

Вернувшись к своему столу и зная, что Боб не может видеть ее за перегородкой, Элис берет цифры от 1 до 9 и случайным образом их упорядочивает.


Рис. 8.8. Новый порядок цифр


С помощью полученной таблицы Элис шифрует свое решение, заменяя 1 на 2, 9 на 3, и т. д., и рисует его на большом листе бумаги. Вот что у нее выходит:


Рис. 8.9. Зашифрованное решение


Дальше Элис аккуратно режет сетку с решением на маленькие квадратики по одной цифре в каждом. Всего квадратиков получается 81. Каждый квадратик она прячет в маленький пакетик и кладет в соответствующую ячейку нарисованной на другом листе пустой сетки.


Рис. 8.10. Решение спрятано


Рис. 8.11. Открытая строка


В левом верхнем пакетике лежит цифра 2, справа от него – цифра 3, и так далее.

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


• открыть все пакетики в одной из строк;

• открыть все пакетики в одном из столбцов;

• открыть все пакетики в одном из девяти блоков 3 x 3;

• открыть все пакетики, расположенные на тех же позициях, что и заданные цифры исходной головоломки.


Допустим, Боб решил открыть третью строку. Что он там увидит?

Если бы в строке оказалось две одинаковых цифры, это означало бы, что Элис наврала. Но поскольку решение у нее действительно есть, и она четко объяснила Бобу, что сделала с пакетиками, Боб видит все различные цифры от 1 до 9 в случайном порядке. Тест пройден!

Если Боб решит открыть столбец или блок 3 x 3, результат будет точно таким же.

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


Рис. 8.12. Открытые позиции соответствуют заданным цифрам


Рис. 8.13. Новый порядок цифр


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

Если Элис и правда решила задачу и четко следовала правилам, она пройдет любую проверку. А что же Боб? Получит ли он хоть какую-нибудь подсказку, когда откроет строку, столбец или блок 3 x 3? Исключено: перед ним будут лишь цифры от 1 до 9, расположенные в случайном порядке.

Последний вариант даст ему перестановку цифр, при помощи которой было зашифровано решение. Но что он при этом узнает? Ничего.

Другое дело, если Элис наврала: один из тестов обязательно провалится, и она ничего не сможет с этим поделать. Когда Боб выбирает тест наугад, вероятность попасться на вранье составляет одну двадцать восьмую, или примерно 3,57 %. Не так уж и рискованно, правда? Однако если Элис и Боб проведут 83 эксперимента подряд и при этом будут каждый раз менять схему кодировки, вероятность провалить один из тестов возрастет до 95 %.

Боб убедился, что Элис действительно решила судоку, а ей при этом удалось соблюсти принцип «нулевого разглашения»: о решении Боб знает только то, что оно существует. Эта мысль будет греть его, когда он вернется к головоломке, но справляться ему придется исключительно своими силами.

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

Теперь представим, что Боб и Элис не работают вместе и вообще находятся в разных городах. Они могут связаться по телефону или электронной почте, однако вместо пакетиков придется придумать что-то другое. Здесь на помощь им придет несложный шифр. Каждому пакетику Элис может присвоить уникальный номер – большое случайное число, последняя цифра которого совпадает с цифрой внутри. Для цифры 2 подойдет, к примеру, 3682502. Затем она зашифрует номера пакетиков своим открытым ключом и отошлет их Бобу. Когда Боб определится с вариантом теста, Элис сообщит ему исходные номера тех пакетиков, которые разрешается открыть. Для проверки Боб повторно зашифрует их открытым ключом и получит те же номера, что Элис выслала ему в начале.

В четвертой главе мы уже упоминали, что решение судоку – задача NP-полная. А раз к судоку сводится любая задача из NP, то и описанный выше метод доказательства с нулевым разглашением также годится для любой NP-задачи. Элис сможет убедить Боба в том, что она нашла максимальную клику, раскрасила карту в три цвета или составила маршрут для коммивояжера, не раскрывая при этом никакой дополнительной информации; о решении Боб будет знать только то, что оно существует.

Классический способ осуществить криптографическую атаку – выдать себя за другого. Защититься от самозванцев помогает доказательство с нулевым разглашением. Происходит это так. Элис выбирает любой известный только ей секрет и шифрует его своим открытым ключом. Ее цель – убедить Боба, что она и вправду Элис. Она, конечно, может отправить ему зашифрованный текст, но тогда Боб получит возможность выдавать себя за нее. Так что Элис проводит доказательство с нулевым разглашением и показывает Бобу, что действительно владеет секретной информацией. В результате Боб верит, что общается именно с Элис, но при этом ничего не знает о ее секрете.

Криптография в играх

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

Все бы хорошо, но что, если Боб и Элис говорят по телефону или переписываются по почте? Боб может соврать и сказать, что выпала решка, когда на самом деле выпал орел. А может и вообще монетку не бросать. Как убедиться, что он говорит правду?

Простейший способ – положиться на случайное событие, исход которого станет известен всем. Например, договориться, что если последняя цифра промышленного индекса Доу-Джонса на закрытие дня окажется нечетной, то выбирать ресторан будет Боб, а если четной – то Элис. Правда, в субботу торги не ведутся, так что на выходные придется придумывать что-то другое.

В этом случае подойдет рассмотренная ранее схема шифрования с открытым ключом. Боб создает пару ключей, открытый и закрытый. Затем выбирает случайное число, к примеру – 69441251920931124, и шифрует его своим открытым ключом, который отсылает Элис вместе с шифровкой.

Элис выбирает «чет» или «нечет» и сообщает об этом Бобу. В ответ он отправляет ей секретный ключ. Расшифровав криптограмму, Элис узнает, что Боб загадал 69441251920931124. Если она выбрала «чет», то выиграла, а если «нечет» – выиграл Боб.

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

Бросать монетку – это как-то слишком просто. Что, если взять какую-нибудь более сложную игру?

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

Как насчет игры в кости, нарды или «Монополию»? Поверит ли Элис, что Боб не врет насчет выпавших очков? Безусловно – для этого лишь нужно будет утвердить протокол бросания костей, во многом совпадающий с протоколом бросания монетки.

А вот в случае с покером и другими карточными играми все обстоит несколько сложнее. Карты игроков выбираются случайным образом. Каждый видит свои карты и не знает о картах противника. Некоторые карты доступны обоим; какую-то часть не видят ни тот, ни другой. По ходу игры закрытые карты открываются и становятся доступны либо всем, либо лишь одному игроку.

В интернете сейчас очень много покерных сайтов, однако все они играют роль ведущего, так как сами тасуют карты и раздают их игрокам.

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

К началу девяностых криптографам удалось разработать универсальные схемы. С их помощью по интернету можно было играть в любую игру, в которой требовался честный противник. Эти схемы исключали всякую возможность мошенничества; в протоколах помимо шифрования применялось также доказательство с нулевым разглашением. И все же на практике удобнее было работать с сайтами-посредниками или пользоваться узкоспециализированными протоколами, поэтому широкого распространения универсальные схемы так и не получили.

Облако секретных вычислений

Допустим, у Элис имеются конфиденциальные данные, над которыми требуется произвести некие вычисления, а Боб как раз предоставляет сервис облачных вычислений. Элис отправляет Бобу информацию, закодированную его открытым ключом. Боб расшифровывает данные, выполняет вычисления и отправляет Элис результат, закодированный ее открытым ключом. Если система шифрования достаточно надежна, то ни один злоумышленник не сумеет похитить секретную информацию. Схема работает – но лишь до тех пор, пока Элис доверяет Бобу. А что, если она захочет скрыть свои данные даже от него?

В этом случае помогут системы, называемые полностью гомоморфными. Протокол RSA устроен таким образом, что, умножив шифр одного числа (к примеру, числа 28) на шифр другого (к примеру, 45), мы в итоге получим шифр их произведения (т. е. числа 1260). Умножение чисел можно проводить без расшифровки, и исходные данные при этом знать не обязательно. Для сложения, однако, это правило не действует, и по кодам чисел 28 и 45 код числа 73 в системе RSA не получишь.

Умножение соответствует логическому «И», а сложение – логическому «ИЛИ». Вместо логических схем можно строить схемы из операций умножения и сложения, и такими схемами на самом деле реализуются очень многие вычисления. Полностью гомоморфная криптосистема позволяет не только умножать зашифрованные числа, но и складывать; обе операции можно проводить без расшифровки, и никакая дополнительная информация при этом не потребуется.

Допустим, Элис закодировала информацию полностью гомоморфным шифром и отправила ее на сервер Боба. Боб выполняет вычисления, не имея представления об исходных данных. Результат он получает в закодированном виде; расшифровать его он не в состоянии, а вот Элис легко сделает это, когда закачает все на свой компьютер.

С полностью гомоморфными шифрами у криптографов долгое время не ладилось. Многие считали, что создать такой шифр просто невозможно. Наконец, в 2009 году аспиранту Стэнфордского университета Крейгу Гентри удалось разработать полностью гомоморфную криптосистему. На практике схема Гентри работала неприемлемо долго, однако благодаря ей в ближайшем будущем можно ожидать появления чрезвычайно мощных протоколов.

В поисках случайности

Рассмотрим популярную игру «Камень, ножницы, бумага» для двух игроков, в которой нужно выбрать камень, ножницы или бумагу и показать рукой соответствующий знак.

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

Какова оптимальная стратегия в этой игре? Хорошо, если вы можете предсказать выбор противника; но что, если все наоборот, и противник знает ход ваших рассуждений? Неужели вы обречены на вечный проигрыш?

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


Рис. 8.14. «Камень, ножницы, бумага»


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

Как получить настоящие случайные числа? Компьютеры пока не научились подбрасывать монетку; впрочем, даже если бы они и умели, то монетки все равно подчинялись бы законам физики, так что случайность эта была бы достаточно условной. Источником случайности могут стать квантовые явления, однако из-за сложности реализации этот способ крайне редко применяется на практике.

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

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

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

Генераторы псевдослучайных чисел спасают нас лишь до тех пор, пока существуют относительно трудные задачи. Если P = NP, то любой вычислительный процесс можно в той или иной степени инвертировать. В совершенном мире будет чрезвычайно трудно – а то и вовсе нереально – программно реализовать полностью случайное подбрасывание монетки. А компьютерный вариант «Камня, ножниц и бумаги» вряд ли сможет называться азартным.

Проблемы разрастаются

Шифрование с открытым ключом базируется на «неприступности» таких NP-задач, как разложение на множители. Достаточно случайным образом выбрать два больших простых числа и перемножить их – и вы получите число, которое никто, кроме вас, на множители, скорее всего, не разложит.

Является ли задача разложения на множители NP-полной, мы не знаем; на самом деле это очень маловероятно. Впрочем, если бы она даже и была NP-полна, то из неравенства классов P и NP следовало бы лишь то, что некоторые числа трудно разложить на множители, а относительно всех случайных чисел мы не могли бы утверждать то же самое.

В основе современной криптографии лежит предположение о неравенстве классов P и NP и практической неразрешимости NP-полных задач – и в этом-то и состоит ее главная проблема.

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

Впрочем, игра в кошки-мышки по-прежнему продолжается. Современные мошенники уже не взламывают сами шифры, а ищут уязвимые места в системе. В протоколе, которым пользуются Элис и Боб, числа могут оказаться недостаточно случайными. В операционной системе или браузере могут найтись дефекты, позволяющие хакеру проникнуть в компьютер. Злоумышленники могут обмануть Элис и заставить ее сообщить секретный ключ. А придумав ненадежный пароль, Элис сама поставит себя под удар.

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

Никакой, пусть даже самый стойкий шифр не гарантирует стойкость всей системы; не исключено, что абсолютно надежный протокол мы так и не создадим.

Глава 9. Его величество квант

В 1982 году лауреат Нобелевской премии по физике Ричард Фейнман обратил внимание на тот факт, что простого способа смоделировать работу квантовой системы на цифровом компьютере не существует. Из проблемы родилась идея: а что, если вычислительные устройства, основанные на принципах квантовой механики, будут работать намного эффективнее обычных компьютеров?

В последующие десятилетия в результате совместных усилий физиков и кибернетиков (которые вообще часто работают вместе) было доказано, что некоторые задачи – в частности, разложение на простые множители – квантовые компьютеры способны решать несравненно быстрее. Неизвестно, увидят ли когда-нибудь свет даже самые средненькие квантовые компьютеры, не говоря уже о больших и полноценных; неизвестно также, сумеем ли мы корректно оценить их возможности: все это пока находится под большим вопросом. В данной главе речь пойдет о квантовых вычислениях, об их мощности и таких связанных с ними понятиях, как квантовая криптография и телепортация.

Квантовый видеорекордер

Том живет в Бостоне и, конечно, болеет за «Ред Сокс». Днем его любимая команда принимала Нью-Йоркских «Янкиз»; Том был на работе и специально не читал бейсбольные новости. Вернувшись домой, он заказал пиццу, включил телевизор и начал смотреть игру, которая к тому моменту уже давно закончилась. На исходе девятого иннинга у хозяев были заняты вторая и третья база, два игрока были в ауте и один в рандауне. Отбивающий Брайан Хаммер побежал к «дому». Том напряженно замер в надежде, что его команда получит очко, – и вдруг одернул себя: эфир-то не прямой! Очко уже либо заработано, либо нет, только Тому пока об этом не известно. Для него исход по-прежнему не определен: не победа и не поражение, а что-то между ними. Результат игры он узнает чуть позже.

Реальность для Тома определяется тем, что он видит. Он смотрит последний иннинг – а значит, в его мире еще никто не победил. Матч продолжается; и пока не закончится последний розыгрыш, он так и будет находиться в промежуточном состоянии между победой «Ред Сокс» и их поражением.

Сьюзен – ярый фанат «Янкиз». Она тоже записала игру и теперь, как и Том, смотрит ее в оффлайн-режиме и гадает, заработает ли Хаммер победное очко. Для Сьюзен, как и для Тома, результат игры еще не определен; он случаен – ровно до того момента, пока Сьюзен не услышала финальный свисток.

Том и Сьюзен одновременно наблюдают разные случайные события, находясь в 200 милях друг от друга. И все же результат они увидят совершенно одинаковый. И для Тома, и для Сьюзен Хаммер либо заработает победное очко, либо не заработает. Не может быть такого, чтобы в мире Тома Хаммер заработал очко, а в мире Сьюзен – нет. Исход игры никто из зрителей пока не знает, однако оба уверены, что в конце увидят на табло один и тот же счет. Результаты событий, отражаемых на экранах телевизоров Тома и Сьюзен, каким-то загадочным образом связаны друг с другом.

Вы спросите, причем здесь квантовые вычисления? В классических цифровых компьютерах основной логической единицей является бит, или двоичная цифра (от англ. bit – binary digit). Каждый бит может принимать ровно два значения, например – истина и ложь, или победа и поражение. Базовый элемент квантовых компьютеров – это кубит, или квантовый бит (от англ. qubit – quantum bit). В отличие от бита, который всегда принимает одно из двух пограничных значений, кубит может находиться в некотором промежуточном состоянии, называемом суперпозицией.

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

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

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

Состояние бейсбольного матча «ходит» вдоль одной оси: это просто вероятность того или иного исхода.


Рис. 9.1. Бостонская команда


Звездочкой обозначена тридцатипроцентная вероятность победы Бостона. Пока Том смотрит матч, звездочка перемещается; в зависимости от исхода игры она попадет либо в самую левую точку, либо в самую правую.

Состояния кубита образуют окружность с центром в точке пересечения осей «Истина» и «Ложь».


Рис. 9.2. Кубиты


В данном случае звездочка перемещается по двумерной траектории. На рис. 9.2 ее текущие координаты – 0,55 по «Истине» и 0,84 по «Лжи». Координаты вполне могут быть и отрицательными: к примеру, смайлик находится в точке (-0,71; -0,71). Квантовые компьютеры вращают и переворачивают эти окружности и таким образом управляют состояниями кубитов.

Одному кубиту соответствует окружность на плоскости. Двум кубитам требуется четырехмерная окружность; нарисовать ее здесь или даже просто представить в уме было бы довольно затруднительно. В системе из тридцати кубитов размерность пространства будет более триллиона.

Все это наводит на мысль использовать квантовые компьютеры для решения NP-задач. Допустим, нам нужно найти клику размера 50 среди 20000 жителей Королевства. Имея около 500 кубитов, мы сможем воспроизвести сразу все группы размера 50, которые будут обрабатываться параллельно; чтобы отметить клику, квантовый компьютер выполнит определенную последовательность вращений и переворотов.

В результате система придет в квантовое состояние, представляющее собой совокупность приблизительно из 3 x 10150 (т. е. 3 и 150 нулей) групп, часть которых отмечены как клики. Если мы научимся эффективно «вытаскивать» из квантовых состояний информацию о кликах, то получим быстрый квантовый алгоритм для поиска клики, а также для всех остальных NP-полных задач. Считывая квантовое состояние системы (т. е., в некотором роде, наблюдая за окончанием игры), мы видим лишь один исход, в данном случае – одну группу жителей; маловероятно, что именно эта группа окажется кликой.

Нам нужно научиться как-то выделять искомые клики, чтобы при считывании квантового состояния они попадались нам с большей вероятностью. Сделать это можно при помощи квантовых манипуляций с кубитами. Правда, при грубом подходе манипуляций потребуется столько же, сколько и групп, т. е. примерно 3 x 10150, и все преимущества квантовых вычислений будут сведены на нет. В 1996 году сотрудник Лабораторий Белла в Нью-Джерси Лов Гровер разработал «умный» квантовый алгоритм, который мог обнаружить клику в Королевстве «всего» за 2 x 1075 квантовых шагов. Однако даже при скорости триллион операций в секунду на это ушло бы в пять раз больше времени, чем живет наша вселенная.

Уже доказано, что при решении NP-полных задач на квантовом компьютере алгоритм Гровера в общем случае дает наилучший результат, поэтому квантовые алгоритмы вряд ли позволят приравнять классы P и NP. Если физики когда-нибудь и построят полноценные квантовые компьютеры, самые трудные проблемы все равно окажутся им не по зубам.

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

В 1994 году другой сотрудник Лабораторий Белла, Питер Шор, придумал, как на квантовом компьютере можно быстро выполнять факторизацию, т. е. раскладывать число на простые множители (к примеру, для числа 16461679220973794359 тут же выяснилось бы, что 16461679220973794359 = 5754853343 x 2860486313). При наличии мощного квантового компьютера алгоритм Шора спокойно работал бы с числами из сотен и даже тысяч знаков. Для поиска делителей алгоритм строит алгебраические конструкции, с которыми квантовые компьютеры справились бы очень легко. Современным машинам такая задача не под силу, а вот квантовые могли бы эффективно факторизовывать сколь угодно большие числа. К сожалению, хорошие алгебраические конструкции для NP-полных задач пока не придумали, поэтому для них алгоритм Шора работать не будет.

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

Создать абсолютно – или хотя бы относительно – устойчивую систему даже из двух запутанных кубитов физикам пока не удалось. Ученые-кибернетики разработали специальные методы квантовой коррекции ошибок, которые позволяют строить алгоритмы, способные корректно работать с довольно приличным количеством связей. А вот как поддерживать все эти многочисленные связи в системе хотя бы из двух десятков кубитов, мы пока не знаем. Не исключено, что большие запутанные квантовые системы просто обязаны разрушаться через некоторое время, подчиняясь законам природы; с другой стороны, проблема может носить и чисто технический характер. Будем надеяться, физики с этим когда-нибудь разберутся.

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

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

Квантовая криптография

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

Возможность копировать данные воспринимается нами как должное. Функции копирования и вставки сейчас есть почти в каждой программе. Мы можем сохранить один и тот же файл в разных папках и на разных машинах, можем создать резервную копию данных на жестком диске или в облаке. Иногда все эти многочисленные экземпляры нам даже мешают – очень трудно, к примеру, удалить свои персональные данные и электронный адрес так, чтобы о них больше не осталось ни единого упоминания.

А вот квантовые биты копированию не поддаются. Ведь чтобы скопировать кубит, его нужно хотя бы частично измерить, т. е. выполнить наблюдение, которое сразу превратит его в обычный бит с двумя значениями. Предположим, Джордж отсылает Гарри кубит информации, а Эрик его перехватывает. Если Эрик попытается скопировать или прочитать кубит, тот сразу же примет вид обычного бита. Безопасность обеспечена, вот только для организации переписки этого явно недостаточно: ведь когда Гарри начнет читать сообщение, он тоже увидит лишь обычный бит.

В 1979 году в Пуэрто-Рико проходила важнейшая международная конференция по проблемам теоретической информатики – IEEE Symposium on Foundations of Computer Science. Среди участников был Жиль Брассард из Монреальского университета. Когда он после очередного заседания плескался в океане, его разыскал Чарльз Беннет. Знакомство вылилось в плодотворное сотрудничество; вместе ученые придумали, как при помощи квантовых битов можно создавать системы шифрования с доказуемой криптостойкостью. Допустим, Джордж отсылает Гарри длинную последовательность кубитов, содержащую секретный ключ для шифрования дальнейшей переписки. Любой злоумышленник, перехвативший это сообщение, разрушит все кубиты, как только попытается их прочитать или скопировать. Беннет и Брассард разработали метод, позволяющий при помощи дополнительного обмена информацией по квантовым и классическим каналам либо успешно передать секретный ключ, либо установить, что сообщение было скомпрометировано (в этом случае можно попытаться еще раз).

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

В отличие от случая с квантовыми вычислениями, в протоколе Беннета–Брассарда квантовая запутанность не применяется. Вероятно, поэтому квантовые криптосистемы средней мощности уже реализованы. В Лос-Аламос, к примеру, сообщения успешно отправлялись по оптоволоконному кабелю почти на 150 километров, а между Канарскими островами – по воздушному каналу примерно на 140 километров. Не исключено, что когда-нибудь квантовые технологии позволят нам пересылать не поддающиеся взлому сообщения даже через спутник.

Почему бы нам всем уже сейчас не перейти на квантовое шифрование? Дело в том, что на текущий момент квантовые криптосистемы находятся на стадии тестирования; они дорого стоят, часто ошибаются, да и скорость передачи данных у них не велика. Слабое место в них – не сами шифры: главную опасность представляют «дыры» в реализации. Вероятность разработать здесь «дырявый» протокол ничуть не меньше (а может, даже больше), чем в случае с обычными криптосистемами. Кроме того, неясно, как обеспечить передачу данных через интернет, где информация по пути к адресату многократно перекидывается от одного сервера к другому. Впрочем, пока современные системы шифрования могут спать спокойно: вряд ли в ближайшем будущем появятся квантовые или еще какие-нибудь хитрые компьютеры, способные эффективно разложить число на множители.

Квантовая телепортация

В 1996 году компания IBM анонсировала новое направление исследований. На форзаце февральского номера журнала Scientific American появилась двухстраничная реклама.

«Она годами делилась рецептами с другом из Осаки. Она познакомила его с сотней способов применения паприки. В ответ он раскрыл ей тайну своего восхитительного сукияки. Однажды Сейджи получил от Маргит письмо: „Никуда не уходи. Я сейчас телепортирую тебе гуляш“. Конечно, Маргит несколько поторопилась, но мы уже над этим работаем. Специалисты IBM создали ряд технологий, при помощи которых можно обратить некий объект в пыль, а затем в целости и сохранности воссоздать его в другом месте. И это вовсе не сказка: сделанное открытие затронет все сферы человеческой деятельности, от разработки компьютеров до освоения космоса. Умные ребята – вот только голубцы готовить не умеют. Пока».


Рис. 9.3. Реклама IBM. Публикуется с разрешения IBM


Что же это за волшебный процесс, которым так хвалится журнал? К гуляшу и кубитам он прямого отношения не имеет, хотя квантовый бит действительно умеет исчезать из одного места и появляться в другом, прямо как в сказке. В рекламе речь идет об открытии, сделанном в 1993 году Чарльзом Беннетом и его коллегами по IBM, среди которых был и Жиль Брассард. Вместе с квантовой криптографией ученые подарили миру и квантовую телепортацию.

Допустим, у Артура есть кубит, который нужно переправить Гарриет. Как это сделать лучше всего?

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


Рис. 9.4. Кубит


Альтернативный вариант – отправить Гарриет параметры кубита (-0,55 по «Истине» и 0,84 по «Лжи»), чтобы она могла воссоздать его у себя. Правда, эти параметры должны быть Артуру заранее известны: в противном случае получить он их никак не сможет, поскольку любое измерение разрушит квантовое состояние кубита.

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

На рис. 9.5 кубиты с сердечками надлежащим образом запутаны. Один из них находится у Артура, другой – у Гарриет. Если Артур измерит состояние своего кубита, он с одинаковой вероятностью увидит либо ноль, либо единицу. Но если он увидит ноль, то и Гарриет увидит ноль, а если он увидит единицу, то и Гарриет тоже увидит единицу (прямо как с бейсбольными играми).


Рис. 9.5. Сцепленные кубиты


Все дело в том, что теперь у Артура не один кубит, а два. Один – с сердечком – сцеплен с кубитом Гарриет, другой – со звездочкой – он хочет отослать. Ранее мы уже говорили, что система из двух кубитов описывается четырехмерной сферой. Не нарушая квантовое состояние кубитов, Артур аккуратно крутит сферу относительно всех четырех осей, а затем измеряет оба кубита, в результате чего они превращаются в обычные биты со значениями ноль или единица.

Полученные биты Артур отсылает Гарриет. Один из них несет информацию о том, нужно ли Гарриет вращать кубит, другой – нужно ли его переворачивать. Гарриет выполняет необходимые действия, и… та-дам! Ее кубит приходит в то же состояние, в котором изначально находился кубит Артура. Ловкость рук – и никакого мошенничества! Верится с трудом, однако схема работает.

А что же стало с кубитами Артура? После измерения их квантовые состояния разрушились. По-другому и быть не могло – иначе у кубита Артура образовался бы клон, а это противоречит квантовым законам.

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

Кубит Гарриет является, по сути, двойником кубита Артура, только расположен он в пространстве немного по-другому. Благодаря двум полученным от Артура битам Гарриет сумеет привести его в искомое положение. Эти маленькие биты волшебным образом помогут ей воссоздать исходный кубит, хотя она так и не узнает, какие именно манипуляции проводил с кубитами Артур.


Рис. 9.6. Кубит


Вы спросите, как все это связано с гуляшом и с чудесными транспортерами из сериала «Звездный путь»? Давайте посмотрим, как можно организовать транспортер, выполняющий квантовую телепортацию. Допустим, я хочу телепортироваться из Чикаго в Токио и обращаюсь в специализированную компанию. Они создают запутанную квантовую систему из внушительного числа кубитов. Часть кубитов, соблюдая все возможные меры предосторожности, доставляют в Чикаго, остальные – в Токио. В Чикаго меня вместе с кубитами помещают в специальную камеру; описать мое состояние нужно очень точно, поэтому кубитов должно быть достаточно много. Нас вращают в многомерном пространстве, измеряют, и в результате мы все превращаемся в обычные нули и единички. Полученную кучу битов передают в токийский филиал, где с ними в такой же камере производят необходимые вращения. Потом камеру открывают, и я выхожу. Вот это да!

Использованные кубиты – отработанный материал. Если я решу вернуться, или нужно будет телепортировать кого-то еще, понадобится новая система запутанных кубитов. Кстати, с самолетами дело обстоит примерно так же: на обратном пути невозможно повторно воспользоваться израсходованным топливом.

Впрочем, это еще не самое страшное. Главная проблема – сохранить все зависимости между кубитами. Чтобы описать меня, требуется порядка миллиона миллиардов триллионов сцепленных кубитов: примерно столько атомов содержится в человеческом теле. И это еще довольно оптимистичная оценка, поскольку на деле кубитов, вероятно, понадобится намного больше. Ведь достаточно потерять каких-нибудь две-три связи (которые охотно разрушаются при малейшем взаимодействии с окружающей средой) – и из камеры вывалится порядком изуродованная, а то и вовсе неживая версия меня. Поэтому – только после вас. Я уж лучше по старинке, на самолете. Встретимся на месте!

Квантовое будущее

Ряд ученых полагают, что теорию вычислений пора переводить на квантовый уровень. Пусть кванты и не позволят нам решать NP-полные задачи, однако с их помощью можно будет эмулировать физические системы, а это значительно приблизит нас к пониманию сущности материи, космоса и даже человеческого мозга. Мир увидит такие научные открытия, которые сейчас не в состоянии даже вообразить!

Впрочем, некоторые, напротив, не видят в развитии квантовых алгоритмов и процессоров особого прогресса. По их мнению, с середины девяностых мы практически стоим на месте; маловероятно, чтобы квантовые компьютеры в обозримом будущем вошли в повседневную жизнь. Если не случится какого-нибудь глобального прорыва, квантовые вычисления еще долго будут оставаться предметом научной фантастики.

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

Глава 10. Будущее вычислений

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

«P против NP» – не просто хитрая математическая головоломка. Даже будучи неразгаданной, она дает нам некий каркас для размышлений и подсказывает способы борьбы с важнейшими вычислительными задачами. Приведем наиболее актуальные на сегодняшний момент проблемы.


• Параллельные вычисления. До недавних пор скорость процессоров удваивалась каждые полтора-два года. Современные процессоры работают практически на пределе физических возможностей, и существенно ускорить их уже не получится. Производительность повышают за счет разветвления, когда на одном кристалле или в облаке согласованно работают сразу несколько процессоров. Наш мир распараллеливается все больше и больше; как адаптировать к этому вычислительные алгоритмы?

• Большие данные. Каждый день в мире появляются тонны новых данных. Взять хотя бы интернет или многочисленные научные эксперименты… Как работать с такими огромными объемами информации? Как искать, структурировать, анализировать, делать прогнозы?

• Интернет вещей. Почти каждый современный человек пользуется компьютерными сетями – к примеру, общаясь на Facebook или отправляя письмо по электронной почте. Дело идет к тому, что скоро все произведенные человеком предметы, будь то одежда или лампочки для чтения, тоже станут частью сети. Как ориентироваться в мире с таким количеством связей?


Независимо от того, равны классы P и NP или не равны, изучение проблемы P и NP поможет выработать подход к решению данных вопросов.

Параллельные вычисления

В 1965 году Гордон Мур заметил, что число базовых элементов микросхемы – транзисторов – стремительно возрастает с каждым годом. Мур выдвинул смелое предположение: в последующее десятилетие количество транзисторов на одном кристалле каждые два года будет увеличиваться вдвое. Десятью годами дело в результате не ограничилось; закон Мура – так окрестили правило – действует и по сей день, и в ближайшие годы тенденция, похоже, сохранится.

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

И все же транзисторов на кристалле становится все больше и больше. Зачем это нужно? Чтобы запускать сразу несколько вычислений одновременно: распараллеливая работу, мы значительно уменьшаем время решения задач.

Возьмем для примера суперкомпьютер IBM по имени Уотсон, который в феврале 2011 победил в американской телевикторине «Jeopardy!». Уотсон состоит из 90 серверов IBM Power 750 по 4 процессора Power 7 в каждом. Один процессор Power 7 содержит восемь более мелких процессоров, или ядер, и может параллельно вести сразу восемь вычислений. В итоге получается 32 ядра в одном сервере и 2880 во всем компьютере, так что Уотсон может запускать 2880 процессов одновременно. Неудивительно, что он анализирует варианты ответа быстрее, чем соперники, и успевает нажать кнопку миллисекундой раньше! Впрочем, если производительность компьютеров продолжит расти по закону Мура, то уже через несколько лет 2880 параллельных процессов покажутся нам сущим пустяком; в ближайшие десятилетия могут появиться компьютеры с миллионами и даже миллиардами ядер.

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

К проблеме равенства P и NP тоже пытались применить распараллеливание. Помните Веруку Солт? Девочку из книги «Чарли и шоколадная фабрика», о которой мы говорили в первой главе? Верука очень хотела найти золотой билет, а все билеты были спрятаны в шоколадных плитках. Ее отец – владелец ореховой фабрики – распараллелил задачу, разделив шоколадки между всеми своими рабочими, которых у него было более ста. Так почему бы не сделать то же самое с задачами из класса NP? Например, распределить все потенциальные клики между разными ядрами и даже компьютерами? Иногда время перебора действительно может заметно сократиться – например, с нескольких недель до нескольких часов, однако некоторые NP-задачи и после распараллеливания останутся такими же неприступными. Будь у нас даже миллион компьютеров с триллионом ядер, каждое из которых выполняет квинтиллион операций в секунду, – для поиска клики размера 50 среди 20000 жителей Королевства все равно потребовалось бы в гугол раз больше лет, чем живет наша вселенная (а гугол, как уже говорилось, – это единица и сто нулей). В мире, где можно распараллелить любой процесс, вопрос о равенстве P и NP по-прежнему актуален.

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

Класс задач, которые можно быстро решить в параллельном режиме, тоже получил обозначение: его назвали NC, или Nick’s Class, – в честь пионера параллелизации алгоритмов Николаса Пиппенджера. Если P = NP (так ли это, мы пока не знаем), то задачи, для которых существует эффективный алгоритм, в параллельном режиме решаются в разы быстрее. А если NP = NC (что, опять-таки, пока находится под большим вопросом), то и любую переборную задачу из NP тоже можно решить практически мгновенно, распараллелив вычисления по разным машинам и ядрам, – т. е. мир, где NP = NC, еще более совершенен, чем тот, где P = NP. И хотя классы NC и NP вряд ли окажутся равны, отношения между ними не менее загадочны, чем отношения между P и NP.

Большие данные

Каждую секунду мы загружаем 35 минут видеоматериала на YouTube, создаем 1600 сообщений в Twitter, 11000 постов в Facebook, 50000 поисковых запросов в Google и отправляем 3000000 электронных писем (из которых 90 процентов – это спам).

Телескоп «Хаббл» вращается на околоземной орбите и фотографирует космос, отсылая на Землю 200000 байт информации в секунду (один байт – это примерно один символ алфавита). На смену «Хабблу» планируется запустить «Джеймс Уэбб» с огромным параболическим зеркалом, который будет отправлять уже 3500000 байт в секунду.

Большой адронный коллайдер – самый крупный ускоритель частиц на планете – разместился близ границы Швейцарии и Франции. Каждую секунду он создает примерно полмиллиарда байт информации – и так изо дня в день, из года в год, а в году, между прочим, 31 миллион секунд!

Коллайдер построили в Европейском центре ядерных исследований (ЦЕРН). В пару к нему была создана сверхмощная вычислительная сеть, которая распределяет потоки генерируемых коллайдром данных по серверам в тридцати четырех странах; обработкой и анализом этих данных занимаются ученые по всему миру.

Описание ДНК человека занимает примерно 55 миллионов байт. Для хранения ДНК всех жителей Земли, т. е. семи миллиардов человек, потребуется что-то около 400 квадриллионов байт. А если считать не только людей?

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

Информация не всегда приходит из внешнего мира. Научные эксперименты часто оказываются слишком сложными и дорогими, и для понимания физических, биологических и химических процессов активно используется компьютерное моделирование. Результат – очередные колоссальные объемы данных, которые ждут не дождутся, когда их проанализируют.

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

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

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

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

Интернет вещей

Почти два миллиарда жителей планеты общаются через интернет: пишут электронные письма и сидят в социальных сетях. Вообще же, общение, работа, учеба и развлечения вышли на такой уровень, который в XX веке невозможно было даже представить.

Что будет, если начать подключать к интернету и вещи? Уже совсем скоро в продаже появятся недорогие и компактные чипы, способные выходить в интернет через Wi-Fi и сотовые сети или другие беспроводные системы, которые пока находятся на стадии разработки. Такой чип мы сможем поставить почти на любой предмет, будь то одежда, деталь автомобиля или еда из супермаркета. Под нашим контролем окажется практически все: мы будем знать, когда наши дети не пристегнуты, и без всяких расчетов получим количество съеденных за день калорий. Кончается молоко или шампунь? Беспокоиться не о чем – новую партию доставят автоматически; наверняка она уже на пути к вашему дому. С приемом лекарств больше не будет случаться никаких накладок. Одежда, которую вы надеваете, предупредит вас, если для данной погоды и мероприятия она не годится, а может, даже спросит что-то вроде: «Вы уверены, что хотите надеть с этими брюками именно эту рубашку?» Если вы плохо различаете цвета или совсем не разбираетесь в моде, такая помощь может оказаться очень кстати.

А еще вы больше никогда не потеряете бумажник, ключи, билеты и… что вы там обычно теряете? Честно говоря, у вас вообще не будет никакого бумажника, ключей и билетов. Представьте: двери открываются сами – по сигналу, который отправляет ваш мобильник. Банкомат выдает купюры без лишних вопросов. В супермаркете можно просто взять товар и спокойно уйти. Все счета и налоги оплачиваются автоматически.

Разумеется, все эти устройства должны работать согласованно. Потребуются технологии, при помощи которых вещи смогут общаться, не раскрывая наши персональные данные. Скоординированность процессов достигнет небывалого уровня; подумать только, как улучшится ситуация на дорогах, когда автомобили начнут «разговаривать» друг с другом! Трудоемкие задачи пойдут непрерывным потоком, и справляться с ними нужно будет максимально быстро и корректно: ведь если система не среагирует вовремя, даже мелкая авария может вылиться в огромную пробку. Периодически мы будем упираться в проблему P и NP, и тогда придется мобилизовать все наши силы и возможности.

В девяностых годах у компании Sun Microsystems (позднее поглощенной компанией Oracle) появился такой лозунг: «Сеть – это компьютер». Каждый компьютер сети работает самостоятельно, однако вместе они образуют единый вычислительный организм. Интернет вещей – это тоже один (чудовищно огромный) компьютер. Его трудно «приручить», но если мы все-таки справимся, перед нами откроются поистине удивительные возможности.

На пути научно-технического прогресса

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

Никогда не знаешь, каких последствий ждать от внедрения инновационных технологий. В пятидесятые годы прошлого века владелец крупной компании по перевозке грузов Малькольм Маклин придумал специальный транспортный контейнер, который можно было без разгрузки сразу перемещать с корабля на автомобиль. Его открытие вызвало настоящую «контейнерную революцию»; появились специальные судна-контейнеровозы, вмещавшие тысячи контейнеров, а порты массово увольняли грузчиков и переходили на автоматический режим. Экономика Китая резко пошла вверх, поскольку китайские товары можно было дешево доставить в любую точку мира… и все это благодаря какому-то стальному ящику!

Изобретение автомобиля повлекло за собой бурное развитие пригородов. Мобильные телефоны избавили нас от необходимости обо всем договариваться заранее. При помощи Twitter иногда удается свергнуть правительство. Любое нововведение отражается на нас самым непредсказуемым образом; будьте готовы к тому, что это случится снова.

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

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

Технология, проработавшая без сбоев долгое время, становится потенциально опасной. Мы начинаем слишком доверять ей, и нам кажется, будто все и дальше будет так же хорошо. Неприятности обычно застают нас врасплох; чем реже они случаются, тем меньше мы оказываемся готовы к ним. Ярчайшие примеры – разрушенные ураганом «Катрина» дамбы в Нью-Орлеане, обширный разлив нефти в Мексиканском заливе после взрыва буровой платформы в 2010 году, а также авария на японской АЭС «Фукусима-1» в 2011 году, спровоцированная землетрясением и последовавшим за ним цунами. С технологией следует обращаться как с диким животным. Следующая крупная авария не должна привести к глобальной катастрофе (впрочем, будем надеяться, что она не случится).

И снова про P и NP

Доказать неравенство P и NP будет очень и очень непросто. Ведь для этого придется обосновать тот факт, что с задачей о клике (или с любой другой NP-полной задачей) не справится ни один известный – а также неизвестный – эффективный алгоритм. Но как можно рассуждать о неизвестных алгоритмах?

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

«P против NP» – не просто математическая головоломка; это образ мыслей, при котором вычислительные проблемы классифицируются в зависимости от трудоемкости. И хотя формально неравенство классов пока не доказано, при встрече с очередной NP-полной задачей мы не мечтаем отыскать хороший, стопроцентно эффективный алгоритм; мы просто делаем все возможное и применяем весь доступный арсенал, сочетая приближенные методы с эвристическими и повышая вычислительную мощь. NP-полные задачи дают нам ориентиры и побуждают создавать новые способы борьбы.

Классам P и NP удалось сплотить научное сообщество. NP-полные задачи возникают в физике, биологии, экономике и многих других областях. Проблемы у физиков и экономистов как будто совершенно разные, однако благодаря их общности ученые с успехом применяют к ним одни и те же техники и алгоритмы. Метод поиска состояния минимальной энергии физической системы может пригодиться для поиска состояния равновесия в сложных экономических процессах.

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

Вычисление – это нетривиальный процесс, и касается он не одних лишь компьютеров. Проблема равенства P и NP тесно связана с вопросами о разного рода ограничениях; тут и природные ресурсы, и законы развития физических и биологических систем, и даже возможности человеческого мозга. Тайна не раскрыта – а значит, своих пределов мы пока не знаем. И поэтому у нас есть полная свобода действий!

Благодарности

Прежде всего я хотел бы поблагодарить Моше Варди, который вдохновил меня на написание обзорной статьи для журнала Communications of the ACM и сам ее отредактировал. Статья вышла под названием The Status of the P versus NP Problem; ее популярность навела меня на мысль развить тему и выпустить книгу, доступную для широкой аудитории.

Пока я занимался книгой, Уильям Гасарч, с которым мы вместе ведем блог, всячески меня поддерживал и читал каждую главу еще в самом черновом и притом рукописном варианте. Помимо Уильяма предварительную версию всей книги изучили Алана Лидовер, а также Джон, Джим и Крис Пуртило, которые высказали много ценных замечаний. Черновики отдельных глав проверяли Куан-Линг Чен, Джош Грочоу, Ральф Хансен, Адам Калинич, Дэвид Пеннок и Рахул Сантанам; их советы также очень помогли мне.

Мануэль Блюм, Стивен Кук, Дэвид Джонсон, Леонид Левин, Альберт Мейер поделились со мной своими мнением относительно зарождения проблемы равенства P и NP. Благодаря Александру Разборову я немного разобрался с советской историей.

Вся моя научная деятельность в области теоретической информатики, все мое рабочее окружение – исследователи, студенты и многие другие (привести здесь полный список не представляется возможным) – в той или иной мере повлияли на написание этой книги. Особую признательность хочу выразить моим коллегам из Калифорнийского университета в Беркли, Массачусетского технологического института, Чикагского университета, Центра математики и информатики в Амстердаме, научно-исследовательского института NEC, Технологического института Toyota в Чикаго и Северо-Западного университета: я очень ценю нашу дружбу и наши интересные беседы.

Мои первые представления о проблеме равенства P и NP сформировались под влиянием двух людей, которые, безусловно, заслуживают отдельного упоминания: это Юрис Хартманис, который познакомил меня с P и NP, когда я еще был студентом Корнелльского университета, и Майкл Сипсер, под руководством которого я писал диссертацию в Калифорнийском университете и в Массачусетском технологическом институте.

За примерами раскраски карт в шестой главе мне пришлось обратиться в интернет; хочу поблагодарить всех, кто откликнулся: это Крис Богарт, Хсиен-Чих Чанг, Палволги Домотор, Дэвид Эпштейн, Лукас Грабовски, Гил Калай, Чарльз Мартель и Деррик Столи.

Книгу я писал, будучи профессором электротехники и информатики в Школе инженерии и прикладных наук имени Роберта Маккормика при Северо-Западном университете. Университет очень поощряет книжные проекты, направленные на популяризацию научных знаний. Я активно пользовался всеми доступными ресурсами, в особенности обширной библиотекой, представленной как на цифровых носителях, так и в бумажном виде. В университете работают замечательные люди; мой помощник по административной части Марджори Рейес оказала мне неоценимую помощь.

Мой принстонский редактор Вики Керн дала мне множество толковых советов и тщательно вычитывала рукопись на всех стадиях ее создания; благодаря ей книга стала намного лучше. Также я очень признателен ее помощнику Куинну Фустингу и вообще всем сотрудникам издательства Princeton University Press.

Огромное спасибо моей семье – жене Марси и дочерям Энни и Молли – за любовь и поддержку.

Примечания и список литературы

Материалы книги базируются как на моем собственном исследовательском опыте в области сложности вычислений, так и на знаниях, почерпнутых у тысяч других теоретиков и практиков, разделяющих мой интерес к проблеме P и NP. Основой послужили также некоторые статьи из моего блога Computational Complexity.

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

Все дополнения и изменения, касающиеся источников и ссылок, а также найденные в тексте серьезные ошибки будут выкладываться на сайт книги: http://press. princeton.edu/titles/9937.html. Помимо этого, на сайте приводятся ссылки на использованные статьи, материалы выступлений и некоторую дополнительную информацию, а также список рекомендуемой к прочтению литературы по теме.

Предисловие

Lance Fortnow, «The Status of the P versus NP Problem». Communications of the ACM 52, no. 9 (September 2009): 78–86.

Stephen Hawking, A Brief History of Time: From the Big Bang to Black Holes (New York: Bantam Dell, 1988).

Глава первая

История Веруки Солт позаимствована из книги Roald Dahl, Charlie and the Chocolate Factory (New York: Knopf, 1964)[6].

Информация о разработке анатомически правильной искусственной руки подчерпнута из выступления Йоки Мацуока на конференции Ассоциации по исследованиям в области вычислительной техники (CRA) в Сноуберде 18 июля 2010 года.

Примеры задач коммивояжера созданы программой Марка Даскина, см. http://sitemaker.umich.edu/msdaskin/software.

Глава вторая

Почти все в этой главе – вымысел автора, созданный с целью дать читателю представление о фантастическом мире, в котором P = NP. Исключение составляет раздел про «бритву Оккама».

Глава третья

Подробнее об эксперименте Милгрэма можно прочитать в статье Stanley Milgram, «The Small World Problem», Psycology Today 2, no. 1 (1967): 60–67.

Информация о числе Бэйкона взята с сайта Internet Movie Database.

Проблема четырех красок увлекательно излагается в работе Robin Wilson, Four Colors Suffice: How the Map Problem Was Solved (Princeton, NJ: Princeton University Press, 2004).

Глава четвертая

Цитата из Кука – на самом деле не совсем цитата; я перефразировал абзац из основополагающей работы ученого, используя более современные понятия. Приведу здесь оригинальный текст:

«Теорема дает нам основания полагать, что множество тавтологий на самом деле очень интересное, поскольку оно, по всей видимости, не принадлежит L*. Думаю, стоит попытаться доказать данную гипотезу: в теории сложности это стало бы величайшим прорывом».

Steve Cook, «The Complexity of Theorem-Proving Procedures», Proceedings of the Third Annual ACM Symposium on Theory of Computing (New York: ACM), 151–58.

Richard Karp, «Reducibility among Combinatorial Problems», Complexity of Computer Computations 40, no. 4 (1972): 85–103.

Bob Sehlinger (author) and Len Testa (contributor), The Unofficial Guide Walt Disney World 2010 (New York: Wiley, 2010).

Раздел «Что в имени?» основывается на работе Donald Knuth, «A Terminological Proposal», ACM SIGACT News 6, no. 1 (January 1974): 12–18.

Kevin Sack, «60 Lives, 30 Kidneys, All Linked», New York Times, February 19, 2012, A1.

Глава пятая

Здесь по большей части излагаются материалы из следующих источников.

Lance Fortnow and Steve Homer, «A Short History of Computational Complexity», Bulletin of the European Association for Theoretical Computer Science 80 (June 2003); «Computational Complexity» column.

Dennis Shasha and Cathy Lazere, «A Good Solution Is Hard to Find», Out of Their Minds: The Lives and Discoveries of 15 Great Computer Scientists (New York: Springer, 1995).

Juris Hartmanis, «Observations about the Development of Theoretical Computer Science», Annals of the History of Computing 3, no. 1 (January 1981): 42–51.

B. A. Trakhtenbrot, «A Survey of Russian Approaches to Perebor (Brute-Force Search) Algorithms», Annals of the History of Computing 6, no. 4 (October 1984): 384–400.

Michael Sipser, «The History and Status of the P versus NP Question», Proceedings of the 24th Annual ACM Symposium on Theory of Computing (New York: ACM, 1992), 603–18. (В этой статье приводится оригинал письма Гёделя фон Нейману и его английский перевод.)

Дополнительным источником послужили личные беседы с некоторыми учеными, включая Стивена Кука и Леонида Левина.

Колмогоров действительно пробовал свои силы в истории; данный факт подтвердили российские участники международного семинара «Колмогоровская сложность и ее приложения», проведенного в честь столетия со дня рождения ученого (Дагштул, Германия, 27 апреля – 2 мая 2003 года). 1 мая 2003 года я написал об этом в своем блоге Computational Complexity.

Историю о том, как Колмогоров спас теорию вероятностей, однажды упомянул Александр Разборов; она также приводится в блоге http://ansobol.livejournal.com/12551.html?thread=235015. Из текста можно заключить, что это все-таки, наверное, анекдот.

Литература

Alan Cobham, «The Intrinsic Computational Difficulty of Functions», in Proceedings of the 1964 International Congress for Logic, Methodology, and Philosophy of Science, 24–30.

Stephen Cook, «The Complexity of Theorem-Proving Procedures», in Proceedings of the Third Annual ACM Symposium on Theory of Computing (New York: ACM, 1971), 151–58.

Jack Edmonds, «Paths, Trees and Flowers», Canadian Journal of Mathematics 17 (1965): 449–67.

Juris Hartmanis and Richard Stearns, «On the Computational Complexity of Algorithms», Transactions of the American Mathematical Society 117 (1965): 385–406.

Richard Karp, «Reducibility among Combinatorial Problems», Complexity of Computer Computations 40, no. 4 (1972): 85–103.

Левин Л. А. Универсальные задачи перебора // Проблемы передачи информации, т. 9 (1973), вып. 3, с. 115–116.

Warren McCulloch and Walter Pitts, «A Logical Calculus of the Ideas Immanent in Nervous Activity», Bulletin of Mathematical Biology 5, no. 4 (1943): 115–33.

Panel discussion, Complexity of Computer Computations 40, no. 4 (1972): 169–85.

Alan Turing, «On Computable Numbers, with an Application to the Entscheidungsproblem», Proceedings of the London Mathematical Society 42 (1936): 230–65.

Яблонский С. В. О невозможности элиминации перебора всех функций из P2 при решении некоторых задач теории схем // Доклады Академии наук СССР, 1959, т. 124, № 1, с. 44–47.

Журавлев Ю. И. О невозможности построения минимальных дизъюнктивных нормальных форм функций алгебры логики в одном классе алгоритмов // Доклады Академии наук СССР, 1960, т. 132, № 3, с. 504–506.

Глава шестая

Пример задачи коммивояжера взят из пресс-релиза Центра исследований параллельных вычислений при университете Райса (CRPC Researchers Solve Traveling Salesman Problem for Record-Breaking 13,509 Cities, 2003).

Когда мне потребовалась помощь с эвристическими алгоритмами и примерами раскраски карт, я обратился за консультацией в раздел вопросов и ответов на сайте http://cstheory.stackexchange.com/questions/4027/coloring-planar-graphs, а также опубликовал вопрос в своем блоге.

Карта провинций королевства создана по аналогии с некоторыми примерами в статье David P. Dailey, Uniqueness of Colorability and Colorability of Planar 4-Regular Graphs Are NP-Complete, Discrete Mathematics 30 (1980): 289–93.

Глава седьмая

Процитированную в начале главы фразу Юрис Хартманис произнес весной 1985 года, когда читал курс в Корнелльском университете.

С редакционной политикой журнала Journal of the ACM относительно проблемы равенства P и NP можно ознакомиться по ссылке: http://jacm.acm.org/instructions/pnp.

Работу Деолаликара я получил от него самого: я был среди тех двадцати двух специалистов, которым 6 августа 2010 года Винэй Деолаликар направил по электронной почте письмо с приложенным к нему доказательством.

О деятельности Джероламо Кардано подробно рассказано в книге David Kahn, The Codebreakers: The Story of Secret Writing (New York: Macmillan, 1967).

Глава восьмая

Сведения об истории развития криптографии по большей части почерпнуты из книги David Kahn, The Codebreakers: The Story of Secret Writing (New York: Macmillan, 1967).

Примеры судоку с нулевым разглашением перекочевали в книгу из моего блога Computational Complexity (запись от 3 августа 2006 года): http://blog.computationalcomplexity.org/2006/08/zero-knowledge-sudoku.html.

Литература

Whitfield Diffie and Martin Hellman, «New Directions in Cryptography», IEEE Transactions on Information Theory 22, no. 6 (November 1976): 644–54.

Craig Gentry, «Fully Homomorphic Encryption Using Ideal Lattices», in Proceedings of the 41st Annual ACM Symposium on Theory of Computing (New York: ACM, 1979), 169–78.

Ronald Rivest, Adi Shamir, and Leonard Adleman, «A Method for Obtaining Digital Signatures and Public-Key Cryptosystems», Communications of the ACM 21, no. 2 (February 1978): 120–26.

Глава девятая

Представление о той роли, которую Ричард Фейнман сыграл в развитии квантовых вычислений, я получил из работы David Deutsch, «Quantum Computation», Physics World, January 6, 1992.

Литература

Charles Bennett and Gilles Brassard, «Quantum Cryptography: Public Key Distribution and Coin Tossing», Proceedings of the IEEE International Conference on Computers, Systems, and Signal Processing (Amsterdam: Elsevier, 1984), 175–79.

Charles Bennett, Gilles Brassard, Claude Crepeau, Richard Jozsa, Asher Peres, and William K. Wootters, «Teleporting an Unknown Quantum State via Dual Classical and Einstein-Podolsky-Rosen Channels», Physical Review Letters 70 (1993): 1895–99.

Lov Grover, «A Fast Quantum Mechanical Algorithm for Database Search», in Proceedings of the Twenty-Eighth Annual ACM Symposium on Theory of Computing (New York: ACM, 1996), 212–19.

Stephen Pincock, Codebreaker: The History of Codes and Ciphers (New York: Walker and Co., 2006), 151.

Peter Shor, «Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer», SIAM Journal on Computing 26 (1997): 1484–1509.

Глава десятая

Закон Мура опубликован в работе Gordon Moore, «Cramming More Components onto Integrated Circuits», Electronics 38, no. 8 (April 19, 1965).

Об устройстве Уотсона рассказано в блоге IBM: «What Runs IBM Watson and Why», David Davidian.

Историю создания контейнеровозов см. в книге Marc Levinson, The Box: How the Shipping Container Made the World Smaller and the World Economy Bigger (Princeton, NJ: Princeton University Press, 2008)

Ссылки на статистику по большим данным

http://www.youtube.com/t/press_statistics

http://techcrunch.com/2011/03/14/new-twitter-stats-140m-tweets-sent-per-day-60k-accounts-created-per-day/

http://www.facebook.com/press/info.php?statistics

http://email.about.com/od/emailtrivia/f/emails_per_day.htm

http://public.web.cern.ch/public/en/lhc/Computing-en.html

http://space.about.com/od/telescopesandoptics/p/hubbleinfo.htm

http://webbtelescope.org/webb_telescope/technology_at_the_extremes/quick_facts.php

http://royal.pingdom.com/2011/01/12/internet-2010-in-numbers/

Примечания

1

Перевод: М. Барон, Е. Барон.

(обратно)

2

Мое число Эрдёша равно двум, поскольку у меня имеются совместные публикации с тремя его соавторами. В единицу оно уже вряд ли когда-нибудь превратится: Пал Эрдёш умер в 1996 году. Актерский опыт у меня отсутствует (талант, впрочем, тоже), так что мое число Бэйкона не определено.

(обратно)

3

Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. – М.: Мир, 1982 / Michael Garey, David Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness. – W. H. Freeman, New York, 1979.

(обратно)

4

B. A. Trakhtenbrot. A Survey of Russian Approaches to Perebor Algorithms // Annals of the History of Computing vol. 6, no. 4 (October 1984).

(обратно)

5

Разве мы с вами только что не доказали истинность этого высказывания? На самом деле нет: ведь мы действовали в предположении, что все, что можно доказать, истинно. Однако Гёдель показал, что утверждение «Все, что можно доказать, истинно» также нельзя доказать, если только мы не умеем доказывать ложные утверждения. Вот что можно узнать, читая сноски!

(обратно)

6

На русском языке: Роальд Даль «Чарли и шоколадная фабрика». – Прим. перев.

(обратно)

Оглавление

  • Предисловие
  • Золотой билет
  •   Задача о разбиении
  •   Немного о руках
  •   P против NP
  •   В поисках билета
  •   Долгая дорога
  •   Решение задачи о разбиении
  • Глава 2. Совершенный мир
  •   Урбанский алгоритм
  •   Компьютеры – рак – 1: 0
  •   Пост-урбанский бейсбол
  •   Бритва Оккама
  •   Автоматизация творческого процесса
  •   Первоклассный детектив
  •   Обратная сторона медали
  •   С небес на землю
  • Глава 3. Классы P и NP
  •   Заклятые друзья
  •   Шесть степеней отчуждения
  •   Задача о числе паросочетаний
  •   В поисках клики
  •   Передай скипетр
  •   Раскраска домов
  •   На первый-второй рассчитайсь!
  •   P против NP
  •   За границей королевства
  •     Биология
  •     Физика
  •     Экономика
  •     Математика
  •   Решение головоломки «Путешествие по додекаэдру»
  • Глава 4. Самые трудные задачи класса NP
  •   Первая NP-полная задача
  •   Двадцать плюс одна
  •   Что в имени?
  •   После Карпа
  •     Доминирующее множество
  •     Разбиение на треугольники
  •     Гигантские судоку
  •     Цепочка из почек
  •   Мастера конспирации
  •     Изоморфизм графов
  •     Простые числа. Разложение на множители
  •   Линейное программирование
  • Глава 5. Хроника предшествующих событий
  •   На Западе
  •     Алан Тьюринг
  •     Вычислительная сложность
  •     Классы P и NP
  •   На Востоке
  •     Сергей Всеволодович Яблонский
  •     Андрей Николаевич Колмогоров
  •     Леонид Анатольевич Левин
  •   Письмо Гёделя
  •   Правило марсианина
  • Глава 6. Преодолевая трудности
  •   Полный перебор
  •   Эвристические методы
  •   Иголка в стоге сена
  •   Приближенные методы
  •   Другая задача
  •   Время смириться
  •   Весь боевой арсенал
  • Глава 7. Как доказать, что P ? NP
  •   Парадокс лжеца
  •   Схемы
  •   Как не доказать, что P ? NP
  •   Текущее положение дел
  • Глава 8. Совершенно секретно
  •   Очень краткая история классической криптографии
  •   Современная криптография
  •   Криптография в совершенном мире
  •   Судоку с нулевым разглашением
  •   Криптография в играх
  •   Облако секретных вычислений
  •   В поисках случайности
  •   Проблемы разрастаются
  • Глава 9. Его величество квант
  •   Квантовый видеорекордер
  •   Квантовая криптография
  •   Квантовая телепортация
  •   Квантовое будущее
  • Глава 10. Будущее вычислений
  •   Параллельные вычисления
  •   Большие данные
  •   Интернет вещей
  •   На пути научно-технического прогресса
  •   И снова про P и NP
  • Благодарности
  • Примечания и список литературы

  • Наш сайт является помещением библиотеки. На основании Федерального закона Российской федерации "Об авторском и смежных правах" (в ред. Федеральных законов от 19.07.1995 N 110-ФЗ, от 20.07.2004 N 72-ФЗ) копирование, сохранение на жестком диске или иной способ сохранения произведений размещенных на данной библиотеке категорически запрешен. Все материалы представлены исключительно в ознакомительных целях.

    Copyright © читать книги бесплатно