Узагальнена проблема 3SUM (k-SUM)?


29

Проблема 3SUM намагається визначити 3 цілих числа з набору S розміром n таким, що a + b + c = 0 .a,b,cSna+b+c=0

Можна припустити, що немає кращого рішення, ніж квадратичний, тобто . Або кажучи інакше: o ( n log ( n ) + n 2 ) .o(n2)o(nlog(n)+n2)

Тому мені було цікаво, чи це стосуватиметься узагальненої задачі: Знайдіть цілі числа для i [ 1 .. k ] у безлічі S розміром n таким, що i [ 1 .. k ] a i = 0 .aii[1..k]Sni[1..k]ai=0

Я думаю, ви можете зробити це в для ko(nlog(n)+nk1) (тривіально узагальнити простийалгоритм k = 3 ).k2k=3
Але чи є кращі алгоритми для інших значень ?k


останні новини / стаття про 3SUM, яка розглядає нижчі межі щодо складності дерева рішень
vzn

Відповіді:


27

k -SUM можна вирішити швидше наступним чином.

  • Для парних k : обчислити відсортований список S усіх сум вхідних елементів k/2 . Перевірте, чи містить S як деяке число x і його заперечення x . Алгоритм працює в O(nk/2logn) час.

  • Для непарних k : обчислити відсортований список S всіх сум вхідних елементів (k1)/2 . Для кожного вхідного елемента a перевірте, чи містить S і x і ax , для деякого числа x . (Другий крок, по суті, є алгоритмом O(n2) -час для 3SUM.) Алгоритм працює в O(n(k+1)/2) час.

Обидва алгоритми є оптимальними (за винятком, можливо, коефіцієнта журналу, коли k парний і більший за 2 ) для будь-якої постійної k у певному слабкому, але природному обмеженні моделі обчислення лінійного дерева рішень. Докладніше див:


stackoverflow.com/a/14737071/511736 пропонують алгоритм O (n ^ 2), коли k = 4
Коузер

1
Хешинг - це обман. Алгоритм, описаний у StackOverflow, працює лише в O (n ^ 2) час для цілого введення, і лише з високою ймовірністю, і лише якщо ви використовуєте відповідну функцію випадкового хешу. Алгоритми моєї відповіді працюють у реальній моделі оперативної пам’яті, вони повністю детерміновані, а часові межі - в гіршому випадку. Ви також можете стригти log-фактори в цілому налаштуванні, використовуючи "бітові трюки", але це ніби не нудно.
JeffE

12

-SUM вимагає часу n Ω ( d ), якщо k-SAT не може бути розв'язаний за 2 o ( n ) час для будь-якої постійної k. Це було показано в аdnΩ(d)2o(n) праці Михайла Патраску та Райана Вільямса (1).

Іншими словами, припускаючи експоненціальну гіпотезу часу , ваш алгоритм є оптимальним аж до постійного коефіцієнта в експоненті (поліноміальний коефіцієнт в )n

(1) Михай Патраску та Райан Вільямс. Про можливість швидших алгоритмів SAT. Зб. 21-й симпозіум ACM / SIAM з дискретних алгоритмів (SODA2010)


3

Ось кілька простих спостережень.

Для , ви можете це зробити за Θ ( n ) час, скануючи масив на нуль. Для k = 2 ви можете це зробити без хешування за Θ ( n log n ) час. Сортуйте масив та скануйте його. Для кожного елемента я виконую двійковий пошук - i . Це призводить до загальної складності Θ ( n log n ) . Для випадку k = n ви можете зробити це в Θ ( n )k=1Θ(n)k=2Θ(nlogn)iiΘ(nlogn)k=nΘ(n) час, накопичуючи масив і перевіряючи результат.

Для отримання додаткових довідок див . Сторінку проекту «Відкриті проблеми» для 3SUM .


-1

Дивіться http://arxiv.org/abs/1407.4640

Новий алгоритм вирішення проблеми rSUM Валерій Сопін

Анотація:

Представлений визначений алгоритм для розв’язування задачі rSUM для будь-якого природного r з субквадратичною оцінкою часової складності в деяких випадках. За обсягом використовуваної пам'яті отриманий алгоритм має також підквадратичний порядок. Ідея отриманого алгоритму базується не з урахуванням цілих чисел, а з послідовними бітами k∈N цих чисел у двійковій системі числення. Показано, що якщо сума цілих чисел дорівнює нулю, то сума чисел, представлена ​​будь-якими k послідовними бітами цих чисел, повинна бути достатньо «близькою» до нуля. Це дає можливість відкинути числа, які atiotiori, не встановлюють рішення.

Це щось нове у цьому випуску.


1
Не могли б ви чітко навести результати статті, які стосуються питання? (Вставка конспекту може бути нормальним, якщо стаття доречна в цілому.) Публікації в SE повинні бути більше, ніж просто посилання.
FrankW

1
Ця відповідь є (потенційно корисним) коментарем, а не відповіддю. Як такий, він повинен містити якийсь оригінальний вміст, наприклад, опис алгоритму власними словами. Ви хочете це зробити? Я можу конвертувати вашу відповідь у коментар, якщо ви цього не зробите. (Я знаю, що ви не змогли прокоментувати через вашу відповідь.)
Рафаель

Це не схоже на справжній папір. Твердження "підквадратична складність часу в деяких випадках" не є корисним твердженням. Часова складність за визначенням є найгіршим часом роботи. Сорт бульбашки в деяких випадках працює в лінійний час, але його часова складність залишається квадратичною.
DW
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.