stringtranslate.com

3SUMA

Problema sin resolver en informática :
¿Existe un algoritmo para resolver el problema 3SUM a tiempo , para algunos ?

En la teoría de la complejidad computacional , el problema 3SUM pregunta si un conjunto dado de números reales contiene tres elementos cuya suma es cero. Una versión generalizada, k -SUM, plantea la misma pregunta sobre k elementos, en lugar de simplemente sobre 3. 3SUM se puede resolver fácilmente en el tiempo, y se conocen límites inferiores coincidentes en algunos modelos especializados de computación (Erickson 1999).

Se ha conjeturado que cualquier algoritmo determinista para 3SUM requiere tiempo. En 2014, la conjetura original de 3SUM fue refutada por Allan Grønlund y Seth Pettie, quienes dieron un algoritmo determinista que resuelve 3SUM en el tiempo. [1] Además, Grønlund y Pettie demostraron que la complejidad del árbol de decisión lineal 4- de 3SUM es . Estos límites se mejoraron posteriormente. [2] [3] [4] El algoritmo más conocido actualmente para 3SUM se ejecuta en el tiempo. [4] Kane, Lovett y Moran demostraron que la complejidad del árbol de decisión lineal 6- de 3SUM es . [5] El último límite es estricto (hasta un factor logarítmico). Todavía se conjetura que 3SUM es irresoluble en el tiempo esperado. [6]

Cuando los elementos son números enteros en el rango , 3SUM se puede resolver en el tiempo representando el conjunto de entrada como un vector de bits , calculando el conjunto de todas las sumas por pares como una convolución discreta utilizando la transformada rápida de Fourier y, finalmente, comparando este conjunto con . [7]

Algoritmo cuadrático

Supongamos que la matriz de entrada es . En los modelos de computación de números enteros ( Word RAM ), 3SUM se puede resolver en el tiempo promedio insertando cada número en una tabla hash y luego, para cada índice y , verificando si la tabla hash contiene el número entero .

También es posible resolver el problema al mismo tiempo en un modelo de computación basado en comparación o en RAM real , para el cual no se permite el hash. El algoritmo a continuación primero ordena la matriz de entrada y luego prueba todos los pares posibles en un orden cuidadoso que evita la necesidad de una búsqueda binaria de los pares en la lista ordenada, logrando el peor tiempo posible, como se muestra a continuación. [8]

sort(S); para i = 0 a n - 2 hacer a = S[i]; inicio = i + 1; fin = n - 1; mientras (inicio < fin) hacer b = S[inicio] c = S[fin]; si (a + b + c == 0) entonces  salida a, b, c; // Continuar la búsqueda de todas las combinaciones de tripletes cuya suma sea cero. // Necesitamos actualizar tanto el final como el inicio juntos ya que los valores de la matriz son distintos. inicio = inicio + 1; fin = fin - 1; de lo contrario  si (a + b + c > 0) entonces fin = fin - 1; demás inicio = inicio + 1; fin fin

El siguiente ejemplo muestra la ejecución de este algoritmo en una pequeña matriz ordenada. Los valores actuales de a se muestran en rojo, los valores de b y c se muestran en magenta.

 -25  -10 -7 -3 2 4 8 10 (a+b+c==-25) -25 -10 -7 -3 2 4 8 10 (a+b+c==-22) . . . -25-10-7-324810 ( a + b+c==- 7 ) -25-10-7-324810 ( a + b+ c ==-7) -25-10-7-3 2 4 8 10 ( a+b+c == -3) -25-10-7-3 2 4 8 10 (a+b+ c ==2) -25-10-7-324810 ( a + b + c ==0)

La exactitud del algoritmo se puede comprobar de la siguiente manera. Supongamos que tenemos una solución a + b + c = 0. Como los punteros solo se mueven en una dirección, podemos ejecutar el algoritmo hasta que el puntero situado más a la izquierda apunte a a. Ejecutamos el algoritmo hasta que uno de los punteros restantes apunte a b o c, lo que ocurra primero. Luego, el algoritmo se ejecutará hasta que el último puntero apunte al término restante, lo que dará como resultado la solución afirmativa.

Variantes

Suma distinta de cero

En lugar de buscar números cuya suma sea 0, es posible buscar números cuya suma sea cualquier constante C. La forma más sencilla sería modificar el algoritmo original para buscar en la tabla hash el entero ⁠ ⁠ .

Otro método:

Por ejemplo, si A = [1,2,3,4] y se le pide encontrar 3SUM para C = 4, entonces reste 4/3 de todos los elementos de A y resuélvalo de la manera habitual de 3sum, es decir, ⁠ ⁠ .

Tres matrices diferentes

En lugar de buscar los 3 números en una única matriz, podemos buscarlos en 3 matrices diferentes. Es decir, dadas tres matrices X, Y y Z, encontramos tres números aX , bY , cZ , tales que ⁠ ⁠ . Llamamos a la variante de 1 matriz 3SUM×1 y a la variante de 3 matrices 3SUM×3.

