Está en la página 1de 226

1

2
ANALISIS, DISEO E
IMPLANTACIN DE ALGORITMOS
Plan: 2012
Clave: 1164 Crditos: 8
Licenciatura: INFORMTICA Semestre: 1
rea: Informtica (Desarrollo de sistemas) Horas. Asesora: 4
Requisitos: Ninguno Horas. por semana: 4
Tipo de asignatura: Obligatoria (x ) Optativa ( )
AUTOR (ES):
GILBERTO MANZANO PEALOZA
ADAPTADO A DISTANCIA:
LUIS FERNANDO ZUIGA LPEZ
ACTUALIZACION AL PLAN DE ESTUDIOS 2012:
GILBERTO MANZANO PEALOZA
3
INTRODUCCIN GENERAL AL
MATERIAL DE ESTUDIO.
Las modalidades abierta y a distancia (SUAYED) son alternativas que
pretenden responder a la demanda creciente de educacin superior,
sobre todo, de quienes no pueden estudiar en un sistema presencial.
Actualmente, con la incorporacin de las nuevas tecnologas de
informacin y comunicacin a los sistemas abierto y a distancia, se
empieza a fortalecer y consolidar el paradigma educativo de stas,
centrado en el estudiante y su aprendizaje autnomo, para que tenga
lugar el dilogo educativo que establece de manera semipresencial
(modalidad abierta) o va Internet (modalidad a distancia) con su asesor
y condiscpulos, apoyndose en materiales preparados ex profeso
1
.
Un rasgo fundamental de la educacin abierta y a distancia es que no
exige presencia diaria. El estudiante SUAYED aprende y organiza sus
actividades escolares de acuerdo con su ritmo y necesidades; y suele
hacerlo en momentos adicionales a su jornada laboral, por lo que
requiere flexibilidad de espacios y tiempos. En consecuencia, debe
contar con las habilidades siguientes.
1
Sandra Rocha, Documento de Trabajo. Modalidad Abierta y a Distancia en el SUA-FCA, 2006.
4
Saber estudiar, organizando sus metas educativas de manera
realista segn su disponibilidad de tiempo, y estableciendo una
secuencia de objetivos parciales a corto, mediano y largo plazos.
Mantener la motivacin y superar las dificultades inherentes a la
licenciatura.
Asumir su nuevo papel de estudiante y compaginarlo con otros roles
familiares o laborales.
Afrontar los cambios que puedan producirse como consecuencia de
las modificaciones de sus actitudes y valores, en la medida que se
adentre en las situaciones y oportunidades propias de su nueva
situacin de estudiante.
Desarrollar estrategias de aprendizaje independientes para que
pueda controlar sus avances.
Ser autodidacta. Aunque apoyado en asesoras, su aprendizaje es
individual y requiere dedicacin y estudio. Acompaado en todo
momento por su asesor, debe organizar y construir su aprendizaje.
Administrar el tiempo y distribuirlo adecuadamente entre las tareas
cotidianas y el estudio.
Tener disciplina, perseverancia y orden.
Ser capaz de tomar decisiones y establecer metas y objetivos.
Mostrar inters real por la disciplina que se estudia, estar motivado
para alcanzar las metas y mantener una actitud dinmica y crtica,
pero abierta y flexible.
Aplicar diversas tcnicas de estudio. Atender la retroalimentacin del
asesor; cultivar al mximo el hbito de lectura; elaborar resmenes,
mapas conceptuales, cuestionarios, cuadros sinpticos, etctera;
presentar trabajos escritos de calidad en contenido, anlisis y
reflexin; hacer guas de estudio; preparar exmenes; y aprovechar
los diversos recursos de la modalidad.
5
Adems de lo anterior, un estudiante de la modalidad a distancia
debe dominar las herramientas tecnolgicas. Conocer sus bases y
metodologa; tener habilidad en la bsqueda de informacin en
bibliotecas virtuales; y manejar el sistema operativo Windows,
paquetera, correo electrnico, foros de discusin, chats, blogs, wikis,
etctera.
Tambin se cuenta con materiales didcticos como ste elaborados
para el SUAYED, que son la base del estudio independiente. En
especfico, este documento electrnico ha sido preparado por docentes
de la Facultad para cada una de las asignaturas, con bibliografa
adicional que te permitir consultar las fuentes de informacin
originales. El recurso comprende referencias bsicas sobre los temas y
subtemas de cada unidad de la materia, y te introduce en su
aprendizaje, de lo concreto a lo abstracto y de lo sencillo a lo complejo,
por medio de ejemplos, ejercicios y casos, u otras actividades que te
posibilitarn aplicarlos y vincularlos con la realidad laboral. Es decir, te
induce al saber terico y al saber hacer de la asignatura, y te
encauza a encontrar respuestas a preguntas reflexivas que te formules
acerca de los contenidos, su relacin con otras disciplinas, utilidad y
aplicacin en el trabajo. Finalmente, el material te da informacin
suficiente para autoevaluarte sobre el conocimiento bsico de la
asignatura, motivarte a profundizarlo, ampliarlo con otras fuentes
bibliogrficas y prepararte adecuadamente para tus exmenes. Su
estructura presenta los siguientes apartados.
1. Informacin general de la asignatura. Incluye elementos
introductorios como portada, identificacin del material,
colaboradores, datos oficiales de la asignatura, orientaciones
6
para el estudio, contenido y programa oficial de la asignatura,
esquema general de contenido, introduccin general a la
asignatura y objetivo general.
2. Desarrollo de cada unidad didctica. Cada unidad est
conformada por los siguientes elementos.
Introduccin a la unidad.
Objetivo particular de la unidad.
Contenidos.
Actividades de aprendizaje y/o evaluacin. Tienen como
propsito contribuir en el proceso enseanza-aprendizaje
facilitando el afianzamiento de los contenidos esenciales.
Una funcin importante de estas actividades es la
retroalimentacin: el asesor no se limita a valorar el trabajo
realizado, sino que adems aade comentarios,
explicaciones y orientacin.
Ejercicios y cuestionarios complementarios o de
reforzamiento. Su finalidad es consolidar el aprendizaje del
estudiante.
Ejercicios de autoevaluacin. Al trmino de cada unidad hay
ejercicios de autoevaluacin cuya utilidad, al igual que las
actividades de aprendizaje, es afianzar los contenidos
principales. Tambin le permiten al estudiante calificarse l
mismo cotejando su resultado con las respuestas que vienen
al final, y as podr valorar si ya aprendi lo suficiente para
presentar el examen correspondiente. Para que la
autoevaluacin cumpla su objeto, es importante no
adelantarse a revisar las respuestas antes de realizar la
autoevaluacin; y no reducir su resolucin a una mera
7
actividad mental, sino que debe registrarse por escrito, labor
que facilita an ms el aprendizaje. Por ltimo, la diferencia
entre las actividades de autoevaluacin y las de aprendizaje
es que stas, como son corregidas por el asesor, fomentan
la creatividad, reflexin y valoracin crtica, ya que suponen
mayor elaboracin y conllevan respuestas abiertas.
3. Resumen por unidad.
4. Glosario de trminos.
5. Fuentes de consulta bsica y complementaria. Mesografa,
bibliografa, hemerografa y sitios web, considerados tanto en el
programa oficial de la asignatura como los sugeridos por los
profesores.
Esperamos que este material cumpla con su cometido, te apoye y
oriente en el avance de tu aprendizaje.
Recomendaciones (orientacin para el estudio independiente)
Lee cuidadosamente la introduccin a la asignatura, en ella se
explica la importancia del curso.
Revisa detenidamente los objetivos de aprendizaje (general y
especfico por unidad), en donde se te indican los conocimientos
y habilidades que debers adquirir al finalizar el curso.
Estudia cada tema siguiendo los contenidos y lecturas sugeridos
por tu asesor, y desarrolla las actividades de aprendizaje. As
podrs aplicar la teora y ejercitars tu capacidad crtica,
reflexiva y analtica.
Al iniciar la lectura de los temas, identifica las ideas, conceptos,
argumentos, hechos y conclusiones, esto facilitar la
8
comprensin de los contenidos y la realizacin de las actividades
de aprendizaje.
Lee de manera atenta los textos y mantn una actitud activa y de
dilogo respecto a su contenido. Elabora una sntesis que te
ayude a fijar los conceptos esenciales de lo que vas
aprendiendo.
Debido a que la educacin abierta y a distancia est sustentada
en un principio de autoenseanza (autodisciplina), es
recomendable disear desde el inicio un plan de trabajo para
puntualizar tiempos, ritmos, horarios, alcance y avance de cada
asignatura, y recursos.
Escribe tus dudas, comentarios u observaciones para aclararlas
en la asesora presencial o a distancia (foro, chat, correo
electrnico, etctera).
Consulta al asesor sobre cualquier interrogante por mnima que
sea.
Revisa detenidamente el plan de trabajo elaborado por tu asesor
y sigue las indicaciones del mismo.
9
Otras sugerencias de apoyo
Trata de compartir tus experiencias y comentarios sobre la
asignatura con tus compaeros, a fin de formar grupos de
estudio presenciales o a distancia (comunidades virtuales de
aprendizaje, a travs de foros de discusin y correo electrnico,
etctera), y puedan apoyarse entre s.
Programa un horario propicio para estudiar, en el que te
encuentres menos cansado, ello facilitar tu aprendizaje.
Dispn de periodos extensos para al estudio, con tiempos breves
de descanso por lo menos entre cada hora si lo consideras
necesario.
Busca espacios adecuados donde puedas concentrarte y
aprovechar al mximo el tiempo de estudio.
10
Temario oficial
(horas 64)
Horas
1. FUNDAMENTOS DE
ALGORITMOS
12
2. ANLISIS DE ALGORITMOS 12
3. DISEO DE ALGORITMOS PARA
LA SOLUCIN DE PROBLEMAS
12
4. IMPLANTACIN DE
ALGORITMOS
12
5. EVALUACIN DE ALGORITMOS 16
TOTAL 64 HORAS
11
INTRODUCCIN GENERAL
A LA ASIGNATURA
Los algoritmos se pueden definir como la secuencia lgica y detallada
de pasos para solucionar un problema, por lo que su estudio es til
para dar una solucin computable a los problemas que se presentan en
las organizaciones.
El campo de los algoritmos es amplio y dinmico. Los algoritmos
intervienen directamente en la vida de las organizaciones, solucionando
problemas mediante el empleo de programas de computadora para su
aplicacin en las distintas reas de la empresa, de ah que sean objeto
de estudio de la asignatura Anlisis, diseo e implantacin de
algoritmos.
Unidad 1. Se definen los conceptos necesarios para comprender los
algoritmos y sus caractersticas, as como los autmatas y los lenguajes
formales utilizados; se aborda el autmata finito determinista, conocido
como la Mquina de Turing, y algunos ejemplos de su aplicacin.
12
Unidad 2. El anlisis del problema, los problemas computables y no
computables, la recursividad y los algoritmos de ordenacin y
bsqueda; se estudian los problemas que se pueden resolver mediante
la mquina de Turing, por lo que se les denomina problemas
computables o decidibles, y aqullos que no se puedan solucionar por
esta forma o tarde bastante su proceso por la complejidad del
algoritmo, que se denominan problemas no computables. Se aborda la
recursividad, que es la capacidad de una funcin de invocarse a s
misma, es decir que alguno de los pasos de la funcin contiene una
llamada a la misma funcin con el pase de valores, los cuales se irn
modificando cada vez, hasta alcanzar un caso base que detenga al
algoritmo para posteriormente retornar el resultado a la funcin que la
invoc. En la mayor parte de las aplicaciones empresariales se utilizan
los algoritmos de ordenacin y bsqueda, aqu radica la importancia de
su estudio. Se analizarn algoritmos de ordenacin tales como:
burbuja, insercin, seleccin y rpido ordenamiento (quick sort), y
algoritmos de bsqueda como la secuencial, binaria o dicotmica, y la
tcnica hash.
Unidad 3. Aborda la importancia de la abstraccin en la construccin de
algoritmos, as como el estudio de las tcnicas de diseo de algoritmos
para la solucin de problemas como: algoritmos voraces, la
programacin dinmica, divide y vencers, vuelta atrs, y la
ramificacin y poda.
13
Unidad 4. Se da a conocer la manera de implementar los algoritmos
mediante programas de cmputo en los que se utiliza la programacin
estructurada, que consiste en utilizar estructuras de control como: si
condicin entonces sino, mientras condicin hacer, hacer mientras
condicin, hacer hasta condicin, y para x desde limite1 hasta limite2
hacer. Tambin se aborda el estudio de los enfoques de diseo de
algoritmos como el diseo descendente (top down) y el diseo
ascendente (bottom up), el primero conforma una solucin ms integral
del sistema y el segundo, aunque menos eficiente, es mucho ms
econmico en su implantacin, ya que aprovecha las aplicaciones
informticas de los distintos departamentos o reas funcionales.
Unidad 5. Se trata el refinamiento progresivo de los algoritmos
mediante la depuracin y prueba de los programas. Se estudia la
documentacin de los programas, as como los diferentes tipos de
mantenimiento: preventivo, correctivo y adaptativo.
14
OBJETIVO GENERAL
Al finalizar el curso, el alumno ser capaz de implementar algoritmos en
un lenguaje de programacin.
15
ESTRUCTURA CONCEPTUAL
16
UNIDAD 1
FUNDAMENTOS DE
ALGORITMOS
17
OBJETIVO ESPECFICO
Al finalizar la unidad, el alumno podr identificar los componentes y las
propiedades de los algoritmos.
18
INTRODUCCIN
La palabra algoritmo viene de Al-Khowarizmi, sobrenombre del clebre
matemtico Mohamed Ben Musa. Hoy en da, el algoritmo es una forma
ordenada de describir los pasos para resolver problemas. Es una forma
abstracta de reducir un problema a un conjunto de pasos que le den
solucin.
Hay algoritmos muy sencillos y de gran creatividad, aunque tambin
estn los que conllevan un alto grado de complejidad. Una aplicacin
de los algoritmos la tenemos en los autmatas, los cuales, basados en
una condicin de una situacin dada, llevarn a cabo algunas acciones
que ya se encuentran programadas en l.
Ser de gran utilidad involucrarse en su funcionamiento y terminologa
para entender que, bajo el contexto de autmatas, los conceptos de
alfabeto, frase, cadena vaca, lenguaje, gramtica, etctera, cobran
particular relevancia.
Se definir y estudiar en particular a la Mquina de Turing, que es un
ejemplo de los autmatas finitos deterministas, que realizan slo una
actividad en una situacin dada.
Es importante que analices con detalle los ejemplos desarrollados en
esta unidad, sobre el diseo y funcionamiento de una Mquina de
Turing.
El estudio de los algoritmos y los autmatas es bsico y medular para
que ejercites un pensamiento lgico y abstracto sobre la forma de
abordar los problemas de tu rea de desempeo, que es la Informtica
19
LO QUE S
De acuerdo con los conocimientos o idea de lo que es un algoritmo, plantea tu
propia definicin.
TEMARIO DETALLADO
(12 HORAS)
1.1. Fundamentos de algoritmos
1.1.1 Definicin de algoritmo.
1.1.2 Propiedades de los algoritmos
1.1.3 Autmatas y lenguajes formales.
1.1.4 Mquina de Turing.
20
1.1. Fundamentos de algoritmos
Definicin de algoritmo.
Un algoritmo es un conjunto detallado y lgico de pasos, para alcanzar
un objetivo o resolver un problema.
Como ejemplo, el instructivo para armar un modelo de un avin a
escala. Si una persona sigue en forma estricta los pasos indicados en
el instructivo, obtendr el avin a escala. Lo mismo obtendra otra
persona que se dedicara a armar el mismo modelo.
Los pasos deben ser suficientemente detallados para que el procesador
los entienda.
En nuestro ejemplo, el procesador es el cerebro de quien arma el
modelo, pero el ser humano tiende a obviar muchas cosas y es muy
factible que haga en forma automtica algunos de los pasos del
instructivo, sin detenerse a pensar en cmo llevarlos a cabo. Pero para
una computadora resultara imposible, ya que la mquina requiere de
instrucciones muy detalladas para poder ejecutarlas.
Ejemplificando lo anterior, considrese que a una persona se le pide
intercambiar los nmeros 24 y 9. El sujeto, con cierta lgica,
21
responder inmediatamente 9 y 24. Ahora, veamos cmo lo hara el
procesador de una computadora: se tendra que indicar de qu tipo son
los datos que se van a utilizar, para este caso nmeros enteros; darle
nombre a tres variables, digamos num1, num2 y aux; asignarle a la
variable num1 el nmero 24, asignarle a num2 el 9 y, posteriormente,
indicarle que a la variable aux se le asigne el valor contenido en la
variable num1, a num1 se le asigne el valor contenido en la variable
num2 y a esta ltima, se le asigne el valor de la variable aux, para
posteriormente imprimir los valores de las variables num1 y num2, que
exhibirn los nmeros 9 y 24; como observaste, se requieren muchos
ms pasos para indicarle a una computadora que realice la misma
tarea que un ser humano, y la mquina es incapaz de realizar muchas
tareas an.
Propiedades de los algoritmos
Los algoritmos deben de tener caractersticas o propiedades para
considerarse, valga la redundacia, algoritmos, estas son:
FINITO
El algoritmo debe tener, dentro de la secuencia de pasos
para realizar la tarea, una situacin o condicin que lo
detenga, porque de lo contrario se pueden dar ciclos infinitos
que impidan llegar a un trmino.
PRECISO
Un algoritmo no debe dar lugar a criterios, por ejemplo: qu
sucedera si a dos personas en distintos lugares se les indicara
que preparen un pastel; suponemos que las personas saben
cmo preparar un pastel, y siguiendo las indicaciones de la
receta del pastel llegan a un paso en el que se indica que se
22
agregue azcar al gusto. Cada persona agregara azcar de
acuerdo a sus preferencias, pero entonces el resultado ya no
sera el mismo, ya que los dos pasteles seran diferentes en
sus caractersticas. Con este ejemplo concluimos que no se
trata de un algoritmo, puesto que existe una ambigedad en el
paso descrito.
OBTENER EL MISMO RESULTADO
Bajo cualquier circunstancia, si se siguen en forma estricta
los pasos del algoritmo, siempre se debe llegar a un mismo
resultado, como por ejemplo: obtener el mximo comn divisor
de dos nmeros enteros positivos, armar un modelo a escala,
resolver una ecuacin, etctera.
Si carecen de cualquiera de estas caractersticas o propiedades,
entonces los pasos en cuestin no pueden considerarse como un
algoritmo.
Autmatas y lenguajes formales.
2
Un autmata es un modelo computacional consistente en un conjunto de
estados bien definidos, un estado inicial, un alfabeto de entrada y una funcin
de transicin.
Este concepto es equivalente a otros como autmata finito o mquina
de estados finitos. En un autmata, un estado es la representacin de
2
Vase mi Tutorial para la asignatura Anlisis, diseo e implantacin de algoritmos, 1 edicin, Fondo editorial
FCA, Mxico, 2003.
23
su condicin en un instante dado. El autmata comienza en el estado
inicial con un conjunto de smbolos; su paso de un estado a otro se
efecta a travs de la funcin de transicin, la cual, partiendo del
estado actual y un conjunto de smbolos de entrada, lo lleva al nuevo
estado correspondiente.
Histricamente, los autmatas han existido desde la
antigedad, pero en el siglo XVII, cuando en Europa exista
gran pasin por la tcnica, se perfeccionaron las cajas de
msica compuestas por cilindros con pas, que fueron
inspiradas por los pjaros autmatas que haba en Bizancio,
que podan cantar y silbar.
As, a principios del siglo XVIII, los ebanistas Roentgen y
Kintzling mostraron a Luis XVI un autmata con figura humana,
llamado La taedora de salterio". Por su parte, la aristocracia
se apasionaba por los muecos mecnicos de encaje, los
cuadros con movimiento y otros personajes.
Los inventores ms clebres son Pierre Jacquet Droz, autor
de "El dibujante" y "Los msicos", y Jacques Vaucanson, autor
de "El pato con aparato digestivo", un autmata que aleteaba,
parloteaba, tragaba grano y evacuaba los residuos. Este autor
quiso pasar de lo banal a lo til y sus trabajos culminaron en el
telar de Joseph Marie Jaquard y la mquina de Jean Falcon,
dirigida por tarjetas perforadas.
El autmata ms conocido en el mundo es el denominado
Mquina de Turing, elaborado por el matemtico ingls Alan
Mathison Turing.
24
En trminos estrictos, actualmente se puede decir que un termostato es
un autmata, puesto que regula la potencia de calefaccin de un
aparato (salida) en funcin de la temperatura ambiente (dato de
entrada), pasando de un estado trmico a otro. Un ejemplo ms de
autmata en la vida cotidiana es un elevador, ya que es capaz de
memorizar las diferentes llamadas de cada piso y optimizar sus
ascensos y descensos.
Tcnicamente existen diferentes herramientas para poder definir el
comportamiento de un autmata, entre las cuales se encuentra el
diagrama de estado.
En l se pueden visualizar los estados como crculos que en su interior
registran su significado, y flechas que representan la transicin entre
estados y la notacin de Entrada/Salida, que provoca la transicin entre
estados.
En el ejemplo se muestran cuatro diferentes
estados de un autmata y se define lo
siguiente:
Partiendo del estado "00", si se recibe una
entrada "0", la salida es "0" y el autmata
conserva el estado actual; pero si la entrada
es "1", la salida ser "1" y el autmata pasa al
estado "01".
Este comportamiento es homogneo para todos los estados del
autmata. Vale la pena resaltar que el autmata que se muestra aqu
tiene un alfabeto binario (0 y 1).
25
Otra herramienta de representacin del comportamiento de los
autmatas es la tabla de estado, que consiste en cuatro partes:
descripcin del estado actual, descripcin de la entrada, descripcin del
estado siguiente, descripcin de las salidas.
La siguiente tabla es la correspondiente al diagrama que se present
en la figura anterior
Estado actual Entrada Estado siguiente Salida
A B x A B y
0 0 0 0 0 0
0 0 1 0 1 1
0 1 0 1 1 0
0 1 1 0 1 1
1 0 0 1 0 0
1 0 1 0 0 0
1 1 0 1 0 0
1 1 1 1 1 0
En la tabla se puede notar que el autmata tiene dos elementos que
definen su estado, A y B, as como la reafirmacin de su alfabeto
binario. Adems, podemos deducir la funcin de salida del autmata, la
cual est definida por la multiplicacin lgica de la negacin del estado
de A por la entrada x:
y = A' x
26
ALFABETO
Un alfabeto se puede definir como el conjunto de todos los
smbolos vlidos o posibles para una aplicacin. Por tanto, en
el campo de los autmatas, un alfabeto est formado por todos
los caracteres que utiliza para definir sus entradas, salidas y
estados.
En algunos casos, el alfabeto puede ser infinito o tan simple
como el alfabeto binario que se utiliz en el ejemplo del punto
anterior, donde slo se usan los smbolos 1 y 0 para
representar cualquier expresin de entrada, salida y estado.
FRASE
Una frase es la asociacin de un conjunto de smbolos definidos
en un alfabeto (cadena), que tiene la propiedad de tener sentido,
significado y lgica.
Las frases parten del establecimiento de un vocabulario que
define las palabras vlidas del lenguaje sobre la base del alfabeto
definido. Una frase vlida es aqulla que cumple con las reglas
que define la gramtica establecida.
27
CADENA VACIA
Se dice que una cadena es vaca cuando la longitud del conjunto
de caracteres que utiliza es igual a cero, es decir, es una cadena
que no tiene caracteres asociados.
Este tipo de cadenas no siempre implica el no cambio de estado
en un autmata, ya que en la funcin de transicin puede existir
una definicin de cambio de estado asociada a la entrada de una
cadena vaca.
LENGUAJE
Se puede definir un lenguaje como un conjunto de cadenas que
obedecen a un alfabeto fijado.
Un lenguaje, entendido como un conjunto de entradas, puede o
no ser resuelto por un algoritmo.
GRAMATICAS FORMALES
Una gramtica es una coleccin estructurada de palabras y
frases ligadas por reglas que definen el conjunto de cadenas de
caracteres que representan los comandos completos, que
pueden ser reconocidos por un motor de discurso.
Las gramticas definen formalmente el conjunto de frases vlidas que
pueden ser reconocidas por un motor de discurso.
Una forma de representar las gramticas es a travs de la forma
Bakus-Naur (BNF), la cual es usada para describir la sintaxis de un
lenguaje dado, as como su notacin.
28
La funcin de una gramtica es definir y enumerar las palabras y frases
vlidas de un lenguaje. La forma general definida por BNF es
denominada regla de produccin, y se puede representar como:
<regla> = sentencias y frases. *
Las partes de la forma general BNF se definen como sigue:
El "lado izquierdo" o regla es el identificador nico de las reglas
definidas para el lenguaje. Puede ser cualquier palabra, con la
condicin de estar encerrada entre los smbolos < >. Este
elemento es obligatorio en la forma BNF.
El operador de asignacin = es un elemento obligatorio.
El "lado derecho", o sentencias y frases, define todas las
posibilidades vlidas en la gramtica definida.
El delimitador de fin de instruccin (punto) es un elemento
obligatorio.
Un ejemplo de una gramtica que define las opciones de un
men asociado a una aplicacin de ventanas puede ser:
<raiz> = ARCHIVO
| EDICION
| OPCIONES
| AYUDA.
En este ejemplo podemos encontrar claramente el concepto de
smbolos terminales y smbolos no-terminales. Un smbolo
terminal es una palabra del vocabulario definido en un lenguaje,
por ejemplo, ARCHIVO, EDICION, etc. Por otra parte, un
smbolo no-terminal se puede definir como una regla de
produccin de la gramtica, por ejemplo:

