Algorytm minimalizujący pole powierzchni, przy danej objętości

22

Rozważ następujące zadanie algorytmiczne:

Dane wejściowe: dodatnia liczba całkowita wraz z podstawową faktoryzacją Znajdź: dodatnie liczby całkowite które minimalizują , z zastrzeżeniem ograniczenia, żen
x,y,zxy+yz+xzxyz=n

Jaka jest złożoność tego problemu? Czy istnieje algorytm czasu wielomianowego? Czy to trudne NP?


Ten problem zasadniczo pyta: ze wszystkich prostokątnych brył, których objętość wynosi i których wymiary są liczbami całkowitymi, który ma najmniejszą powierzchnię?n

Problem ten postawił Dan Meyer pod tytułem Problem matematyczny, którego 1000 nauczycieli matematyki nie mogło rozwiązać . Jak dotąd żaden z nauczycieli matematyki, z którymi pracował, nie znalazł rozsądnego algorytmu dla tego problemu. W jego kontekście definicja „rozsądnego” jest nieco nieprecyzyjna, ale jako informatycy możemy zadać bardziej precyzyjne pytanie o złożoność tego problemu.

Oczywistym podejściem jest wyliczenie wszystkich możliwości dla , ale to zajmuje czas wykładniczy. Komentatorzy na blogu Dana Meyera zaproponowali wiele wydajnych algorytmów kandydujących, które niestety okazały się nieprawidłowe. Martin Strauss sugeruje, że ten problem wydaje się niejasno przypominać 3-partycję , ale nie widzę zmniejszenia.x,y,z


Pozwolę sobie również wyjaśnić niektóre nieporozumienia, które widziałem w komentarzach / odpowiedziach:

  • Nie można zmniejszyć z 3-partycji, po prostu zastępując każdą liczbę jej siłą , ponieważ funkcje celu dwóch problemów są różne. Oczywista redukcja po prostu nie działa.q2q

  • Nie jest prawdą, że optymalne rozwiązanie obejmuje wybranie jednego z jako najbliższego dzielnika od do . Widzę wiele osób, które zakładają, że tak jest, ale w rzeczywistości nie jest to poprawne. Zostało to już obalone na blogu Dana Meyera. Weźmy na przykład ; , a 4 dzieli 68, więc możesz pomyśleć, że co najmniej jeden z powinien wynosić 4; nie jest to jednak poprawne. Optymalnym rozwiązaniem jestx,y,znn3n=686834x,y,zx=2 , y=2 , z=17 . Kolejny kontrprzykład to n=222 ,22236, ale optymalnym rozwiązaniem jestx=37,y=3,z=2. (Możebyć prawdą, że dla wszystkichnoptymalne rozwiązanie polega na tym, aby co najmniej jeden zx,y,zbył równy albo najmniejszemu dzielnikowinwiększemu niżn3 lubnajwiększy dzielniknmniejszy niżn3 - W tej chwili nie mam kontrprzykładu - ale jeśli uważasz, że to stwierdzenie jest prawdziwe, wymagałoby to dowodu. Absolutnie nie możesz zakładać, że to prawda.)

  • „Spraw , aby były tego samego rozmiaru” nie zawsze daje optymalną odpowiedź we wszystkich przypadkach; zobacz post na blogu Dana Meyera, aby uzyskać kontrprzykłady. Lub przynajmniej dla niektórych rozsądnych interpretacji wyrażenia „czynią je mniej więcej tego samego rozmiaru”, istnieją kontrprzykłady pokazujące, że ta strategia nie jest w rzeczywistości optymalna. Jeśli chcesz wypróbować jakąś strategię tego rodzaju, upewnij się, że dokładnie podałeś roszczenie, a następnie podaj dokładny matematyczny dowód.x,y,z

  • Czas działania nie jest wielomianowy. Aby problem występował w P, czas działania musi być wielomianem na długości danych wejściowych . Długość danych wejściowych to coś w rodzaju lg n , a nie n . Oczywisty algorytm siły brutalnej można uruchomić w czasie O ( n 3 ) lub O ( n 2 ) , ale jest on wykładniczy w lg n, a zatem liczy się jako algorytm czasu wykładniczego. To nie jest pomocne.O(n3)lgnnO(n3)O(n2)lgn

