SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
Algoritmos
¿Qué son los algoritmos? 16
La máquina de Turing 17
Especificación de algoritmos 18
Implementación de algoritmos 20
Eficiencia de los algoritmos 21
Clases de algoritmos 21
Los algoritmos en la historia 24
Resumen 25
Actividades 26
Capítulo 1
La palabra algoritmo aparecerá
gran cantidad de veces a lo largo de todo
este libro. Corresponde, entonces,
que dediquemos un capítulo a aclarar
bien su significado. Estableceremos
claramente qué es un algoritmo, cómo
se especifica, cómo se implementa
y cómo se mide su eficiencia. Además,
veremos de qué manera, a lo largo
de la historia, los algoritmos pasaron
del dominio de las matemáticas
al de las ciencias de la computación.
TÉCNICAS DE PROGRAMACIÓN
SERVICIO DE ATENCIÓN AL LECTOR: lectores@tectimes.com
01_TecnicasProg.qxd 3/4/05 15:27 Page 15
¿QUÉ SON LOS ALGORITMOS?
Un algoritmo es un conjunto finito de instrucciones precisas que realizan una tarea,
la cual, dado un estado inicial, culminará por arrojar un estado final reconocible.
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.
En el caso que no haya un estado final reconocible, el éxito del algoritmo no
puede definirse como la culminación del proceso con un resultado significativo.
En cambio, se requiere una definición de éxito que contemple secuencias ilimi-
tadas de resultados, por ejemplo, un sistema de compresión/descompresión de
datos en tiempo real (como los utilizados en el manejo de voz sobre IP); en este
caso, el algoritmo no define por sí mismo la finalización del proceso, debiendo
seguir su funcionamiento mientras haya datos para procesar. El éxito del algorit-
mo estará dado por el hecho de que los datos, una vez descomprimidos, sean
iguales que antes de comprimirse.
El concepto de algoritmo se ilustra frecuentemente comparándolo con una receta:
al igual que las recetas, los algoritmos habitualmente están formados por secuencias
de instrucciones que probablemente se repiten (iteran) o que requieren decisiones
(comparaciones lógicas) hasta que completan su tarea. Un algoritmo puede no ser
correcto, con lo cual, por más que sus pasos se lleven a cabo correctamente, el esta-
do final no será el esperado.
Normalmente, cuando un algoritmo está asociado con el procesamiento de informa-
ción, se leen datos de una fuente o dispositivo de entrada, se procesan y se emiten por
un dispositivo de salida, o bien se almacenan para su uso posterior. Los datos almace-
nados se consideran parte del estado interno de la entidad que ejecuta el algoritmo.
TÉCNICAS DE PROGRAMACIÓN
16 usr.code
❘❘❘
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.
VOZ SOBRE IP
01_TecnicasProg.qxd 3/4/05 15:27 Page 16
Dado que un algoritmo es una lista precisa de pasos, el orden de ejecución será ca-
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
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.
¿Qué son los algoritmos?
Algoritmos1
17usr.code
❘❘❘
El flujo de control es el orden en que se ejecutan las instrucciones de un programa. Normalmente,
el flujo de control de un programa es secuencial –es decir, las instrucciones se ejecutan una detrás
de otra desde la primera hasta la última–, a menos que existan bifurcaciones o ejecución paralela.
FLUJO DE CONTROL
01_TecnicasProg.qxd 3/4/05 15:27 Page 17
Un sistema Turing completo es aquel que puede simular el comportamiento de
una máquina de Turing. Dejando de lado las limitaciones impuestas por la capaci-
dad de almacenamiento o la memoria, las computadoras actuales y los lenguajes de
programación de propósito general definen sistemas Turing completos.
Independientemente de su forma concreta, cualquier dispositivo que se comporte
como un sistema Turing completo puede en principio ejecutar cualquier cálculo
que realice cualquier computadora; lógicamente, esta afirmación no considera la
posible dificultad de escribir el programa correspondiente o el tiempo que pueda re-
querir realizar el cálculo en cuestió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.
TÉCNICAS DE PROGRAMACIÓN
18 usr.code

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.
TURING TARPIT
01_TecnicasProg.qxd 3/4/05 15:27 Page 18
A modo de ejemplo, veamos la especificación de un algoritmo que busca el máxi-
mo número en una lista:
Algoritmo: BuscarMaximo
• Datos de entrada: una lista l de n elementos numéricos.
• Datos de salida: un número m.
• Precondiciones:
n es un número natural.
n es mayor que cero (o sea, la lista no puede estar vacía).
todos los elementos de l son números racionales.
• Poscondiciones:
m es un número racional.
m es el mayor de los elementos de l.
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
• Datos de entrada: l1 ... ln
• Datos de salida: m
• Precondiciones:
n ∈ N
n > 0
li ∈ Q ∀ 1 ≤ i ≤ n
• Poscondiciones:
m ∈ Q
m ≥ li ∀ 1 ≤ i ≤ n
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.
En el Capítulo 3 se analizan con mayor nivel de detalle las definiciones de precon-
diciones y poscondiciones de algoritmos, aplicadas a la especificación de tipos
abstractos de datos (TADs).
Especificación de algoritmos
Algoritmos1
19usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 19
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.
La implementación puede tomar formas muy diversas: podría significar la construc-
ción de un circuito eléctrico o de un dispositivo mecánico que cumpla con las con-
diciones especificadas. Pero restrinjamos la definición al campo de la informática:
en este sentido, implementar significa traducir el algoritmo a un lenguaje que pue-
da ser interpretado por un motor de ejecución.
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.
Un sencillo ejemplo de la implementación en seudo código de nuestro algoritmo
BuscarMaximo sería la siguiente:
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
TÉCNICAS DE PROGRAMACIÓN
20 usr.code
❘❘❘
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.
PRECONDICIONES Y POSCONDICIONES
01_TecnicasProg.qxd 3/4/05 15:27 Page 20
Fin Mientras
Devolver Mayor
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.
Eficiencia de los algoritmos
La especificación de un algoritmo puede incluir consideraciones sobre su eficiencia,
dado que una implementación incorrecta puede hacer que demore en ejecutarse
mucho más tiempo de lo aceptable. Para ello se utilizan notaciones que expresan la
complejidad de los algoritmos en función del volumen de datos a procesar (ver el
Capítulo 4 para mayor información). Una de estas notaciones es la denominada “la
gran O”, que indica la cantidad de veces que el algoritmo debe repetir su bloque
principal de instrucciones para hacer su trabajo.
El ciclo principal del algoritmo BuscarMaximo –explicado en la página 20– recorre
una vez toda la lista de n elementos para determinar cuál es el mayor. Su bloque
principal (el delimitado entre Mientras y Fin Mientras) se repite tantas veces como
elementos haya en la lista. Por lo tanto, se dice que su complejidad es O(n) o que
tiene complejidad lineal, ya que el tiempo que demora en ejecutarse el algoritmo
aumentará proporcionalmente a la cantidad de elementos que tenga la lista.
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:
Clases de algoritmos
Algoritmos1
21usr.code
❘❘❘
Obsérvese que, si se cuenta con un algoritmo es-
crito en seudo código y se lo traduce al inglés,
prácticamente se tendrá el mismo algoritmo es-
crito en un lenguaje “cercano” al Pascal o al Basic.
BASIC Y PASCAL
Cuando se habla de complejidad de algorit-
mos, no se hace referencia a lo fácil o difícil
que puede ser entenderlos, sino a cuánto tra-
bajo llevará su ejecución.
COMPLEJIDAD
01_TecnicasProg.qxd 3/4/05 15:27 Page 21
• 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).
Figura 1. La metodología divide and conquer divide el problema en instancias
cada vez más pequeñas, hasta llegar a una en que la solución es trivial.
• Programación dinámica: cuando un problema presenta una subestructura ópti-
ma –o sea, cuando la solución óptima de un problema se obtiene a partir de las
soluciones óptimas de sus subproblemas–, se encuentra la solución resolviendo
primero los subproblemas más sencillos y luego utilizando esas subsoluciones pa-
ra resolver problemas incrementalmente difíciles. Por ejemplo, si se tiene una se-
Problema: buscar un elemento dado dentro de una lista ordenada
Elemento buscado:
Lista:
Solución: ir dividiendo sucesivamente la lista por la mitad, hasta encontrar
el dato buscado en el último o en el primer elemento de una de las mitades.
1er paso:
2do paso:
3er paso:
4to paso:
El algoritmo concluye al encontrar el dato buscado en el primer elemento
de la lista, reducida en el último paso a sólo dos elementos.
3 7 11 15 22 24 32 33 38 40
3 7 11 15 22
11 15 22
15 22
3 7 11 15 22 24 32 33 38 40
15
TÉCNICAS DE PROGRAMACIÓN
22 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 22
rie de puntos (definidos por coordenadas x, y) que delimitan una región, y se ne-
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-
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.
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.
1 2
3 4
5
Clases de algoritmos
Algoritmos1
23usr.code
❘❘❘
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).
GRAFO
01_TecnicasProg.qxd 3/4/05 15:27 Page 23
• Programación lineal: para resolver un problema utilizando programación li-
neal, se plantea una serie de inecuaciones y luego se busca maximizar (o mini-
mizar) las variables, respetando las inecuaciones. Muchos problemas pueden
plantearse en la forma de un conjunto de inecuaciones, para luego resolverlos
utilizando un algoritmo genérico, como por ejemplo, el denominado método
Simplex (en la sección de Servicios al lector se detallan sitios donde obtener
más información sobre este método).
• Búsqueda y enumeración: muchos problemas (como por ejemplo, un juego de aje-
drez) pueden modelarse con grafos y resolverse a partir de un algoritmo de explora-
ción del grafo. Tal algoritmo especificará las reglas para moverse en el grafo en bus-
ca de la solución al problema. Esta categoría incluye también algoritmos de back-
tracking (vuelta atrás), los cuales van ensayando distintos caminos con posibles so-
luciones y vuelven atrás cuando no las encuentran. Por ejemplo, para encontrar la
salida en un laberinto, cada vez que se llega al final de un camino se vuelve atrás has-
ta la última bifurcación, para probar con las distintas alternativas de esa bifurcación.
• Algoritmos heurísticos: el propósito de estos algoritmos no es necesariamente
encontrar una solución final al problema, sino encontrar una solución aproxima-
da cuando el tiempo o los recursos necesarios para encontrar la solución perfecta
son excesivos. Muchos sistemas antivirus utilizan métodos heurísticos para detec-
tar conductas de programas que podrían estar actuando en forma maliciosa.
• Algoritmos voraces: seleccionan la opción de solución (solución local) que tenga un
costo menor en la etapa de solución en la que se encuentran, sin considerar si esa op-
ción es parte de una solución óptima para el problema completo (solución global).
LOS ALGORITMOS EN LA HISTORIA
El origen del término "algoritmo" se remonta al siglo IX y
se le atribuye su invención al matemático árabe Abu Ja’far
Muhammad ibn Musa al-Khwarizmi (Figura 3).
Figura 3. Abu Ja’far Muhammad ibn Musa al-Khwarizmi,
padre de los algoritmos. La imagen corresponde a una estampilla
de la ex Unión Soviética.
TÉCNICAS DE PROGRAMACIÓN
24 usr.code
01_TecnicasProg.qxd 3/4/05 15:27 Page 24
La palabra algoritmo se refería originalmente sólo a las reglas de la aritmética con
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-
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.
Los algoritmos en la historia
Algoritmos1
25usr.code
… 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.
01_TecnicasProg.qxd 3/4/05 15:27 Page 25
26 usr.code
✔
TEST DE AUTOEVALUACIÓN
1 ¿Qué es un algoritmo?
2 ¿Para qué sirve la tarea de especificar un
algoritmo?
3 ¿Cuál será la metodología más convenien-
te para diseñar un algoritmo que juegue al
famoso ta-te-ti?
4 ¿Cuál sería un caso práctico para que re-
sulte óptimo aplicar la técnica de progra-
mación lineal?
ACTIVIDADES
EJERCICIOS PRÁCTICOS
✔ Construya un programa que implemente
una máquina de Turing. El programa debe
mantener un vector de datos y debe ser
capaz de interpretar una secuencia de ins-
trucciones que manipulen los datos del
vector, de a uno por vez.
✔ Escriba la especificación e implementa-
ción (en seudo código o en cualquier len-
guaje que prefiera) de un algoritmo que
obtenga el mínimo elemento de una lista
de valores numéricos.
✔ Escriba la especificación –poniendo especial
atención a las poscondiciones– de un algo-
ritmo que ordena un vector de n elementos.
01_TecnicasProg.qxd 3/4/05 15:27 Page 26

