Алгоритм мінімізації площі поверхні з урахуванням обсягу


22

Розглянемо наступне алгоритмічне завдання:

Вхідне значення: додатне ціле число , поряд з його простим множним фактором. Знайдіть: додатні цілі числа x , y , z, що мінімізують x y + y z + x z , за умови обмеження, що x y z = nn
x,y,zxy+yz+xzxyz=n

У чому полягає складність цієї проблеми? Чи існує алгоритм поліноміального часу? Це NP-важко?


Ця проблема в основному задає питання: з усіх прямокутних твердих тіл, об'єм яких і розміри яких цілі числа, у якого найменша площа поверхні?n

Цю проблему поставив Дан Мейєр під назвою "Проблема математики, яку не могли вирішити 1000 вчителів математики" . Поки жоден з викладачів математики, з яким він працював, не знайшов розумного алгоритму цієї проблеми. У його контексті визначення поняття "розумне" є дещо неточним, але, як інформатики, ми можемо поставити більш точне запитання про складність цієї проблеми.

Очевидний підхід - перерахувати всі можливості для , але це вимагає експоненціального часу. Коментатори в блозі Дена Мейєра запропонували багато ефективних алгоритмів кандидатів, які, на жаль, виявилися невірними. Мартін Строс припускає, що ця проблема здається неяскравою, що нагадує 3-х розділ , але я не бачу зменшення.x,y,z


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

  • Ви не можете зменшити з 3-х розділів, просто замінивши кожне число його потужністю 2 q , оскільки цільові функції двох завдань різні. Очевидне зменшення просто не працює.q2q

  • Неправда, що оптимальне рішення передбачає вибір одного з для найближчого дільника від n до 3 x,y,zn . Я бачу багато людей, які припускають, що це так, але насправді це не правильно. Це вже було спростовано у публікації блогу Dan Meyer. Наприклад, розглянемоn=68; 3n3n=68і 4 ділить 68, так що ви можете подумати, що принаймні один зx,y,zповинен бути 4; однак це невірно. Оптимальний розв’язок -x=2,y=2,z=17. Інший контрприклад -n=222,36834x,y,zx=2y=2z=17n=222, але оптимальним рішенням єx=37,y=3,z=2. (Можливо,правда, що для всіхnоптимальне рішення передбачає, що принаймні один зx,y,zдорівнює або найменшому дільнику наn,більший за322236x=37y=3z=2nx,y,zn абонайбільший дільник наnменше3n3 n - Я зараз не маю контрприкладу - але якщо ви вважаєте, що це твердження є правдивим, йому знадобиться доказ. Ви абсолютно не можете припустити, що це правда.)n3

  • "Зробити бути однаковим розміром", мабуть, не обов'язково дає оптимальну відповідь у всіх випадках; дивіться в блозі Ден Меєра про зустрічніприклади. Або, принаймні, для деяких розумних тлумачень фрази "зробіть їх приблизно однакового розміру" існують контрприклади, що показують, що ця стратегія насправді не є оптимальною. Якщо ви хочете спробувати якусь стратегію такого типу, переконайтесь, що ви заявляєте претензію точно, а потім надайте ретельний математичний доказ.x,y,z

  • Час роботи не є многочленом. Щоб ця проблема була в P, час роботи повинен бути многочленом довжини вводу . Довжина вводу - щось на зразок lg n , а не n . Очевидний алгоритм грубої сили може бути зроблений для запуску через O ( n 3 ) або O ( n 2 ) , але це експоненціально в lg n і, таким чином, вважається алгоритмом експоненціального часу. Таким чином, це не корисно.O(n3)lgnnO(n3)O(n2)lgn


1
Цікаво. Моїм наївним підходом було б "зробити приблизно однакового розміру", узагальнюючи думку про те, що куб - це прямокутне тверде тіло з найменшою площею поверхні для заданого обсягу. Це би спрацювало? І якщо так: я не бачу, як це зробити ефективно, але чи можливо скорочення, яке простіше досягти? x,y,z
Г. Бах

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

1
@ G.Bach, я думаю, що стаття в блозі вважає купу евристики цієї вени (наприклад, почніть з кожного з як найближче ціле число до 3 x,y,z а потім відрегулюйте їх крихітним шматочком) і покаже явні контрприклади для кожного. Але, можливо, у вас є алгоритм, який вони не врахували? n3
DW

3
oeis.org/A075777, схоже, стверджує алгоритм, але, схоже, неправильний (n = 1332 генерує 9,4,37 замість 6,6,37, наприклад)
Скотт Фаррар

1
Ось спостереження, яке може бути корисним. З огляду на , оптимальні y , z дійсно задовольняють "наївну мрію": вони повинні бути парою факторів n / x, найближчих до xy,zn/x . (Це легко довести.) При оптимальному рішенніx,y,zця умова повинна дотримуватися одночасно для всіх трьох змінних:x,y- пара, відповіднаzі т. Д. Одне значення:z, існує лише одна можлива параx,y,з якою вона може бути оптимальною. На жаль, (1) ця умова невизначаєоднозначнооптимальну трійку; (2) Я не бачу, як швидко знайти відповідну пару. n/xx,y,zx,yzzx,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).

