Problema 3SUM (k-SUM) generalizzato?


29

Il problema 3SUM tenta di identificare 3 numeri interi da un set di dimensioni tale che .S n a + b + c = 0a,b,cSna+b+c=0

Si ipotizza che non esiste una soluzione migliore di quadratica, ovvero . O per dirla diversamente: .o ( n log ( n ) + n 2 )o(n2)o(nlog(n)+n2)

Quindi mi chiedevo se questo si sarebbe applicato al problema generalizzato: trova numeri interi per in un set di dimensione tale che . i [ 1 .. k ] S n i [ 1 .. k ] a i = 0aii[1..k]Sni[1..k]ai=0

Penso che puoi farlo in per (è banale generalizzare l' algoritmo semplice ). Ma ci sono algoritmi migliori per altri valori di ?k 2 k = 3 ko(nlog(n)+nk1)k2k=3
k


notizie / articoli recenti su 3SUM che esamina i limiti inferiori della complessità del suo albero decisionale
vzn

Risposte:


27

k -SUM può essere risolto più rapidamente come segue.

  • Per :k calcola un elenco ordinato di tutte le somme di elementi di input. Controlla se contiene sia un certo numero che la sua negazione . L'algoritmo viene eseguito nel tempo .Sk/2SxxO(nk/2logn)

  • Per dispari :k calcola l'elenco ordinato di tutte le somme di elementi di input. Per ogni elemento di input , controlla se contiene sia che , per un certo numero . (Il secondo passo è essenzialmente l' algoritmo -time per 3SUM.) L'algoritmo viene eseguito nel tempo .S(k1)/2aSxaxxO(n2)O(n(k+1)/2)

Entrambi gli algoritmi sono ottimali (tranne forse per il fattore log quando è pari e maggiore di ) per qualsiasi costante in una certa limitazione debole ma naturale del modello di calcolo lineare dell'albero decisionale. Per maggiori dettagli, vedi:k2k


stackoverflow.com/a/14737071/511736 suggerisce l'algoritmo O (n ^ 2) quando k = 4
Kowser

1
Hashing è barare. L'algoritmo descritto in StackOverflow viene eseguito solo in tempo O (n ^ 2) per l'input intero e solo con alta probabilità e solo se si utilizza un'appropriata funzione di hash casuale. Gli algoritmi nella mia risposta funzionano nel modello di RAM reale, sono completamente deterministici e i limiti di tempo sono nel caso peggiore. Puoi anche eliminare i fattori di registro nell'impostazione dei numeri interi usando "trucchi per bit", ma è piuttosto noioso.
JeffE il

12

n Ω ( d ) 2 o ( n )d -SUM richiede il tempo meno che k-SAT possa essere risolto in tempo per qualsiasi costante k. Questo è stato mostrato in un articolo di Mihai Patrascu e Ryan Williams (1).nΩ(d)2o(n)

In altre parole, assumendo l' ipotesi del tempo esponenziale , il tuo algoritmo è ottimale fino a un fattore costante dell'esponente (un fattore polinomiale in )n

(1) Mihai Patrascu e Ryan Williams. Sulla possibilità di algoritmi SAT più veloci. Proc. 21 ° Simposio ACM / SIAM sugli algoritmi discreti (SODA2010)


3

Ecco alcune semplici osservazioni.

Per , puoi farlo in time scansionando l'array per uno zero. Per , puoi farlo senza hashing in time. Ordinare l'array e quindi scansionarlo. Per ogni elemento faccio una ricerca binaria per . Ciò si traduce in una complessità totale di . Nel caso puoi farlo in tempo accumulando l'array e controllando il risultato.Θ ( n ) k = 2 Θ ( n registro n ) i - i Θ ( n registro n ) k = n Θ ( n )k=1Θ(n)k=2Θ(nlogn)iiΘ(nlogn)k=nΘ(n)

Per ulteriori riferimenti, vedere la pagina Progetto Problemi aperti per 3SUM .


-1

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

Un nuovo algoritmo per risolvere il problema rSUM Valerii Sopin

Astratto:

Viene presentato un algoritmo determinato per risolvere il problema rSUM per qualsiasi r naturale con una valutazione sub-quadratica della complessità temporale in alcuni casi. In termini di quantità di memoria utilizzata, l'algoritmo ottenuto ha anche un ordine sub-quadratico. L'idea dell'algoritmo ottenuto non si basa sui numeri interi, ma piuttosto k∈N bit successivi di questi numeri nel sistema di numerazione binario. Viene mostrato che se una somma di numeri interi è uguale a zero, allora la somma dei numeri presentati da qualsiasi k bit successivo di questi numeri deve essere sufficientemente "vicina" a zero. Questo rende possibile scartare i numeri, che a maggior ragione non stabiliscono la soluzione.

È qualcosa di nuovo in questo numero.


1
Potresti citare esplicitamente i risultati dell'articolo pertinenti alla domanda? (Incollare l'abstract potrebbe essere ok, se l'articolo è rilevante nel suo insieme.) I post su SE dovrebbero essere più di un semplice link.
FrankW

1
Così com'è, questa risposta è un commento (potenzialmente utile), non una risposta. In quanto tale, dovrebbe contenere alcuni contenuti originali, ad esempio la descrizione dell'algoritmo con parole tue. Vuoi farlo? Posso convertire la tua risposta in un commento se non lo fai. (Sono consapevole che non puoi commentare a causa del tuo rappresentante.)
Raffaello

Non sembra un documento credibile. L'affermazione "sub-quadratica della complessità temporale in alcuni casi" non è un'affermazione utile. La complessità temporale è per definizione il tempo di esecuzione peggiore. L'ordinamento a bolle viene eseguito in un tempo lineare in alcuni casi, ma la sua complessità temporale rimane quadratica.
DW
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.