En general dado un problema hay muchos algoritmos que lo resuelven. Uno puede buscar algoritmos más eficientes, pero llega un cierto momento que no es posible encontrar ninguno mejor. ¿Cómo darse cuenta de que hemos llegado a este punto? De eso se encarga la ciencia que se llama
Análisis de algoritmos. Cada problema tiene una complejidad mínima asociada, que en algunos casos, se puede determinar en forma teórica, de antemano, o sea, antes de buscar un método para solucionarlo. Si además se encuentra un algoritmo para ese problema que tiene la complejidad mínima, dicho algoritmo es óptimo.
En este caso, es fácil ver que no se puede hacer nada mejor que lo que hemos hecho. Fíjate que encontrar el máximo de una secuencia no ordenada de \( n \) enteros mediante comparaciones dos a dos, es equivalente a encontrar los \( n-1 \) que no son el máximo.
- Para "descartar" un elemento, debemos hacer al menos una comparación (para corroborar que dicho elemento es menor que algún otro).
- Si un elemento no es comparado nunca, dicho elemento podría ser el máximo.
De las premisas anteriores uno puede concluir que si cada uno de los \( n-1 \) elementos que no son el mínimo tiene que ser comparados al menos una vez para ser descartado, entonces deben realizarse
al menos \( n-1 \) comparaciones para descartarlos a todos. En otras palabras, cualquier algoritmo para este problema si llama \( T(n) \)
a su función de costo (número de comparaciones dependiendo de \( \red n \)), verifica \( T(n)\geq n-1 \).
Corregido es lo que está en rojo.