La complejidad de los algoritmos

La complejidad de los algoritmos gyJOhn]AgH 1 110R5pR 16, 2011 2 pagcs UNAMBA (Caso práctico) Hace unos años presenciamos una discusión entre dos programadores sobre la “eficiencia de los programas”. Ellos discutían sobre la manera de especificar el problema en la herramienta CASE que utilizaban, para que el programa generado fuera más “eficiente”. La discusión era acalorada y tenían visiones muy diferentes del asunto (al no conocer ni de cerca la herramienta en cuestión, no entendiamos ni media palabra de sus argumentos).

Hasta que en un momento no pudimos ontenernos y decidimos meter el dedo en el ventilador: A ver, una pregunta, ¿cuándo un programa es más eficiente que otro? les preguntamos. Para nuestro asombro (aunque debería haberlo intuido), ambos respondieron al unísono: ‘Cuando es más corto!. No soñaría por un in viven en tal ignoranci per ora demasiada claridad a rca de son conscientes de hora de la ejecución, los programadores chos no tienen nto ás aún, ni siquiera puede haber, a la uivalentes pero de diferente complejidad temporal.

Pensando en esto, recordamos un ejemplo utilizado por dos profes en un artículo llamado “La erplejidad como recurso didáctico”. Este ejemplo muestra cómo un cambio aparentemente sutil en un algoritmo puede impactar tremendame Swipe to View nexr page tremendamente en el rendimiento del programa resultante. El problema Supongamos que tenemos que escrlbir un programa para calcular potencias naturales de 2.

Para ello podemos usar las operaciones aritméticas de suma y producto. Una solución posible sería calcular: 20—1 2n 2n – 1, para n > 0 Una alternativa sería considerar el caso “n > 0” de forma diferente: sumando dos veces 2n- 1 en vez de multlplicando por . Esto es: 20—1 2n 2n—1 +2n – 1, para n > O Puede verse claramente que ambas soluciones son matemáticamente equivalentes.

A continuación, el código en lenguaje pascal de las dos soluciones (powl y pow2, respectivamente). por simplicidad se ha declarado el exponente a calcular como una constante igual a 10: Algorítmica II Ing. Erech Ordoñez Ramos[Escribir texto] Página 1 powl . pas program powl; const exp = 10; function pow(n: integer): integer; begin if n = O then POW 1 else POW 2 * pow(n-l); end; begin writeln(pow(exp)); end.