Raramente existe un nico algoritmo para resolver un problema determinado.
Cuando se comparan dos algoritmos diferentes que resuelven el mismo problema, normalmente se encontrar que un algoritmo es un orden de magnitud ms eficiente que el otro. En este sentido, lo importante es que el programador sea capaz de reconocer y elegir el algoritmo ms eficiente.
Entonces, qu es eficiencia? La eficiencia de un algoritmo es la propiedad mediante la cual un algoritmo debe alcanzar la solucin al problema en el tiempo ms corto posible o utilizando la cantidad ms pequea posible de recursos fsicos y que sea compatible con su exactitud o correccin. Un buen programador buscar el algoritmo ms eficiente dentro del conjunto de aquellos que resuelven con exactitud un problema dado.
Cmo medir la eficiencia de un algoritmo o programa informtico? Uno de los mtodos ms sobresalientes es el anlisis de algoritmos, que permite medir la dificultad inherente de un problema. Los restantes captulos utilizan con frecuencia las tcnicas de anlisis de algoritmos siempre que estos se disean. Esta caracterstica le permitir comparar algoritmos para la resolucin de problemas en trminos de eficiencia. Aunque las mquinas actuales son capaces de ejecutar millones de instrucciones por segundo, la eficiencia permanece como un reto o preocupacin a resolver. Con frecuencia, la eleccin entre algoritmos eficientes e ineficientes puede mostrar la diferencia entre una solucin prctica a un problema y una no prctica. En los primeros tiempos de la informtica moderna (dcadas de los 60 a los 80), las computadoras eran muy lentas y tenan una capacidad de memoria pequea.
Los programas tenan que ser diseados cuidadosamente para hacer uso de los recursos escasos, como almacenamiento y tiempo de ejecucin. Los programadores gastaban horas intentando recortar radicalmente segundos a los tiempos de ejecucin de sus programas o intentando comprimir los programas en un pequeo espacio en memoria utilizando todo tipo de tecnologas de comprensin y reduccin de tamao. La eficiencia de un programa se meda en aquella poca como un factor dependiente del binomio espacio- tiempo.
Hoy, la situacin ha cambiado radicalmente. Los costes del hardware han cado drsticamente, mientras que los costes humanos han aumentado considerablemente. El tiempo de ejecucin y el espacio de memoria ya no son factores crticos como lo fueron anteriormente. Hoy da, el esfuerzo considerable que se requera para conseguir la eficiencia mxima no es tan acusado, excepto en algunas aplicaciones como, por ejemplo, sistemas en tiempo real con factores crticos de ejecucin. Pese a todo, la eficiencia sigue siendo un factor decisivo en el diseo de algoritmos y construccin posterior de programas.
Existen diferentes mtodos con los que se trata de medir la eficiencia de los algoritmos; entre ellos, los que se basan en el nmero de operaciones que debe efectuar un algoritmo para realizar una tarea; otros mtodos se centran en tratar de medir el tiempo que se emplea en llevar a cabo una determinada tarea, ya que lo importante para el usuario final es que sta se efecte de forma correcta y en el menor tiempo posible. Sin embargo, estos mtodos presentan varias dificultades, ya que cuando se trata de generalizar la medida hecha, sta depende de factores como la mquina en la que se efectu, el ambiente del procesamiento y el tamao de la muestra, entre otros factores.