Hay un libro de texto en espera de ser escrito en algún momento, con el título de trabajo Estructuras de datos, algoritmos y compensaciones . Casi todos los algoritmos o estructuras de datos que probablemente aprenderá a nivel de pregrado tienen alguna característica que lo hace mejor para algunas aplicaciones que para otras.
Tomemos la clasificación como un ejemplo, ya que todos están familiarizados con los algoritmos de clasificación estándar.
En primer lugar, la complejidad no es la única preocupación. En la práctica, los factores constantes son importantes, por lo que (por ejemplo) la ordenación rápida tiende a usarse más que la ordenación en montón aunque la ordenación rápida tiene una terrible complejidad en el peor de los casos.
En segundo lugar, siempre existe la posibilidad de que te encuentres en una situación en la que estás programando bajo restricciones extrañas. Una vez tuve que hacer una extracción cuantílica de una colección de muestras de tamaño modesto (más o menos 1000) lo más rápido posible, pero estaba en un pequeño microcontrolador que tenía muy poca memoria de lectura y escritura de repuesto, por lo que descartó la mayoría de ordenar algoritmos. La ordenación de Shell fue la mejor compensación, ya que era subcuadrática y no requería memoria adicional.O ( n logn )
En otros casos, las ideas de un algoritmo o estructura de datos podrían ser aplicables a un problema de propósito especial. El ordenamiento de burbujas parece ser siempre más lento que el de inserción en hardware real, pero la idea de realizar un pase de burbuja es a veces exactamente lo que necesita.
Considere, por ejemplo, algún tipo de visualización en 3D o videojuego en una tarjeta de video moderna, donde le gustaría dibujar objetos en orden desde el más cercano a la cámara hasta el más alejado de la cámara por razones de rendimiento, pero Si no obtiene el pedido exacto, el hardware se encargará de ello. Si se está moviendo por el entorno 3D, el orden relativo de los objetos no cambiará mucho entre fotogramas, por lo que realizar una pasada de burbuja en cada fotograma podría ser una compensación razonable. (El motor Source de Valve hace esto para los efectos de partículas).
Hay persistencia, concurrencia, localidad de caché, escalabilidad en un clúster / nube y una serie de otras posibles razones por las cuales una estructura de datos o algoritmo puede ser más apropiado que otro, incluso dada la misma complejidad computacional para las operaciones que le interesan.
Dicho esto, eso no significa que deba memorizar un montón de algoritmos y estructuras de datos por si acaso. La mayor parte de la batalla es darse cuenta de que hay una compensación para ser explotada en primer lugar, y saber dónde buscar si cree que podría haber algo apropiado.