Алгоритм минимизации площади поверхности при заданном объеме


22

Рассмотрим следующую алгоритмическую задачу:

Входные данные: натуральное число вместе с его простой факторизацией. Найти: натуральные числа которые минимизируют , с учетом ограничения, чтоN
Икс,Y,ZИксY+YZ+ИксZИксYZзнак равноN

В чем сложность этой проблемы? Есть ли алгоритм полиномиального времени? Это NP-жесткий?


Эта проблема в основном задает вопрос: из всех прямоугольных тел, чей объем равен а размеры которых являются целыми числами, какой из них имеет наименьшую площадь поверхности?N

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

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


Позвольте мне также прояснить некоторые заблуждения, которые я видел в комментариях / ответах:

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

  • Неверно, что оптимальным решением является выбор одного из в качестве ближайшего делителя к . Я вижу множество людей, которые предполагают, что это так, но на самом деле это не правильно. Это уже было опровергнуто в блоге Дэна Мейера. Например, рассмотрим ; , а 4 делит 68, так что вы можете подумать, что хотя бы один из должен быть 4; однако это не правильно. Оптимальное решение: , , . Другой контрпример: , , но оптимальное решениеИкс,Y,ZNN3Nзнак равно686834Икс,Y,ZИксзнак равно2Yзнак равно2Zзнак равно17Nзнак равно22222236Иксзнак равно37 , , . ( Может быть верно, что для всех оптимальное решение включает в себя, чтобы хотя бы один из был равен либо наименьшему делителю большему, чем либо наибольшему делителю меньшему чем - у меня нет контрпример прямо сейчас - но если вы думаете, что это утверждение верно, оно потребует доказательств. Вы абсолютно не можете предположить, что это правда.)z = 2Yзнак равно3Zзнак равно2x , y , z n 3 NИкс,Y,ZNN3 3 NN3

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

  • Время работы не является полиномиальным. Чтобы эта проблема была в P, время выполнения должно быть полиномом от длины входных данных . Длина ввода примерно равна , а не . Очевидный алгоритм грубой силы можно заставить работать за или время, но это экспоненциально в и, таким образом, считается алгоритмом экспоненциального времени. Таким образом, это не полезно.lg n n O ( n 3 ) O ( n 2 ) lg nО(N3)Л.Г.NNО(N3)О(N2)Л.Г.N


1
Интересный. Моим наивным подходом было бы «сделать примерно одинакового размера», обобщив идею, что куб является прямоугольным телом с наименьшей площадью поверхности для данного объема. Будет ли это работать? И если так: я не вижу, как это сделать эффективно, но есть ли такое сокращение, которого легче достичь, может быть? x,y,Z
Г. Бах,

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

1
@ G.Bach, я думаю, что в статье блога рассматривается куча эвристик этой вены (например, начинайте с каждого из как ближайшего целого числа к а затем подгоняйте их крошечным бит), и показывает явные контрпримеры для каждого. Но, может быть, у вас есть алгоритм, который они не рассмотрели? 3 Икс,Y,ZN3
DW

3
oeis.org/A075777, кажется, требует алгоритма, но он, кажется, некорректен (n = 1332 генерирует 9,4,37 вместо 6,6,37, например)
Скотт Фаррар

1
Вот наблюдение, которое может быть полезным. При заданном оптимальные действительно удовлетворяют «наивному сну»: они должны быть парой факторов ближайших к . (Это легко доказать.) При оптимальном решении это условие должно выполняться одновременно для всех трех переменных: - пара, соответствующая , и т.д. Одно из следствий: для данного существует только одна возможная пара с которой она может быть оптимальной. К сожалению, (1) это условие не однозначно определяет оптимальную тройку; (2) Я не вижу, как быстро найти соответствующую пару.y , z n / x ИксY,ZN/Икс x,y,zx,yzzx,yN/ИксИкс*,Y*,Z*Икс*,Y*Z*ZИкс,Y
Усул

Ответы:


1

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