<raiz> = <opcion>.
29
<opcion> = ARCHIVO
| EDICION
| OPCIONES
| AYUDA
Otro ejemplo ms complejo que involucra el uso de frases es el
siguiente:
<raiz> = Hola mundo | Hola todos
En los ejemplos anteriores se us el smbolo | (OR), el cual denota
opciones de seleccin mutuamente excluyentes, lo que quiere decir que
slo se puede elegir una opcin entre ARCHIVO, EDICION,
OPCIONES y AYUDA, en el primer ejemplo, as como "Hola mundo" y
"Hola todos", en el segundo.
Un ejemplo real aplicado a una frase simple de uso comn como "Me
puede mostrar su licencia", con la opcin de anteponer el ttulo
Seorita, Seor o Seora, se puede estructurar de la manera siguiente
en una gramtica BNF:
<peticion> = <comando> | <titulo> <comando> .
<titulo> = Seor | Seora | Seorita.
<comando> = Me puede mostrar su licencia.
Hasta este momento slo habamos definido reglas de produccin que
hacan referencia a smbolos terminales; sin embargo, en el ejemplo
anterior se puede ver que la regla <peticion> est formada slo por
smbolos no-terminales.
30
Otra propiedad que nos permite visualizar el ejemplo anterior es la
definicin de frases y palabras opcionales, es decir, si analizamos la
regla de produccin <peticion>, podremos detectar que una peticin
vlida puede prescindir del uso del smbolo <titulo>, mientras que el
smbolo <comando> se presenta en todas las posibilidades vlidas de
<peticion>.
Una sintaxis que se puede utilizar para simplificar el significado de
<peticion> es usando el operador "?":
<peticion> = <titulo>? <comando>.
Con la sintaxis anterior se define que el smbolo <titulo> es opcional, o
sea que puede ser omitido sin que la validez de la <peticion> se pierda
LENGUAJE FORMAL
De lo anterior podemos decir que un lenguaje formal est
constituido por un alfabeto, un vocabulario y un conjunto de reglas
de produccin definidas por gramticas.
Las frases vlidas de un lenguaje formal son aqullas que se
crean con los smbolos y palabras definidas, tanto en el alfabeto
como en el vocabulario del lenguaje, y que cumplen con las reglas
de produccin definidas en las gramticas.
31
JERARQUIZACION DE GRAMATICAS
Las gramticas pueden ser de distintos tipos, de acuerdo con las
caractersticas que rigen la formulacin de reglas de produccin
vlidas, todas los cuales parten de las gramticas arbitrarias, que
son aqullas que consideran la existencia infinita de cadenas
formadas por los smbolos del lenguaje. Los principales tipos
derivados son:
GRAMATICAS SENSIBLES AL CONTEXTO
Este tipo de gramticas tiene la caracterstica de que el lado
derecho de la regla de produccin siempre debe ser igual o mayor
que el lado izquierdo.
GRAMATICAS INDEPENDIENTES DEL CONTEXTO
Es aqulla que cumple con las propiedades de la gramtica
sensible al contexto y que, adems, tiene la caracterstica de que el
lado izquierdo de la regla de produccin slo debe tener un
elemento, y ste no puede ser un elemento terminal.
GRAMATICAS REGULARES
Son aqullas que cumplen con las caractersticas de la gramtica
independiente del contexto y, adems, se restringen a travs de las
reglas de produccin para generar slo reglas de los dos tipos
anteriores.
32
PROPIEDADES DE INDECIDIBILIDAD
Se dice que un lenguaje es indecidible si sus miembros no pueden ser
identificados por un algoritmo que restrinja todas las entradas en un
nmero de pasos finito. Otra de sus propiedades es que no puede ser
reconocido como una entrada vlida en una mquina de Turing.
Asociados a este tipo de lenguaje existen, de la misma manera,
problemas indecidibles, que son aqullos que no pueden ser resueltos,
con todas sus variantes, por un algoritmo.
En contraposicin con el lenguaje indecidible y los problemas
asociados a este tipo de lenguajes existen los problemas decidibles,
que estn relacionados con lenguajes del mismo tipo y que tienen las
caractersticas opuestas.
Este tipo de lenguajes se conoce tambin como lenguajes recursivos o
lenguajes totalmente decidibles.
Mquina de Turing.
Un algoritmo es un conjunto de pasos lgicos y secuenciales para
solucionar un problema. Este concepto fue implementado en 1936 por
Alan Turing, matemtico ingls, en la llamada Mquina de Turing (MT).
La Mquina de Turing est formada por tres elementos: una cinta, una
cabeza de lectura-escritura y un programa. La cinta tiene la propiedad
de ser infinita (no acotada por sus extremos) y estar dividida en
segmentos del mismo tamao, los cuales pueden almacenar cualquier
smbolo o estar vacos. La cinta puede interpretarse como el dispositivo
de almacenamiento.
33
La cabeza de lectura-escritura es el dispositivo que lee y escribe en la
cinta. Tiene la propiedad de poder actuar en un segmento y ejecutar
slo una operacin a la vez. Tambin tiene un nmero finito de estados,
que cambian de acuerdo a la entrada y a las instrucciones definidas en
el programa que lo controla.
El ltimo elemento, el programa, es un conjunto de instrucciones que
controla los movimientos de la cabeza de lectura-escritura, indicndole
hacia dnde debe moverse y si debe escribir o leer en la celda donde
se encuentre.
Actualmente, la Mquina de Turing es una de las principales
abstracciones utilizadas en la teora moderna de la computacin, ya
que auxilia en la definicin de lo que una computadora puede o no
puede hacer.
Mquina de Turing como funcin
La Mquina de Turing es una funcin cuyo dominio se encuentra en la
cinta infinita, y es en esta misma donde se plasma su co-dominio, esto
34
es: todos los posibles valores de entrada se encuentran en la cinta y
todos los resultados de su operacin se plasman tambin en ella.
La Mquina de Turing es el antecedente ms remoto de un autmata y,
al igual que ste, puede definirse con varias herramientas: diagrama de
estado, tabla de estado y funcin.
Hay problemas que pueden resolverse mediante una Mquina de
Turing y otros que no. A los primeros se les denomina problemas
computables y a los segundos problemas no computables o problemas
indecidibles. De ello derivan respectivamente, los procesos
computables y los procesos no computables, a saber:
Un ejemplo de la
Mquina de Turing lo
tenemos en la
enumeracin de
binarios, como se
muestra a continuacin.
Proceso computable
Es aqul que puede implementarse en un
algoritmo o Mquina de Turing, y definirse
en un lenguaje decidible. Un proceso
computable puede implementarse como el
programa de la Mquina de Turing.
Proceso no computable:
Es aqul que no puede implementarse con
una Mquina de Turing por no tener solucin
para todas sus posibles entradas. El
lenguaje en que se especifica es un lenguaje
indecidible que no puede ser interpretado
por una Mquina de Turing.
35
Disear una Mquina de Turing que enumere los cdigos binarios de la siguiente forma:
0,1,10,11,110,111,1110,...
Solucin:
Se define la mquina mediante:
Q = {q1} (Conjunto de estados)
= {0, 1} (Alfabeto de salida)
= {0, b} (Alfabeto de entrada)
s = q1 (Estado inicial)
Y dado por las siguientes instrucciones:
(q1, 0) = (q1, 1, D)
Que se lee como: Si se encuentra en estado q1 y lee un cero, entonces cambia a
estado q1, escribe uno y desplazar a la derecha.
(q1, b) = (q1, 0, Sin Desplazamiento)
Que se lee como: Si se encuentra en estado q1 y lee una cadena vaca, entonces
cambia a estado q1, escribe un cero y no hay desplazamiento.
Si en esta MT se comienza con la cabeza de lectura / escritura sobre el 0, tenemos
la siguiente secuencia:
(q1, 0b) (q1, 1b) (q1, 10b) (q1, 11b) (q1, 110b)
Nota: el caracter subrayado indica que la cabeza lectora/grabadora de la
MT est posicionada sobre ese caracter.
36
Otro ejemplo:
Disear una mquina de Turing que acepte el lenguaje L={a
n
b
m
| n y m >=1}, por
medio de la eliminacin de las aes y bes que estn en los extremos opuestos de la
cadena. Es decir, usando c y d, la cadena aaabbb sera primero transformada en
caabbd, despus en ccabdd, y por ltimo, en cccddd.
Solucin: Consideremos la MT definida mediante:
Q = {q1, q2, q3, q4, q5} (Conjunto de estados)
= {a, b, c, d} (Alfabeto de salida)
= {a, b, } (Alfabeto de entrada)
F = {q4} (Estado final)
s = {q1} (Estado inicial)
Y dado por las siguientes instrucciones:
(q1, a) = (q2, c, D)
(q1, b) = (q2, c, D)
(q1, c) = (q4, d, ALTO)
(q1, d) = (q4, d, ALTO)
(q2, a) = (q2, a, D)
(q2, b) = (q2, b, D)
(q2, ) = (q5, , I)
(q2, d) = (q5, d, I)
(q3, a) = (q3, a, I)
(q3, b) = (q3, b, I)
(q3, c) = (q1, c, D)
(q5, a) = (q3, a, I)
(q5, b) = (q3, d, I)
(q5, c) = (q4, c, ALTO)
37
Si en esta MT se comienza con la cabeza lectora / escritora sobre la primera de la
izquierda, se tiene la siguiente secuencia de movimientos:
(q1, aaabbb) (q2, caabbb) (q2, caabbb) (q2, caabbb) (q2, caabbb)
(q2, caabbb) (q2, caabbb ) (q5, caabbb ) (q3, caabbd) (q3, caabbd)
(q3, caabbd) (q3, caabbd) (q3, caabbd) (q1, caabbd) (q2, ccabbd)
(q2, ccabbd) (q2, ccabbd) (q2, ccabbd) (q5, ccabbd) (q3, ccabdd)
(q3, ccabdd) (q3, ccabdd) (q1, ccabdd) (q2, cccbdd) (q2, cccbdd)
(q5, cccbdd) (q3, cccddd) (q1, cccddd) (q4, cccddd)
ALTO.
Con lo anterior queda ejemplificado el diseo de una MT, as como su
desarrollo.
38
RESUMEN DE LA UNIDAD
En esta primera unidad se presentaron conceptos y principios bsicos
de los algoritmos, sus caractersticas y terminologa bsica, para
aplicacin en la resolucin de problemas, que es la razn de ser de un
algoritmo. Con el apoyo de ejemplos se trat de generar una mejor
comprensin de los puntos tratados, ya que los algoritmos pueden ser
muy sencillos o muy complejos.
Se estudiaron los autmatas, que son una aplicacin de los algoritmos,
los cuales, basados en una condicin de una situacin dada, llevarn a
cabo algunas acciones que ya se encuentran programadas. Se defini
y estudi en particular a la Mquina de Turing, que es un ejemplo de los
autmatas finitos deterministas que realizan slo una actividad en una
situacin dada.
39
GLOSARIO DE LA UNIDAD
Algoritmo
Es un conjunto detallado y lgico de pasos, para alcanzar un objetivo o
resolver un problema.
Autmata
Es un modelo computacional consistente en un conjunto de estados
bien definidos, un estado inicial, un alfabeto de entrada y una funcin
de transicin.
Alfabeto
Es el conjunto de todos los smbolos vlidos o posibles para una
aplicacin, est formado por todos los caracteres que utiliza para definir
sus entradas, salidas y estados.
Frase
Es la asociacin de un conjunto de smbolos definidos en un alfabeto
(cadena), que tiene la propiedad de tener sentido, significado y lgica.
40
Cadena vaca
Es cuando la longitud del conjunto de caracteres que utiliza es igual a
cero, es decir, es una cadena que no tiene caracteres asociados.
Lenguaje
Es un conjunto de cadenas que obedecen a un alfabeto fijado.
Gramtica
Es una coleccin estructurada de palabras y frases ligadas por reglas
que definen el conjunto de cadenas de caracteres que representan los
comandos completos, que pueden ser reconocidos por un motor de
discurso.
Lenguaje formal
Est constituido por un alfabeto, un vocabulario y un conjunto de reglas
de produccin definidas por las gramticas.
Mquina de Turing
Modelo utilizado en la teora moderna de la computacin para definir si
un problema puede o no ser solucionado por una computadora.
41
ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1
Investiga acerca de la aplicacin de las caractersticas de un algoritmo
y redctalo en una ficha.
42
ACTIVIDAD 2
Elabora un algoritmo del ejemplo presentado en el tema:
Dale nombre a tres variables num1, num2 y aux.
Asgnale a la variable num1 el nmero 24.
Asgnale a num2 el 9.
Posteriormente, indcale que a la variable aux se le asigne el valor
contenido en la variable num1.
A num1, asignar el valor contenido en la variable num2.
Asignar a num 2 el valor de la variable aux.
Posteriormente, imprimir los valores de las variables num1 y num2,
que exhibirn los nmeros 9 y 24.
43
ACTIVIDAD 3
Lee la unidad 1 "Para qu sirven los autmatas?" (ANEXO 1)
del libro de Introduccin a la Teora de Autmatas, Lenguajes y
Computacin de John E. Hopcroft y con base en lo leido da un
ejemplo de situaciones en las que se pueden aplicar las siguientes
demostraciones:
Demostraciones deductivas
Demostracin de la conversin contradictoria
Demostracin por reduccin al absurdo
Contraejemplos
Demostraciones inductivas
Inducciones estructurales
44
ACTIVIDAD 4
Disea una MT para determinar si la cantidad de parntesis de
apertura y de cierre est o no balanceada.
Ejemplo: Para la cadena de parntesis ((()), la MT determinar que
no estn balanceados. Enva el diseo en un documento a tu asesor.
45
CUESTIONARIO DE
REFORZAMIENTO
Contesta el siguiente cuestionario.
1. Qu es un algoritmo?
2. Cules son las caractersticas de un algoritmo?
3. Qu es un autmata?
4. Explica por qu un termostato puede ser considerado un
autmata.
5. Qu es un diagrama de estado?
6. Qu es una tabla de estado?
7. En el campo de autmatas, qu es un alfabeto?
8. Define lo que es una cadena vaca.
9. Cul es la definicin de lenguaje?
10. Qu es y para qu sirve una gramtica?
11. Da un ejemplo de una regla de produccin BNF.
12. Qu elementos constituyen un lenguaje formal?
13. Describe brevemente tres tipos de gramticas.
14. Define lo que es una Mquina de Turing.
15. Qu es un proceso computable?
46
EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. Es muy factible obviar pasos que sean repetitivos
en las operaciones que realiza una computadora.
( ) ( )
2. La posibilidad de aplicar diversos criterios es una
caracterstica de los algoritmos
( ) ( )
EXAMEN DE AUTOEVALUACIN 2
Marca en el cuadro, el concepto correspondiente a cada definicin.
1. Conjunto de todos los smbolos validos o
posibles para una aplicacin.
1 Frase
2 Gramtica
3 Alfabeto
4 Lenguaje
5 Cadena vaca
2. Es la asociacin de un conjunto de
smbolos definidos en un alfabeto (cadena),
que tiene la propiedad de tener sentido,
significado y lgica.
3. Conjunto de cadenas que obedecen a un
alfabeto fijado.
47
4. La longitud del conjunto de caracteres
que utiliza es igual a cero.
5. Coleccin estructurada de palabras y
frases ligadas por reglas que definen el
conjunto de cadenas de caracteres que
representan los comandos completos, que
pueden ser reconocidos por un motor de
discurso.
EXAMEN DE AUTOEVALUACIN 3
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. Los procesos computables y no computables pueden
implementarse en un algoritmo o maquina de tuning.
( ) ( )
2. A un proceso no computable se le puede generar un
lenguaje decible para que sea ledo en una Maquina de
Tuning.
( ) ( )
3. La cita de una maquina de tuning es necesariamente
finita, ya que est definida por el tamao del programa.
( ) ( )
4. El programa es un conjunto de instrucciones que
controla los movimientos de la cabeza de lectura/escrita.
( ) ( )
5. La cinta es un dispositivo solo de lectura y no de
almacenamiento.
( ) ( )
48
EXAMEN DE AUTOEVALUACIN 4
Elige la respuesta correcta para las siguientes preguntas.
1. Es una caracterstica de un algoritmo:
a) Acepta criterios en su desarrollo
b) Se pueden omitir pasos al seguir los algoritmos
c) En ocasiones, no obtiene un resultado
d) Contiene una condicin que detiene su ejecucin
2. Inventor de El pato con aparato digestivo
a) Pierre Jacquet Drozz
b) Falcon
c) Josheph Marie Jaquard
d) Jacques Vacanson
3. Autmata que est formado por una cinta, una cabeza de lectura
escritura y un programa:
a) maquina de turing
b) el dibujante
c) los msicos
d) el telar automatico
49
4. Problema que no puede implementarse en una maquina de turing por
no tener solucin para todas sus posibles entradas:
a) Computable
b) Indecible
c) Decidible
d) disfuncional
5.-Tipo de gramticas que tienen la caracterstica de que el lado
derecho de la regla de produccin siempre debe ser igual o mayor que
el lado izquierdo:
a) Gramticas independientes del contexto
b) gramticas sensible al contexto
c) Gramticas regulares
d) Ninguna de las anteriores
50
LO QUE APREND
Retoma la definicin de algoritmo que has anotado en el apartado Lo que s
y complemntala con lo visto en la unidad, y con algunas referencias
bibliogrficas o mesogrficas. No olvides citarlas.
51
MESOGRAFA
BIBLIOGRAFA BSICA
DE GIUSTI, A. Algoritmos, datos y programas con
aplicaciones en Pascal, Delphi y Visual Da Vinci, Buenos
Aires, Pearson Education, 2001, 472 pp.
HOPCROFT, J. MOTWANI, R. y ULLMAN, J. Introduccin a la
teora de autmatas, lenguajes y computacin, 2 edicin,
Madrid, Pearson Addison Wesley, 2002, 584 pp.
JOYANES, L. Estructuras de datos, algoritmos, abstraccin y
objetos, Mxico, McGraw Hill, 1998.
LOZANO, L. Diagramacin y programacin estructurada y
libre, 3 edicin, Mxico, McGraw-Hill, 1986, 384 pp.
MANZANO, G. Tutorial para la asignatura Anlisis, diseo e
implantacin de algoritmos, Fondo editorial FCA, Mxico,
2003.
LEE, R. TSENG, S. CHANG, R. y TSAI, Y. Introduccin al
diseo y anlisis de algoritmos un enfoque estratgico,
Mxico, McGraw Hill, 2007, 752 pp.
SEDGEWICK, R. Algoritmos en C++, Mxico, Pearson
Education, 1995.
VAN GELDER, B. Algoritmos computacionales Introduccin
al anlisis y diseo, 3 ed. Mxico, Thomson, 2002.
52
BIBLIOGRAFA COMPLEMENTARIA
HERNNDEZ, Roberto, Estructuras de datos y algoritmos,
MXICO, PRENTICE HALL, 2000, 296 PP.
JOYANES Aguilar Luis, Programacin En C++, Algoritmos,
estructuras de datos y objetos, MXICO, MC.GRAW-HILL,
2000.
VAN Gelder, Baase, Algoritmos Computacionales, 3. ED.,
MXICO, THOMSON, 2003.
OSVALDO Cairo Battistutti Aniei, Fundamentos de
programacin piensa en C, 392 pag. (2006)
SITIOS ELECTRNICOS
http://www.cs.odu.edu/~toida/nerzic/content/recursive_alg/rec_alg.html
http://www.cs.odu.edu/~toida/nerzic/content/web_course.html
http://www.zator.com/Cpp/E0_1_1.htm
http://www.rastersoft.com/articulo/turing.html
http://perseo.dif.um.es/~roque/talf/Material/apuntes.pdf
53
UNIDAD 2
ANLISIS DE ALGORITMOS
54
OBJETIVO ESPECFICO
Al finalizar la unidad, el alumno podr analizar un problema
determinado y buscar una solucin a partir de un algoritmo
55
INTRODUCCIN
En este tema se realizar una descripcin de la etapa de anlisis para
recabar la informacin necesaria que indique una accin para la
solucin de un problema, y se calcular el rendimiento del algoritmo
considerando la cantidad de datos a procesar y el tiempo que tarde su
procesamiento.
Se abordar la computabilidad como la solucin de problemas a travs
del algoritmo de la Mquina de Turing, de modo que se pueda
interpretar un fenmeno a travs de un cmulo de reglas establecidas.
Se utilizar la construccin de modelos para abstraer una expresin a
sus caractersticas ms sobresalientes, que sirvan al objetivo del
modelo mismo.
Asimismo, se tratarn los problemas decidibles, los cuales pueden
resolverse por un conjunto finito de pasos con una variedad de
entradas.
Otro punto a abarcar ser la recursividad, que es la propiedad de una
funcin de invocarse repetidamente a s misma hasta encontrar un caso
56
base que le asigne un resultado a la funcin y retorne esta solucin
hasta la funcin que la invoc. La recursin puede definirse a travs de
la induccin. La solucin recursiva implica la abstraccin, pero dificulta
la comprensin de su funcionamiento. Su complejidad puede calcularse
a partir de una funcin y elevarla al nmero de veces que la funcin
recursiva se llame a s misma.
Por ltimo, se estudiarn los diferentes mtodos de ordenacin y
bsqueda, los cuales se utilizan con bastante recurrencia en la solucin
de problemas de negocios, por lo que se hace indispensable su
comprensin. Ordenar es organizar un conjunto de datos en una cierta
forma que facilite la tarea del usuario de la informacin, a la vez que
facilita su bsqueda y el acceso a un elemento determinado.
57
LO QUE S
Investiga los elementos de un problema y relacinalos con los
algoritmos, y anota tus conclusiones. Ms adelante retomars ste
apartado.
58
TEMARIO DETALLADO
(12 HORAS)
2.1 Anlisis de algoritmos
2.1.1 Anlisis del problema.
2.1.2 Computabilidad.
2.1.3 Algoritmos cotidianos.
2.1.4 Algoritmos recursivos.
2.1.5 Algoritmos de bsqueda y ordenacin
59
2.1. Anlisis de Algoritmos
Anlisis del problema.
El anlisis del problema es un proceso para recabar la informacin
necesaria para emprender una accin que solucione el problema.
Diversos problemas requieren algoritmos diferentes. Un problema
puede llegar a tener ms de un algoritmo que lo solucione, pero la
dificultad se centra en saber cul algoritmo est mejor implementado,
es decir, que dependiendo del tipo de datos a procesar, tenga un
tiempo de ejecucin ptimo.
Para poder determinar el rendimiento de un algoritmo se deben
considerar dos aspectos:
La cantidad de datos de entrada a procesar y
El tiempo necesario de procesamiento
El tiempo de ejecucin depende del tipo de datos de entrada, que
pueden clasificarse en tres casos:
60
Caso ptimo
datos de entrada con las mejores condiciones, por ejemplo:
que el conjunto de datos se encuentre completamente
ordenado
Caso medio
conjunto estndar de datos de entrada, ejemplo: que el 50%
de los datos se encuentre ordenado y el 50% restante no lo
est.
Peor caso
datos de entrada ms desfavorable, por ejemplo: que los
datos se encuentren completamente desordenados.
Mediante el empleo de frmulas matemticas es posible calcular el
tiempo de ejecucin del algoritmo y conocer su rendimiento en cada
uno de los casos ya presentados.
Existen ciertos inconvenientes para no determinar con exactitud el
rendimiento de los algoritmos, a saber:
Algunos algoritmos son muy sensibles a los datos de entrada,
modificando cada vez su rendimiento, causando que entre ellos
no sean comparables en absoluto.
Algoritmos bastante complejos, de los cules no sea posible
obtener resultados matemticos especficos.
61
No obstante lo anterior, en la mayora de los casos s es posible
calcular el tiempo de ejecucin de un algoritmo, para as poder
seleccionar el algoritmo que tenga el mejor rendimiento para un
problema en particular.
Computabilidad.
Una de las funciones principales de la computacin ha sido la solucin
de problemas a travs del uso de la tecnologa. Sin embargo, esto no
ha logrado realizarse en la totalidad de los casos debido a una
propiedad particular que se ha asociado a stos: la computabilidad.
La computabilidad es la propiedad que tienen ciertos problemas de
poder resolverse a travs de un algoritmo, como por ejemplo una
Mquina de Turing.
Atendiendo a esta propiedad, los problemas pueden dividirse en tres
categoras: irresolubles, solucionables y computables; estos ltimos son
un subconjunto de los segundos.
Representacin de un fenmeno descrito
Todos los fenmenos de la naturaleza poseen caractersticas
intrnsecas que los particularizan y permiten diferenciar unos de otros, y
la percepcin que se tenga de stas posibilita tanto su abstraccin
como su representacin a partir de ciertas herramientas.
La percepcin que se tiene de un fenmeno implica conocimiento;
cuando se logra su representacin, se dice que dicho conocimiento se
convierte en un conocimiento transmisible.
62
Esta representacin puede realizarse utilizando diferentes tcnicas de
abstraccin, desde una pintura hasta una funcin matemtica; sin
embargo, la interpretacin que puede darse a los diferentes tipos de
representacin vara de acuerdo a dos elementos: la regulacin de la
tcnica utilizada y el conocimiento del receptor.
De esta manera, un receptor, con ciertos
conocimientos acerca de arte, podr tener una
interpretacin distinta a la de otra persona con el
mismo nivel cuando se observa una pintura; pero un
receptor con un nivel de conocimientos
matemticos anlogo al nivel de otro receptor
siempre dar la misma interpretacin a una
expresin matemtica. Esto se debe a que en el
primer caso intervienen factores personales de
interpretacin, que hacen vlidas las diferencias,
mientras que en el segundo caso se tiene un
cmulo de reglas que no permiten variedad de
interpretaciones sobre una misma expresin. En
este tema nos enfocaremos en la representacin de
fenmenos del segundo caso.
Modelo
La representacin de los fenmenos se hace a travs de modelos, los
cuales son abstracciones que destacan las caractersticas ms
sobresalientes de ellos, o bien, aquellas caractersticas que sirvan al
objetivo para el cual se realiza el modelo.
63
Los problemas computables pueden representarse a travs de lenguaje
matemtico o con la definicin de algoritmos. Es importante mencionar
que todo problema que se califique como computable debe poder
resolverse con una Mquina de Turing.
64
El problema de la decisin
Un problema de decisin es aqul cuya respuesta puede mapearse al
conjunto de valores {0,1}, esto es, que tiene slo dos posibles
soluciones: s o no. La representacin de este tipo de problemas se
puede hacer a travs de una funcin cuyo dominio sea el conjunto
citado.
Se dice que un problema es decidible cuando puede resolverse en un
nmero finito de pasos, por un algoritmo que recibe todas las entradas
posibles para dicho problema. El lenguaje con el que se implementa
dicho algoritmo se denomina lenguaje decidible o recursivo.
Por el contrario, un problema no decidible es aqul que no puede
resolverse por un algoritmo en todos sus casos. Asimismo, su lenguaje
asociado no puede ser reconocido por una Mquina de Turing.
Algoritmos cotidianos.
Son todos aquellos algoritmos que nos ayudan a solucionar problemas
de la vida cotidiana y de los cuales seguimos su metodologa sin
percibirlo en forma consciente.
65
Por ejemplo tenemos el siguiente algoritmo:
Algoritmo para cambiar una llanta ponchada:
Paso 1: Poner el freno de mano del automovil
Paso 2: Sacar el gato, la llave de cruz y la llanta de
refaccin
Paso 3: Aflojar los birlos de la llanta con la llave de cruz
Paso 4: Levantar el auto con el gato
Paso 5: Quitar los birlos y retirar la llanta desinflada
Paso 6: Colocar la llanta de refaccin y colocar los birlos
Paso 7: Bajar el auto con el gato
Paso 8: Apretar los birlos con la llave de cruz.
Paso 9: Guardar la llanta de refaccin y la herramienta.
Resultado: Llanta de refaccin montada
Como se aprecia, la gente comn realiza algoritmos cotidianos para
realizar sus actividades cotidianas.
Algoritmos recursivos.
Las funciones recursivas son aqullas que hacen llamadas a s
mismas en su definicin, simplificando los valores originales de
entrada. Se pueden implementar cuando el problema que se desea
resolver puede simplificarse en versiones ms pequeas del mismo
problema, hasta llegar a casos simples de fcil resolucin.
Los primeros pasos de una funcin recursiva corresponden a la
clusula base, que es el caso conocido hasta donde la funcin
descender para comenzar a regresar los resultados, hasta llegar a la
funcin con el valor que la invoc.
66
El funcionamiento de una funcin recursiva puede verse como:
Introduccin a la induccin
La recursin se define a partir de tres elementos, uno de stos es la
clusula de induccin. A travs de la induccin matemtica se puede
definir un mecanismo para encontrar todos los posibles elementos de
un conjunto recursivo, partiendo de un subconjunto conocido, o bien,
para probar la validez de la definicin de una funcin recursiva a partir
de un caso base.
El mecanismo que la induccin define parte del establecimiento de
reglas que permiten generar nuevos elementos, tomando como punto
de partida una semilla (caso base).
Primer principio Segundo principio
Si el paso base y el paso Se basa en afirmaciones de la
67
inductivo asociados a una
funcin recursiva pueden ser
probados, la funcin ser vlida
para todos los casos que caigan
dentro del dominio de la misma.
Asimismo, si un elemento
arbitrario del dominio cumple
con las propiedades definidas
en las clusulas inductivas, su
sucesor o predecesor, generado
segn la clusula inductiva,
tambin cumplir con dichas
propiedades.
forma x P(x). Esta forma de
induccin no requiere del paso
bsico, ya que asume que P(x) es
vlido para todo elemento del
dominio .
Definicin de funciones recursivas
Como se mencion anteriormente, la definicin recursiva consta de tres
clusulas diferentes: bsica, inductiva y extrema
BASICA
Especifica la semilla del dominio a partir de la cual se
generarn todos los elementos del contradominio (resultado de
la funcin), utilizando las reglas definidas en la clusula
inductiva. Este conjunto de elementos se denomina caso base
de la funcin que se est definiendo.
INDUCTIVA
Establece la manera en que los elementos del dominio
pueden ser combinados para generar los elementos del
contradominio. Esta clusula afirma que, a partir de los
elementos del dominio, se puede generar un contradominio
68
con propiedades anlogas.
EXTREMA
Afirma que, a menos que el contradominio demuestre ser un
valor vlido, aplicando las clusulas base e inductiva un
nmero finito de veces, la funcin no ser valida.
A continuacin se desarrolla un ejemplo de la definicin de las
clusulas para una funcin recursiva que genera nmeros naturales:
Paso bsico
Demostrar que P(n0) es vlido.
Induccin
Demostrar que para cualquier entero k n0, si el valor generado por P(k)
es vlido, el valor generado por P(k+1) tambin es vlido.
A travs de la demostracin de estas clusulas, se puede certificar la
validez de la funcin P(n0) para la generacin de nmeros naturales.
Clculo de complejidad de una funcin recursiva
Generalmente las funciones recursivas, por su funcionamiento de
llamadas a s mismas, requieren mucha mayor cantidad de recursos
(memoria y tiempo de procesador) que los algoritmos iterativos.
Un mtodo para el clculo de la complejidad de una funcin recursiva
consiste en calcular la complejidad individual de la funcin y despus
69
elevar esta funcin a n, donde n es el nmero estimado de veces que la
funcin deber llamarse a s misma antes de llegar al caso base.
Algoritmos de bsqueda y ordenacin
Al utilizar matrices o bases de datos, las tareas que ms comnmente
se utilizan son la ordenacin y la bsqueda de los datos, para las
cuales existen diferentes mtodos ms o menos complejos, segn lo
rpidos o eficaces que sean.
Algotirmos de bsqueda
SECUENCIAL
Este mtodo de bsqueda, tambin conocido como lineal, es
el ms sencillo y consiste en buscar desde el principio de un
arreglo desordenado, el elemento deseado, y continuar con
cada uno de los elementos del arreglo hasta hallarlo o hasta
que ha llegado al final del arreglo y terminar.
BINARIA O DICOTOMICA
Para este tipo de bsqueda es necesario que el arreglo est
ordenado. El mtodo consiste en dividir el arreglo por su
elemento medio en dos subarreglos ms pequeos, y
comparar el elemento con el del centro. Si coinciden, la
bsqueda termina. Si el elemento es menor, se busca en el
primer subarreglo, y si es mayor, se busca en el segundo.
70
Por ejemplo, para buscar el elemento 41 en el arreglo {23, 34, 41, 52,
67, 77, 84, 87, 93} se realizaran los siguientes pasos:
1. Se toma el elemento central y se divide el arreglo en dos:
{23, 34, 41, 52}-67-{77, 84, 87, 93}
2. Como el elemento buscado (41) es menor que el central (67), debe
estar en el primer sub-arreglo:
{23, 34, 41, 52}
3. Se vuelve a dividir el arreglo en dos:
{23}-34-{41, 52}
4. Como el elemento buscado es mayor que el central, debe estar en el
segundo sub-arreglo:
{41, 52}
5. Se vuelve a dividir en dos:
{}-41-{52}
6. Como el elemento buscado coincide con el central, lo hemos
encontrado. Si el sub-arreglo a dividir est vacio {}, el elemento no se
encuentra en el arreglo y la bsqueda termina.
Tablas Hash
Una tabla hash es una estructura de datos que asocia claves con
71
valores; su uso ms frecuente se centra en las operaciones de
bsqueda, ya que permite el acceso a los elementos almacenados
en la tabla, a partir de una clave generada.
Las tablas hash se implementan sobre arreglos que almacenan
grandes cantidades de informacin, sin embargo, como utilizan
posiciones pseudo-aleatorias, el acceso a su contenido es bastante
lento.
Funcin hash
La funcin hash realiza la transformacin de claves (enteros o cadenas
de caracteres) a nmeros conocidos como hash, que contengan
enteros en un rango [0..Q-1], donde Q es el nmero de registros que
podemos manejar en memoria, los cuales se almacenan en la tabla
hash.
La funcin h(k) debe:
Ser rpida y fcil
de calcular
Minimizar las
colisiones
Hashing Multiplicativo
Esta tcnica trabaja multiplicando la clave k por s misma o por una
constante, usando despus alguna porcin de los bits del producto
como una localizacin de la tabla hash.
72
Tiene como inconvenientes que las claves con muchos ceros se
reflejarn en valores hash tambin con ceros, y que el tamao de la
tabla est restringido a ser una potencia de 2.
Para evitar las restricciones
anteriores se debe calcular:
h(k) = entero [Q * Frac(C*k)]
donde Q es el tamao de la tabla
y
0 <= C <= 1.
Hashing por Divisin
En este caso, la funcin se calcula simplemente como h(k) = modulo
(k,Q), usando el 0 como el primer ndice de la tabla hash< de tamao
Q. Es importante elegir el valor de Q con cuidado. Por ejemplo, si Q
fuera par, todas las claves pares seran aplicadas a localizaciones
pares, lo que constituira un sesgo muy fuerte. Una regla simple para
elegir Q es tomarlo como un nmero primo.
Algoritmos de ordenacin
Ordenar significa reagrupar o reorganizar un conjunto de datos u
objetos en una secuencia especfica, de forma ascendente (de menor a
mayor) o descendente (de mayor a menor).
73
La seleccin de uno u otro mtodo depende de que se requiera hacer
una cantidad considerable de bsquedas, y es importante el factor
tiempo.
Los mtodos de ordenacin ms conocidos son: burbuja, seleccin,
insercin, y rpido ordenamiento (quick sort). Vamos a analizar a cada
uno de los mtodos de ordenacin mencionados.
Burbuja
El mtodo de ordenacin por burbuja es el ms sencillo, pero el menos
eficiente. Se basa en la comparacin de elementos adyacentes e
intercambio de los mismos si estos no guardan el orden deseado; se
van comparando de dos en dos los elementos del vector.
El elemento menor sube por el vector como las burbujas en el agua y
los elementos mayores van descendiendo por el vector.
Los pasos a seguir para ordenar un vector por este mtodo son:
Paso Descripcin
1 Asigna a n el tamao del vector (si el
tamao del vector es igual a 10
elementos, entonces n vale 10).
2 Colocarse en la primera posicin del
vector. Si el nmero de posicin del
vector es igual a n, entonces FIN.
3 Comparar el valor de la posicin actual
con el valor de la siguiente posicin. Si
el valor de la posicin actual es mayor
que el valor de la siguiente posicin,
74
entonces intercambiar los valores.
4 Si el nmero de la posicin actual es
igual a n -1, entonces restar 1 a n y
regresar al paso 2; si no, avanzar a la
siguiente posicin para que quede como
posicin actual y regresar al paso 3.
Vemoslo con un ejemplo: Si el vector est formado por cinco enteros
positivos, entonces n es igual a 5. Procedemos como sigue:
75
Valores
Posicin n=5 n=4 n=3 n=2 n=1
1 7 5 5 5 5 3 3 3 2 2 1
2 5 7 3 3 3 5 2 2 3 1 2
3 3 3 7 2 2 2 5 1 1 3 3
4 2 2 2 7 1 1 1 5 5 5 5
5 1 1 1 1 7 7 7 7 7 7 7
Nota: Las celdas con color gris claro representan la posicin actual y
las celdas ms oscuras representan la posicin siguiente, de acuerdo a
los pasos que se van realizando del algoritmo.
Seleccin
En este mtodo se hace la seleccin repetida del elemento menor de
una lista de datos no ordenados, para colocarlo como el siguiente
elemento de una lista de datos ordenados que crece.
La totalidad de la lista de elementos no ordenados debe estar
disponible para que podamos seleccionar el elemento con el valor
mnimo en esa lista. Sin embargo, la lista ordenada podr ser puesta en
la salida, a medida que avancemos.
Los mtodos de ordenacin por seleccin se basan en dos principios
bsicos:
Seleccionar el elemento ms pequeo del arreglo.
Colocarlo en la posicin ms baja del arreglo
76
Por ejemplo:
Consideremos el siguiente arreglo con n=10 elementos no ordenados:
14, 03, 22, 09, 10, 14, 02, 07, 25 y 06
El primer paso de seleccin identifica al 2 como valor mnimo, lo saca
de dicha lista y lo agrega como primer elemento a una nueva lista
ordenada:
Elementos restantes no
ordenados
Lista
ordenada
14, 03, 22, 09, 10, 14, 07,
25, 06
02
En el segundo paso identifica al 3 como el siguiente elemento mnimo y
lo retira de la lista para incluirlo en la nueva lista ordenada:
Elementos restantes no
ordenados
Lista
ordenada
14, 22, 09, 10, 14, 07, 25,
06
02, 03
Despus del sexto paso, se tiene la siguiente lista:
Elementos restantes no
ordenados
Lista
ordenada
14, 22, 14, 25 02, 03, 06, 07,
09,10
77
El nmero de pasadas o recorridos del arreglo es n-1, pues en la ltima
pasada se colocan los dos ltimos elementos ms grandes en la parte
superior del arreglo.
Insercin
Este mtodo consiste en insertar un elemento del vector en la parte
izquierda del mismo, que ya se encuentra ordenada. Este proceso se
repite desde el segundo hasta el dcimo elemento.
Ejemplo:
Supongamos que se desea ordenar los siguientes nmeros del vector:
9, 3, 4, 7 y 2.
PRIMERA COMPARACION
Si (valor posicin 1 > valor posicin 2): 9 > 3? Verdadero, intercambiar.
Quedando como 3, 9, 4, 7 y 2
SEGUNDA COMPARACION
Si (valor posicin 2 > valor posicin 3): 9 > 4? Verdadero, intercambiar.
Quedando como 3, 4, 9, 7 y 2
Si (valor posicin 1 > valor posicin 2): 3 > 4? Falso, no intercambiar.
TERCERA COMPARACION
Si (valor posicin 3 > valor posicin 4): 9 > 7? Verdadero, intercambiar.
Quedando como 3, 4, 7, 9 y 2
Si (valor posicin 2 > valor posicin 3): 4 > 7? Falso, no intercambiar.
78
Con esta circunstancia se interrumpen las comparaciones, puesto que
ya no se realiza la comparacin de la posicin 2 con la posicin 1,
porque ya estn ordenadas correctamente.
La siguiente tabla muestra las diversas secuencias de la lista de
nmeros conforme se van sucediendo las comparaciones y los
intercambios:
Comparacin 1 2 3 4 5
1. 3 9 4 7 2
2. 3 4 9 7 2
3. 3 4 7 9 2
4. 2 3 4 7 9
Quick Sort
El algoritmo de ordenacin rpida es fruto de la tcnica de solucin de
algoritmos divide y vencers, la cual se basa en la recursin, esto es,
dividir el problema en subproblemas ms pequeos, solucionarlos cada
uno por separado (aplicando la misma tcnica) y al final, unir todas las
soluciones.
Este mtodo supone que se tiene M, que es el arreglo a ordenar, y N,
que es el nmero de elementos que se encuentran dentro del arreglo.
El ordenamiento se hace a travs de un proceso iterativo. Para cada
paso se escoge un elemento "a" de alguna posicin especfica dentro
del arreglo.
79
Ese elemento "a" es el que se proceder a colocar en el lugar que le
corresponda. Por conveniencia se seleccionar "a" como el primer
elemento del arreglo. Se procede a comparar el elemento "a" con el
resto de los elementos del arreglo.
Una vez que se termin de comparar "a" con todos los elementos, "a"
ya se encuentra en su lugar, a la izquierda de "a" quedan todos los
elementos menores a l, y a su derecha todos los mayores.
Como se describe a continuacin, se tienen como parmetros las
posiciones del primero y ltimo elementos del arreglo, en vez de la
cantidad N de elementos.
Consideremos a M como un arreglo de N componentes:
Tcnica
Se selecciona arbitrariamente un elemento de M, sea "a" dicho
elemento:
80
a = M[1]
Los elementos restantes se arreglan de tal forma que "a" quede en la
posicin j, donde:
1. Los elementos en las posiciones M[j-1] deben ser menores o
iguales que "a".
2. Los elementos en las posiciones M[j+1] deben ser mayores o
iguales que "a".
3. Se toma el subarreglo izquierdo (los menores de "a") y se realiza
el mismo procedimiento. Se toma el subarreglo derecho (los
mayores de "a") y se realiza el mismo procedimiento. Este
proceso se realiza hasta que los subarreglos sean de un
elemento (solucin).
4. Al final, los subarreglos conformarn el arreglo M, el cual
contendr elementos ordenados en forma ascende
Shell
A diferencia del algoritmo de ordenacin por insercin, este algoritmo
intercambia elementos distantes.
La velocidad del algoritmo depender de una secuencia de valores
(llamados incrementos) con los cuales trabaja, utilizndolos como
distancias entre elementos a intercambiar.
Se considera la ordenacin de Shell como el algoritmo ms adecuado
para ordenar muchas entradas de datos (decenas de millares de
elementos), ya que su velocidad, si bien no es la mejor de todos los
algoritmos, es aceptable en la prctica, y su implementacin (cdigo) es
relativamente sencilla.
81
RESUMEN DE LA UNIDAD
Recabar la informacin necesaria para indicar una accin para la
solucin de un problema, en forma adecuada, es fundamental, por lo
que se toma como tema inicial en esta unidad. Esta informacin nos
permite calcular el rendimiento del algoritmo a travs de la cantidad de
datos a procesar y el tiempo que tarde su procesamiento.
La compresin de conceptos como la computabilidad es muy
importante, ya que permite dar solucin a problemas a travs del
algoritmo de la Mquina de Turing, permite interpretar un fenmeno a
travs de un cmulo de reglas establecidas. Tambin se aborda el
concepto de la recursividad, que es cuando una funcin se invoca
repetidamente a s misma, hasta encontrar un resultado base, y ste
retorne a la funcin que la invoc. A travs de la induccin se genera
una solucin recursiva que implica la abstraccin. Como se plante,
esto dificulta la comprensin de su funcionamiento.
En la resolucin de problemas a travs de algoritmos, los mtodos de
ordenacin y bsqueda se utilizan con bastante frecuencia, por lo que
82
se hace indispensable su comprensin. Ordenar los datos para su
mejor manipulacin facilita la tarea del usuario de la informacin, a la
vez que facilita su bsqueda y el acceso a un elemento determinado.
GLOSARIO DE LA UNIDAD
Teora de la computabilidad
Es la parte de la computacin que estudia los problemas de decisin
que pueden ser resueltos con un algoritmo o, equivalentemente, con
una Mquina de Turing.
Modelo
Un Modelo es una representacin grfica o esquemtica de una
realidad. Sirve para organizar y comunicar de forma clara los elementos
que involucran un todo.
83
Recursin
Es la forma en la cual se especifica un proceso basado en su propia
definicin. Siendo un poco ms precisos, y para evitar el aparente
crculo sin fin en esta definicin, las instancias complejas de un proceso
se definen en trminos de instancias ms simples, estando las finales
ms simples definidas de forma explcita.
Induccin matemtica
En la induccin matemtica se va de lo particular a lo general y, no
obstante, se obtiene una conclusin necesaria. Tpicamente, el
razonamiento inductivo se contrapone al razonamiento deductivo, que
va de lo general a lo particular, y sus conclusiones son necesarias
Ordenacin por insercin
Se trata de ordenar un arreglo formado por n enteros. Para esto, el
algoritmo de insercin va intercambiando elementos del arreglo hasta
que est ordenado.
Ordenacin por seleccin
Se trata de ordenar un arreglo formado por n enteros. Para esto, el
algoritmo de seleccin va seleccionando los elementos menores al
actual y los intercambia.
84
ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1
Investiga 5 ejemplos de problemas no decidibles, comntalos con tus
compaeros.
ACTIVIDAD 2
Investiga las diferencias que existen entre la solucin iterativa y la
solucin recursiva, comntalas en el foro de la asignatura.
85
ACTIVIDAD 3
Realiza un cuadro comparativo con las caractersticas de los
mtodos de ordenacin: burbuja, insercin, seleccin, quick sort y
shell.
ACTIVIDAD 4
Elabora un ejemplo en el que una funcin hash h(k) convierta un
universo de claves (pequeo) en nmeros que se almacenen en
una tabla hash que vincule las claves con su valor correspondiente.
Utiliza cualquiera de las tcnicas de hashing: multiplicativo o por
divisin.
86
CUESTIONARIO DE
REFORZAMIENTO
Contesta las siguientes preguntas:
1. Qu elementos se deben tomar en consideracin para
determinar el rendimiento de un algoritmo?
2. Qu factores podran influir en forma negativa para determinar
con exactitud el rendimiento de los algoritmos?
3. Define lo que es un modelo.
4. Qu son los problemas decidibles?
5. Explica con tus propias palabras el trmino recursividad.
6. Qu entiendes por induccin?
7. Describe el mtodo para calcular la complejidad de una funcin
recursiva.
8. Cul es el mtodo de ordenacin menos eficiente y cul el ms
eficiente?
9. Explica el concepto divide y vencers que utiliza el mtodo de
ordenacin Quick Sort.
10. Qu diferencia existe entre una tabla Hash y una funcin hash?
Explica cada una de stas.
87
LO QUE APREND
Retoma el apartado Lo que s y complementa la informacin con lo
aprendido y lo investigado, no olvides citar tus referencias.
88
EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. un problema puede llegar a tener ms de un
algoritmo que lo solucione.
( ) ( )
2. La cantidad de datos de entrada y las operaciones
determinan el tiempo de ejecucin.
( ) ( )
3. Mediante el empleo de formulas matemticas es
posible conocer el rendimiento de un algoritmo.
( ) ( )
4. El tiempo de ejecucin depende del tipo de datos
de salida.
( ) ( )
5. Un algoritmo se selecciona en funcin de su
tamao.
( ) ( )
89
EXAMEN DE AUOEVALUACIN 2
1. Es la propiedad que tienen ciertos problemas
de poder resolverse a travs de un algoritmo.
1 Problema de
decisin
2 Computabilidad
3 Indecidible
4 Recursivo
5 Computables
2. Es aquel cuya respuesta puede mapearse al
conjunto de valores {0,1}.
3. Es el lenguaje que se implementa para
resolver un problema con un nmero finito de
pasos por algoritmo.
4. Tipo de problema cuyo lenguaje no puede
ser reconocido por una MT.
5. Problemas que pueden resolverse con una
MT.
90
EXAMEN DE AUTOEVALUACIN 3
Escribe sobre la lnea la opcin que mejor complete la sentencia.
1. Intercambia elementos que estn muy
distantes.
1 Burbuja
2 Seleccin
3 Shell
4 Insercin
5 Quicksort
2. Emplea la tcnica de divide y vencers para
separar el problema en subproblemas mas
pequeos
3. Se basa en seleccin el elemento ms
pequeo del arreglo y colocarlo en la posicin
ms baja del mismo.
4. Es el mtodo ms sencillo, pero el menos
eficiente.
5. Mtodo que consiste en tomar un elemento y
colocarlo en la posicin ordenada
correspondiente.
91
MESOGRAFA
BIBLIOGRAFA BSICA
JOYANES, L. Estructuras de datos, algoritmos, abstraccin y
objetos, Mxico, McGraw Hill, 1998.
LOZANO, L. Diagramacin y programacin estructurada y
libre, 3 edicin, Mxico, McGraw-Hill, 1986, 384 pp.
MANZANO, G. Tutorial para la asignatura Anlisis, diseo e
implantacin de algoritmos, Fondo editorial FCA, Mxico, 2003.
LEE, R. TSENG, S. CHANG, R. y TSAI, Y. Introduccin al
diseo y anlisis de algoritmos un enfoque estratgico, Mxico,
McGraw Hill, 2007, 752 pp.
SEDGEWICK, R. Algoritmos en C++, Mxico, Pearson
Education, 1995.
VAN GELDER, B. Algoritmos computacionales Introduccin
al anlisis y diseo, 3 ed. Mxico, Thomson, 2002.
92
BIBLIOGRAFA COMPLEMENTARIA
HERNNDEZ, Roberto, Estructuras de datos y algoritmos,
MXICO, PRENTICE HALL, 2000, 296 PP.
JOYANES Aguilar Luis, Programacin En C++, Algoritmos,
estructuras de datos y objetos, MXICO, MC.GRAW-HILL,
2000.
SITIOS ELECTRNICOS
http://es.scribd.com/doc/27478655/ALGORITMOS-
COTIDIANOS, 25/Marzo/2011; responsable de la pgina: Scribd;
descripcin del sitio: Definicin y ejemplos de algoritmos cotidianos.
http://www.mailxmail.com/curso-aprende-programar/metodos-
ordenamiento-busqueda, 25/Marzo/2011; responsable de la pgina:
Mailxmail, S.L.; descripcin del sitio: Mtodos de bsqueda y
ordenacin.
https://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r592
36.PDF, 25/Marzo/2011; responsable de la pgina: Instituto
Tecnolgico Superior de Calkini en el estado de Campeche;
descripcin del sitio: Anlisis y diseo de algoritmos recursivos.
93
UNIDAD 3
DISEO DE ALGORITMOS PARA
LA SOLUCIN DE PROBLEMAS
94
OBJETIVO ESPECFICO
Al terminar la unidad, el alumno podr plantear, desarrollar y
seleccionar un algoritmo determinado para solucionar un problema
especfico.
95
INTRODUCCIN
En este tema se describir un mtodo por medio del cual se pueden
construir algoritmos para la solucin de problemas, adems de las
caractersticas de algunas estructuras bsicas usadas tpicamente en la
implementacin de estas soluciones y las tcnicas de diseo de
algoritmos.
En la construccin de algoritmos se debe considerar el anlisis del
problema para hacer una abstraccin de las caractersticas del
problema, el diseo de una solucin basada en modelos y, por ltimo,
la implementacin del algoritmo a travs de la escritura del cdigo
fuente, con la sintaxis de algn lenguaje de programacin.
Todo algoritmo tiene estructuras bsicas que estn presentes en el
modelado de soluciones. En el estudio del tema se abordarn las
siguientes: ciclos, contadores, acumuladores, condicionales y las
rutinas recursivas.
Tambin se abordarn las diferentes tcnicas de diseo de algoritmos
para construir soluciones que satisfagan los requerimientos de los
problemas, entre las que destacan:
96
ALGORITMOS VORACES
Son utilizados para la solucin de problemas de
optimizacin, son fciles de disear y eficientes al encontrar
una solucin rpida al problema
DIVIDE Y VENCERS
Dividen el problema en forma recursiva, solucionan cada
subproblema y la suma de estas soluciones es la solucin del
problema general
PROGRAMACIN DINMICA
Definen subproblemas superpuestos y subestructuras
ptimas, buscan soluciones ptimas del problema en su
conjunto.
VUELTA ATRS
(Backtracking). Encuentran soluciones a problemas que
satisfacen restricciones, van creando todas las posibles
combinaciones de elementos para obtener una solucin.
97
RAMIFICACIN Y PODA
Encuentra soluciones parciales en un rbol en expansin de
nodos, utiliza diversas estrategias (LIFO, FIFO y LC) para
encontrar las soluciones, contiene una funcin de costo que
evala si las soluciones halladas mejoran a la solucin actual;
en caso contrario, poda el rbol para ya no continuar buscando
en esa rama. Los nodos pueden trabajar en paralelo con varias
funciones a la vez, lo cual mejora su eficiencia, aunque en
general requiere ms recursos de memoria.
Al final, tendrs un panorama general de la construccin de
algoritmos, sus estructuras bsicas y las tcnicas de diseo de
algoritmos para encontrar soluciones a los diversos problemas
que se presentan en las organizaciones.
98
LO QUE S
Investiga algunos de los distintos niveles de abstraccin para la
construccin de algoritmos y comntalas con tu asesor.
99
TEMARIO DETALLADO
(12 HORAS)
3.1 Niveles de abstraccin para la construccin de algoritmos.
3.2 Tcnicas de diseo de algoritmos.
3.3 Alternativas de solucin
3.4 Diagramas de flujo
100
3.1 Niveles de abstraccin para
la construccin de algoritmos.
La construccin de algoritmos se basa en la abstraccin de las
caractersticas del problema, a travs de un proceso de anlisis que
permitir seguir con el diseo de una solucin basada en modelos, los
cuales ven su representacin tangible en el proceso de implementacin
del algoritmo.
ANALISIS
Consiste en reconocer cada una de las caractersticas del problema, lo
cual se logra sealando los procesos y variables que lo rodean.
Los procesos pueden identificarse como operaciones que se aplican a
las variables del problema. Al analizar los procesos o funciones del
problema, stos deben relacionarse con sus variables. El resultado
esperado de esta fase de la construccin de un algoritmo es un modelo
que represente la problemtica encontrada y permita identificar sus
caractersticas ms relevantes.
DISEO
Una vez que se han analizado las causas del problema y se
ha identificado el punto exacto donde radica y sobre el cual se
debe actuar para llegar a una solucin, comienza el proceso
de modelado de una solucin factible, es decir, el diseo. En
101
esta etapa se debe estudiar el modelo del problema, elaborar
hiptesis acerca de posibles soluciones y comenzar a realizar
pruebas con stas.
IMPLEMETACION
Por ltimo, ya que se tiene modelada la solucin, sta debe
implementarse usando el lenguaje de programacin ms
adecuado para ello.
Estructuras bsicas en un algoritmo
En el modelado de soluciones mediante el uso de algoritmos es comn
encontrar ciertos comportamientos clsicos que tienen una
representacin a travs de modelos ya definidos; a continuacin se
explican sus caractersticas.
Ciclos
Estas estructuras se caracterizan por iterar instrucciones en funcin de
una condicin que debe cumplirse en un momento bien definido.
102
Existen dos tipos de ciclos:
Mientras Hasta que
El primero se caracteriza por realizar la
verificacin de la condicin antes de
ejecutar las instrucciones asociadas al
ciclo.
Evala la condicin despus de
ejecutar las instrucciones una vez.
Las instrucciones definidas dentro de ambos ciclos deben modificar, en
algn punto, la condicin para que sea alcanzable, de otra manera seran
ciclos infinitos, un error de programacin comn.
En este tipo de ciclos el nmero de iteraciones que se realizarn es
variable y depende del contexto de ejecucin del algoritmo.
El ciclo MIENTRAS tiene el siguiente pseudocdigo:
mientras <condicion> hacer
Instruccion1
Instruccion2
...
103
Instruccion n
fin mientras
El diagrama asociado a este tipo de ciclo es el siguiente:
Por otro lado, el pseudocdigo asociado a la instruccin hasta que, se
define como sigue:
hacer
Instruccion1
Instruccion2
...
104
Instruccin n
Hasta que
<condicion>
Su diagrama se puede representar como:
Cabe mencionar que las instrucciones contenidas en la estructura
Mientras se siguen ejecutando mientras la condicin resulte verdadera
y que a diferencia de la estructura. Hasta que sta continuar iterando
siempre y cuando la evaluacin de la condicin resulte falsa.
Cuando el pseudocdigo se transforma al cdigo fuente de un lenguaje
de programacin se presenta el problema en la estructura, mientras no
est delimitada al final de sta con un comando de algn lenguaje de
programacin, por lo que se tiene que cerrar con una llave, parntesis o
un End, en tanto que la segunda estructura est acotada por un
comando tanto al inicio como al final de la misma.
105
Contadores
Este otro tipo de estructura tambin se caracteriza por iterar
instrucciones en funcin de una condicin que debe cumplirse en un
momento conocido, y est representado por la instruccin para (for). En
esta estructura se evala el valor de una variable a la que se asigna un
valor conocido al inicio de las iteraciones; este valor sufre incrementos
o decrementos en cada iteracin, y suspende la ejecucin de las
instrucciones asociadas una vez que se alcanza el valor esperado.
En algunos lenguajes se puede definir el incremento que tendr la
variable, sin embargo, se recomienda que el incremento siempre sea
con la unidad.
El pseudocdigo que representa la estructura es el siguiente:
Para <variable> = <valor inicial>
hasta <valor tope> [paso
<incremento>] hacer
Instruccion1
Instruccion2
...
Instruccion n
Fin para <variable>
106
Aqu se puede observar, entre los smbolos [ ], la opcin que existe
para efectuar el incremento a la variable con un valor distinto de la
unidad.
A continuacin se muestra el diagrama asociado a esta estructura:
Acumuladores
Los acumuladores son variables que tienen por objeto almacenar
valores incrementales o decrementales a lo largo de la ejecucin del
algoritmo.
Este tipo de variables utiliza la asignacin recursiva de valores para no
perder su valor anterior.
Su misin es arrastrar un valor que se va modificando con la aplicacin
de diversas operaciones y cuyos valores intermedios, as como el final,
son importantes para el resultado global del algoritmo. Este tipo de
107
variables generalmente almacena el valor de la solucin arrojada por el
algoritmo.
La asignacin recursiva de valor a este tipo de variables se ejemplifica
a continuacin:
<variable> =
<variable> +
<incremento>
Condicionales
Este tipo de estructura se utiliza para ejecutar selectivamente secciones
de cdigo, de acuerdo con una condicin definida. Este tipo de
estructura slo tiene dos posibilidades: si la condicin se cumple, se
ejecuta una seccin de cdigo; si no, se ejecuta otra seccin, aunque
esta parte puede omitirse.
Es importante mencionar que se pueden anidar tantas condiciones
como lo permita el lenguaje de programacin en el que se implementa
el programa.
El pseudocdigo bsico que representa la estructura if es el siguiente:
si <condicion>
entonces
Instruccion1
108
Instruccion n
[si no
Instruccion 3
Instruccion n]
Fin si
Dentro del bloque de instrucciones que se definen en las opciones de la
estructura s se pueden insertar otras estructuras condicionales
anidadas. Entre los smbolos [ ] se encuentra la parte opcional de la
estructura.
El diagrama asociado a esta estructura se muestra a continuacin:
109
Rutinas recursivas
Las rutinas recursivas son aqullas que hacen llamadas a s mismas en
su definicin, simplificando los valores originales de entrada.
Este tipo de rutinas se puede implementar en los casos en que el
problema que se desea resolver puede simplificarse en versiones ms
pequeas del mismo problema, hasta llegar a casos simples de fcil
resolucin.
Las rutinas recursivas regularmente contienen una clusula condicional
(SI) que permite diferenciar entre el caso base, situacin final en que se
regresa un valor como resultado de la rutina, o bien, un caso
intermedio, que es cuando se invoca la rutina a s misma con valores
simplificados.
Es importante no confundir una rutina recursiva con una rutina cclica,
por ello se muestra a continuacin el pseudocdigo genrico de una
rutina recursiva:
<valor_retorno>
Nombre_Funcion
(<parametroa> [,<parametrob>
...])
si <caso_base> entonces
retorna <valor_retorno>
110
si no
Nombre_Funcion (
<parametroa -1> [,
<parametrob -1> ...] )
finsi
Como se observa en el ejemplo, en esta rutina es obligatoria la
existencia de un valor de retorno, una estructura condicional y, cuando
menos, un parmetro.
El diagrama asociado a este tipo de rutinas ya se ha ejemplificado en la
figura funciones recursivas, que se encuentra ubicada en la Unidad 2,
tema 3.
3.2 Tcnicas de diseo
de algoritmos
Objetivo
Identificar las caractersticas de las diferentes tcnicas de diseo,
implementadas en el modelado algoritmos.
111
Algoritmos Voraces
Los algoritmos voraces tpicamente se utilizan en la solucin de
problemas de optimizacin, y se caracterizan por ser:
Sencillos: de disear y codificar.
Miopes: toman decisiones con la informacin que tienen
disponible de forma inmediata, sin tener en cuenta sus efectos
futuros.
Eficientes: dan una solucin rpida al problema (aunque sta
no sea siempre la mejor).
Los algoritmos voraces se caracterizan por las propiedades siguientes:
Tratan de resolver problemas de forma ptima
Disponen de un conjunto (o lista) de candidatos
A medida que avanza el algoritmo vamos acumulando dos conjuntos:
Candidatos considerados y seleccionados
Candidatos considerados y rechazados
Existe una funcin que comprueba si un cierto conjunto de candidatos
constituye una solucin de nuestro problema, ignorando si es ptima o
no por el momento.
Otra que comprueba si un cierto conjunto de candidatos es factible,
esto es, si es posible o no completar el conjunto aadiendo otros
candidatos para obtener al menos una solucin al problema. Una vez
ms, no nos importa si la solucin es ptima o no. Normalmente se
112
espera que al menos se pueda obtener una solucin a partir de los
candidatos disponibles inicialmente.
Tambin una funcin de seleccin que indica cul es el ms
prometedor de los candidatos restantes no considerados an.
Implcitamente est presente una funcin objetivo que da el valor a la
solucin que hemos hallado (valor que estamos tratando de optimizar).
Los algoritmos voraces suelen ser bastante simples. Se emplean sobre
todo para resolver problemas de optimizacin, como por ejemplo:
Encontrar la secuencia ptima para procesar un conjunto de tareas por
una computadora, hallar el camino mnimo de un grafo, etctera.
Habitualmente, los elementos que intervienen son:
Un conjunto o lista de candidatos (tareas a
procesar, vrtices del grafo, etctera).
Un conjunto o lista de candidatos (tareas a
procesar, vrtices del grafo, etctera).
Una funcin que determina si un conjunto de
candidatos es una solucin al problema (aunque
no tiene por qu ser la ptima).
Una funcin que determina si un conjunto es
completable, es decir, si aadiendo a este conjunto
nuevos candidatos es posible alcanzar una
113
solucin al problema, suponiendo que sta exista.
Una funcin de seleccin que escoge el candidato
an no seleccionado que es ms prometedor.
Una funcin objetivo que da el valor/costo de una
solucin (tiempo total del proceso, la longitud del
camino, etc.) y que es la que se pretende
maximizar o minimizar.
Divide y vencers
Otra tcnica comn, usada en el diseo de algoritmos, es divide y
vencers, que consta de dos partes:
Dividir: los problemas ms pequeos se resuelven recursivamente
(excepto, por supuesto, los casos base).
Vencer: la solucin del problema original se forma entonces a partir de
las soluciones de los subproblemas.
Las rutinas en las cuales el texto contiene al menos dos llamadas
recursivas, se denominan algoritmos de divide y vencers, no as las
rutinas cuyo texto slo contiene una llamada recursiva.
La idea de la tcnica divide y vencers es dividir un problema en
subproblemas del mismo tipo y, aproximadamente, del mismo tamao;
resolver los subproblemas recursivamente y, finalmente, combinar la
solucin de los subproblemas para dar una solucin al problema
original.
114
La recursin finaliza cuando el problema es pequeo y la solucin es
fcil de construir directamente
Programacin dinmica
La programacin dinmica es un mtodo para reducir el tiempo de
ejecucin de un algoritmo mediante la utilizacin de subproblemas
superpuestos y subestructuras ptimas. El matemtico Richard Bellman
invent la programacin dinmica en 1953.
Una subestructura ptima significa que soluciones ptimas de
subproblemas pueden ser usadas para encontrar las soluciones
ptimas del problema en su conjunto. En general, se pueden resolver
problemas con subestructuras ptimas siguiendo estos tres pasos:
1. Dividir el problema en subproblemas ms pequeos.
2. Resolver estos problemas de manera ptima, usando este
proceso de tres pasos recursivamente.
3. Usar estas soluciones ptimas para construir una solucin
ptima al problema original.
Los subproblemas se resuelven, a su vez, dividindolos en
subproblemas ms pequeos, hasta que se alcance el caso fcil, donde
la solucin al problema es trivial.
Vuelta atrs (Backtracking)
Vuelta atrs (Backtracking) es una estrategia para encontrar soluciones
a problemas que satisfacen restricciones. El trmino backtrack fue
acuado por primera vez por el matemtico estadounidense D. H.
Lehmer, en la dcada de los 50.
115
Los problemas que deben satisfacer un determinado tipo de
restricciones son problemas completos, donde el orden de los
elementos de la solucin no importa. Estos problemas consisten en un
conjunto (o lista) de variables en la que a cada una se le debe asignar
un valor sujeto a las restricciones del problema.
La tcnica va creando todas las posibles combinaciones de elementos
para obtener una solucin. Su principal virtud es que en la mayora de
las implementaciones se pueden evitar combinaciones, estableciendo
funciones de acotacin (o poda), reduciendo el tiempo de ejecucin
La vuelta atrs est muy relacionada con la bsqueda combinatoria.
Esencialmente, la idea es encontrar la mejor combinacin posible en un
momento determinado, por eso se dice que este tipo de algoritmo es
una bsqueda en profundidad.
Durante la bsqueda, si se encuentra una alternativa incorrecta, la
bsqueda retrocede hasta el paso anterior y toma la siguiente
alternativa. Cuando se han terminado las posibilidades, se vuelve a la
eleccin anterior y se toma la siguiente opcin. Si no hay ms
alternativas, la bsqueda falla.
Normalmente, se suele implementar este tipo de algoritmos como un
procedimiento recursivo. As, en cada llamada al procedimiento se toma
una variable y se le asignan todos los valores posibles, llamando a su
vez al procedimiento para cada uno de los nuevos estados.
La diferencia con la bsqueda en profundidad es que se suelen disear
funciones de cota, de forma que no se generen algunos estados si no
van a conducir a ninguna solucin, o a una solucin peor de la que ya
116
se tiene. De esta forma se ahorra espacio en memoria y tiempo de
ejecucin.
Es una tcnica de programacin para hacer una bsqueda sistemtica
a travs de todas las configuraciones posibles dentro de un espacio de
bsqueda. Para lograr esto, los algoritmos de tipo backtracking
construyen posibles soluciones candidatas de manera sistemtica. En
general, dado una solucin candidata:
1. Verifican si s es solucin. Si lo es, hacen algo con ella (depende
del problema).
2. Construyen todas las posibles extensiones de s e invocan
recursivamente al algoritmo con todas ellas.
A veces, los algoritmos de tipo backtracking se usan para encontrar una
solucin, pero otras veces interesa que las revisen todas (por ejemplo,
para encontrar la ms corta).
Ramificacin y poda
Esta tcnica de diseo de algoritmos es similar a la de Vuelta atrs y se
emplea regularmente para solucionar problemas de optimizacin.
La tcnica genera un rbol de expansin de nodos con soluciones,
siguiendo distintas estrategias: recorrido de anchura (estrategia LIFO -
Last Input First Output- ltima Entrada Primera Salida), en profundidad
(estrategia FIFO -First Input First Output- Primera Entrada Primera
Salida) o utilizando el clculo de funciones de costo para seleccionar el
nodo ms prometedor.
117
Tambin utiliza estrategias para las ramas del rbol que no conducen a
la solucin ptima: calcula en cada nodo una cota del posible valor de
aquellas soluciones alcanzables desde se. Si la cota muestra que
cualquiera de estas soluciones no es mejor que la solucin hallada
hasta el momento, no contina explorando esa rama del rbol, lo cual
permite realizar el proceso de poda.
Se conoce como nodo vivo del rbol a aquel nodo con posibilidades de
ser ramificado, es decir, que no ha sido podado.
Para determinar en cada momento qu nodo va a ser expandido se
almacenan todos los nodos vivos en una estructura pila (LIFO) o cola
(FIFO) que podamos recorrer. La estrategia de mnimo costo (LC -Low
Cost-) utiliza una funcin de costo para decidir en cada momento qu
nodo debe explorarse, con la esperanza de alcanzar lo ms
rpidamente posible una solucin ms econmica que la mejor
encontrada hasta el momento.
En este proceso se realizan tres etapas:
SELECCION
Extrae un nodo de entre el conjunto de los nodos vivos.
RAMIFICACION
Se construyen los posibles nodos hijos del nodo seleccionado en la etapa
anterior.
118
PODA
Se eliminan algunos de los nodos creados en la etapa anterior. Los nodos
no podados pasan a formar parte del conjunto de nodos vivos y se
comienza de nuevo por el proceso de seleccin. El algoritmo finaliza
cuando encuentra la solucin, o bien cuando se agota el conjunto de nodos
vivos.
Para cada nodo del rbol dispondremos de una funcin de costo que
estime el valor ptimo de la solucin, si se contina por ese camino. No
se puede realizar poda alguna hasta haber hallado alguna solucin.
Disponer de distintas estrategias de exploracin del rbol y de acotar la
bsqueda de la solucin se traduce en eficiencia. La dificultad est en
encontrar una buena funcin de costo para el problema, buena en el
sentido que garantice la poda y que su clculo no sea muy costoso.
Es recomendable no realizar la poda de nodos sin antes conocer el
costo de la mejor solucin hallada hasta el momento, para evitar
expansiones de soluciones parciales a un costo mayor.
Estos algoritmos tienen la posibilidad de ejecutarse en paralelo. Debido
a que disponen de un conjunto de nodos vivos sobre el que se efectan
las tres etapas del algoritmo antes mencionadas, se puede tener ms
de un proceso trabajando sobre este conjunto, extrayendo nodos,
expandindolos y realizando la poda.
119
Debido a lo anterior, los requerimientos de memoria son mayores que
los de los algoritmos Vuelta atrs. El proceso de construccin necesita
que cada nodo sea autnomo, en el sentido que ha de contener toda la
informacin necesaria para realizar los procesos de bifurcacin y poda,
y para reconstruir la solucin encontrada hasta ese momento.
Un ejemplo de aplicacin de los algoritmos de ramificacin y poda lo
encontramos en el problema de las N-reinas, el cual consiste en colocar
8 reinas en un tablero de ajedrez cuyo tamao es de 8 por 8 cuadros,
las reinas deben estar distribuidas dentro del tablero, de modo que no
se encuentren dos o ms reinas en la misma lnea horizontal, vertical o
diagonal. Se han encontrado 92 soluciones posibles a este problema.
120
3.3 Alternativas de solucin
El Pseudocdigo es la tcnica ms usada para elaborar algoritmos;
pseudo significa imitacin, de modo que pseudocdigo es una imitacin
de cdigo, al igual que el diagrama de flujo, ste va describiendo la
secuencia lgica de pasos mediante enunciados que deben comenzar
con un verbo que indique la accin a seguir, seguida de una breve
descripcin del paso en cuestin.
El caso de usar decisiones se utilizan sentencias como:
si condicin (relacin boleana)
entonces instrucciones
si no instrucciones
finsi
y si es necesario una bifurcacin (cambio de flujo a otro punto del
algoritmo) se utilizan etiquetas tales como:
suma 2 y 5
ir a final
(instrucciones)
(instrucciones)
final (etiqueta)
121
Por conservar la sencillez, se debe de usar un lenguaje llano y natural.
Cada frase ser despus que se codifique, una lnea de comando del
programa.
Las rdenes ms usadas son hacer-mientras, hacer-hasta, si-entonces-
sino, repite-mientras, un ejemplo sera:
Algoritmo: Obtener la suma de los nmeros
del 1 al 100.
Inicio
asigna a = 0
asigna suma = 0
mientras a <= 100
asigna a = a + 1
asigna suma = suma + a
fin-mientras
imprime La suma es: suma
fin
El siguiente paso es la comprobacin y luego la codificacin a un
programa escrito en un lenguaje de programacin.
122
Diagrama de Nassi / Shneiderman (N/S)
El diagrama estructurado N/S tambin conocido como diagrama de
chapin es como un diagrama de flujo en el que se omiten las flechas de
unin y las cajas son contiguas. Las acciones sucesivas se pueden
escribir en cajas sucesivas y como en los diagramas de flujo, se
pueden escribir diferentes acciones en cada caja. Un algoritmo se
representa en la siguiente forma:
Inicio
Accion1
Accion2
. . .
Fin
Como ejemplo tenemos el siguiente ejemplo:
Algoritmo: Clculo del salario neto a partir de las horas laboradas, el
costo por hora y la tasa de impuesto del 16%. sobre el salario.
Inicio
Leer
Nombre,Hrs,Precio
Calcular
Salario = Hrs * Precio
Calcular
Imp = Salario* 0.16
123
Calcular
Neto = Salario + Imp
Escribir
Nombre, Imp, SNeto
Fin
3.4 Diagramas de flujo
Los diagramas de flujo son la representacin grfica de los algoritmos.
Elaborarlo implica disear un diagrama de bloque que contenga un
bosquejo general del algoritmo y basndose en este proceder a
elaborar el diagrama de flujo con todos los detalles necesarios.
Reglas de elaboracin le diagramas de flujo:
1.-Debe de diagramarse de arriba hacia abajo y de izquierda a
derecha. Es una buena costumbre en la diagramacin que el
conjunto de grficos tenga un orden.
2.-El diagrama slo tendr un punto de inicio y uno final. Aunque
en el flujo lgico se tomen varios caminos, siempre debe existir
una sola salida.
3.-Usar notaciones sencillas dentro de los grficos y si se
requiere notas adicionales colocarlas en el grfico de
anotaciones a su lado.
4.-Se deben de inicializar todas las variables al principio del
diagrama. Esto es muy recomendable, ya que nos ayuda a
recordar todas las variables, constantes y arreglos que van a ser
124
utilizados en la ejecucin del programa. Adems, nunca
sabemos cuando otra persona, modifique posteriormente el
diagrama y necesite saber de estos datos.
5.-Procurar no cargar demasiado una pgina con grficos, si es
necesario utilizar ms hojas, emplear conectores. Cuando los
algoritmos son muy grandes, se pueden utilizar varias hojas para
su graficacin, en donde se utilizarn conectores de hoja para
cada punto en donde se bifurque a otra hoja.
6.-Todos los grficos deben de estar conectados con flechas de
flujo. Jams debe de dejarse un grfico sin que tenga alguna
salida, a excepcin del grfico que marque el final del diagrama.
Terminado el diagrama de flujo, se realiza la prueba de escritorio, que
no es otra cosa, que darle un seguimiento manual al algoritmo, llevando
el control de variables y resultados de impresin en forma tabular.
Ventajas:
1.-Programas bien documentados.
2.-Cada grfico se codificar como una instruccin de un
programa, realizando una conversin sencilla y eficaz.
3.-Facilita la depuracin lgica de errores.
4.-Se simplifica su anlisis al facilitar la comprensin de las
interrelaciones.
Desventajas:
1.-Su elaboracin requiere de varias pruebas en borrador.
2.-Los programas muy grandes requieren diagramas laboriosos y
complejos.
125
3.-Falta de normatividad en su elaboracin, lo que complica su
desarrollo.
Algunos de los grficos usados en los diagramas son los siguientes:
SMBOLO DESCRIPCIN
Terminal. Indica el inicio y el final del
diagrama de flujo.
Entrada/Salida. Indica la entrada y
salida de datos.
Proceso. Indica la asignacin de un
valor en la memoria y/o la ejecucin
de una operacin aritmtica.
Decisin. Indica la realizacin de
una comparacin de valores.
Proceso Predefinido. Representa
los subprogramas.
Conector de pagina. Representa
la continuidad del diagrama dentro
de la misma pagina.
126
Conector de Hoja. Representa la
continuidad del diagrama en otra
pgina.
Impresin. Indica la salida de
informacin por impresora.
Pantalla. Indica la salida de
informacin en el monitor de la
computadora.
Flujo. Indican la secuencia en que
se realizan las operaciones.
127
A continuacin se presenta un ejemplo de diagrama de flujo.
Algoritmo: Imprimir los factoriales para los nmeros del 1 al 10.
Cabe mencionar, que puede haber varias soluciones y alguna ser la
ms ptima.
INICIO
N=1
FACT=1
FACT=N*FACT
N, FACT
N =10
N = N + 1
FINAL
No
Si
128
RESUMEN
En esta unidad se analiz un mtodo por medio del cual se pueden
construir algoritmos, revisando las caractersticas de algunas
estructuras bsicas, usadas tpicamente en la implementacin de estas
soluciones, haciendo una abstraccin de las caractersticas del
problema, basada en modelos, aterrizando en la implementacin del
algoritmo a travs de la escritura del cdigo fuente en un lenguaje de
programacin.
Las estructuras bsicas de un algoritmo estn presentes en el
modelado de soluciones. En esta unidad se revisaron estructuras como
contadores, acumuladores, condicionales y las rutinas recursivas.
Tambin se revisan tcnicas de diseo de algoritmos para construir
soluciones que satisfagan los requerimientos de los problemas, como
algoritmos voraces, divide y vencers, programacin dinmica, vuelta
atrs, ramificacin y poda. Adems, las soluciones parciales en un
rbol en expansin de nodos, utilizando diversas estrategias (LIFO,
FIFO y LC) para encontrar las soluciones, contiene una funcin de
costo que evala si las soluciones halladas mejoran la solucin actual.
Generando con esto un panorama general de la construccin de
algoritmos, sus estructuras bsicas y las tcnicas de diseo de
algoritmos.
129
GLOSARIO DE LA UNIDAD
Ciclos
Estas estructuras se caracterizan por iterar instrucciones en funcin de
una condicin que debe cumplirse en un momento bien definido.
Condicionales
Este tipo de estructura se utiliza para ejecutar selectivamente secciones
de cdigo, de acuerdo con una condicin definida.
Contadores
Este otro tipo de estructura tambin se caracteriza por iterar
instrucciones en funcin de una condicin que debe cumplirse en un
momento conocido.
Rutinas recursivas
Las rutinas recursivas son aqullas que hacen llamadas a s mismas en
su definicin, simplificando los valores originales de entrada.
Programacin Dinmica
La programacin dinmica es un mtodo para reducir el tiempo de
ejecucin de un algoritmo, mediante la utilizacin de subproblemas
superpuestos y subestructuras ptimas. El matemtico Richard Bellman
invent la programacin dinmica en 1953.
Pseudocdigo
Es una serie de normas lxicas y gramaticales parecidas a la mayora
de los lenguajes de programacin, pero sin llegar a la rigidez de sintaxis
de stos ni a la fluidez del lenguaje coloquial.
130
ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1
Elabora un mapa conceptual del contenido del tema.
ACTIVIDAD 2
Disea un algoritmo para dar solucin a un problema que t
propongas, en donde se utilice alguna de las estructuras de
control: Mientras, Hasta que, Si entonces Sino y el contador
Para.
ACTIVIDAD 1
Elabora un cuadro comparativo de las diferentes tcnicas de diseo de
algoritmos. Envalo en un documento a tu asesor.
131
ACTIVIDAD 2
Disea un algoritmo voraz para solucionar el problema de dar cambio
de dinero por la venta de diversos artculos en una tiendita. Envalo en
un documento a tu asesor.
ACTIVIDAD 3
Investiga el juego de las torres de Hanoi y disea las funciones recursivas
necesarias para su ejecucin. Envalo en un documento a tu asesor.
132
CUESTIONARIO DE
REFORZAMIENTO
Contesta las siguientes preguntas:
1. Cules son las estructuras de ciclos?
2. Qu diferencias existen entre las estructuras Mientras y Hasta
que?
3. Dentro de una estructura for se puede utilizar una instruccin
para cambiar el valor de la variable que utiliza la estructura para
controlar las iteraciones. Indica la razn por la cual no debera
cambiarse el valor a esta variable dentro de la misma estructura.
4. Para qu tipo de problemas se utilizan los algoritmos voraces?
5. Qu funciones utiliza un algoritmo voraz?
6. Explica el concepto de recursividad en la tcnica Divide y
vencers.
7. En la programacin dinmica, qu se entiende por
subestructura ptima?
8. Cul estrategia de diseo est relacionada con la bsqueda
combinatoria?
133
9. Qu tareas realizan los algoritmos backtracking cuando
encuentran una solucin candidata?
10. En un tablero de ajedrez de 8 x 8 casillas, la pieza denominada
reina puede avanzar una o varias casillas en forma horizontal,
vertical o diagonal. Si en su camino encuentra una pieza
adversaria, la ataca. Entonces:
Cmo colocaras 8 reinas sobre el tablero sin que alguna
reina ataque a la otra?
Cul estrategia de diseo de algoritmos recomendaras para
solucionar el problema de las ocho reinas?
134
EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. Las condiciones son aquellas que hacen
llamadas a s mismas en su definicin,
simplificando los valores originales de entrada.
( ) ( )
2. Los acumuladores se pueden implementar en
los casos en que el problema que se desea resolver
puede simplificarse en versiones ms pequeas del
mismo.
( ) ( )
3. Los contadores se caracterizan por iterar
instrucciones en funcin de una condicin que
debe cumplirse en un momento conocido.
( ) ( )
4. Los ciclos son estructuras que se caracterizan
por iterar instrucciones en funcin de una
condicin que debe cumplirse en un momento bien
definido.
( ) ( )
5. Las rutinas recursivas regularmente contienen
una clausula condicional.
( ) ( )
135
EXAMEN DE AUTOEVALUACIN 2
Escribe la palabra que mejor complete la sentencia o responda la
pregunta.
1.- Divide el problema en subproblemas que resuelve recursivamente
para, finalmente, reunir las soluciones individuales.
________________________
2.- Resuelve el problema en suconjuntos, a travs de subestructuras
optimas.________________
3.- Tcnica en que esencialmente encuentra la mejor combinacin en
un momento determinado (bsqueda en profundidad)
4.- Se utilizan en solucin de problemas de optimizacin, aunque son
un poco eficientes.__________________
Programacin dinmica / Algoritmos voraces / Vuelta atrs / Divide
y vencers
136
EXAMEN DE AUTOEVALUACIN 3
Elige la opcin que conteste correctamente cada pregunta.
1. Es caracterstico de la estructura hasta que:
a) Evala una condicin al principio de la estructura
b) Ejecuta las instrucciones y luego evala la condicin
c) Si la condicin evaluada resulta falsa, se sale de la estructura
d) La estructura al final no est delimitada por un comando.
2. Una variable del tipo acumulador es aquella que:
a) Se incrementa en cada iteracin con la unidad
b) No sufre un cremento alguno, solo es de control
c) Aumenta su valor con el valor propio ms el del incremento
c) No tiene algo que ver con la solucin arrojada por el algoritmo.
3. Cuando se sabe con exactitud el nmero de iteraciones que debe
realizar una estructura, se utiliza:
a) Para
b) Mientras
c) Hasta que
d) Si entonces si no
137
4. Estructura en la que se puede prescindir del conjunto de
instrucciones de la condicin falsa:
a) Para
b) Mientras
c) Hasta que
d) Si entonces si no
5. Tcnica de diseo de algoritmos que contienen una funcin de
factibilidad, una funcin de seleccin y una funcin objetivo
a) Algoritmos voraces
b) Divide y vencers
c) Programacin dinmica
d) Vuelta atrs
6. Si una rutina contiene dos llamadas recursivas, se denominan
algoritmos de:
a) Algoritmos voraces
b) Divide y vencers
c) Programacin dinmica
d) Vuelta atrs
138
MESOGRAFA
BIBLIOGRAFA BSICA
JOYANES, L. Estructuras de datos, algoritmos, abstraccin y
objetos, Mxico, McGraw Hill, 1998.
LOZANO, L. Diagramacin y programacin estructurada y
libre, 3 edicin, Mxico, McGraw-Hill, 1986, 384 pp.
MANZANO, G. Tutorial para la asignatura Anlisis, diseo e
implantacin de algoritmos, Fondo editorial FCA, Mxico,
2003.
LEE, R. TSENG, S. CHANG, R. y TSAI, Y. Introduccin al
diseo y anlisis de algoritmos un enfoque estratgico,
Mxico, McGraw Hill, 2007, 752 pp.
SEDGEWICK, R. Algoritmos en C++, Mxico, Pearson
Education, 1995.
VAN GELDER, B. Algoritmos computacionales Introduccin
al anlisis y diseo, 3 ed. Mxico, Thomson, 2002.
139
BIBLIOGRAFA COMPLEMENTARIA
HERNNDEZ, Roberto, Estructuras de datos y algoritmos,
MXICO, PRENTICE HALL, 2000, 296 PP.
JOYANES Aguilar Luis, Programacin En C++, Algoritmos,
estructuras de datos y objetos, MXICO, MC.GRAW-HILL,
2000.
VAN Gelder, Baase, Algoritmos Computacionales, 3. ED.,
MXICO, THOMSON, 2003.
OSVALDO Cairo Battistutti Aniei, Fundamentos de
programacin piensa en C, 392 pag. (2006)
SITIOS ELECTRNICOS
http://www.lcc.uma.es/~av/Libro/indice.html, 25/Marzo/2011,
Universidad de Mlaga, Libro de las tcnicas de diseo de algoritmos.
http://mis-algoritmos.com/aprenda-a-crear-diagramas-de-flujo,
25/Marzo/2011, Victor de la Rocha, Descripcin de cmo crear
diagramas de flujo.
http://prof.usb.ve/mvillasa/compcient/estructuras.pdf, 25/Marzo/2011,
Universidad Simon Bolivar, Estructuras de control
140
UNIDAD 4
IMPLANTACIN DE
ALGORITMOS
141
OBJETIVO ESPECFICO
Al finalizar la unidad, el alumno podr llevar a cabo la realizacin de un
programa a partir de un algoritmo para un problema determinado.
142
INTRODUCCIN
En este tema se aborda el mtodo para transformar un algoritmo a su
expresin computable: el programa. Un programa es un conjunto de
instrucciones que realizan determinadas acciones y que estn escritas
en un lenguaje de programacin. La labor de escribir programas se
conoce como programacin.
Tambin se estudian las estructuras de control bsicas a las que hace
referencia el Teorema de la Estructura, que son piezas clave en la
programacin estructurada cuya principal caracterstica es no realizar
bifurcaciones lgicas a otro punto del programa (como se haca en la
programacin libre), lo cual facilita su seguimiento y mantenimiento.
Asimismo, se analizan los dos enfoques de diseo de sistemas: el
refinamiento progresivo y el procesamiento regresivo, comparando sus
ventajas y limitaciones.
143
LO QUE S
Busca tres definiciones de programacin.
Escribe lo que ser el inicio de tu protocolo de investigacin
TEMARIO DETALLADO
(12 HORAS)
4.1 El programa como una expresin computable del algoritmo
4.2 Programacin estructurada.
4.3 Modularidad.
4.4 Funciones, Rutinas y Procedimientos
4.5 Enfoque de algoritmos.
144
4.1 El programa como una
expresin computable del algoritmo
Como ya se ha mencionado, el algoritmo es una secuencia lgica y
detallada de pasos para solucionar un problema. Una vez diseada la
solucin, se debe implementar mediante la utilizacin de un programa
de computadora.
El algoritmo debe transformarse, lnea por lnea, a la sintaxis utilizada
por un lenguaje de programacin (el lenguaje que seleccione el
programador), por lo que revisaremos desde el principio la manera en
que un algoritmo se convierte en un programa de computadora:
DEFINICION DEL ALGORITMO
Es el enunciado del problema para saber qu se espera que haga el
programa
145
ANALISIS DEL ALGORITMO
Para resolver el problema debemos estudiar las salidas que se esperan
del programa, para definir las entradas requeridas. Tambin se deben
bosquejar los pasos a seguir por el algoritmo.
SELECCIN DE LA MEJOR ALTERNATIVA
Si hay varias formas de solucionar nuestro problema, se debe escoger
la alternativa que produzca resultados en el menor tiempo y con el
menor costo posible.
DISEO DE ALGORITMO
Se diagraman los pasos del problema. Tambin se puede utilizar el
pseudocdigo como la descripcin abstracta del problema.
PRUEBA DE ESCRITORIO
Cargar datos muestra y seguir la lgica marcada por el diagrama o el
pseudocdigo. Comprobar los resultados para verificar si hay errores.
CODIFICACION
Traducir cada grfico del diagrama o lnea del pseudocdigo a una
instruccin de algn lenguaje de programacin. El cdigo fuente lo
guardamos en archivo electrnico.
146
COMPLILACION
El compilador verifica la sintaxis del cdigo fuente en busca de
errores, es decir que algn comando o regla de puntuacin del
lenguaje la escribimos mal. Se depura y se vuelve a compilar hasta
que ya no existan errores de este tipo. El compilador crea un cdigo
objeto, el cual lo enlaza con alguna librera de programas (edicin de
enlace) y obtiene un archivo ejecutable.
PRUEBA DEL PROGRAMA
Se ingresan datos muestra para el anlisis de los resultados.
Si hay un error, volveramos al paso 6 para revisar el cdigo
fuente y depurarlo.
DOCUMENTACION
El programa libre de errores se documenta, incluyendo los
diagramas utilizados, el listado de su cdigo fuente, el
diccionario de datos en donde se listan las variables,
constantes, arreglos, abreviaciones utilizadas, etctera.
Una vez que se produce el archivo ejecutable, el programa se hace
independiente del lenguaje de programacin que se utiliz para
generarlo, por lo que permite su portabilidad a otro sistema de cmputo.
El programa es, entonces, la expresin computable del algoritmo ya
implementado, y puede utilizarse repetidamente en el rea en donde se
gener el problema.
147
4.2 Programacin estructurada.
Al construir un programa con un lenguaje de alto nivel, el control de su
ejecucin debe utilizar nicamente las tres estructuras de control
bsicas: secuencia, seleccin e iteracin. A estos programas se les
llama estructurados.
Teorema de la estructura
A finales de los aos sesenta surgi un nuevo teorema que indicaba
que todo programa puede escribirse utilizando nicamente las tres
estructuras de control siguientes:
SECUENCIA
Serie de instrucciones que se ejecutan sucesivamente.
148
SELECCIN
La instruccin condicional alternativa, de la forma:
SI condicin ENTONCES
Instrucciones (si la evaluacin de la condicin
resulta verdadera)
SI NO
Instrucciones (si la evaluacin de la condicin es
falsa)
FIN SI.
ITERACION
La estructura condicional MIENTRAS, que ejecuta la
instruccin repetidamente siempre y cuando la condicin se
cumpla, o tambin la forma HASTA QUE, ejecuta la instruccin
siempre que la condicin sea falsa, o lo que es lo mismo, hasta
que la condicin se cumpla.
Estos tres tipos de estructuras lgicas de control pueden ser
combinados para producir programas que manejen cualquier tarea de
procesamiento de datos.
La programacin estructurada est basada en el Teorema de la
Estructura, el cual establece que cualquier programa contiene
solamente las estructuras lgicas mencionadas anteriormente.
149
Una caracterstica importante en un programa estructurado es que
puede ser ledo en secuencia, desde el comienzo hasta el final, sin
perder la continuidad de la tarea que cumple el programa.
Esto es importante debido a que es mucho ms fcil comprender
completamente el trabajo que realiza una funcin determinada, si todas
las instrucciones que influyen en su accin estn fsicamente cerca y
encerradas por un bloque. La facilidad de lectura, de comienzo a fin, es
una consecuencia de utilizar solamente tres estructuras de control y
eliminar la instruccin de desvo de flujo de control (la antigua
instruccin goto etiqueta).
La programacin estructurada tiene las siguientes ventajas:
* Facilita el entendimiento de programas.
* Reduce el esfuerzo en las pruebas.
* Programas ms sencillos y ms rpidos.
* Mayor productividad del programador.
* Se facilita la utilizacin de las otras tcnicas para el
mejoramiento de la productividad en programacin.
* Los programas estructurados estn mejor documentados.
* Un programa que es fcil de leer y est compuesto de
segmentos bien definidos, tiende a ser simple, rpido y
menos expuesto a mantenimiento.
Estos beneficios derivan en parte del hecho que, aunque el programa
tenga una extensin significativa, en documentacin tiende siempre a
estar al da.
150
El siguiente programa que imprime una secuencia de la Serie de
Fibonacci
3
, de la forma: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 y 89, es un
ejemplo de la programacin estructurada:
PSEUDOCDIGO PROGRAMA FUENTE
EN LENGUAJE C.
inicio
entero x,y,z;
x=1;
y=1
imprimir (x,y);
mientras (x+y<100)
hacer
zx+y;
imprimir (z);
xy;
yz;
fin mientras
fin.
#include <stdio.h>
#include <conio.h>
void main(void)
{
int x,y,z;
x=1;
y=1;
printf(%i,%i,x,y);
while (x+y<100) {
z=x+y;
printf(%i,z);
x=y;
y=z;
}
getch();
}
Como se aprecia en la tabla superior, las instrucciones del programa se
realizan en secuencia, el programa contiene una estructura MIENTRAS
que ejecuta el conjunto de instrucciones contenidas en sta, mientras
se cumpla la condicin que x ms y sea menor que 100.
3
La serie de Fibonacci se define como la serie en que el tercer nmero es el resultado de la suma de los
dos nmeros anteriores a ste.
151
4.3 Modularidad.
Un problema se puede dividir en subproblemas ms sencillos. Estos
subproblemas se conocen como mdulos.
Dentro de los programas se les conoce como subprogramas, y de estos
hay dos tipos: los procedimientos y las funciones. Ambos reciben datos
del programa que los invoca, donde los primeros devuelven una tarea
especfica y las funciones un resultado:
Los procedimientos, en los nuevos lenguajes de programacin, cada
vez se utilizan menos, por lo que la mayora de lenguajes de
programacin utilizan en mayor medida las funciones. Un ejemplo de
un lenguaje de programacin construido nicamente por funciones, es
el lenguaje C.
Problem
a
Subproblema 1
Procedimiento
Devuelve una tarea
especfica
Subproblema 2
Funciones
Devuelve un
resultado
MDULO
152
Cuando un procedimiento o una funcin se invocan a s mismos, se le
llama recursividad (tema ya tratado con anterioridad.
4.4 Funciones, Rutinas y
Procedimientos
Funcin
Una funcin es un conjunto de pasos para realizar clculos
especficados y devolver siempre un resultado, los pasos estn
almacenados bajo un nombre de funcin, la cual acepta ciertos valores
conocidos como argumentos para realizar clculos con estos y devolver
un resultado. Hay funciones que carecen de argumentos, pero que de
cualquier forma devuelven un resultado.
Tanto el resultado de la funcin como los argumentos que recibe deben
de tener un tipo de dato previamente definido como por ejemplo:
entero, carcter, cadena, fecha, booleano, etctera.
Una funcin puede invocar a otra funcin e inclusive tener la capacidad
de invocarse a s misma como en el caso de las funciones recursivas.
La ventaja es que la funcin se puede implementar e invocar una y
repetido nmero de veces.
Un ejemplo de una funcin sera la siguiente que recibe un valor n y
clcula su factorial:
153
entero funcin factorial (entero n)
inicio
si (n=0) entonces
factorial=1;
si no
factorial = n* factorial(n-1);
fin si;
retorna factorial
fin funcion
Rutina
Una rutina es un algoritmo que realiza una tarea especfica y que puede
ser invocado desde otro algoritmo para realizar tareas intermedias.
Tambin como la funcin recibe argumentos y retorna valores, de
hecho la rutina es un tipo muy especfico de una funcin por lo que se
puede considerar sinnimo de esta.
Procedimiento
Un procedimiento es similar a una funcin, la nica diferencia es que
este no regresa un resultado sino que en su lugar realiza una o varias
tareas, como puede ser el de centrar una cadena en la pantalla de la
computadora, dibujar un marco, imprimir un mensaje etctera, vemos
el siguiente ejemplo de un procedimiento:
Procedimiento mensajeBienvenida
Inicio
Borrar pantalla
Imprimir Bienvenido al sistema
Imprimir Teclee cualquier tecla para
continuar
Salir
154
Como se aprecia, el procedimiento realiza las tareas de borrar la
pantalla e imprimir un mensaje de bienvenida pero sin devolver un valor
como resultado como en el caso de las funciones.
4.5 Enfoque de algoritmos.
Existen dos enfoques que se refieren a la forma en que se disea un
algoritmo, los cuales son refinamiento progresivo y procesamiento
regresivo, veamos a qu se refiere cada uno de estos:
Refinamiento progresivo
Es una tcnica de anlisis y diseo de algoritmos que se basa en la
divisin del problema principal en problemas ms simples. Partiendo de
problemas ms simples se logra dar una solucin ms efectiva, ya que
el nmero de variables y casos asociados a un problema simple es ms
fcil de manejar que el problema completo.
Esta tcnica se conoce como Top-Down, y es aplicable a la
optimizacin del desempeo y a la simplificacin de un algoritmo.
Top Down (arriba - abajo)
La tcnica top down, o diseo descendente como tambin se le conoce,
consiste en establecer una serie de niveles de mayor a menor
complejidad (arriba-abajo), que den solucin al algoritmo. Consiste en
efectuar una relacin entre las etapas de la estructuracin, de forma
155
que una etapa jerrquica y su inmediato inferior se relacionen mediante
entradas y salidas de datos. Este diseo consiste en una serie de
descomposiciones sucesivas del problema inicial, que recibe el
refinamiento progresivo del repertorio de instrucciones que van a formar
parte del programa.
La utilizacin de esta tcnica tiene los siguientes objetivos:
Simplificacin del algoritmo y de los subalgoritmos de cada
descomposicin.
Las diferentes partes del problema pueden ser detalladas de
modo independiente e incluso por diferentes personas (divisin
del trabajo).
El programa final queda estructurado en forma de bloque o
mdulos, lo que hace ms sencilla su lectura y mantenimiento
(integracin).
Se alcanza el objetivo principal del diseo, ya que se parte de
ste y se va descomponiendo el diseo en partes ms
pequeas, pero siempre teniendo en mente dicho objetivo.
Un ejemplo de un diseo descendente est representado en este
sistema de nmina:
Como se puede observar, el diseo descendente es jerrquico, el
mdulo 0 de Nmina contendr el men principal que integrar al
sistema, controlando desde ste los submens del siguiente nivel.
El mdulo 1 de empleados contendr un submen con las
opciones de altas, bajas y los cambios a los registros de los
empleados.
156
En el mdulo 2 se capturarn los movimientos quincenales de la
nmina como los das trabajados, horas extra, faltas,
incapacidades, etctera, de los empleados.
En el mdulo 3 se realizarn los clculos de las percepciones,
deducciones y el total de la nmina, individualizado por
trabajador y, por ltimo, el men de reportes con el nmero 4,
que contendr los subprogramas para consultar en pantalla e
imprimir los recibos de nmina, la nmina misma y un catlogo
de empleados, aunque no es limitativo, puesto que se le pueden
incluir ms reportes o informes al sistema.
El objetivo es gestionar los movimientos de la nmina por trabajador e
imprimir los reportes correspondientes. Tenindolo en mente se fue
descomponiendo en los distintos mdulos y submdulos que conforman
al sistema.
Procesamiento regresivo
sta es otra tcnica de anlisis y diseo de algoritmos, que parte de la
existencia de mltiples problemas y se enfoca en la asociacin e
identificacin de caractersticas comunes entre ellos, para disear un
modelo que represente la solucin para todos los casos, de acuerdo
con ciertas caractersticas especficas de las entradas. Esta tcnica
tambin es conocida como Bottom-Up, aunque suele pasar que no
alcance la integracin ptima y eficiente de las soluciones de los
diversos problemas.
157
Bottom Up (abajo-arriba)
Es el diseo ascendente que se refiere a la identificacin de aquellos
subalgoritmos que necesitan computarizarse conforme vayan
apareciendo, su anlisis y su codificacin, para satisfacer el problema
inmediato.
Cuando la programacin se realiza internamente y haciendo un
enfoque ascendente, es difcil llegar a integrar los subalgoritmos al
grado tal que el desempeo global sea fluido. Los problemas de
integracin entre los subalgoritmos no se solucionan hasta que la
programacin alcanza la fecha lmite para la integracin total del
programa.
158
Aunque cada subalgoritmo parece ofrecer lo que se requiere, cuando
se contempla el programa final, ste adolece de ciertas limitaciones por
haber tomado un enfoque ascendente:
Hay duplicacin de esfuerzos al introducir los datos.
Se introducen al sistema muchos datos carentes de valor.
El objetivo del algoritmo no fue completamente considerado y, en
consecuencia, no se satisface plenamente.
A diferencia del diseo descendente, en donde s se alcanza la
integracin ptima de todos los mdulos del sistema que lo
conforman, en el diseo ascendente no se alcanza este grado de
integracin, por lo que muchas tareas tendrn que llevarse a
cabo fuera del sistema con el consiguiente retraso de tiempo,
redundancia de informacin, mayor posibilidad de errores,
etctera.
La ventaja del diseo ascendente es que su desarrollo es mucho ms
econmico que el diseo descendente, pero habra que ponderar la
bondad de esta ventaja comparada con la eficiencia en la obtencin de
los resultados que ofrezca el sistema ya terminado.
159
RESUMEN
En esta unidad se estudi al programa, definindolo como un conjunto
de instrucciones que realizan acciones especificas, escritas en un
lenguaje de programacin. De ah la importancia de haber abordado
en esta unidad el mtodo para transformar un algoritmo a su expresin
computable, el programa.
A partir de ah se estudiaron las estructuras de control bsicas,
referidas al Teorema de la Estructura, que son fundamentales en la
programacin estructurada que, a diferencia de la programacin libre,
no realiza bifurcaciones lgicas a otro punto, lo cul facilita su
seguimiento y mantenimiento.
160
GLOSARIO
Iteracin
En programacin es la repeticin de una serie de instrucciones en un
programa de computadora. Puede usarse como un trmino genrico
(como sinnimo de repeticin), as como para describir una forma
especfica de repeticin con un estado mutable.
Compilacin
El compilador verifica la sintaxis del cdigo fuente en busca de errores,
es decir que algn comando o regla de puntuacin del lenguaje la
escribimos mal.
Modularidad
Es la caracterstica por la cual un programa de computadora est
compuesto de partes separadas a las que llamamos mdulos.
161
ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1
Realiza un diagrama de flujo de la manera en que un algoritmo se
convierte en un programa de computadora
ACTIVIDAD 2
Investiga qu otras estructuras de control existen que se deriven
de las bsicas explicadas en este apunte.
162
ACTIVIDAD 3
Desarrolla un diagrama top down y uno de bottom up para un
sistema de inventarios.
ACTIVIDAD 4
Investiga en una empresa que tipo de enfoque para desarrollar
sus sistemas de informacin.
163
CUESTIONARIO DE
REFORZAMIENTO
Contesta las siguientes preguntas:
1. Qu entiendes por una prueba de escritorio?
2. Qu es un compilador?
3. Qu es un diccionario de datos?
4. Define la expresin el programa como la expresin computable
del algoritmo.
5. Cules son las estructuras de control bsicas?
6. Qu es lo que establece el Teorema de la Estructura?
7. Enuncia 5 ventajas de la programacin estructurada.
8. Define la Modularidad.
9. Qu entiendes por refinamiento progresivo?
10. Qu es el procesamiento regresivo?
164
LO QUE APRENDI
Retoma el apartado Lo que s y complementa la definicin que le has
dado a programacin, y anexa sus derivaciones.
165
EXAMEN DE AUTOEVALUACIN 1
Relaciona las columnas colocando el nmero en el espacio que le
corresponde
Cargar datos muestra y seguir la lgica marcada
por el diagrama o el pseudocdigo
1 Compilacin
2 Codificacin
3 Prueba de
escritorio
4 Prueba del
programa
5 Diseo del
algoritmo
Se diagraman los pasos del problema
Verifica la sintaxis del cdigo fuente en busca de
errores.
Se ingresan datos muestra para el anlisis de los
resultados
Traduce cada grafico del diagrama o lnea del
pseudocdigo a una instruccin de algn lenguaje
de programa
166
EXAMEN DE AUTOEVALUACIN 2
Relaciona las columnas colocando el nmero en el espacio que le
corresponde:
Estructuras de control bsicas 1. Productividad
del programador
2. Teorema de
la estructura
3. Iteracin,
seleccin,
secuencia.
4. Ser ledo en
secuencia.
5. Secuencia
Ventajas de la programacin estructurada
Una caracterstica importante en un programa
estructurado
La programacin estructurada est basada en
Serie de instrucciones que se ejecutan
sucesivamente
167
EXAMEN DE AUTOEVALUACIN 3
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. Los procedimientos devuelven un resultado. ( ) ( )
2. Las funciones devuelven una tarea especfica. ( ) ( )
3. Los procedimientos son los ms usados en los
lenguajes de programacin.
( ) ( )
4. Las funciones son los ms usados en los lenguajes de
programacin.
( ) ( )
5. El refinamiento progresivo se enfoca en la asociacin e
identificacin de caractersticas comunes entre ellos para
disear un modelo que represente la solucin para todos
los casos.
( ) ( )
6. La tcnica top down, o diseo descendiente como
tambin se le conoce, consiste en establecer una serie de
niveles de mayor a menor complejidad.
( ) ( )
7. El procesamiento regresivo es una tcnica de anlisis y
diseo de algoritmos que se basa en la divisin del
problema principal en problemas ms simples.
( ) ( )
168
8. La ventaja del diseo ascendente es que su
desarrollo es mucho ms econmico que el diseo
descendiente.
( ) ( )
9.- El diseo ascendente identifica subalgoritmos que
necesitan computarizarse conforme vayan apareciendo,
su anlisis y su codificacin, para satisfacer el problema
inmediato.
( ) ( )
EXAMEN DE AUTOEVALUACIN 4
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. La compilacin es un programa para convertir un cdigo
fuente a un programa ejecutable.
( ) ( )
2. Si en las pruebas del programa se detectan errores, solo
se tienen que volver a compilar el programa.
( ) ( )
3. Las estructuras MIENTRAS y HASTA QUE, son
estructuras condicionales iterativas.
( ) ( )
4. El teorema de la estructura solo hace referencia a las
estructuras de control de secuencia, seleccin e iteracin.
( ) ( )
5.- Un programa estructurado contiene instrucciones de
desvi del flujo de control.
( ) ( )
169
6.- Solo hay un tipo de modulo, y es la funcin ( ) ( )
7.- Un procedimiento devuelve una tarea y una funcin, un
resultado.
( ) ( )
8.- El refinamiento progresivo contiene al procedimiento
mas costoso, pero el ms eficiente para integrar los mdulos
de un sistema.
( ) ( )
9.- El Bottom Up tiene la limitacin de duplicar esfuerzos al
introducir datos, ya que se introducen al sistema muchos
datos carentes de valor.
( ) ( )
170
MESOGRAFA
SITIOS DE INTERS
http://sistemas.itlp.edu.mx/tutoriales/pascal/u1_1_4.html,
25/Marzo/2011, Departamento de Sistemas y Computacin del Instituto
Tecnolgico de La Paz, tutorial de la programacin estructurada.
http://www.mailxmail.com/curso-aprende-programar/modularidad-
procedimientos-funciones, 25/Marzo/2011, Mailxmail, S.L., Captulo
sobre modularidad, procedimientos y funciones.
http://www.desarrolloweb.com/articulos/2183.php, 25/Marzo/2011,
Desarrollo web.com, Artculo sobre las tcnicas de diseo Top Down y
Bottom Up.
BIBLIOGRAFA BSICA
DE GIUSTI, A. Algoritmos, datos y programas con
aplicaciones en Pascal, Delphi y Visual Da Vinci, Buenos Aires,
Pearson Education, 2001, 472 pp.
JOYANES, L. Estructuras de datos, algoritmos, abstraccin y
objetos, Mxico, McGraw Hill, 1998.
LOZANO, L. Diagramacin y programacin estructurada y
libre, 3 edicin, Mxico, McGraw-Hill, 1986, 384 pp.
MANZANO, G. Tutorial para la asignatura Anlisis, diseo e
implantacin de algoritmos, Fondo editorial FCA, Mxico, 2003.
171
LEE, R. TSENG, S. CHANG, R. y TSAI, Y. Introduccin al
diseo y anlisis de algoritmos un enfoque estratgico, Mxico,
McGraw Hill, 2007, 752 pp.
SEDGEWICK, R. Algoritmos en C++, Mxico, Pearson
Education, 1995.
BIBLIOGRAFA COMPLEMENTARIA
HERNNDEZ, Roberto, Estructuras de datos y algoritmos,
MXICO, PRENTICE HALL, 2000, 296 PP.
JOYANES Aguilar Luis, Programacin En C++, Algoritmos,
estructuras de datos y objetos, MXICO, MC.GRAW-HILL,
2000.
OSVALDO Cairo Battistutti Aniei, Fundamentos de
programacin piensa en C, 392 pag. (2006)
172
UNIDAD 5
EVALUACIN DE ALGORITMOS
173
OBJETIVO ESPECFICO
Al finalizar la unidad, el alumno podr Identificar el algoritmo que
solucione ms eficientemente al problema en cuestin, documentarlo
en futuras revisiones y llevar a efecto el mantenimiento preventivo,
correctivo y adaptativo para su ptima operacin.
174
INTRODUCCIN
La evaluacin de algoritmos es un proceso de anlisis de desempeo
del tiempo de ejecucin que ste tarda en encontrar una solucin, y la
cantidad de recursos empleados para ello.
Entre las tcnicas ms confiables se encuentran aqullas que miden la
complejidad de algoritmos a travs de funciones matemticas.
Se abordar la depuracin y prueba de programas, con el fin de
asegurar que estn libres de errores y que cumplan eficazmente con el
objetivo para el que fueron elaborados.
Es necesario documentar lo mejor posible los programas para que,
tanto analistas como programadores conozcan lo que hacen los
programas y dejar una evidencia de todas las especificaciones del
programa.
Los programas deben ser depurados para cumplir en forma eficaz con
su objetivo, para ello se les debe dar el adecuado mantenimiento. Con
este propsito se analizarn los diferentes tipos de mantenimiento:
preventivo, correctivo y adaptativo.
175
LO QUE S
Elabora un cuadro sinptico con las principales caractersticas de un
algoritmo, haciendo nfasis la evaluacin.
TEMARIO DETALLADO
(16 HORAS)
5. Evaluacin de algoritmos
5.1 Refinamiento progresivo.
5.2 Depuracin y prueba.
5.3 Documentacin del programa.
5.4 Mantenimiento de programas.
176
5.1 Refinamiento progresivo.
En el tema anterior ya se haba tocado el tema de refinamiento
progresivo, que es la descomposicin de un problema en n problemas
para facilitar su solucin, y al final integrar stas en una solucin global.
Lo que nos concierne en este tema es la evaluacin de los algoritmos
con el fin de medir su eficiencia.
La evaluacin de un algoritmo tiene como propsito medir su
desempeo, considerando el tiempo de ejecucin y los
recursos empleados (memoria de la computadora) para
obtener una solucin satisfactoria.
En muchas ocasiones, se le da mayor peso al tiempo que tarda un
algoritmo en resolver un problema.
Para medir el tiempo de ejecucin el algoritmo se puede transformar a
un programa de computadora, y es aqu en donde entran otros factores
como el lenguaje de programacin elegido, el sistema operativo
empleado, la habilidad del programador, etctera.
Pero existe otra forma, se puede medir el nmero de operaciones que
realiza un algoritmo considerando el tamao de las entradas al mismo
177
(N). Entre ms grande es la entrada, mayor ser su tiempo de
ejecucin.
Tambin se debe tomar en cuenta cmo est el conjunto de datos de
entrada con el que trabajar el algoritmo, como en los algoritmos de
ordenacin, en donde el peor caso es que las entradas se encuentren
totalmente desordenadas, el mejor de los casos es que se encuentren
totalmente ordenadas y en el caso promedio estn parcialmente
ordenadas. Veamos como ejemplo a los algoritmos de ordenacin por
insercin y de ordenacin por seleccin.
Ordenacin por insercin
Se trata de ordenar un arreglo formado por n enteros. Para esto el
algoritmo de insercin va intercambiando elementos del arreglo hasta
que est ordenado.
procedimiento Ordenacin por Insercin ( var T [ 1 .. n ] )
para i := 2 hasta n hacer
x := T [ i ] ;
j := i - 1 ;
mientras j > 0 y T [ j ] > x hacer
T [ j + 1 ] := T[ j ] ;
j := j - 1
fin mientras ;
T [ j + 1 ] := x
fin para
fin procedimiento
n es una variable o constante global que indica el tamao del arreglo.
178
Los resultados obtenidos dependen, en parte, de la inicializacin del
arreglo de datos. Este arreglo puede estar inicializado de forma
creciente, decreciente o aleatoria.
El peor caso ocurre cuando el arreglo est inicializado
descendentemente.
El mejor caso ocurre cuando el arreglo est inicializado
ascendentemente (en este caso el algoritmo recorre el arreglo hasta el
final sin apenas realizar trabajo, pues ya est ordenado).
Se ha calculado empricamente la complejidad para este algoritmo, y se
ha obtenido una complejidad lineal cuando el arreglo est inicializado
en orden ascendente y una complejidad cuadrtica O(n2) cuando el
arreglo est inicializado en orden decreciente, y tambin cuando est
inicializado aleatoriamente.
Ordenacin por seleccin
Se trata de ordenar un arreglo formado por n enteros. Para esto el
algoritmo de seleccin va seleccionando los elementos menores al
actual y los intercambia.
procedimiento Ordenacin por Seleccin ( var T [ 1 ..
n ] )
para i := 1 hasta n - 1 hacer
minj := i ;
minx := T [ i ] ;
para j := i + 1 hasta n hacer
si T [ j ] < minx entonces
179
minj := j ;
minx := T [ j ]
fin si
fin para ;
T [ minj ] := T [ i ] ;
T [ i ] := minx
fin para
fin procedimiento
n es una variable o constante global que indica el tamao del arreglo.
Al igual que en el caso anterior, los resultados obtenidos dependen de
la inicializacin del arreglo de datos. Este arreglo puede estar
inicializado de forma creciente, decreciente o aleatoria.
El peor caso ocurre cuando el arreglo est inicializado
descendentemente.
El mejor caso ocurre tanto para la inicializacin ascendente
como aleatoria.
Para este algoritmo cabe destacar que, en comparacin con la
ordenacin por insercin, los tiempos fluctan mucho menos entre las
diferentes inicializaciones del arreglo. Esto se debe a que este
algoritmo (el de seleccin) realiza prcticamente el mismo nmero de
operaciones en cualquier inicializacin del arreglo.
Se ha calculado empricamente la complejidad para este algoritmo y se
ha obtenido que, para cualquier inicializacin del arreglo de datos, el
algoritmo tenga una complejidad cuadrtica O (n2).
180
5.2 Depuracin y prueba.
Depuracin
Es el proceso de identificacin y correccin de errores de
programacin.
El trmino en ingls es debugging, que significa eliminacin de bichos.
Una ancdota sobre el origen de este trmino es que, en la poca de la
primer generacin de computadoras constituidas por bulbos,
encontraron una polilla entre los circuitos que era la responsable de la
falla del equipo, y de ese hecho naci el trmino para indicar que el
equipo o los programas presentan algn problema.
Para depurar el cdigo fuente, el
programador se vale de herramientas de
software que le facilitan la localizacin y
depuracin de errores. Los compiladores
son un ejemplo de estas herramientas.
181
Se dice que un programa est depurado cuando est libre de errores.
Cuando se depura un programa se hace un seguimiento de su
funcionamiento y se van analizando los valores de sus distintas
variables, as como los resultados obtenidos de los clculos del
programa.
Una vez depurado el programa, se solucionan los posibles errores
encontrados y se procede a depurar otra vez. Estas acciones se repiten
hasta que el programa no contiene ningn tipo de error, tanto en tiempo
de programacin como en tiempo de ejecucin.
Los errores ms sencillos de detectar son los errores de sintaxis, que
se presentan cuando alguna instruccin est mal escrita o se omiti
alguna puntuacin necesaria para el programa. Existen tambin los
errores lgicos, en los que, aunque el programa no contenga errores de
sintaxis, no realiza el objetivo por el que fue desarrollado. Pueden
presentarse errores en los valores de las variables, ejecuciones de
programa que no terminan, errores en los clculos, etctera.
Estos ltimos son los ms difciles de detectar, por lo que se debe
realizar un seguimiento puntual del programa.
Prueba de programas
El propsito de las pruebas es asegurar que el programa produce los
resultados definidos en las especificaciones funcionales. El
programador a cargo utilizar los datos de prueba para comprobar que
el programa produce los resultados correctos; o sea, que se produzca
182
la accin correcta en el caso de datos correctos o el mensaje de error, y
una accin correcta en el caso de datos incorrectos.
Una vez terminada la programacin, el analista a cargo del sistema
volver a usar los datos de prueba para verificar que el programa o
sistema produce los resultados correctos.
En esta ocasin, el analista concentrar su atencin tambin en la
interaccin correcta entre los diferentes programas y el funcionamiento
completo del sistema. Se verificarn:
Todos los registros que se incluyen en los datos de prueba.
Todos los clculos efectuados por el programa.
Todos los campos del registro cuyo valor determine una
accin a seguir dentro de la lgica del programa.
Todos los campos que el programa actualice.
Los casos en que haya comparacin contra otro archivo.
Todas las condiciones especiales del programa.
Se cotejar la lgica del programa.
183
5.3 Documentacin
del programa.
La documentacin de programas es una extensin de la documentacin
del sistema. El programador convierte las especificaciones de
programas en lenguaje de computadora y debe trabajar conjuntamente
con las especificaciones de programas, y comprobar que el programa
cumpla con las mismas.
Cualquier cambio que surja como resultado de la programacin, deber
ser expuesto y aceptado antes de aplicar el cambio.
Nombre del programa (cdigo). Indicar cdigo que identifica
el programa y el ttulo del mismo
Descripcin. Indicar la funcin que realiza el programa.
Frecuencia de procesamiento. Diaria, semanal, quincenal,
mensual, etctera.
Fecha de vigencia. Fecha a partir de la cual se comienza a
ejecutar en produccin la versin modificada o desarrollada del
184
programa.
Archivos de entrada.
Lista de archivos de salida. Indicar el nombre y copia, y
descripcin de los archivos.
Lista de informes y/o totales de control. Se indicar el
nombre de los informes y se incluir ejemplo de los informes
y/o totales de control producidos por el programa, utilizando los
datos de prueba.
Datos de prueba. Se incluir una copia de los datos usados
para prueba.
Mensajes al operador. Pantallas de definicin de todos los
mensajes al operador por consola y las posibles
contestaciones, con una breve explicacin de cada una de
ellas.
Datos de control. Para ejecutar el programa (parmetros).
Transacciones.
Nombre del programador. Deber indicar el nombre del
programador que escribi el programa o que efectu el
cambio, segn sea el caso.
Fecha. Indicar la fecha en que se escribi el programa o
que se efectu el cambio, segn sea el caso.
Diccionario de datos. En caso que aplique, se incluir detalle
de las diferentes tablas y cdigos usados con los valores,
explicaciones y su uso en el programa.
Lista de programas. Deber incluir copia de la ltima
compilacin del programa con todas las opciones.
185
5.4 Mantenimiento de programas.
Objetivo
Identificar la importancia del mantenimiento de programas y las
caractersticas del preventivo, correctivo y adaptativo.
Desarrollo
Los usuarios de los programas solicitarn los cambios necesarios al
rea de sistemas, con el fin de que los programas sigan operando
correctamente. Para ello, peridicamente se le debe dar el
mantenimiento que requieren los programas, el cual puede ser de tres
tipos:
PREVENTIVO
Los programas no presentan error alguno, pero hay
necesidad de regenerar los ndices de los registros, realizar
respaldos, verificar la integridad de los programas, actualizar
porcentajes y tablas de datos, etctera.
186
CORRECTIVO
Los programas presentan algn error en algn reporte, por lo
que es necesario revisar la codificacin para depurarlo y
compilarlo. Se deben realizar las pruebas al sistema,
imprimiendo los reportes que generan y verificar si los clculos
que stos presentan son correctos.
ADAPTATIVO
Los programas no tienen error alguno, pero se requiere
alguna actualizacin por una nueva versin del programa, una
nueva plataforma de sistema operativo o un nuevo equipo de
cmputo con ciertas caractersticas, es decir, hay que adaptar
los programas a la nueva tecnologa tanto de software como
de hardware.
En cualquier caso, el usuario debe realizar la solicitud formal, llenando
por escrito el tipo de mantenimiento que requiere y remitindolo al rea
de sistema para su revisin y valoracin.
El personal del rea de sistemas har una orden de trabajo para
proceder a realizar el servicio solicitado.
187
RESUMEN
En esta unidad se revis la evaluacin de algoritmos como un proceso
de anlisis de desempeo del tiempo de ejecucin, para encontrar una
solucin y la cantidad de recursos empleados para ello. Se abord la
depuracin y prueba de programas con el fin de asegurar que estn
libres de errores y que cumplan eficazmente con el objetivo para el que
fueron elaborados.
Tambin se revis la documentacin de los programas para que, tanto
analistas como programadores conozcan la funcin y el fin para los que
fueron creados, y as tener un archivo con las especificaciones del
programa. Adems, se toc el tema del mantenimiento,
especficamente el preventivo, correctivo y adaptativo, ya que son
fundamentales para el buen funcionamiento y operacin de un
algoritmo.
188
GLOSARIO
Depuracin
Es el proceso de identificacin y correccin de errores de
programacin.
Documentacin de programas
El programa libre de errores se documenta, incluyendo los diagramas
utilizados, el listado de su cdigo fuente, el diccionario de datos en
donde se listarn las variables, constantes, arreglos, abreviaciones
utilizadas, etctera. El objetivo de la documentacin es familiarizar a
analistas y programadores con lo que hace cada programa en
particular.
189
ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1
Elaborar un cuadro comparativo de evaluacin de mtodos de
ordenacin, para determinar su eficiencia con base en la
complejidad de sus algoritmos.
ACTIVIDAD 2
Elabora un mini manual para documentar programas.
190
ACTIVIDAD 3
Investiga en una empresa el procedimiento para llevar a cabo el
mantenimiento de programas.
191
CUESTIONARIO DE
REFORZAMIENTO
Contesta las siguientes preguntas:
1. Qu significa la evaluacin de algoritmos?
2. En la forma en que se encuentran los datos de entrada a un
algoritmo qu significa el peor caso, el mejor caso y el caso
promedio?
3. Qu se entiende por depuracin de programas?
4. Cules son los errores de sintaxis y los errores lgicos?
5. Define la prueba de programas.
6. Enlista 5 elementos que se verifican en la prueba de programas.
7. Enlista 5 elementos que se deben incluir en la documentacin de
un programa.
8. Para qu sirve el mantenimiento de programas?
9. Qu entiendes por mantenimiento preventivo?
10. Qu es el mantenimiento correctivo?
192
EXAMEN DE AUTOEVALUACIN 1
Relaciona las columnas colocando el nmero en el espacio que le
corresponde
Es el proceso de identificacin y correccin
de errores de programacin
1 Sintaxis
2
Depuracin
3 Prueba
de
programas
4 Clculo
Tiene como propsito asegurar que el
programa produce los resultados definidos
en las especificaciones funcionales
Los errores ms sencillos de detectar son
los errores de
Los errores ms difciles de detectar son
los errores de
193
EXAMEN DE AUTOEVALUACIN 2
Relaciona las columnas colocando el nmero en el espacio que le
corresponde
Es una extensin de la documentacin del
sistema
1 Lista de
Programas
2 Documentacin
de programas
3 Especificacin
de programas
El programador debe trabajar conjuntamente
con ella
Incluye copia de la ultima compilacin del
programa con todas las opciones
194
EXAMEN DE AUTOEVALUACIN 3
Relaciona las columnas colocando el nmero en el espacio que le
corresponde
Los programas no tienen error alguno,
pero se requiere alguna actualizacin por
una nueva versin del programa, esto se
refiere al mantenimiento:
1
Preventivo
2
Adaptativo
3
Correctivo
La revisin, la codificacin para depurar y
compilar un programa se realiza en el
mantenimiento:
La regeneracin de ndices, de registros,
realizar respaldos, verificar la integridad
de los programas, actualizar porcentajes y
tablas de datos, son actividades del
mantenimiento:
195
EXAMEN DE AUTOEVALUACIN 4
Responde si son verdaderas (V) o falsas (F) las siguientes
aseveraciones.
Verdadera Falsa
1. El algoritmo de seleccin va intercambiando elementos del arreglo hasta
que este ordenado.
( ) ( )
2. El algoritmo de insercin va seleccionado los elementos menores al
actual y los intercambia.
( ) ( )
3. El propsito e la evaluacin de un algoritmo es medir su desempeo. ( ) ( )
4. En la evaluacin del algoritmo solamente debe considerarse el tiempo de
proceso.
( ) ( )
5. Para medir la complejidad de un algoritmo no es necesario utilizar
funciones matemticas.
( ) ( )
6. El termino debugging significa eliminacin de bichos. ( ) ( )
7. Un error lgico es cuando un programa tiene errores de sintaxis. ( ) ( )
8.- El compilador es un programa que facilita la deteccin y correccin de
errores.
( ) ( )
9.- Para realizar pruebas al programa se deben utilizar cualquier tipo de
datos, tanto correctos como incorrectos
( ) ( )
10.- En las pruebas al programa se deben verificar todos los clculos que el
programa realice.
( ) ( )
11.- El objetivo de la documentacin de programas es familiarizar al usuario
final con lo que hacen los programas.
( ) ( )
12.- El programador puede aplicar su criterio para cualquier cambio que se
presente en las especificaciones del programa
( ) ( )
13.- No es necesario incluir el diccionario de datos en la documentacin de
programas.
( ) ( )
196
MESOGRAFA
BIBLIOGRAFA BSICA
DE GIUSTI, A. Algoritmos, datos y programas con
aplicaciones en Pascal, Delphi y Visual Da Vinci, Buenos
Aires, Pearson Education, 2001, 472 pp.
MANZANO, G. Tutorial para la asignatura Anlisis, diseo e
implantacin de algoritmos, Fondo editorial FCA, Mxico,
2003.
LEE, R. TSENG, S. CHANG, R. y TSAI, Y. Introduccin al
diseo y anlisis de algoritmos un enfoque estratgico,
Mxico, McGraw Hill, 2007, 752 pp.
SEDGEWICK, R. Algoritmos en C++, Mxico, Pearson
Education, 1995.

BIBLIOGRAFA COMPLEMENTARIA
VAN Gelder, Baase, Algoritmos Computacionales, 3. ED.,
MXICO, THOMSON, 2003.
OSVALDO Cairo Battistutti Aniei, Fundamentos de
programacin piensa en C, 392 pag. (2006)
197
SITIOS ELECTRNICOS
http://www.uprb.edu/politicas/Manual-Programacion.pdf,
25/Marzo/2011, Universidad de Puerto Rico, Documento sobre
normas de documentacin y mantenimiento de programas.
http://informatica.uv.es/iiguia/TP/teoria/tema1.pdf,
25/Marzo/2011, Universidad de Valencia, Apunte sobre la
documentacin de programas.

198
UNIDAD 1
E1 E2 E3 E4
1.- F
2.- F
3. Alfabeto
1. Frase
4. Cadena
vaca
5. Lenguaje
2. Gramtica
1. F
2. F
3. F
4.V
5. F
1. d
2. d
3. a
4. b
5. b
UNIDAD 2
E1 E2 E3
1. V
2. F
3. V
4. F
5. F
2. Computabilidad
1. Problema de
decisin
4. Recursivo
3. Indecidible
5. Computables
2. Seleccin
5. Quicksort
3. Shell
1. Burbuja
4. Insercin
UNIDAD 4
E1 E2 E3 E4
3. Prueba de
escritorio
5. Diseo del
algoritmo
1.
Compilacin
4. Prueba del
programa
2.
Codificacin
3. Iteracin,
seleccin,
secuencia.
1.
Productividad
del
programador
4. Ser ledo en
secuencia.
2. Teorema de
la estructura
5. Secuencia
1- F
2. F
3. F
4. V
5. F
6. V
7. F
8. V
9. V
1. F
2. F
3. V
4. V
5. F
6. F
7. V
8. V
9. V
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226

También podría gustarte