En la informática actual, la eficiencia de los algoritmos y el rendimiento logrado no solo dependen de la complejidad computacional teórica, sino que también se ve directamente afectada por el rendimiento real del hardware.Esto es particularmente obvio, porque muchos algoritmos considerados óptimos pueden no funcionar tan bien como esperados en las aplicaciones del mundo real.Con el avance de la tecnología, vemos una conexión profunda entre el diseño de algoritmos y la arquitectura de hardware.Esta correlación plantea una pregunta clave: mientras busca la optimización del algoritmo, ¿cómo debería adaptarse el diseño y el rendimiento del hardware a este cambio?
Si el algoritmo es progresivamente óptimo, significa que a una escala de entrada lo suficientemente grande, ningún algoritmo puede superar su rendimiento, solo limitado por un factor constante.
El concepto de algoritmos óptimos progresivos a menudo se ve en la informática, y generalmente implica el rendimiento de los algoritmos cuando se procesan grandes entradas.Específicamente, cuando el rendimiento de un algoritmo es O (F (n)), si se ha demostrado que su límite inferior es Ω (F (N)) para un problema específico, entonces el algoritmo se llama progresivo óptimo.Por ejemplo, en el caso de la clasificación de comparación, toda la clasificación de comparación requiere al menos las comparaciones de Ω (N log n) en los escenarios promedio y peor de los casos, mientras que la clasificación de combinación y la clasificación de montón se pueden clasificar en el tiempo O (n log n) y, por lo tanto, se pueden considerar como progresivamente óptimos.
Sin embargo, en muchos casos, existen otros algoritmos con mayor eficiencia, especialmente cuando los datos de entrada tienen propiedades específicas.Si se sabe que los objetos N son enteros en el rango [1, n], se pueden clasificar en O (n), como el uso de la clasificación de cubos.Esto muestra que una sola invariancia no debe limitarnos a un determinado algoritmo, porque ciertas estructuras o algoritmos de datos específicos pueden mejorar en gran medida el rendimiento.
Incluso un algoritmo óptimo progresivo, sin considerar la optimización de hardware, puede no funcionar de manera óptima en datos reales.
Para las computadoras contemporáneas, las optimizaciones de hardware como el caché de memoria y el procesamiento paralelo pueden ser "destruidas" por algoritmos progresivamente óptimos.Esto significa que si su análisis no tiene en cuenta estas optimizaciones de hardware, puede haber algunos algoritmos subóptimos que pueden utilizar mejor estas características y ir más allá del algoritmo óptimo en los datos del mundo real.Tomando el algoritmo de tiempo lineal de Bernard Chazelle para la triangulación de polígono simple como ejemplo, esta es una elección óptima incremental, pero rara vez se usa en la práctica.Además, aunque las estructuras de datos de matriz dinámica se pueden indexar teóricamente en un momento constante, excederán significativamente el rendimiento de los índices de matriz ordinarios en muchas máquinas.
Aunque la importancia de los algoritmos óptimos progresivos no se puede ignorar, su complejidad a veces los hace difíciles de aplicar en algunas situaciones prácticas.Si el algoritmo es demasiado complejo, su dificultad para comprender e implementar puede exceder los beneficios potenciales dentro del rango de tamaños de entrada considerados.De hecho, las entradas que enfrentamos en muchos casos, cuyas propiedades hacen que otros algoritmos o heurísticas de alto rendimiento funcionen idealmente, incluso si su peor tiempo no es bueno.
Según estos puntos de vista, podemos ver que la compensación entre la optimización progresiva y la efectividad del hardware es realmente compleja.Con el avance de la tecnología, es necesario reevaluar el diseño del algoritmo para adaptarse mejor al entorno de hardware en constante cambio.Si nos centramos solo en la eficiencia teórica, podemos perder soluciones que tienen más ventajas en la usabilidad, la flexibilidad y el rendimiento.
Al explorar algoritmos, también podría pensar: ¿Qué tipo de diseño de hardware puede contribuir al mejor rendimiento de los algoritmos?