3SUM y puntos colineales
El concepto de reducción se utiliza también para hablar de cotas inferiores que están en función de otras cotas inferiores que no son conocidas, pero sí muy estudiadas. Por ejemplo, si podemos reducir la multiplicación de matrices de a un cierto problema , sabemos que no es más fácil que multiplicar matrices. Antes de Strassen, podríamos haber pensado que la complejidad del problema era . En 1969, Strassen mostró cómo multiplicar matrices en tiempo , y luego en 1990 Coppersmith y Winograd lo redujeron a (analizado en 2014 por Le Gall).
No se conoce una cota inferior general para el problema más allá de la obvia . Un problema tan trabajado es útil en sí mismo como cota inferior: si podemos resolver en menor tiempo, habremos encontrado un algoritmo para multiplicar matrices mejor que todos los conocidos. Decimos entonces que es multiplicación-de-matrices-hard. Tal como en la NP-completitud, donde se dice que un problema es NP-hard, es una forma de decir cuán improbable se considera obtener un mejor resultado para resolver (nota: ser NP-completo equivale a ser NP y ser NP-hard).
El problema 3SUM es el de, dados números reales , encontrar tres que sumen cero (pueden repetirse números en la suma). Veamos cómo resolver este problema en tiempo . Supongamos que primero ordenamos los números en tiempo . Luego, tomaremos cada número y buscaremos dos números de que sumen . Para ello, progresaremos desde las dos puntas del arreglo ordenado, y , con dos cursores. Si , moveremos el cursor de la izquierda hacia adelante, . En cambio, si , moveremos el cursor de la derecha hacia atrás, . En todo momento, el invariante es que los números que ya dejamos de considerar no pueden formar parte de la solución, y se puede ver que se mantiene cuando movemos los cursores. Al final, en tiempo encontramos un y adecuados (con lo cual resolvimos el problema con los números , y ), o los cursores se cruzan y debemos pasar a considerar otro número . El tiempo total es .
Por mucho tiempo se sospechó que era la complejidad del problema, pero en 2014 Grunlund y Pettie encontraron una solución de tiempo . Aún así, se sospecha que el problema es (es decir, para cualquier cantidad finita de s). Como es un problema bastante estudiado, es interesante cuando se establece que otro problema es 3SUM-hard.
Consideremos el problema de, dados puntos , encontrar tres puntos colineales que no estén en una línea vertical. Esta última restricción se pone por conveniencia para demostrar una cota inferior, pues ese subcaso es fácil de resolver.
Reduciremos 3SUM a este problema, para mostrar que es 3SUM-hard. Dados números , generaremos 3 puntos para cada : , , y . Veremos que este conjunto tiene 3 puntos colineales no en vertical sii tiene 3 números que suman . Dadas las coordenadas elegidas, estos 3 puntos colineales deben ser de la forma , y , con . Pero como para algún , para algún , y para algún , tenemos que , de lo que se deduce que . También puede verse que ocurre lo recíproco: si hay tres números que sumen cero, hay tres puntos colineales. Como la conversión cuesta sólo , tenemos que el problema es 3SUM-hard.
Finalmente, el problema de encontrar tres puntos colineales sin la restricción de que estén en vertical también es 3SUM-hard. Para que esto tenga sentido, sin embargo, aún debemos prohibir que los puntos sean iguales, pues el problema es trivial en ese caso. Si los tres puntos deben ser distintos, entonces podemos crear los puntos . Si aparecen tres puntos colineales distintos , y , con , entonces tenemos que , es decir, , de donde tenemos , o . Dividiendo por obtenemos .