Tecnicas de Programacion PDF
Tecnicas de Programacion PDF
Tecnicas de Programacion PDF
TÉCNICAS DE PROGRAMACIÓN
Esta definición asume que la ejecución del algoritmo concluye en algún momento,
dejando fuera los procedimientos que ejecutan permanentemente sin detenerse. Para
incluir a éstos en la definición, algunos autores prefieren obviar la condición de que
la ejecución concluya, con lo cual basta con que un procedimiento sea una secuencia
de pasos que puede ser ejecutada por una entidad para que se lo considere algoritmo.
La tecnología de voz sobre IP se utiliza para realizar comunicaciones telefónicas sobre redes
IP (Internet Protocol). En esta tecnología son cruciales los algoritmos de compresión de datos,
ya que, cuanto más se compriman los datos que representan la voz digitalizada, mejor será la
calidad de comunicación.
16 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 17
Dado que un algoritmo es una lista precisa de pasos, el orden de ejecución será ca-
1
si siempre crítico para su funcionamiento. En general, se asume que las instruccio-
nes se enumeran explícitamente, y deben ejecutarse “desde arriba hacia abajo”, lo
Algoritmos
cual se establece más formalmente según el concepto de flujo de control.
Esta forma de “pensar” el algoritmo asume las premisas del paradigma de progra-
mación imperativa. Dicho paradigma es el más común, e intenta describir las tareas
en términos “mecánicos” y discretos. Los paradigmas de la programación funcional
y de la programación lógica describen el concepto de algoritmo en una forma lige-
ramente diferente (en el Capítulo 2 se detallan los distintos tipos de paradigmas).
Hasta aquí hemos dado una definición ciertamente informal del concepto de algo-
ritmo. Para definirlo en forma matemáticamente precisa, Alan Mathison Turing
–famoso matemático inglés (1912-1954), cuyas contribuciones en el campo de la
matemática y de la teoría de la computación le han valido ser considerado uno de
los padres de la computación digital– ideó un dispositivo imaginario al que deno-
minó máquina de computación lógica (LCM, Logical Computing Machine), pero
que ha recibido en su honor el nombre de máquina de Turing. Lo que confiere a
este supuesto dispositivo su extraordinaria importancia es que es capaz de resolver
cualquier problema matemático, a condición de que el mismo haya sido reducido
a un algoritmo. Por este motivo, se considera que algoritmo es cualquier conjunto
de operaciones que pueda ser ejecutado por la máquina de Turing (o, lo que es lo
mismo, por un sistema Turing completo, tal como se explica más adelante).
La máquina de Turing
Una máquina de Turing es un autómata que se mueve sobre una secuencia lineal de
datos. En cada instante, la máquina puede leer un único dato de la secuencia (general-
mente un carácter) y realizar ciertas acciones en base a una tabla que tiene en cuenta
su estado actual (interno) y el último dato leído. Entre las acciones que puede realizar,
está la posibilidad de escribir nuevos datos en la secuencia, recorrer la secuencia en am-
bos sentidos y cambiar de estado dentro de un conjunto finito de estados posibles.
usr.code 17
01_TecnicasProg.qxd 3/4/05 15:27 Page 18
TÉCNICAS DE PROGRAMACIÓN
Podemos consultar la sección de Servicios al lector para conocer los sitios en don-
de obtener más información acerca de los sistemas Turing completos.
ESPECIFICACIÓN DE ALGORITMOS
Para cualquier proceso computacional, el algoritmo correspondiente debe estar ri-
gurosamente definido, es decir, debe especificarse la forma en que se aplica a cada
posible circunstancia que pueda surgir. Todos los casos deben estar contemplados,
y el criterio que determina cada uno de ellos debe ser claro y computable.
En general, no existe un único algoritmo para cada problema que se quiere resolver.
Diferentes algoritmos pueden completar la misma tarea, requiriendo cada uno di-
ferentes cantidades de tiempo, espacio o esfuerzo. Sin embargo, la especificación
puede ser exactamente la misma para todos ellos.
Para especificar un algoritmo de forma tal que su implementación sea correcta –es
decir, que haga exactamente lo que se espera de él– y que, a la vez, pueda imple-
mentarse con diferentes lenguajes o herramientas, un método consiste en definir sus
entradas y salidas, con sus correspondientes precondiciones y poscondiciones.
TURING TARPIT
Existe una categoría de lenguajes de programación, denominada “Turing Tarpit” (tarpit = pozo de
alquitrán), la cual engloba a diversos lenguajes que cumplen la condición de ser Turing-comple-
tos, pero imponen restricciones extremas que los hacen difíciles de usar, aunque interesantes de
analizar. Encontraremos más información sobre estos lenguajes en el Apéndice D.
18 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 19
Especificación de algoritmos
1
mo número en una lista:
Algoritmos
Algoritmo: BuscarMaximo
Esta especificación define de manera inequívoca cómo debe funcionar nuestro al-
goritmo. Sin embargo, por estar expresado en lenguaje natural –con toda su carga
de ambigüedades–, puede prestarse a confusiones (quizá no en este caso, porque es
un algoritmo muy simple, pero sí para casos más complejos). Por ese motivo, con-
viene expresar las especificaciones en un lenguaje más riguroso, como por ejemplo,
las expresiones matemáticas usadas en el cálculo de predicados lógicos. Con tales
consideraciones, podemos expresar nuestro algoritmo en forma más precisa:
Algoritmo: BuscarMaximo
No cabe duda de que esta especificación es más rigurosa, aunque seguramente es más
difícil de entender para quien no domina esta clase de expresiones matemáticas.
usr.code 19
01_TecnicasProg.qxd 3/4/05 15:27 Page 20
TÉCNICAS DE PROGRAMACIÓN
IMPLEMENTACIÓN DE ALGORITMOS
La implementación es el proceso que toma la especificación del algoritmo y la traduce
a una forma que pueda aplicarse a la solución del problema para el cual fue diseñado.
Para el análisis y estudio de los algoritmos usualmente se utiliza una forma abstrac-
ta de implementación, la cual no utiliza un lenguaje de programación específico, si-
no que emplea formas de representar el algoritmo que luego pueden ser directamen-
te traducidas a un lenguaje en particular. Algunas de estas formas son los diagra-
mas de flujo, los diagramas de bloques y el seudo código. Este último es “casi”
un lenguaje imperativo, con la salvedad de que no toma en cuenta los tipos de da-
tos y, además, sus instrucciones pueden estar en idioma español o en cualquier otro,
ya que no serán interpretadas por ninguna computadora.
Función BuscarMaximo(lista)
Mayor = lista(1)
Contador = 2
Mientras Contador ≤ longitud(lista) hacer
Si lista(Contador) > Mayor entonces
Mayor = lista(Contador)
Fin Si
Contador = Contador + 1
Las precondiciones son las condiciones que el algoritmo asume que deben cumplir los datos de
entrada. Las poscondiciones describen cómo deben estar calculados los datos de salida.
20 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 21
Clases de algoritmos
Fin Mientras
1
Devolver Mayor
Algoritmos
Fin Función
El seudo código tiene la ventaja de poder derivarse con poco esfuerzo en casi cual-
quier lenguaje imperativo, como el Pascal o el C.
CLASES DE ALGORITMOS
Una forma de clasificar los algoritmos consiste en diferenciarlos por su metodolo-
gía de diseño. A continuación se presenta una síntesis de las metodologías más co-
munes, aplicables cada una a diferentes clases de problemas:
Obsérvese que, si se cuenta con un algoritmo es- Cuando se habla de complejidad de algorit-
crito en seudo código y se lo traduce al inglés, mos, no se hace referencia a lo fácil o difícil
prácticamente se tendrá el mismo algoritmo es- que puede ser entenderlos, sino a cuánto tra-
crito en un lenguaje “cercano” al Pascal o al Basic. bajo llevará su ejecución.
usr.code 21
01_TecnicasProg.qxd 3/4/05 15:27 Page 22
TÉCNICAS DE PROGRAMACIÓN
• Fuerza bruta: los algoritmos de fuerza bruta resuelven el problema con la estra-
tegia más obvia de solución, que no siempre es la mejor según el número de ope-
raciones que se requiere.
• Divide and conquer (divide y reinarás): esta metodología divide las instancias del
problema a resolver en instancias cada vez más pequeñas, usualmente en forma re-
cursiva, hasta llegar a una instancia en que el problema es resoluble en forma tri-
vial o con unas pocas instrucciones. Los algoritmos de búsqueda binaria son un
ejemplo de la metodología divide and conquer (Figura 1).
Elemento buscado: 15
Lista: 3 7 11 15 22 24 32 33 38 40
1er paso: 3 7 11 15 22 24 32 33 38 40
2do paso: 3 7 11 15 22
3er paso: 11 15 22
4to paso: 15 22
22 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 23
Clases de algoritmos
rie de puntos (definidos por coordenadas x, y) que delimitan una región, y se ne-
1
cesita saber si otro punto se encuentra dentro o fuera de esa región, una forma de
resolver el problema consiste en comenzar formando cuadrados con puntos con-
Algoritmos
tiguos, para luego formar figuras cada vez más grandes y, por cada figura, deter-
minar si el punto está dentro o fuera de ella (Figura 2). En cada paso se aprove-
cha la información de los pasos anteriores, hasta que, al completar todos los pun-
tos, se obtiene el resultado del problema.
1 2
3 4
Figura 2. El problema de determinar si un punto está dentro o fuera del área delimitada
por una serie de otros puntos se resuelve naturalmente por programación dinámica.
❘❘❘ GRAFO
Un grafo es un objeto matemático utilizado para modelar problemas que involucran circuitos, re-
des y, en general, toda aquella entidad que pueda representarse por medio de nodos (vértices) y
líneas que los conectan (aristas).
usr.code 23
01_TecnicasProg.qxd 3/4/05 15:27 Page 24
TÉCNICAS DE PROGRAMACIÓN
24 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 25
1
números arábigos. Recién en el siglo XVIII se expandió su significado para abarcar
en su definición a toda clase de procedimientos utilizados con el propósito de re-
Algoritmos
solver problemas o realizar determinadas tareas.
El primer caso de una algoritmo escrito para una computadora se considera que
son las notas escritas por Ada Byron en 1842 para el motor analítico de Charles
Babbage. Por esta razón, se considera a Ada Byron como la primera programado-
ra de la historia. Sin embargo, dado que Babbage nunca terminó su motor analí-
tico, el algoritmo jamás llegó a implementarse.
… RESUMEN
En este capítulo hemos analizado en detalle uno de los elementos básicos de los que trata es-
te libro: el algoritmo. Comenzamos por su definición –tanto informal, comparándolo con una
receta, como formal, validándolo con la máquina de Turing– y seguimos por la forma de espe-
cificarlo, implementarlo y clasificarlo en categorías. Finalmente, descubrimos que el primer
programador de la historia fue una mujer.
usr.code 25
01_TecnicasProg.qxd 3/4/05 15:27 Page 26
✔ ACTIVIDADES
26 usr.code