Вот алгоритм нахождения (s1, s2, s3) и площади поверхности прямоугольной призмы по ее объему n:

  1. По заданному n найти корень куба.
  2. Установите начальное значение целое число s1 в потолке этого корня куба.
  3. Проверьте, является ли s1 делителем n, а если нет, уменьшите s1 на 1.
  4. Если найден делитель s1, установите начальный s2 как потолок квадратного корня из (n / s1).
  5. Затем проверьте, является ли s2 делителем n / s1, а если нет, уменьшите s2 на 1.
  6. Когда делитель s2 найден, тогда s3 устанавливается в n / (s1 * s2).
  7. Текущая площадь поверхности рассчитывается как 2 * (s1 * s2 + s1 * s3 + s2 * s3).
  8. Текущий SA сравнивается с текущим минимумом. Если рассчитывается первая площадь поверхности, она сохраняется как minSA. После первого мы проверяем, является ли текущий SA меньше, чем minSA, и если это так, сохраняем его в minSA.

Этот алгоритм перечисляет некоторые из троек (s1, s2, s3), но ему нужно только проверить делители под корнем куба. (Поскольку не все три делителя могут быть выше корня куба). Аналогичным образом, s2 нужно только проверить делители n / s1 под квадратным корнем из n / s1, так как не оба делителя могут быть выше квадратного корня)

Примечание на шаге 3: если корень куба является делителем, то n является кубом, и мы можем остановиться на нем с минимальной площадью поверхности 6 * s1 ^ 2 из поля (s1, s1, s1).

Python:

import math
def minSArectprism(n):
    s1_0 = int(math.ceil(n ** (1 / 3.0))) 
    minSA=-1
    s1 = s1_0
    while s1>=1:
        while n % s1 > 0:  
            s1 = s1 - 1
        s1quot = int(n/s1) 
        s2_0 = int(math.ceil(math.sqrt(n/s1)))
        s2 = s2_0
        while s2>=1:
            while s1quot % s2 > 0:
                s2 = s2 - 1
            s3 = int(n / (s1 * s2))  
            SA = 2*(s1*s2 + s1*s3 + s2*s3)  
            if minSA==-1:
                minSA=SA
            else:
                if SA<minSA:
                    minSA=SA
            s2 = s2 - 1
        s1 = s1 - 1    
    return minSA

Ваш алгоритм занимает экспоненциальное время. Каждый цикл проверяет около возможных кандидатов, поэтому время выполненияO( 3 n3, который является экспоненциальной,неполиномиальное время. Таким образом, этот алгоритм не отвечает на вопрос. (Я уже упоминал алгоритм экспоненциального времени в вопросе.)О(N32)знак равноО(N2/3)
DW

Хм, у не ограничен корнем куба n, например, n = 1332, мы в конечном итоге протестируем s1 = 2, что означает, что s2 будет ниже квадратного корня из 1332/2 ~ = 26. Действительно (2,18, 37) проверяется с y и z над корнем куба.
Скотт Фаррар

@ ScottFarrar, да, я знаю. Я не включил все кровавые детали анализа сложности; в одном комментарии не было места. Если вы включите кровавые подробности, я думаю, вы обнаружите, что вы получите время выполнения, которое я цитировал. Вы можете либо довериться мне :-), либо прочитать наш справочный вопрос, чтобы узнать больше об этих кровавых деталях. В любом случае, даже если вы удалили внутренний цикл, внешний цикл все равно выполняет итерации, поэтому время выполнения вашего алгоритма по крайней мере - то есть это конечно экспоненциально. Ω ( п 1 / 3 )Θ(n1/3)Ω(n1/3)
DW

0

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

Здесь это трехсторонний случай (суммы разделов: ). случай с двумя путями был тщательно изучен и является NP трудным (с 1- го исх.). (Этот двусторонний случай не совсем совпадает с известной NP-полной проблемой двустороннего разбиения, где суммы разделов равны. Обратите внимание, что равные суммы разделов подразумевают 0 отклонений в суммах разделов и наоборот. ) 2- я ссылка изучает 3- способ и -way перегородки, частично эмпирически, где не так много , как изучение 2-полосная случае.nжурнал(Икс),журнал(Y),журнал(Z)N


Этот ответ не является полезным и не отвечает на вопрос. 1. Я ищу доказательства или доказательства, а не спекуляции. Нет никаких доказательств того, что минимизация отклонений дает оптимальное решение. Даже если бы это было правдой, это не ответило бы на вопрос: это не указало бы нам на сложность минимизации отклонения. 2. Первое упоминание о 2-х разделах. Указывать мне на ссылку на 2-х разделах не полезно. Я уже объяснил в вопросе, почему моя проблема не просто 3-х секционная (или 2-х секционная). Бумага по варианту проблемы, о которой я не спрашивал, бесполезна.
DW