DW
źródło
1
Ciekawy. Moje naiwne podejście brzmiałoby: „zrób mniej więcej tego samego rozmiaru”, uogólniając, że sześcian jest prostokątną bryłą o najmniejszej powierzchni dla danej objętości. Czy to zadziała? A jeśli tak: nie wiem, jak to zrobić efektywnie, ale czy może jest to łatwiejsze do osiągnięcia ograniczenie? x,y,z
G. Bach,
2
Redukcja będzie koszmarem, ponieważ potrzebujesz sposobu na wygenerowanie odpowiednich liczb pierwszych. Najlepsze, na co możesz liczyć, to losowa redukcja, wykorzystująca coś takiego jak Twierdzenie Dirichleta do generowania odpowiednich liczb pierwszych, ale nawet to wydaje się mało prawdopodobne.
Tom van der Zanden,
1
@ G.Bach, myślę, że ten artykuł na blogu traktuje kilka heurystyk tej żyły (np. Zacznij od każdego z jako najbliższej liczby całkowitej do 3 x,y,z a następnie nieco je dostosować) i pokazuje wyraźne kontrprzykłady dla każdego. Ale może masz algorytm, którego nie rozważali? n3
DW
3
oeis.org/A075777 wydaje się żądać algorytmu, ale wydaje się być niepoprawny (n = 1332 generuje 9,4,37 zamiast 6,6,37 na przykład)
Scott Farrar
1
Oto spostrzeżenie, które może być przydatne. Biorąc pod uwagę , optymalne y , z faktycznie spełniają „naiwny sen”: muszą być parą czynników n / x najbliższych xy,zn/x . (Łatwo to udowodnić.) Przy optymalnym rozwiązaniux,y,zwarunek ten musi obowiązywać dla wszystkich trzech zmiennych jednocześnie:x,ysą parą odpowiadającąz, itd. Jedna implikacja: podanaz, istnieje tylko jedna możliwa parax,y,z którą może być optymalna. Niestety (1) warunek ten niejednoznacznieidentyfikuje optymalną potrójną; (2) Nie wiem, jak szybko znaleźć odpowiednią parę. n/xx,y,zx,yzzx,y
usul

Odpowiedzi:

1

Oto zmodyfikowana wersja algorytmu „wybierz dzielnik w pobliżu pierwiastka z kostki”. Wciąż musi brutalnie wymuszać wiele przypadków, więc nie jestem pewien, ile prawdziwej poprawy jest szybsze od wyliczenia wszystkich przypadków. Jednak przesłałem go jako poprawkę do algorytmu OEIS (tego, który wygenerował nieprawidłowe wyniki), ponieważ uważam, że powinien on być co najmniej dokładny.

Oto algorytm znajdowania (s1, s2, s3) i pola powierzchni prostokątnego pryzmatu, biorąc pod uwagę jego objętość n:

  1. Biorąc pod uwagę n, znajdź pierwiastek kostki.
  2. Ustaw początkową liczbę całkowitą s1 na suficie tego pierwiastka kostki.
  3. Sprawdź, czy s1 jest dzielnikiem n, a jeśli nie, zmniejsz s1 o 1.
  4. Jeśli zostanie znaleziony dzielnik s1, ustaw początkową wartość s2 jako pułap pierwiastka kwadratowego z (n / s1).
  5. Następnie sprawdź, czy s2 jest dzielnikiem n / s1, a jeśli nie, zmniejsz s2 o 1.
  6. Po znalezieniu dzielnika s2, s3 jest wtedy ustawiane na n / (s1 * s2).
  7. Bieżące pole powierzchni jest obliczane przez 2 * (s1 * s2 + s1 * s3 + s2 * s3).
  8. Obecny SA jest porównywany z bieżącym minimum. Jeśli jest to pierwsze obliczone pole powierzchni, jest ono zapisywane jako minSA. Po pierwszym sprawdzamy, czy bieżący SA jest mniejszy niż minSA, a jeśli tak, zapisz go w minSA.

Ten algorytm wylicza niektóre z potrójnych wartości (s1, s2, s3), ale wystarczy tylko przetestować dzielniki pod pierwiastkiem kostki. (Ponieważ nie wszystkie trzy dzielniki mogą znajdować się powyżej pierwiastka sześcianu). W podobny sposób s2 musi jedynie przetestować dzielniki n / s1 pod pierwiastkiem kwadratowym n / s1, ponieważ nie oba dzielniki mogą znajdować się powyżej pierwiastka kwadratowego)

Uwaga na krok 3: jeśli pierwiastek sześcianu jest dzielnikiem, to n jest sześcianem i możemy się tam zatrzymać z minimalnym polem powierzchni 6 * s1 ^ 2 od pudełka (s1, s1, s1).