Dado un solucionador para 3SUM×1, el problema 3SUM×3 se puede resolver de la siguiente manera (asumiendo que todos los elementos son números enteros):

Por la forma en que transformamos las matrices, se garantiza que aX , bY , cZ . [9]

Suma de convolución

En lugar de buscar elementos arbitrarios de la matriz tales que:

El problema de convolución 3sum (Conv3SUM) busca elementos en ubicaciones específicas: [10]

Reducción de Conv3SUM a 3SUM

Dado un solucionador para 3SUM, el problema Conv3SUM se puede resolver de la siguiente manera. [10]

Prueba de corrección:

Reducción de 3SUM a Conv3SUM

Dado un solucionador para Conv3SUM, el problema 3SUM se puede resolver de la siguiente manera. [6] [10]

La reducción utiliza una función hash . Como primera aproximación, supongamos que tenemos una función hash lineal, es decir, una función h tal que:

Supongamos que todos los elementos son números enteros en el rango: 0... N -1, y que la función h asigna cada elemento a un elemento en el rango más pequeño de índices: 0... n -1. Crea una nueva matriz T y envía cada elemento de S a su valor hash en T , es decir, para cada x en S ( ⁠ ⁠ ):

Inicialmente, supongamos que las asignaciones son únicas (es decir, cada celda en T acepta solo un único elemento de S ). Resuelva Conv3SUM en T. Ahora:

Esta solución idealizada no funciona, porque cualquier función hash podría mapear varios elementos distintos de S a la misma celda de T . El truco es crear una matriz ⁠ ⁠ seleccionando un solo elemento aleatorio de cada celda de T , y ejecutar Conv3SUM en ⁠ ⁠ . Si se encuentra una solución, entonces es una solución correcta para 3SUM en S . Si no se encuentra ninguna solución, entonces cree una ⁠ ⁠ aleatoria diferente e intente nuevamente. Suponga que hay como máximo R elementos en cada celda de T . Entonces la probabilidad de encontrar una solución (si existe una solución) es la probabilidad de que la selección aleatoria seleccione el elemento correcto de cada celda, que es . Al ejecutar Conv3SUM veces, la solución se encontrará con una alta probabilidad.

Desafortunadamente, no tenemos un hash lineal perfecto, por lo que tenemos que utilizar una función hash casi lineal, es decir, una función h tal que:

o

Esto requiere duplicar los elementos de S al copiarlos en T , es decir, poner cada elemento tanto en (como antes) como en . Por lo tanto, cada celda tendrá 2 elementos R y tendremos que ejecutar Conv3SUM veces.

Dureza 3SUM

Un problema se denomina 3SUM-hard si su resolución en tiempo subcuadrático implica un algoritmo de tiempo subcuadrático para 3SUM. El concepto de 3SUM-hard fue introducido por Gajentaan y Overmars (1995). Demostraron que una gran clase de problemas en geometría computacional son 3SUM-hard, incluidos los siguientes. (Los autores reconocen que muchos de estos problemas son contribuciones de otros investigadores.)

Actualmente, hay una multitud de otros problemas que caen en esta categoría. Un ejemplo es la versión de decisión de la clasificación X + Y : dados conjuntos de números X e Y de n elementos cada uno, ¿existen n ² x + y distintos para xX , yY ? [11]

Véase también

Notas

  1. ^ Grønlund y Pettie 2014.
  2. ^ Freund 2017.
  3. ^ Oro y Sharir 2017.
  4. ^Ab Chan 2018.
  5. ^ Kane, Lovett y Moran 2018.
  6. ^ ab Kopelowitz, Tsvi; Pettie, Seth; Porat, Ely (2014). "Dureza 3SUM en estructuras de datos (dinámicas)". arXiv : 1407.6756 [cs.DS].
  7. ^ Cormen, Thomas H .; Leiserson, Charles E .; Rivest, Ronald L .; Stein, Clifford (2009) [1990]. Introducción a los algoritmos (3ª ed.). MIT Press y McGraw-Hill. ISBN 0-262-03384-4.Ejemplo 30.1–7, pág. 906.
  8. ^ Gráficos de visibilidad y suma de 3 por Michael Hoffmann
  9. ^ Para una reducción en la otra dirección, consulte Variantes del problema de 3 sumas.
  10. ^ abc Patrascu, M. (2010). Hacia límites inferiores polinomiales para problemas dinámicos . Actas del 42.º simposio de la ACM sobre teoría de la computación - STOC '10. pág. 603. doi :10.1145/1806689.1806772. ISBN 9781450300506.
  11. ^ Demaine, Erik ; Erickson, Jeff; O'Rourke, Joseph (20 de agosto de 2006). "Problema 41: Ordenar X + Y (sumas por pares)". The Open Problems Project . Consultado el 23 de septiembre de 2014 .

Referencias