You are on page 1of 3

Cormen - Introduction to Algorithms - 1.

2 Algorithms as a Technology
Supongamos que los computadores son infinitamente rpidos y la memoria es de libre
uso, Tendras alguna razn para estudiar los Algoritmos? La respuesta es s, por la
razn de que an querras demostrar que tu mtodo de resolucin termina y que
cuando lo hace, entrega una solucin correcta
Si los computadores fueran infinitamente rpidos, cualquier mtodo correcto debera
servir para resolver un problema. Probablemente querras que tu implementacin est
dentro de las buenas prcticas de ingeniera (por ejemplo, que est bien diseado y
documentado), pero usualmente usaras cualquier mtodo que fuera el ms fcil de
implementar.
Por supuesto, los computadores pueden ser rpidos, pero no infinitamente. Y la
memoria puede ser usada de forma eficiente, pero no sin costo. Por lo tanto, el tiempo
de cmputo es un recurso limitado, as mismo el espacio en memoria. Deberas usar
este recurso sabiamente, y los Algoritmos eficientes en trminos de Tiempo
Computacional o Espacio en Memoria te ayudarn.

Eficiencia:
Diferentes algoritmos diseados para resolver el mismo problema suelen diferir
dramticamente en su eficiencia. Estas diferencias pueden ser mucho ms
significativas que las de hardware o software.
Como un ejemplo, en el Captulo 2, veremos dos algoritmos de Ordenamiento. El
primero, conocido como Insertion Sort (Insercin), toma ms o menos un tiempo c
1
n
2

en ordenar n tems, donde c
1
es una constante que no depende de n. Eso es, que toma
un tiempo ms o menos proporcional a n
2
. El segundo, Merge Sort (Mezcla), toma ms
o menos un tiempo igual a c
2
nlgn y c
2
es otra constante que tampoco depende de n. El
Ordenamiento por Insercin (Insertion Sort) suele tener una constante menor a la de
Ordenamiento por Mezcla (Merge Sort), as que c
1
< c
2
. Veremos que las constantes
pueden tener mucho menos impacto en el tiempo de ejecucin que el tamao de
entrada de n. Escribamos el tiempo de ejecucin del Insertion Sort como c
1
n n y el del
Merge Sort como c
2
n lg n. Entonces vemos que donde Insertion Sort tiene el factor n
en su tiempo de ejecucin, el Merge Sort tiene un lg n, que es mucho menor. (Por
ejemplo, cuando n = 1000, lg n es aproximadamente 10, y cuando n = 1.000.000, lg n
es aproximadamente 20.) Aunque Insertion suele ejecutarse ms rpido que Merge
para entradas pequeas, una vez que el tamao de la entrada n se vuelve
suficientemente grande, el lg n de Merge (contra la n de Insertion) har ms que
compensar la diferencia entre las constantes. No importa cuanto ms pequea sea c
1

respecto de c
2,
siempre habr un punto desde el que Merge sea ms rpido que
Insertion.
Para un ejemplo concreto, opongamos un computador ms rpido (CA) ejecutando
Insertion contra un computador ms lento (CB) ejecutando Merge. Ambos pueden
ordenar arreglos de 10 millones de nmeros. (Aunque 10 millones parezca un montn,
si son enteros (int) en 8-bytes, entonces la entrada ocupa cerca de 80 MB, que cabe
muchsimas veces incluso en la memoria de una computadora barata.) Supongamos
que CA ejecuta 10 billones de instrucciones por segundo (ms rpido que un simple
computador secuencial contemporneo a este texto) y CB ejecuta solamente 10
millones de instrucciones por segundo, esto es que CA es 1000 veces ms rpido que
CB en poder computacional primario. Para hacer esta diferencia an ms dramtica,
suponga que el ms astuto programador del mundo codific Insertion en Lenguaje de
Mquina para CA, y el cdigo resultante requiere 2n
2
instrucciones para ordenar n
nmeros. Suponga adems que un programador promedio implement Merge, usando
un lenguaje de Alto Nivel con un compilador ineficiente, resultando un cdigo que
toma 50n lg n instrucciones. Para ordenar 10 millones de nmeros CA toma:
(


( )
Mientras que CB toma:


( )
Usando un algoritmo cuyo tiempo de ejecucin crece ms lento, incluso en un mal
compilador, CB supera ms de 17 veces en rapidez a CA. La ventaja de Merge sobre
Insertion es incluso mayor cuando ordenamos 100 millones de mueros: donde
Insertion toma ms de 23 das, y Merge toma menos de 4 horas. En general, as como
el tamao del problema crezca, lo har la ventaja relativa del Merge Sort.

Algoritmos y Otras Tecnologas
El ejemplo de arriba muestra que deberamos considerar los algoritmos, igual que al
hardware, como Tecnologa. El rendimiento total del sistema depende de la eleccin
de algoritmos eficientes as como de hardware rpido. Los avances hechos sobre los
algoritmos avanzan tan rpido como los hechos sobre otras tecnologas
computacionales.
Puedes preguntar si los algoritmos son realmente tan importantes en los
computadores actuales a la luz de otros avances tecnolgicos, tales como:
Arquitectura de Computador Avanzada y tecnologas de fabricacin
Implementacin de GUI (easy-to-use, intuitivas, interfacez grficas de usuario)
Sistemas orientados a objetos
Tecnologas WEB integradas
Rpido uso de Redes, ambos almbrica e inalmbrica.
La respuesta es s. A pesar que alguna aplicaciones no necesitan explcitamente
aplicacin de la algortmica (tal como alguna simples aplicaciones WEB), muchas lo si
lo necesitan. Por ejemplo, considere un servicio WEB que determina cmo viajar de
una locacin a otra. Su implementacin dependera de un hardware rpido, tanto
como para buscar rutas (probablemente usando el algoritmo del camino ms corto),
interpretar mapas, e interpolar direcciones.
Por otro lado, aun una aplicacin que no requiera de algortmica depende
tremendamente de algoritmos. Depende la aplicacin de hardware rpido? El diseo
de hardware depende de algoritmos. La aplicacin depende de una interfaz grfico
de usuario? El diseo de cualquier GUI depende de algoritmos. La aplicacin depende
de las redes? El uso de redes depende fuertemente de algoritmos. Est el cdigo de la
aplicacin escrito en un lenguaje distinto al de Mquina? Entonces fue procesado por
un compilador, interpretador, o ensamblador, que hacen un uso extensivo e
algoritmos. Los algoritmos estn en el ncleo de muchas tecnologas usadas en los
computadores actuales.
Adems, con la cada vez ms creciente capacidad de los computadores, los usamos
para resolver problemas ms grandes que antes. Como vimos en la comparacin de
arriba entre Insertion y Merge, es un tamao de entrada ms grande lo que hace
diferencia la eficiencia entre algoritmos volverse particularmente prominente.
Tiendo una base slido de conocimiento en algortmica y tcnica es una caracterstica
que separa a los programadores verdaderamente expertos de los novatos. Con
tecnologas computacionales modernas, puedes cumplir algunas tareas sin saber
mucho sobre algoritmos, pero con una buena base en algoritmos, puedes hacer ms,
mucho ms.