Pyton:

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
Scott Farrar
źródło
Twój algorytm wymaga czasu wykładniczego. Każda pętla sprawdza około n3O(n32)=O(n2/3)
Hmm, y nie jest ograniczone pod pierwiastek sześcienny n, na przykład n = 1332, ostatecznie przetestujemy s1 = 2, co oznacza, że ​​s2 będzie pod pierwiastkiem kwadratowym 1332/2 ~ = 26. Rzeczywiście (2,1, 37) jest testowany za pomocą yiz powyżej pierwiastka sześcianu.
Scott Farrar
Θ(n1/3)Ω(n1/3)
0

k

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

vzn
źródło
Ta odpowiedź nie jest pomocna i nie odpowiada na pytanie. 1. Szukam dowodów lub dowodów, a nie spekulacji. Nie ma dowodów na to, że minimalizacja odchyleń daje optymalne rozwiązanie. Nawet gdyby to była prawda, nie odpowiedziałaby na pytanie: nie powiedziałaby nam złożoności minimalizacji odchylenia. 2. Pierwsze odniesienie dotyczy około 2 partycji. Wskazywanie mi odniesienia do 2-partycji nie jest pomocne. Wyjaśniłem już w pytaniu, dlaczego moim problemem nie są tylko 3 partycje (lub 2 partycje). Artykuł na temat wariantu problemu, o który nie pytałem, nie jest pomocny.
DW
n=681,4,172.853422,2,17|log(x)μ|+|log(y)μ|+|log(z)μ|μ=(log(x)+log(y)+log(z))/3
dobrze! nigdy nie było żadnych twierdzeń, że ten algorytm był poprawny, opierał się na sprawdzeniu niektórych przykładów i innych sugestii w komentarzach. jest to tylko jeden kontrprzykład (wskazałeś, że metoda minimalizacji odchylenia jest wadliwa w poprawionym poście). pytanie „jak często” ten algorytm daje prawidłowe rozwiązanie jest interesujące, ponieważ może dać pewne wskazówki co do prawidłowej metryki optymalizacji. przypuszczenie, że ten algorytm „często” daje prawidłową odpowiedź. 2-sposób ref jest pokazanie odchylenie wersję problemu, który jest inny niż typowy dokładnym wersji Wikipedia etc
vzn
patrz także Dowody i obalenia
wer
0

Edytować

Oto nieformalny argument, dlaczego mało prawdopodobne jest istnienie szybkiego algorytmu. To zdanie się nie zmieniło, ale wyjąłem to, co tu kiedyś było, ponieważ zostało skonstruowane zbyt podobnie jak formalny dowód w następnej części, a dyskusja zaczęła się odsuwać na błędy, z których niektóre zauważyłem siebie i jednego z czego DW uprzejmie mi zwrócił uwagę. Zamiast tego spróbuję wyrazić za tym intuicję.

N

Co się stanie, gdy przetłumaczymy te same kroki na inną algebrę, taką jak dodawanie i odejmowanie zamiast mnożenia i dzielenia? Wiemy (patrz lemat poniżej), że nasz algorytm znajdzie 3-partycję, której produkty są równe, jeśli taka istnieje, lub też ustali, że taka 3-partycja nie istnieje. Tak więc, jeśli moglibyśmy przetłumaczyć te same techniki na grupę dodatków, moglibyśmy znaleźć 3-partycję, której sumy są równe, lub ustalić, że taka partycja nie istnieje. Innymi słowy, moglibyśmy rozwiązać 3-partycję w czasie wielomianowym. To niezbyt prawdopodobne.

Dlaczego więc taki algorytm może działać w przypadku mnożenia, a nie w przypadku dodawania? Jednym z możliwych powodów jest to, że każda liczba całkowita ma unikalny rozkład na czynniki pierwsze przy pomnożeniu, ale jest cykliczna podczas dodawania. Innym jest to, że mnożenie tworzy pierścień z dodawaniem, więc masz inny zestaw operacji, których możesz użyć. Inną sprawą jest konieczność uogólnienia algorytmu, aby działał on dla liczb niepierwszych i może zależeć od ich pierwotności. Jedna wskazana DW jest taka, że ​​konkretna metoda tłumaczenia może wykładniczo zwiększyć rozmiar twoich danych wejściowych. A może jednak P = NP.

