A veces la respuesta correcta es "¿Cuántas veces aparece esto con tu código base?" pero en este caso, hay una respuesta real.
La respuesta correcta es no, porque no todos los problemas se pueden resolver con un procesamiento paralelo perfecto. Por ejemplo, un problema similar a un vendedor ambulante debe comprometerse con una ruta para considerar el segundo tramo del viaje.
Suponiendo que una matriz de ciudades totalmente conectada, si desea mostrar todas las posibles rutas no cíclicas para nuestro cansado vendedor, se encuentra con un problema O (n!), Que puede descomponerse en una O (n) * O ((n-1)!) Problema. El problema es que necesitas comprometerte con una ruta (en el lado O (n) de la ecuación) antes de que puedas considerar las rutas restantes (en el lado O ((n-1)!) De la ecuación).
Dado que algunos de los cálculos deben realizarse antes de otros cálculos, entonces no hay forma de dispersar los resultados perfectamente en un único pase de dispersión/recopilación. Eso significa que la solución estará esperando los resultados de los cálculos que deben realizarse antes de que se pueda iniciar el "próximo" paso. Esta es la clave, ya que la necesidad de soluciones parciales previas proporciona un "cuello de botella" en la capacidad de proceder con el cálculo.
Dado que hemos demostrado que podemos hacer que varias de estas CPU infinitamente rápidas, infinitamente numerosas, esperen (incluso si están esperando por sí mismas), sabemos que el tiempo de ejecución no puede ser O (1) y solo necesitamos para elegir una N grande para garantizar un tiempo de ejecución "inaceptable".
Sí, si n!
mob
Quiero saber dónde estabas entrevistando. ¡Es increíble que tengan una computadora con infinitas CPU y memoria! –
@Jeff: Tee hee. – Pierreten