Más contenido relacionado

La actualidad más candente (19)

Lógica difusa (fuzzy logic)
Lógica difusa (fuzzy logic)Lógica difusa (fuzzy logic)
Lógica difusa (fuzzy logic)
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Private
PrivatePrivate
Private
 
Analisis de algoritmos - Introduccion
Analisis de algoritmos - IntroduccionAnalisis de algoritmos - Introduccion
Analisis de algoritmos - Introduccion
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Resumen de algoritmo
Resumen de algoritmoResumen de algoritmo
Resumen de algoritmo
 
Funcion computable y parcialmente computable
Funcion computable y parcialmente computableFuncion computable y parcialmente computable
Funcion computable y parcialmente computable
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Unidad 7 análisis de los algoritmos
Unidad 7 análisis de los algoritmosUnidad 7 análisis de los algoritmos
Unidad 7 análisis de los algoritmos
 
Diapositivas algoritmos
Diapositivas algoritmosDiapositivas algoritmos
Diapositivas algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmica terminado
Algoritmica terminadoAlgoritmica terminado
Algoritmica terminado
 
algoritmica
algoritmicaalgoritmica
algoritmica
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Complejidad de los algoritmos1
Complejidad de los algoritmos1Complejidad de los algoritmos1
Complejidad de los algoritmos1
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 

