Рассмотрим следующую алгоритмическую задачу:
Входные данные: натуральное число вместе с его простой факторизацией.
Найти: натуральные числа которые минимизируют , с учетом ограничения, что
В чем сложность этой проблемы? Есть ли алгоритм полиномиального времени? Это 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
Ответы:
Вот модифицированная версия алгоритма «выбрать делитель рядом с корнем куба». Во многих случаях это все равно должно быть грубой силой, поэтому я не уверен, насколько реальным является улучшение по сравнению с перечислением всех случаев. Тем не менее, я представил его как исправление к алгоритму в OEIS (который дал неверные результаты), потому что я считаю, что он должен быть точным, по крайней мере.
Вот алгоритм нахождения (s1, s2, s3) и площади поверхности прямоугольной призмы по ее объему n:
Этот алгоритм перечисляет некоторые из троек (s1, s2, s3), но ему нужно только проверить делители под корнем куба. (Поскольку не все три делителя могут быть выше корня куба). Аналогичным образом, s2 нужно только проверить делители n / s1 под квадратным корнем из n / s1, так как не оба делителя могут быть выше квадратного корня)
Примечание на шаге 3: если корень куба является делителем, то n является кубом, и мы можем остановиться на нем с минимальной площадью поверхности 6 * s1 ^ 2 из поля (s1, s1, s1).
Python:
источник
Проблема, конечно, была бы связана с факторинговой сложностью, если бы не были даны простые разложения. Принимая во внимание факторы и принимая во внимание все основные факторы, эта проблема, по-видимому, примерно такая же, как минимизация отклонения от среднего значения разделительных сумм (упражнение, возможно, аналитическое или экспериментальное, позволяет найти, насколько близко это интуитивное приближение к проблема держится).К
Здесь это трехсторонний случай (суммы разделов: ). случай с двумя путями был тщательно изучен и является NP трудным (с 1- го исх.). (Этот двусторонний случай не совсем совпадает с известной NP-полной проблемой двустороннего разбиения, где суммы разделов равны. Обратите внимание, что равные суммы разделов подразумевают 0 отклонений в суммах разделов и наоборот. ) 2- я ссылка изучает 3- способ и -way перегородки, частично эмпирически, где не так много , как изучение 2-полосная случае.nжурнал( х ) , журнал( у) , журнал( з) N
Самая простая трудная задача: разбиение числа / Мертенс
Многоканальное разбиение номера / Корф
источник
редактировать
Вот неофициальный аргумент, почему быстрый алгоритм вряд ли существует. Это предложение не изменилось, но я вынул то, что было здесь, потому что оно было слишком структурировано, как формальное доказательство в следующем разделе, и обсуждение отвлеклось на его ошибки, некоторые из которых я заметил сам, а один из которых DW любезно указал мне. Позвольте мне вместо этого попытаться выразить интуицию, стоящую за этим.
Что происходит, когда мы переводим те же шаги в другую алгебру, такую как сложение и вычитание вместо умножения и деления? Мы знаем (см. Лемму ниже), что наш алгоритм найдет 3-разбиение, произведения которого равны, если он существует, или определим, что такого 3-разбиения не существует. Итак, если бы мы могли перевести те же методы в аддитивную группу, мы могли бы найти 3-разбиение, суммы которого равны, или определить, что такого разбиения не существует. Другими словами, мы могли бы решить 3-разбиение за полиномиальное время. Это не очень правдоподобно.
Итак, почему такой алгоритм может работать для умножения и не для сложения? Одной из возможных причин является то, что каждое целое число имеет уникальную простую факторизацию при умножении, но циклически при сложении. Другое - умножение образует кольцо с сложением, поэтому у вас есть другой набор операций, который вы можете использовать. Другое - то, что вам придется обобщить алгоритм, чтобы он работал для простых чисел, и это может зависеть от их простоты. Один DW указал, что конкретный метод перевода может экспоненциально увеличить размер ваших входных данных. И, может быть, P = NP в конце концов.
Но если это те лазейки, которые позволяют работать быстрому алгоритму, я думаю, что это все еще полезно знать, потому что он подсказывает, где мы должны сосредоточить свои усилия. Мы должны искать что-то, что сломалось бы, если бы мы попытались применить это к NP-полной проблеме. Подход, который обобщил бы на другие алгебры, вероятно, лает неправильное дерево. Я подозреваю, однако, что умножение на самом деле не настолько отличается, чтобы это работало, но это всего лишь догадка.
лемма
Моя непосредственная мотивация доказать это состояла в том, чтобы заполнить ручную волну в моем доказательстве выше, что, если существует решение с совершенным кубом, оно является оптимальным. Однако эта формула может быть полезна для сокращения дерева поиска.
Ассорти Мысли
Я не вижу какой-либо очевидной симметрии, кроме взаимозаменяемости x, y и z, которая дает нам в лучшем случае постоянный множитель 6. У нас есть некоторые ускорения для 2-разбиения, которые в основном говорят, что мы хотим, чтобы оба члена быть как можно ближе друг к другу, но я не сразу вижу приложение к этой проблеме.
Вдобавок ко всему, простое ведение журнала всех чисел немедленно сводит это к классической проблеме с 3 разделами, используя сложение, или, эквивалентно, перевод числа в степень чисел в любой задаче сложения с 3 разделами превращает ее в проблема умножения, такая как эта. Это означает, что эта проблема не должна быть проще. У нас здесь есть первичная факторизация, тогда как эта факторизация не будет простой, но поможет ли это нам?
Графически поверхность xyz = 0 будет выглядеть как объединение плоскостей xy, yz и xz, а для любого положительного n уравнение будет выглядеть как y = n / xz, поэтому каждый срез вдоль координатной плоскости будет гипербола. Обычно мы можем сказать, что количество, которое мы пытаемся минимизировать, является самым низким в начале координат и наиболее быстро растет вдоль линии, где x = y = z. Если мы сможем искать только вдоль этого многообразия, мы сможем свести к двумерной задаче.
источник