Ale jeśli są to luki, które pozwalają na szybki algorytm, myślę, że nadal warto wiedzieć, ponieważ sugeruje, gdzie powinniśmy skoncentrować nasze wysiłki. Powinniśmy szukać czegoś, co by się zepsuło, gdybyśmy próbowali zastosować to do problemu NP-zupełnego. Podejście, które uogólniałoby na inne algebry, prawdopodobnie polega na szczekaniu niewłaściwego drzewa. Podejrzewam jednak, że mnożenie nie jest wystarczająco różne, aby to zadziałało, ale to tylko przeczucie.

Lemat

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

Moją bezpośrednią motywacją do udowodnienia tego było wypełnienie fali ręki w moim dowodzie powyżej, że jeśli istnieje rozwiązanie z doskonałą kostką, jest ono optymalne. Jednak ta formuła może być przydatna do przycinania drzewa wyszukiwania.

Różne myśli

Nie widzę żadnej oczywistej symetrii oprócz wymienności x, y i z, co daje nam co najwyżej stały współczynnik 6. Mamy pewne przyspieszenia dla 2-partycji, które w zasadzie mówią, że chcielibyśmy, aby oba warunki być jak najbliżej siebie, ale nie widzę od razu zastosowania tego problemu.

Z góry mojej głowy, po prostu zapisanie dziennika wszystkich liczb natychmiast redukuje to do klasycznego problemu z 3 partycjami przy użyciu dodawania lub równoważnie, biorąc pewną liczbę do potęgi liczb w dowolnym problemie z dodawaniem 3 partycji, zamienia go w taki problem mnożenia jak ten. Oznacza to, że ten problem nie powinien być łatwiejszy. Mamy tutaj faktoryzację pierwszą, podczas gdy faktoryzacja ta nie byłaby pierwszą, ale czy to nam pomaga?

Graficznie powierzchnia xyz = 0 wyglądałaby jak połączenie płaszczyzn xy, yz i xz, a dla dowolnego dodatniego n równanie wyglądałoby jak y = n / xz, więc każdy przekrój wzdłuż płaszczyzny współrzędnych byłby hiperbola. Ogólnie możemy powiedzieć, że ilość, którą próbujemy zminimalizować, jest najniższa u źródła i rośnie najszybciej w linii, gdzie x = y = z. Gdybyśmy mogli szukać tylko wzdłuż tego rozmaitości, moglibyśmy zredukować się do problemu dwuwymiarowego.

Davislor
źródło
Jeśli x + y + z = n, 2 ^ n = 2 ^ (x + y + z) = 2 ^ x * 2 ^ y * 2 ^ z, co jest przykładem tego problemu minus ograniczenie, że dane wejściowe są główny rozkład produktu. Zamiast tego wszystkie byłyby potęgami dwojga.
Davislor
Prawdą jest, że waga do zminimalizowania będzie inna, ale jeśli x = y = z w pierwotnym problemie, to czy x'y '+ x'z' + y'z 'nie zostanie zminimalizowane w odpowiednim problemie, w którym każde w jest zastąpiony przez w '= 2 ^ w, co oznacza, że ​​gdyby istniało rozwiązanie pierwotnego problemu, redukcja by go znalazł? Możemy uzyskać fałszywe rozwiązanie przekształconego problemu, ale możemy to wykryć w czasie liniowym podczas konwersji z powrotem, weryfikując sumy.
Davislor
xy+yz+xzxyz=nx,y,zn3
@vzn: Staramy się minimalizować powierzchnię, a nie maksymalizować. Jeśli problem z 3 partycjami ma rozwiązanie, przekłada się to na zmodyfikowany problem wymiarów skrzynek, w którym rozwiązaniem jest idealna kostka. Hipotetyczny algorytm wieloczasowy wykryłby czynniki boków tego sześcianu, a następnie moglibyśmy przełożyć go z powrotem na pierwotną domenę, sprawdzając pod kątem fałszywych rozwiązań, w czasie liniowym. Sugeruje to, że algorytm dla nieco rozluźnionego problemu może służyć jako wyrocznia dla trudnego problemu, przez co mało prawdopodobne jest istnienie algorytmu wyższego niż wykładniczy.
Davislor
? nie zgadzam się z tobą. czy nie mówimy tego samego? plz upuść przez Computer Science Chat, aby rozwiązać / uporządkować to dalej. również nie mogę śledzić @DW twierdzić, że transformacja logarytmiczna nie działa, prawda? wykorzystuję niektóre z twoich (pozornie ukierunkowanych) analiz jako podstawy mojej własnej odpowiedzi.
vzn