Destacado

Tecnico en electronica 09
Tecnico en electronica 09Tecnico en electronica 09
Tecnico en electronica 09Giovanny Tona
 
El Libro Negro De Los Secretos De Entrenamiento
El Libro Negro De Los Secretos De EntrenamientoEl Libro Negro De Los Secretos De Entrenamiento
El Libro Negro De Los Secretos De EntrenamientoJesús
 
Uso de packet tracer para ver las unidades de datos del protocolo
Uso de packet tracer para ver las unidades de datos del protocoloUso de packet tracer para ver las unidades de datos del protocolo
Uso de packet tracer para ver las unidades de datos del protocoloCristian Fory
 
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...xavazquez
 
Prévia TCC - Redes Ad Hoc - Redes de Computadores
Prévia TCC - Redes Ad Hoc - Redes de ComputadoresPrévia TCC - Redes Ad Hoc - Redes de Computadores
Prévia TCC - Redes Ad Hoc - Redes de ComputadoresRodrigo Lima Bispo
 
Trabajo protocolo icmp ejemlo en packet tracer
Trabajo protocolo icmp ejemlo en packet tracerTrabajo protocolo icmp ejemlo en packet tracer
Trabajo protocolo icmp ejemlo en packet tracerJairo Rosas
 
Conceptos de reparacion en pc
Conceptos de reparacion en pcConceptos de reparacion en pc
Conceptos de reparacion en pcandrea oncehex
 
