Este es un examen de final de la pregunta en mi algoritmos de clase:
$k$ es de un taxi número si $k = a^3+b^3=c^3+d^3$, y $a,b,c,d$ son distintos números enteros positivos. Encontrar todos los números de taxis $k$ tal que $a,b,c,d < $ n $O(n)$ tiempo.
No sé si el problema tenía una errata o no, porque $O(n^3)$ me parece más razonable. La mejor que se me ocurre es $O(n^2 \log n)$, y que es el mejor que nadie que yo conozca puede venir para arriba con.
El $O(n^2 \log n)$ algoritmo:
Probar todas las posibles $a^3+b^3=k$ pares, por cada $k$, tienda $(k,1)$ en un árbol binario(indexados por $k$) si $(k,i)$ no existe, si $(k,i)$ existe, reemplazar $(k,i)$ con $(k,i+1)$
Transversal del árbol binario, la salida de todos $(k,i)$ donde $i\geq 2$
Hay métodos más rápidos? Este debe ser el mejor método posible sin el uso de cualquier número de resultado teórico debido a que el programa podría salida $O(n^2)$ taxi números.
Es $O(n)$ siquiera posible? Uno tiene que demostrar que no son sólo $O(n)$ taxi números de menor a $2n^3$ en el fin de demostrar que existe una $O(n)$ algoritmo.
Edit: El profesor admitir que era un error, que debería haber sido $O(n^3)$. Estoy feliz de haber hecho la errata, ya que la respuesta Tomer Vromen sugerido es increíble.