Seleccione dos números que sumen


9

Aquí hay un problema vecino más cercano.

Dados los reales (¡muy grande !), Más el objetivo real , encuentre y cuyo SUM sea más cercano a . Permitimos un preprocesamiento / indexación razonable de (hastaa1,…,anp a i a j p a 1 , … , a n O ( n log n ) p O ( log n )npaiajpa1,…,anO(nlog⁡n) ), pero en el momento de la consulta (dado ), el resultado debe devolverse muy rápido (por ejemplo, tiempo).pO(log⁡n)

(Ejemplo más simple: si solo quisiéramos el SINGLE que está más cerca de , clasificaríamos fuera de línea, p a 1 , … , a n O ( n log n ) O ( log n )aipa1,…,anO(nlog⁡n) , luego haría una búsqueda binaria en el momento de la consulta, )O(log⁡n)

Soluciones que no funcionan:

1) Ordene fuera de línea, luego en el momento de la consulta, comience desde ambos extremos y mueva dos punteros hacia adentro ( http://bit.ly/1eKHHDy O ( n )a1,…,an ). No es bueno, debido al tiempo de consulta .O(n)

2) Ordene fuera de línea, luego en el momento de la consulta, tome cada y realice una búsqueda binaria para un "amigo" que lo ayude a sumar algo cercano aa i p O ( n log n )a1,…,anaip . No es bueno, debido al tiempo de consulta .O(nlog⁡n)

3) Ordenar todos los paresO ( n 2 )(a1,…,an) sin conexión, luego realice una búsqueda binaria. No es bueno, debido al preprocesamiento de .O(n2)

¡Gracias!

PD. Otras generalizaciones necesarios para la práctica: (1) y para ser 50-dimensionales vectores, (2) "cerca" de ser vector de distancia coseno, y (3) -mejor más cercano pares-que-suma, no solo 1 mejor. p ka1,…,anpk


¿Existe un límite en el tiempo de preprocesamiento o la cantidad de espacio que podemos usar después del preprocesamiento? Si estamos limitados al espacio , ¿tiene alguna razón para creer que se puede resolver en, por ejemplo, el tiempo O ( lg n ) ? Eso me parece terriblemente improbable. O(n)O(lg⁡n)
— DW

El preprocesamiento está limitado a O ( log n ). Actualicé la declaración del problema. nn
— Kevin

No tengo ninguna razón para creer que las consultas pueden ser rápidas, pero muchos resultados útiles para los vecinos más cercanos (árboles kd, hashing sensible a la localidad, etc.) me parecen contraintuitivamente buenos. Una solución aproximada utilizando hashing sensible a la localidad estaría bien para un uso práctico.
— Kevin

Respuestas:


17

Esto es casi ciertamente imposible.

Suponga que puede resolver su problema con el tiempo de preprocesamiento y el tiempo de consulta Q ( n ) . Luego hay un algoritmo simple para resolver el problema de 3SUM: dado un conjunto de n números reales, ¿tres elementos suman cero? En tiempo P ( n ) + n ⋅ Q ( n ) . Preprocesamos todos los números, luego para cada número a k , encontramos el valor de a i + a j más cercano a - a kP(n)Q(n)nP(n)+n⋅Q(n)akai+aj−ak; si coincide −ak exactamente, hemos encontrado una solución al problema 3SUM.

Sin embargo, el algoritmo más rápido conocido para 3SUM se ejecuta en el tiempo , y se conjetura ampliamente que este algoritmo es óptimo. Además, hay un límite inferior Ω ( n 2 ) correspondiente en un modelo de cálculo de árbol de decisión restringido pero natural. Para conjuntos de enteros , existen algoritmos de tiempo ligeramente subcuadrático que "juegan juegos con bits", pero incluso en el modelo de RAM entera, se conjetura que 3SUM requiere Ω ( n 2 /O(n2)Ω(n2)Ω(n2/polylogn) tiempo.

Asumiendo que la conjetura es correcta, su problema requiere tiempo de preprocesamiento (casi) cuadrático o tiempo de consulta (casi) lineal.


2

Si puede usar espacio ilimitado y tiempo ilimitado durante el preprocesamiento, la siguiente solución cumple con sus requisitos:

  • {ai+aj:1≤i≤j≤n}O(n2)O(n2)

  • ai,ajai+ajpO(lg⁡n)

Si esta solución no es aceptable, debe analizar detenidamente sus requisitos y editar la pregunta en consecuencia.


Hola y gracias Pero su solución es la misma que mi solución # 3, lo cual es problemático debido al tiempo de preprocesamiento de O (n ^ 2). En mi caso, n es muy grande (p. Ej., 1 m) y debo evitar las operaciones O (n ^ 2).
— Kevin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.