Tecnico en electronica 10
Tecnico en electronica 10Tecnico en electronica 10
Tecnico en electronica 10Giovanny Tona
 
Administracion avanzada de_gnu-linux
Administracion avanzada de_gnu-linuxAdministracion avanzada de_gnu-linux
Administracion avanzada de_gnu-linuxSantos Corrales
 
45473177 revist-users-pc
45473177 revist-users-pc45473177 revist-users-pc
45473177 revist-users-pcxavazquez
 
Vip users baja resolucion--guia-pc-hardware
Vip users baja resolucion--guia-pc-hardwareVip users baja resolucion--guia-pc-hardware
Vip users baja resolucion--guia-pc-hardwarexavazquez
 
Tecnico en electronica 01
Tecnico en electronica 01Tecnico en electronica 01
Tecnico en electronica 01Giovanny Tona
 
20 soluciones a problemas de hardware
20 soluciones a problemas de hardware20 soluciones a problemas de hardware
20 soluciones a problemas de hardwareFrancisco Jaquez
 
Servicio tecnico pc
Servicio tecnico pcServicio tecnico pc
Servicio tecnico pcmunivilca
 
Comando ping utilidad y como interpretarlo
Comando ping   utilidad y como interpretarloComando ping   utilidad y como interpretarlo
Comando ping utilidad y como interpretarloJesse Padilla Agudelo
 
PACKET TRACER
PACKET TRACERPACKET TRACER
PACKET TRACERVERO
 

Destacado (20)

Tecnico en electronica 09
Tecnico en electronica 09Tecnico en electronica 09
Tecnico en electronica 09
 
El Libro Negro De Los Secretos De Entrenamiento
El Libro Negro De Los Secretos De EntrenamientoEl Libro Negro De Los Secretos De Entrenamiento
El Libro Negro De Los Secretos De Entrenamiento
 
Uso de packet tracer para ver las unidades de datos del protocolo
Uso de packet tracer para ver las unidades de datos del protocoloUso de packet tracer para ver las unidades de datos del protocolo
Uso de packet tracer para ver las unidades de datos del protocolo
 
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...
126511002 users-tecnico-hardware-desde-cero-pdf-by-chuska-www-cantabriatorren...
 
