La cita es bastante vaga e imprecisa. Hay al menos tres formas relacionadas de interpretarlo.
El punto matemático literal detrás de esto es que, si solo está interesado en instancias de tamaño hasta cierto límite, entonces solo hay finitamente muchas instancias posibles. Por ejemplo, solo hay finitos gráficos en hasta cien vértices. Si solo hay un número finito de instancias, puede, en principio, resolver el problema simplemente construyendo una tabla de búsqueda con todas las respuestas a todas las instancias posibles. Ahora, puede encontrar la respuesta comprobando primero que la entrada no es demasiado grande (lo que lleva tiempo constante: si la entrada es más larga que k, no es válido) y luego busque la respuesta en la tabla (que lleva tiempo constante: hay un número fijo de entradas en la tabla). Sin embargo, tenga en cuenta que el tamaño real de la tabla es probablemente demasiado grande. Dije que solo hay un número finito de gráficos en cien vértices y es cierto. Es solo que el número finito es mayor que el número de átomos en el universo observable.
Un punto más práctico es que, cuando decimos que el tiempo de ejecución de un algoritmo es , eso solo significa que es asintóticamente c n 2 pasos, para algunos C constantes . Es decir, hay alguna constante n 0 tal que, para todos los n ≥ n 0 , el algoritmo toma aproximadamente c n 2 pasos. Pero tal vez n 0 = 100 , 000 , 000Θ ( n2) c n2donorte0 0n ≥ n0 0c n2norte0 0= 100 , 000 , 000y solo te interesan las instancias de tamaño mucho más pequeño que eso. Es posible que el límite cuadrático asintótico ni siquiera se aplique a sus instancias pequeñas. Es posible que tenga suerte y que sea más rápido con entradas pequeñas (o que tenga mala suerte y que sea más lento). Por ejemplo, para pequeña , n 2 < 1000 n, por lo que preferiría ejecutar un algoritmo cuadrático con constantes buenas que un algoritmo lineal con constantes malas. Un ejemplo real de esto es que los algoritmos de multiplicación matricial asintóticamente más eficientes (variantes de Coppersmith – Winograd , que se ejecutan en el tiempo O ( n 2.3729 ) ) rara vez se usan en la práctica porque el O de Strassennortenorte2< 1000 nO ( n2.3729) algoritmo es más rápido a menos que sus matrices sean realmente grandes.O ( n2.8074)
Un tercer punto es que, si es pequeño, n 2 e incluso n 3 son pequeños. Por ejemplo, si necesita ordenar algunos miles de elementos de datos y solo necesita ordenarlos una vez, cualquier algoritmo de clasificación es lo suficientemente bueno: a Θ ( n 2 )nortenorte2norte3Θ ( n2)El algoritmo solo necesitará quizás unas pocas decenas de millones de instrucciones para ordenar sus datos, lo que no es mucho tiempo en una CPU que puede realizar miles de millones de instrucciones por segundo. OK, también hay accesos a la memoria, pero incluso un algoritmo lento tomará menos de un segundo, por lo que probablemente sea mejor usar un algoritmo simple y lento y hacerlo bien que usar un algoritmo complejo y rápido y descubrir que es muy rápido pero tiene errores y en realidad no ordena los datos correctamente.