Пітон:

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

n3O(n32)=O(n2/3)

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

Θ(n1/3)Ω(n1/3)

0

k

log(x),log(y),log(z)n


Ця відповідь не корисна і не дає відповіді на запитання. 1. Я шукаю докази чи докази, а не спекуляції. Немає доказів того, що мінімізація відхилення дає оптимальне рішення. Навіть якби це було правдою, це не відповіло б на запитання: це не сказало б нам про складність мінімізації відхилення. 2. Перша посилання стосується 2-х розділів. Вказання на посилання на 2-й розділ не є корисним. Я вже пояснював у питанні, чому моя проблема - це не просто 3-роздільний (або 2-роздільний). Документ про варіант проблеми, про який я не питав, не корисний.
DW

n=681,4,172.853422,2,17|log(x)μ|+|log(y)μ|+|log(z)μ|μ=(log(x)+log(y)+log(z))/3

добре! Ніколи не було жодних тверджень, що цей алгоритм був правильним, він ґрунтувався на перевірці деяких прикладів та інших пропозицій у коментарях. це лише один контрприклад (ви вказали, що метод мінімізації відхилень є недоліком у доопрацьованому пості). питання про те, як часто цей алгоритм дає правильне рішення, цікавий тим, що він може дати певні підказки правильної метрики оптимізації. Гіпотеза цього алгоритму "часто" дає правильну відповідь. двосторонній посилання - показати версію проблеми відхилення, яка відрізняється від типово точної версії у wikipedia тощо
vzn

дивіться також Докази і спростування
vzn

0

Редагувати

Ось неформальний аргумент, чому швидкий алгоритм навряд чи існує. Це речення не змінилося, але я вивів те, що було тут, тому що він був надто структурований, як офіційний доказ у наступному розділі, і дискусія набирала сторону на його помилки, деякі з яких я помітив себе і один з яких DW люб'язно вказав на мене. Дозвольте мені замість цього спробувати висловити інтуїцію.

N

Що відбувається, коли ми перекладаємо ті самі кроки в іншу алгебру, таку як додавання і віднімання замість множення та ділення? Ми знаємо (див. Лему нижче), що наш алгоритм знайде 3-розділ, продукти якого рівні, якщо такий існує, або ж визначити, що такого 3-розділу немає. Отже, якби ми могли перекласти ті самі методи в групу добавок, ми могли б знайти 3-роздільний розділ, суми якого рівні, або визначити, що такого розділу не існує. Іншими словами, ми могли б розв’язати 3-роздільний розділ у поліноміальний час. Це не дуже правдоподібно.

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

Але якщо це ті лазівки, які дозволяють швидкому алгоритму працювати, я думаю, що це все-таки корисно знати, тому що він підказує, куди ми повинні зосередити свої зусилля. Ми повинні шукати щось, що зламається, якби ми спробували застосувати це до проблеми, що не стосується NP. Підхід, який би узагальнив інші алгебри, ймовірно, гавкає неправильне дерево. Я підозрюю, що множення насправді недостатньо різне для роботи, але це лише передумова.

Лема

m=N3(am,bm,mab)ab(ab+1a+1b)m2a=b=1

xyz=N

(am)(bm)+(am)(mab)+(bm)(mab)=abm2+m2b+m2a=(ab+1a+1b)m2

f(a,b)=ab+1a+1bδfδa=b1a2δfδb=a1b2a=b2,b=a2aba=b=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, що означає, що якщо існує рішення вихідної проблеми, скорочення знайде її? Ми можемо отримати помилкове рішення з перетвореної задачі, але ми можемо виявити це в лінійний час при перетворенні назад шляхом перевірки сум.
Девіслор

xy+yz+xzxyz=nx,y,zn3

@vzn: Ми намагаємося мінімізувати площу поверхні, а не збільшувати її. Якщо проблема з 3 розділами має рішення, це перетворюється на змінену задачу щодо розмірності коробки, де рішення - ідеальний куб. Гіпотетичний багаточасний алгоритм знайде фактори сторін куба, і ми зможемо перевести його назад у початковий домен, перевіряючи помилкові рішення, у лінійний час. Це говорить про те, що алгоритм злегка розслабленої проблеми може слугувати оракулом для важкої проблеми, що робить його малоймовірним, що існує кращий, ніж експоненційний алгоритм.
Девіслор

? Я не згоден з вами. Хіба ми не говоримо те саме? plz drop by Computer Science Chat, щоб розплутати / розібратись далі. також не можу слідувати @DW стверджують, що логарифмічна трансформація не працює, чи не так? я використовую деякі ваші (начебто цільові) аналізи як основу для моєї власної відповіді.
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.