Nзнак равно681,4,172,853422,2,17|журнал(Икс)-μ|+|журнал(Y)-μ|+|журнал(Z)-μ|μзнак равно(журнал(Икс)+журнал(Y)+журнал(Z))/3

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


0

редактировать

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

N

Что происходит, когда мы переводим те же шаги в другую алгебру, такую ​​как сложение и вычитание вместо умножения и деления? Мы знаем (см. Лемму ниже), что наш алгоритм найдет 3-разбиение, произведения которого равны, если он существует, или определим, что такого 3-разбиения не существует. Итак, если бы мы могли перевести те же методы в аддитивную группу, мы могли бы найти 3-разбиение, суммы которого равны, или определить, что такого разбиения не существует. Другими словами, мы могли бы решить 3-разбиение за полиномиальное время. Это не очень правдоподобно.

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

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

лемма

мзнак равноN3(aм,бм,мaб)aб(aб+1a+1б)м2aзнак равнобзнак равно1

ИксYZзнак равноN

(aм)(бм)+(aм)(мaб)+(бм)(мaб)знак равноaбм2+м2б+м2aзнак равно(aб+1a+1б)м2

е(a,б)знак равноaб+1a+1бδеδaзнак равноб-1a2δеδбзнак равноa-1б2aзнак равноб2,бзнак равноa2aбaзнак равнобзнак равно1

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

Ассорти Мысли

Я не вижу какой-либо очевидной симметрии, кроме взаимозаменяемости x, y и z, которая дает нам в лучшем случае постоянный множитель 6. У нас есть некоторые ускорения для 2-разбиения, которые в основном говорят, что мы хотим, чтобы оба члена быть как можно ближе друг к другу, но я не сразу вижу приложение к этой проблеме.

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

Графически поверхность xyz = 0 будет выглядеть как объединение плоскостей xy, yz и xz, а для любого положительного n уравнение будет выглядеть как y = n / xz, поэтому каждый срез вдоль координатной плоскости будет гипербола. Обычно мы можем сказать, что количество, которое мы пытаемся минимизировать, является самым низким в начале координат и наиболее быстро растет вдоль линии, где x = y = z. Если мы сможем искать только вдоль этого многообразия, мы сможем свести к двумерной задаче.


Если x + y + z = n, 2 ^ n = 2 ^ (x + y + z) = 2 ^ x * 2 ^ y * 2 ^ z, что является примером этой проблемы минус ограничение на то, что входные данные являются первичное разложение продукта. Вместо этого все они были бы полномочиями двух.
Дэвислор

Это правда, что вес, который нужно минимизировать, будет другим, но если x = y = z в исходной задаче, x'y '+ x'z' + y'z 'не будет минимизировано в соответствующей задаче, где каждый w равен заменено на w '= 2 ^ w, что означает, что если существует решение исходной проблемы, сокращение найдет его? Мы можем получить ложное решение от преобразованной проблемы, но мы можем обнаружить это за линейное время при обратном преобразовании путем проверки сумм.
Дэвислор

ИксY+YZ+ИксZИксYZзнак равноNИкс,Y,ZN3

@vzn: мы пытаемся минимизировать площадь поверхности, а не максимизировать ее. Если у задачи с 3 разделами есть решение, это приводит к измененной проблеме размерности коробки, где решением является идеальный куб. Гипотетический многовариантный алгоритм мог бы найти факторы сторон этого куба, и мы могли бы затем перевести его обратно в исходную область, одновременно проверяя наличие ложных решений, в линейном времени. Это говорит о том, что алгоритм для слегка ослабленной задачи может послужить оракулом для сложной задачи, что делает его менее вероятным, чем алгоритм экспоненциального типа.
Дэвислор

? Я не согласен с вами. разве мы не говорим одно и то же? Пожалуйста, зайдите в Computer Science Chat, чтобы распутать / разобраться в этом дальше. также не могу следовать заявлению @DWs о том, что логарифмическое преобразование не работает, не так ли? Я использую некоторые из ваших (по-видимому, на цели) анализ в качестве основы для моего собственного ответа.
vzn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.