Книга: Золотой билет

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

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

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

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», и любой алгоритм, решающий ее гигантскую версию, способен вычислить практически все, что угодно.

Оглавление книги


Генерация: 1.579. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз