Uogólniony problem z 3SUM (k-SUM)?


29

W 3SUM problemów próbuje zidentyfikować 3 liczb całkowitych z zestawu wielkości takie, że .S n a + b + c = 0a,b,cSna+b+c=0

Przypuszcza się, że nie ma lepszego rozwiązania niż kwadratowe, tj. . Lub inaczej: .o ( n log ( n ) + n 2 )o(n2)o(nlog(n)+n2)

Zastanawiałem się więc, czy dotyczy to uogólnionego problemu: Znajdź liczby całkowite dla w zestawie o rozmiarze takim, że . i [ 1 .. k ] S n i [ 1 .. k ] a i = 0aii[1..k]Sni[1..k]ai=0

Myślę, że możesz to zrobić w dla (generalizacja prostego algorytmu jest banalna . Ale czy są lepsze algorytmy dla innych wartości ?o(nlog(n)+nk1)k2k=3
k


najnowsze wiadomości / artykuł na temat 3SUM, który analizuje dolne granice złożoności drzewa decyzyjnego
vzn

Odpowiedzi:


27

k SUMA można rozwiązać szybciej w następujący sposób.

  • Dla parzystego :k Oblicz posortowaną listę wszystkich sum elementów wejściowych . Sprawdź, czy S zawiera zarówno pewną liczbę x, jak i jej negację -x . Algorytm działa w czasie O (n ^ {k / 2} \ log n) .Sk/2SxxO(nk/2logn)

  • Dla nieparzystego k : oblicz posortowaną listę S wszystkich sum (k1)/2 elementów wejściowych. Dla każdego elementu wejściowego a sprawdź, czy S zawiera zarówno x jak i ax , dla pewnej liczby x . (Drugi krok to zasadniczo algorytm czasu O(n2) dla 3SUM.) Algorytm działa w czasie O(n(k+1)/2) .

Oba algorytmy są optymalne (z wyjątkiem ewentualnie współczynnika log, gdy k jest parzyste i większe niż 2 ) dla dowolnej stałej k w pewnym słabym, ale naturalnym ograniczeniu modelu obliczeń liniowego drzewa decyzyjnego. Aby uzyskać więcej informacji, zobacz:


stackoverflow.com/a/14737071/511736 sugeruje algorytm O (n ^ 2), gdy k = 4
Kowser

1
Hashing to oszukiwanie. Algorytm opisany w StackOverflow działa tylko w czasie O (n ^ 2) dla wprowadzania liczb całkowitych i tylko z dużym prawdopodobieństwem i tylko wtedy, gdy użyjesz odpowiedniej losowej funkcji skrótu. Algorytmy w mojej odpowiedzi działają w prawdziwym modelu pamięci RAM, są całkowicie deterministyczne, a granice czasowe są najgorsze. Możesz także zmniejszyć współczynniki logów w ustawieniach liczb całkowitych, używając „sztuczek bitowych”, ale to trochę nudne.
JeffE

12

-SUMA wymaga czasu n Ω ( d ), chyba że k-SAT można rozwiązać w czasie 2 o ( n ) dla dowolnej stałej k. Zostało to pokazane wartykuleMihai Patrascu i Ryana Williamsa (1).dnΩ(d)2o(n)

Innymi słowy, przy założeniu wykładniczej hipotezy czasowej , algorytm jest optymalny aż do stałego współczynnika wykładniczego (współczynnik wielomianowy w )n

(1) Mihai Patrascu i Ryan Williams. O możliwości szybszych algorytmów SAT. Proc. 21. Sympozjum ACM / SIAM na temat algorytmów dyskretnych (SODA2010)


3

Oto kilka prostych spostrzeżeń.

Dla możesz to zrobić w czasie Θ ( n ) , skanując tablicę w poszukiwaniu zera. Dla k = 2 możesz to zrobić bez mieszania w czasie Θ ( n log n ) . Posortuj tablicę, a następnie zeskanuj ją. Dla każdego elementu szukam binarnie - i . Powoduje to całkowitą złożoność Θ ( n log n ) . W przypadku k = n możesz to zrobić w Θ ( n )k=1Θ(n)k=2Θ(nlogn)iiΘ(nlogn)k=nΘ(n) czas, kumulując tablicę i sprawdzając wynik.

Aby uzyskać więcej informacji, zobacz stronę The Open Problems Project dla 3SUM .


-1

Zobacz http://arxiv.org/abs/1407.4640

Nowy algorytm rozwiązywania problemu rSUM Valerii Sopin

Abstrakcyjny:

Przedstawiony jest określony algorytm rozwiązywania problemu rSUM dla dowolnego naturalnego rz subkwadratową oceną złożoności czasowej w niektórych przypadkach. Pod względem ilości użytej pamięci uzyskany algorytm ma również porządek subkwadratowy. Idea uzyskanego algorytmu oparta jest nie na liczbach całkowitych, lecz na k∈N kolejnych bitach tych liczb w systemie numeracji binarnej. Pokazano, że jeśli suma liczb całkowitych jest równa zero, to suma liczb prezentowanych przez dowolne k kolejnych bitów tych liczb musi być wystarczająco „bliska” zeru. Umożliwia to odrzucenie liczb, które tym bardziej nie ustalają rozwiązania.

To coś nowego w tym numerze.


1
Czy możesz wyraźnie cytować wyniki z artykułu, które są istotne dla pytania? (Wklejanie streszczenia może być w porządku, jeśli artykuł jest istotny jako całość.) Posty w SE powinny być czymś więcej niż tylko linkiem.
FrankW

1
W tej chwili ta odpowiedź jest (potencjalnie użytecznym) komentarzem, a nie odpowiedzią. Jako taki musiałby zawierać pewną oryginalną treść, np. Opisujący algorytm własnymi słowami. Chcesz to zrobić? Mogę przekonwertować twoją odpowiedź na komentarz, jeśli nie. (Zdaję sobie sprawę, że nie mogłeś komentować z powodu swojego przedstawiciela.)
Raphael

To nie wygląda na wiarygodny papier. Twierdzenie „złożoność czasowa subkwadratowa w niektórych przypadkach” nie jest użytecznym stwierdzeniem. Złożoność czasu jest z definicji najgorszym czasem działania. Sortowanie bąbelkowe przebiega w niektórych przypadkach w czasie liniowym, ale jego złożoność czasowa pozostaje kwadratowa.
DW
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.