Prévia TCC - Redes Ad Hoc - Redes de Computadores
Prévia TCC - Redes Ad Hoc - Redes de ComputadoresPrévia TCC - Redes Ad Hoc - Redes de Computadores
Prévia TCC - Redes Ad Hoc - Redes de Computadores
 
Redes de conmutación
Redes de conmutaciónRedes de conmutación
Redes de conmutación
 
Trabajo protocolo icmp ejemlo en packet tracer
Trabajo protocolo icmp ejemlo en packet tracerTrabajo protocolo icmp ejemlo en packet tracer
Trabajo protocolo icmp ejemlo en packet tracer
 
Conceptos de reparacion en pc
Conceptos de reparacion en pcConceptos de reparacion en pc
Conceptos de reparacion en pc
 
Tecnico en electronica 10
Tecnico en electronica 10Tecnico en electronica 10
Tecnico en electronica 10
 
Administracion avanzada de_gnu-linux
Administracion avanzada de_gnu-linuxAdministracion avanzada de_gnu-linux
Administracion avanzada de_gnu-linux
 
Rede computadores
Rede computadoresRede computadores
Rede computadores
 
Seguridad corporativa
Seguridad corporativaSeguridad corporativa
Seguridad corporativa
 
45473177 revist-users-pc
45473177 revist-users-pc45473177 revist-users-pc
45473177 revist-users-pc
 
CISCO PACKET TRACER
CISCO PACKET TRACERCISCO PACKET TRACER
CISCO PACKET TRACER
 
Vip users baja resolucion--guia-pc-hardware
Vip users baja resolucion--guia-pc-hardwareVip users baja resolucion--guia-pc-hardware
Vip users baja resolucion--guia-pc-hardware
 
Tecnico en electronica 01
Tecnico en electronica 01Tecnico en electronica 01
Tecnico en electronica 01
 
20 soluciones a problemas de hardware
20 soluciones a problemas de hardware20 soluciones a problemas de hardware
20 soluciones a problemas de hardware
 
Servicio tecnico pc
Servicio tecnico pcServicio tecnico pc
Servicio tecnico pc
 
Comando ping utilidad y como interpretarlo
Comando ping   utilidad y como interpretarloComando ping   utilidad y como interpretarlo
Comando ping utilidad y como interpretarlo
 
PACKET TRACER
PACKET TRACERPACKET TRACER
PACKET TRACER
 

Similar a Manual users algoritmos (20)

Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
ANALISIS DE LOS ALGORITMOS
ANALISIS DE LOS ALGORITMOSANALISIS DE LOS ALGORITMOS
ANALISIS DE LOS ALGORITMOS
 
EL ALGORITMO
EL ALGORITMOEL ALGORITMO
EL ALGORITMO
 
Algoritmos univ colombia
Algoritmos univ colombiaAlgoritmos univ colombia
Algoritmos univ colombia
 
Tema v
Tema vTema v
Tema v
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
Algoritmo a
Algoritmo aAlgoritmo a
Algoritmo a
 
El algoritmoo
El algoritmooEl algoritmoo
El algoritmoo
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Unidad i-guia1
Unidad i-guia1Unidad i-guia1
Unidad i-guia1
 
Tarea 4 algoritmos
Tarea 4 algoritmosTarea 4 algoritmos
Tarea 4 algoritmos
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slideshare
 
Presentación de slideshare
Presentación de slidesharePresentación de slideshare
Presentación de slideshare
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Apartes De Algoritmos
Apartes De AlgoritmosApartes De Algoritmos
Apartes De Algoritmos
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 

Último

Emprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC MexicoEmprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC MexicoCENECOnline
 
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdf
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdfAntenas, tipos de antenas, diseño basico de una antena y parámetros.pdf
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdfperezreyesalberto10
 
Biología Células Musculares presentación
Biología Células Musculares presentaciónBiología Células Musculares presentación
Biología Células Musculares presentaciónStephanyJara1
 
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...CENECOnline
 
Presentacion Seguridad y Privacidad en la Web
Presentacion Seguridad y Privacidad en la WebPresentacion Seguridad y Privacidad en la Web
Presentacion Seguridad y Privacidad en la Webfernandalunag19
 
Corte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadCorte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadJonathanHctorSilvaRo
 

Último (6)

Emprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC MexicoEmprende en SPA Segundo día CENEC Mexico
Emprende en SPA Segundo día CENEC Mexico
 
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdf
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdfAntenas, tipos de antenas, diseño basico de una antena y parámetros.pdf
Antenas, tipos de antenas, diseño basico de una antena y parámetros.pdf
 
Biología Células Musculares presentación
Biología Células Musculares presentaciónBiología Células Musculares presentación
Biología Células Musculares presentación
 
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
 
Presentacion Seguridad y Privacidad en la Web
Presentacion Seguridad y Privacidad en la WebPresentacion Seguridad y Privacidad en la Web
Presentacion Seguridad y Privacidad en la Web
 
Corte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadCorte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuad
 

Manual users algoritmos

  • 1. Algoritmos ¿Qué son los algoritmos? 16 La máquina de Turing 17 Especificación de algoritmos 18 Implementación de algoritmos 20 Eficiencia de los algoritmos 21 Clases de algoritmos 21 Los algoritmos en la historia 24 Resumen 25 Actividades 26 Capítulo 1 La palabra algoritmo aparecerá gran cantidad de veces a lo largo de todo este libro. Corresponde, entonces, que dediquemos un capítulo a aclarar bien su significado. Estableceremos claramente qué es un algoritmo, cómo se especifica, cómo se implementa y cómo se mide su eficiencia. Además, veremos de qué manera, a lo largo de la historia, los algoritmos pasaron del dominio de las matemáticas al de las ciencias de la computación. TÉCNICAS DE PROGRAMACIÓN SERVICIO DE ATENCIÓN AL LECTOR: lectores@tectimes.com 01_TecnicasProg.qxd 3/4/05 15:27 Page 15
  • 2. ¿QUÉ SON LOS ALGORITMOS? Un algoritmo es un conjunto finito de instrucciones precisas que realizan una tarea, la cual, dado un estado inicial, culminará por arrojar un estado final reconocible. 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. En el caso que no haya un estado final reconocible, el éxito del algoritmo no puede definirse como la culminación del proceso con un resultado significativo. En cambio, se requiere una definición de éxito que contemple secuencias ilimi- tadas de resultados, por ejemplo, un sistema de compresión/descompresión de datos en tiempo real (como los utilizados en el manejo de voz sobre IP); en este caso, el algoritmo no define por sí mismo la finalización del proceso, debiendo seguir su funcionamiento mientras haya datos para procesar. El éxito del algorit- mo estará dado por el hecho de que los datos, una vez descomprimidos, sean iguales que antes de comprimirse. El concepto de algoritmo se ilustra frecuentemente comparándolo con una receta: al igual que las recetas, los algoritmos habitualmente están formados por secuencias de instrucciones que probablemente se repiten (iteran) o que requieren decisiones (comparaciones lógicas) hasta que completan su tarea. Un algoritmo puede no ser correcto, con lo cual, por más que sus pasos se lleven a cabo correctamente, el esta- do final no será el esperado. Normalmente, cuando un algoritmo está asociado con el procesamiento de informa- ción, se leen datos de una fuente o dispositivo de entrada, se procesan y se emiten por un dispositivo de salida, o bien se almacenan para su uso posterior. Los datos almace- nados se consideran parte del estado interno de la entidad que ejecuta el algoritmo. TÉCNICAS DE PROGRAMACIÓN 16 usr.code ❘❘❘ 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. VOZ SOBRE IP 01_TecnicasProg.qxd 3/4/05 15:27 Page 16
  • 3. Dado que un algoritmo es una lista precisa de pasos, el orden de ejecución será ca- 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 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. ¿Qué son los algoritmos? Algoritmos1 17usr.code ❘❘❘ El flujo de control es el orden en que se ejecutan las instrucciones de un programa. Normalmente, el flujo de control de un programa es secuencial –es decir, las instrucciones se ejecutan una detrás de otra desde la primera hasta la última–, a menos que existan bifurcaciones o ejecución paralela. FLUJO DE CONTROL 01_TecnicasProg.qxd 3/4/05 15:27 Page 17
  • 4. Un sistema Turing completo es aquel que puede simular el comportamiento de una máquina de Turing. Dejando de lado las limitaciones impuestas por la capaci- dad de almacenamiento o la memoria, las computadoras actuales y los lenguajes de programación de propósito general definen sistemas Turing completos. Independientemente de su forma concreta, cualquier dispositivo que se comporte como un sistema Turing completo puede en principio ejecutar cualquier cálculo que realice cualquier computadora; lógicamente, esta afirmación no considera la posible dificultad de escribir el programa correspondiente o el tiempo que pueda re- querir realizar el cálculo en cuestió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. TÉCNICAS DE PROGRAMACIÓN 18 usr.code  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. TURING TARPIT 01_TecnicasProg.qxd 3/4/05 15:27 Page 18
  • 5. A modo de ejemplo, veamos la especificación de un algoritmo que busca el máxi- mo número en una lista: Algoritmo: BuscarMaximo • Datos de entrada: una lista l de n elementos numéricos. • Datos de salida: un número m. • Precondiciones: n es un número natural. n es mayor que cero (o sea, la lista no puede estar vacía). todos los elementos de l son números racionales. • Poscondiciones: m es un número racional. m es el mayor de los elementos de l. 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 • Datos de entrada: l1 ... ln • Datos de salida: m • Precondiciones: n ∈ N n > 0 li ∈ Q ∀ 1 ≤ i ≤ n • Poscondiciones: m ∈ Q m ≥ li ∀ 1 ≤ i ≤ n 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. En el Capítulo 3 se analizan con mayor nivel de detalle las definiciones de precon- diciones y poscondiciones de algoritmos, aplicadas a la especificación de tipos abstractos de datos (TADs). Especificación de algoritmos Algoritmos1 19usr.code 01_TecnicasProg.qxd 3/4/05 15:27 Page 19
  • 6. 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. La implementación puede tomar formas muy diversas: podría significar la construc- ción de un circuito eléctrico o de un dispositivo mecánico que cumpla con las con- diciones especificadas. Pero restrinjamos la definición al campo de la informática: en este sentido, implementar significa traducir el algoritmo a un lenguaje que pue- da ser interpretado por un motor de ejecución. 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. Un sencillo ejemplo de la implementación en seudo código de nuestro algoritmo BuscarMaximo sería la siguiente: 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 TÉCNICAS DE PROGRAMACIÓN 20 usr.code ❘❘❘ 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. PRECONDICIONES Y POSCONDICIONES 01_TecnicasProg.qxd 3/4/05 15:27 Page 20
  • 7. Fin Mientras Devolver Mayor 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. Eficiencia de los algoritmos La especificación de un algoritmo puede incluir consideraciones sobre su eficiencia, dado que una implementación incorrecta puede hacer que demore en ejecutarse mucho más tiempo de lo aceptable. Para ello se utilizan notaciones que expresan la complejidad de los algoritmos en función del volumen de datos a procesar (ver el Capítulo 4 para mayor información). Una de estas notaciones es la denominada “la gran O”, que indica la cantidad de veces que el algoritmo debe repetir su bloque principal de instrucciones para hacer su trabajo. El ciclo principal del algoritmo BuscarMaximo –explicado en la página 20– recorre una vez toda la lista de n elementos para determinar cuál es el mayor. Su bloque principal (el delimitado entre Mientras y Fin Mientras) se repite tantas veces como elementos haya en la lista. Por lo tanto, se dice que su complejidad es O(n) o que tiene complejidad lineal, ya que el tiempo que demora en ejecutarse el algoritmo aumentará proporcionalmente a la cantidad de elementos que tenga la lista. 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: Clases de algoritmos Algoritmos1 21usr.code ❘❘❘ Obsérvese que, si se cuenta con un algoritmo es- crito en seudo código y se lo traduce al inglés, prácticamente se tendrá el mismo algoritmo es- crito en un lenguaje “cercano” al Pascal o al Basic. BASIC Y PASCAL Cuando se habla de complejidad de algorit- mos, no se hace referencia a lo fácil o difícil que puede ser entenderlos, sino a cuánto tra- bajo llevará su ejecución. COMPLEJIDAD 01_TecnicasProg.qxd 3/4/05 15:27 Page 21
  • 8. • 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). Figura 1. La metodología divide and conquer divide el problema en instancias cada vez más pequeñas, hasta llegar a una en que la solución es trivial. • Programación dinámica: cuando un problema presenta una subestructura ópti- ma –o sea, cuando la solución óptima de un problema se obtiene a partir de las soluciones óptimas de sus subproblemas–, se encuentra la solución resolviendo primero los subproblemas más sencillos y luego utilizando esas subsoluciones pa- ra resolver problemas incrementalmente difíciles. Por ejemplo, si se tiene una se- Problema: buscar un elemento dado dentro de una lista ordenada Elemento buscado: Lista: Solución: ir dividiendo sucesivamente la lista por la mitad, hasta encontrar el dato buscado en el último o en el primer elemento de una de las mitades. 1er paso: 2do paso: 3er paso: 4to paso: El algoritmo concluye al encontrar el dato buscado en el primer elemento de la lista, reducida en el último paso a sólo dos elementos. 3 7 11 15 22 24 32 33 38 40 3 7 11 15 22 11 15 22 15 22 3 7 11 15 22 24 32 33 38 40 15 TÉCNICAS DE PROGRAMACIÓN 22 usr.code 01_TecnicasProg.qxd 3/4/05 15:27 Page 22
  • 9. rie de puntos (definidos por coordenadas x, y) que delimitan una región, y se ne- 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- 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. 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. 1 2 3 4 5 Clases de algoritmos Algoritmos1 23usr.code ❘❘❘ 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). GRAFO 01_TecnicasProg.qxd 3/4/05 15:27 Page 23
  • 10. • Programación lineal: para resolver un problema utilizando programación li- neal, se plantea una serie de inecuaciones y luego se busca maximizar (o mini- mizar) las variables, respetando las inecuaciones. Muchos problemas pueden plantearse en la forma de un conjunto de inecuaciones, para luego resolverlos utilizando un algoritmo genérico, como por ejemplo, el denominado método Simplex (en la sección de Servicios al lector se detallan sitios donde obtener más información sobre este método). • Búsqueda y enumeración: muchos problemas (como por ejemplo, un juego de aje- drez) pueden modelarse con grafos y resolverse a partir de un algoritmo de explora- ción del grafo. Tal algoritmo especificará las reglas para moverse en el grafo en bus- ca de la solución al problema. Esta categoría incluye también algoritmos de back- tracking (vuelta atrás), los cuales van ensayando distintos caminos con posibles so- luciones y vuelven atrás cuando no las encuentran. Por ejemplo, para encontrar la salida en un laberinto, cada vez que se llega al final de un camino se vuelve atrás has- ta la última bifurcación, para probar con las distintas alternativas de esa bifurcación. • Algoritmos heurísticos: el propósito de estos algoritmos no es necesariamente encontrar una solución final al problema, sino encontrar una solución aproxima- da cuando el tiempo o los recursos necesarios para encontrar la solución perfecta son excesivos. Muchos sistemas antivirus utilizan métodos heurísticos para detec- tar conductas de programas que podrían estar actuando en forma maliciosa. • Algoritmos voraces: seleccionan la opción de solución (solución local) que tenga un costo menor en la etapa de solución en la que se encuentran, sin considerar si esa op- ción es parte de una solución óptima para el problema completo (solución global). LOS ALGORITMOS EN LA HISTORIA El origen del término "algoritmo" se remonta al siglo IX y se le atribuye su invención al matemático árabe Abu Ja’far Muhammad ibn Musa al-Khwarizmi (Figura 3). Figura 3. Abu Ja’far Muhammad ibn Musa al-Khwarizmi, padre de los algoritmos. La imagen corresponde a una estampilla de la ex Unión Soviética. TÉCNICAS DE PROGRAMACIÓN 24 usr.code 01_TecnicasProg.qxd 3/4/05 15:27 Page 24
  • 11. La palabra algoritmo se refería originalmente sólo a las reglas de la aritmética con 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- 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. Los algoritmos en la historia Algoritmos1 25usr.code … 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. 01_TecnicasProg.qxd 3/4/05 15:27 Page 25
  • 12. 26 usr.code ✔ TEST DE AUTOEVALUACIÓN 1 ¿Qué es un algoritmo? 2 ¿Para qué sirve la tarea de especificar un algoritmo? 3 ¿Cuál será la metodología más convenien- te para diseñar un algoritmo que juegue al famoso ta-te-ti? 4 ¿Cuál sería un caso práctico para que re- sulte óptimo aplicar la técnica de progra- mación lineal? ACTIVIDADES EJERCICIOS PRÁCTICOS ✔ Construya un programa que implemente una máquina de Turing. El programa debe mantener un vector de datos y debe ser capaz de interpretar una secuencia de ins- trucciones que manipulen los datos del vector, de a uno por vez. ✔ Escriba la especificación e implementa- ción (en seudo código o en cualquier len- guaje que prefiera) de un algoritmo que obtenga el mínimo elemento de una lista de valores numéricos. ✔ Escriba la especificación –poniendo especial atención a las poscondiciones– de un algo- ritmo que ordena un vector de n elementos. 01_TecnicasProg.qxd 3/4/05 15:27 Page 26