2009-12-07 7 views
14

Dada una matriz A de números enteros, encontrar cualquier 3 de ellos que sumar a cualquier dada T.O (NlogN) encontrar 3 números que tienen una suma de cualquier T arbitraria en una matriz

lo vi en alguna línea publicación, que afirma que tiene una solución O (NlogN).

Para 2 números, sé que hashtable podría ayudar para O (N), pero para 3 números, no puedo encontrar uno.

También creo que este problema suena familiar a algunos problemas difíciles, pero no puede recordar el nombre y, por lo tanto, no puede buscarlo en Google. (Mientras que lo peor es obviamente O (N^3), y con la solución a 2 números es realmente O (N^2))

Realmente no resuelve nada en el mundo real, solo me molesta ...

¿Alguna idea?

+0

Muchos otros mensajes similares a la derecha. http://stackoverflow.com/questions/83547/algorithm-to-find-which-numeres-from-a-list-of-size-n-sum-to-another-number –

+1

Esto es similar al problema de suma de subconjuntos, que es NP-Completo. Pero al limitar la longitud del subconjunto a 3, podría ser posible encontrar una solución rápida. –

+0

Un problema difícil (NP completo) que tiene similitudes con este se llama http://en.wikipedia.org/wiki/Knapsack_problem. Por supuesto, la restricción aquí que eliges solo 3 enteros lo convierte en el peor O (n^3), por lo que no es exactamente lo mismo. –

Respuesta

0

Suena como una pregunta tarea ...

Si se pueden encontrar dos valores que suma a N pero que desea ampliar la búsqueda a tres valores, que no podía, para cada valor M en el conjunto, busque dos valores que suman (N - M)? Si puede encontrar dos valores que suman un valor específico en O (log N) time, entonces será O (N log N).

+0

¿Cómo vas a encontrar dos números que suman un valor específico en tiempo de registro (N)? –

+0

Buena pregunta, no sé. No dije que fuera posible, solo que necesitaría poder hacerlo para resolver el problema de la manera particular que describí. –

0

creo que esto es sólo el problema subset sum

Si es así, es NP-completo.

EDITAR: No importa, es 3sum, como se indica en otra respuesta.

+1

Hay menos de n^3 formas de elegir 3 números entre n, por lo que difícilmente puede ser NP-completo. El algoritmo de fuerza bruta trivial es O (n^3). –

+0

yup. el problema del subconjunto es NP, pero este no es el problema del subconjunto. el problema del subconjunto no especifica cuántos números se sumarán, mientras que este problema lo restringe exactamente a 3. –

2

2SUM problema puede resolverse en O (nlgn) tiempo.

Primero ordene la matriz que toma como máximo O (nlgn) operaciones. Ahora, en la iteración ith seleccionamos el elemento a[i] y encontramos el elemento -a[i] en la parte restante de la matriz (es decir, desde i+1 a n-1) y esta búsqueda podría realizarse en búsqueda binaria, lo que requiere como máximo tiempo de ignición. Entonces, en general, tomará operaciones O (nlgn).

Pero el problema 3SUM no se puede resolver en el tiempo O (nlgn). Podríamos reducirlo a O (n^2)

+4

Para dos, algún problema, podría reducirse a O (N) si usamos la tabla hash. – Avinash

-2

levantado directamente de https://en.wikipedia.org/wiki/3SUM

sort(S); 

    for i=0 to n-3 do 

     a = S[i]; 
     start = i+1; 

     end = n-1; 

     while (start < end) do 

      b = S[start]; 
      c = S[end]; 
      if (a+b+c == 0) then 
       output a, b, c; 
       // Continue search for all triplet combinations summing to zero. 
       start = start + 1 
       end = end - 1 

      else if (a+b+c > 0) then 
       end = end - 1; 
      else 
       start = start + 1; 
      end 
     end 
    end 
Cuestiones relacionadas