Рассмотрим следующую алгоритмическую задачу:
Входные данные: натуральное число вместе с его простой факторизацией.
Найти: натуральные числа которые минимизируют , с учетом ограничения, что
В чем сложность этой проблемы? Есть ли алгоритм полиномиального времени? Это NP-жесткий?
Эта проблема в основном задает вопрос: из всех прямоугольных тел, чей объем равен а размеры которых являются целыми числами, какой из них имеет наименьшую площадь поверхности?
Эта проблема была поставлена Дэном Мейером под заголовком «Математическая проблема, которую не смогли решить 1000 учителей математики» . До сих пор ни один из учителей математики, с которыми он работал, не нашел разумного алгоритма для этой проблемы. В его контексте определение «разумный» немного неточно, но как компьютерные ученые мы можем задать более точный вопрос о сложности этой проблемы.
Очевидный подход заключается в перечислении всех возможностей для , но это занимает экспоненциальное время. Комментаторы в блоге Дэна Мейера предложили много эффективных алгоритмов-кандидатов, которые, к сожалению, оказались неверными. Мартин Штраус полагает, что эта проблема, похоже, напоминает 3-раздел , но я не вижу сокращения.
Позвольте мне также прояснить некоторые заблуждения, которые я видел в комментариях / ответах:
Вы не можете уменьшить из 3-х разделов, просто заменив каждое число его степенью , поскольку целевые функции двух задач различны. Очевидное сокращение просто не работает.
Неверно, что оптимальным решением является выбор одного из в качестве ближайшего делителя к . Я вижу множество людей, которые предполагают, что это так, но на самом деле это не правильно. Это уже было опровергнуто в блоге Дэна Мейера. Например, рассмотрим ; , а 4 делит 68, так что вы можете подумать, что хотя бы один из должен быть 4; однако это не правильно. Оптимальное решение: , , . Другой контрпример: , , но оптимальное решение , , . ( Может быть верно, что для всех оптимальное решение включает в себя, чтобы хотя бы один из был равен либо наименьшему делителю большему, чем либо наибольшему делителю меньшему чем - у меня нет контрпример прямо сейчас - но если вы думаете, что это утверждение верно, оно потребует доказательств. Вы абсолютно не можете предположить, что это правда.)z = 2x , y , z n 3 √ 3 √
«Сделать одинаковым размером» не обязательно дает оптимальный ответ во всех случаях; см. сообщение в блоге Дэна Мейера для контрпримеров. Или, по крайней мере, для некоторых разумных толкований фразы «сделайте их примерно одинакового размера» существуют контрпримеры, показывающие, что эта стратегия на самом деле не является оптимальной. Если вы хотите попробовать какую-то стратегию такого рода, убедитесь, что вы точно сформулировали утверждение, а затем предоставьте тщательное математическое доказательство.
Время работы не является полиномиальным. Чтобы эта проблема была в P, время выполнения должно быть полиномом от длины входных данных . Длина ввода примерно равна , а не . Очевидный алгоритм грубой силы можно заставить работать за или время, но это экспоненциально в и, таким образом, считается алгоритмом экспоненциального времени. Таким образом, это не полезно.lg n n O ( n 3 ) O ( n 2 ) lg n