Вы находитесь на странице: 1из 218

1

ANALISIS, DISEO E IMPLANTACIN DE ALGORITMOS

Plan:
Clave: 1164 Licenciatura: INFORMTICA rea: Informtica (Desarrollo de

2012
8 1 4

Crditos: Semestre:

Horas. Asesora:

sistemas) Requisitos: Ninguno Tipo de Obligatori a (x ) Horas. por semana: 4 Optativa ( )

asignatur a:

AUTOR (ES): GILBERTO MANZANO PEALOZA ADAPTADO A DISTANCIA: ACTUALIZACION AL PLAN DE ESTUDIOS 2012: GILBERTO MANZANO PEALOZA
2

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 profeso1. Un rasgo fundamental de la educacin abierta y a distancia es que no exige presencia diaria.

Sandra Rocha, Documento de Trabajo. Modalidad Abierta y a Distancia en el SUA-FCA, 2006.

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.

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.
4

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. 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 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.


6

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 cumpla correspondiente. su objeto, es Para que la no

autoevaluacin

importante

adelantarse a revisar las respuestas antes de realizar la autoevaluacin; y no reducir su resolucin a una mera 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

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).
8

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.

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.

Temario oficial
(Horas 64)

Horas 1. FUNDAMENTOS DE ALGORITMOS 2. ANLISIS DE ALGORITMOS 3. DISEO DE ALGORITMOS PARA LA SOLUCIN DE PROBLEMAS 4. IMPLANTACIN DE ALGORITMOS 5. EVALUACIN DE ALGORITMOS TOTAL 12 12 12

12 16 64 HORAS

10

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.

11

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.

12

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.

13

OBJETIVO GENERAL

Al finalizar el curso, el alumno ser capaz de implementar algoritmos en un lenguaje de programacin.

14

ESTRUCTURA CONCEPTUAL

15

UNIDAD 1

FUNDAMENTOS DE ALGORITMOS

16

OBJETIVO ESPECFICO

Al finalizar la unidad, el alumno podr identificar los componentes y las propiedades de los algoritmos.

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.

17

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

LO QUE S

De acuerdo con los conocimientos o idea de lo que es un algoritmo, plantea tu propia definicin.

Realiza la actividad en Word y gudala en tu computadora.

18

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.

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.

19

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, 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.
20

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 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.
21

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 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.

Vase mi Tutorial para la asignatura Anlisis, diseo e implantacin de algoritmos, 1 edicin, Fondo editorial

FCA, Mxico, 2003.

22

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. 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.

23

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). 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

24

Estado actual A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1

Entrada x 0 1 0 1 0 1 0 1

Estado siguiente A 0 0 1 0 1 0 1 1 B 0 1 1 1 0 0 0 1 y 0 1 0 1 0 0 0 0

Salida

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

25

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.

26

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.
27

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>.
28

<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.

29

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.

30

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.

31

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.
32

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.

33

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 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.

34

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.
35

Otro ejemplo: Disear una mquina de Turing que acepte el lenguaje L={a nbm| 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) (q1, b) (q1, c) (q1, d) (q2, a) (q2, b) (q2, ) (q2, d) (q3, a) (q3, b) (q3, c) (q5, a) (q5, b) (q5, c) = (q2, c, D) = (q2, c, D) = (q4, d, ALTO) = (q4, d, ALTO) = (q2, a, D) = (q2, b, D) = (q5, , I) = (q5, d, I) = (q3, a, I) = (q3, b, I) = (q1, c, D) = (q3, a, I) = (q3, d, I) = (q4, c, ALTO)
36

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) (q3, caabbd) (q2, ccabbd) (q3, ccabdd) (q5, cccbdd)

(q2, caabbb)

(q2, caabbb)

(q2, caabbb)

(q2, caabbb) (q3, caabbd) (q2, ccabbd) (q3, ccabdd) (q2, cccbdd)

(q2, caabbb ) (q5, caabbb ) (q3, caabbd) (q3, caabbd) (q2, ccabbd) (q3, ccabdd) (q3, cccddd) (q3, caabbd) (q2, ccabbd) (q1, ccabdd) (q1, cccddd) (q1, caabbd) (q5, ccabbd) (q2, cccbdd) (q4, cccddd) ALTO.

Con lo anterior queda ejemplificado el diseo de una MT, as como su desarrollo.

37

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.

38

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.

39

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.

40

ACTIVIDADES DE APRENDIZAJE
Realiza tus actividades en un procesador de textos, gurdalas en tu computadora y una vez concluidas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

ACTIVIDAD 1 Investiga acerca de la aplicacin de las caractersticas de un algoritmo y redctalo en una ficha. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

41

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

42

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 Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

43

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

44

CUESTIONARIO DE REFORZAMIENTO
Contesta el siguiente cuestionario. Realiza tu actividad en un documento en Word, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza tu archivo donde lo guardaste, seleccinalo y presiona Subir este archivo para guardarlo en la plataforma. 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?
45

EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes aseveraciones. Una vez que concluyas, obtendrs tu calificacin de manera automtica.

Verdadera 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 ( ) ( )

Falsa ( )

( )

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.

46

3. Conjunto de cadenas que obedecen a un alfabeto fijado.

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. Una vez que concluyas, obtendrs tu calificacin de manera automtica. Verdadera 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. ( ) ( ) ( ) ( ) ( ) Falsa ( )

47

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.

( )

( )

()

()

EXAMEN DE AUTOEVALUACIN 4
Elige la respuesta correcta para las siguientes preguntas, una vez que concluyas, obtendrs de manera automtica tu calificacin.

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:
48

a) maquina de turing b) el dibujante c) los msicos d) el telar automatico

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

49

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.

50

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.
51

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
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

52

UNIDAD 2

ANLISIS DE ALGORITMOS

53

OBJETIVO ESPECFICO
Al finalizar la unidad, el alumno podr analizar un problema determinado y buscar una solucin a partir de un algoritmo

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.

54

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 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.

55

LO QUE S
Investiga los elementos de un problema y relacinalos con los algoritmos, y anota tus conclusiones. Ms adelante retomars ste apartado. Pulsa el botn Iniciar o editar mi entrada de diario, escribe lo que ser el inicio de tu protocolo de investigacin. Si deseas borrar algo de lo que hasta el momento llevas escrito, pulsa el botn Revertir. Cuando decidas concluir tu trabajo del da, pulsa el botn Guardar cambios. Pulsa el botn Comenzar. Una vez que concluyas, pulsa el botn Enviar todo y terminar.

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

56

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:

57

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.

58

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.

59

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.

60

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. 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.

61

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.
62

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).

63

Primer principio Si el paso base y el paso inductivo asociados a una

Segundo principio Se basa en afirmaciones de la 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 .

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.

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.

64

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 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

65

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 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.

66

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.

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}

67

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 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.

68

La funcin h(k) debe: Ser rpida y fcil de calcular Minimizar colisiones las

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. 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.

69

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). 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.
70

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 1 Descripcin Asigna a n el tamao del vector (si el tamao del vector es igual a 10 elementos, entonces n vale 10). Colocarse en la primera posicin del vector. Si el nmero de posicin del vector es igual a n, entonces FIN. 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, entonces intercambiar los valores. 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: Valores Posicin 1 2 3 4 5 n=5 7 5 5 5 5 5 7 3 3 3 3 3 7 2 2 2 2 2 7 1 1 1 1 1 7 n=4 3 5 2 1 7 n=3 3 3 2 2 2 3 5 1 1 1 5 5 7 7 7 n=2 n=1 2 1 3 5 7 1 2 3 5 7

71

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

72

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 14, 03, 22, 09, 10, 14, 07, 25, 06 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 14, 22, 09, 10, 14, 07, 25, 06 Despus del sexto paso, se tiene la siguiente lista: Elementos restantes no ordenados 14, 22, 14, 25 Lista ordenada 02, 03, 06, 07, 09,10
73

Lista ordenada 02

Lista ordenada 02, 03

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.

74

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. 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. 1 3 3 3 2 2 9 4 4 3 3 4 9 7 4 4 7 7 9 7 5 2 2 2 9

75

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:
76

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.
77

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 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.
78

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.

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.

79

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.

80

ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1 Investiga 5 ejemplos de problemas no decidibles, comntalos con tus compaeros. Pulsa el botn Colocar un nuevo tema de discusin aqu. Escribe en el apartado Asunto el ttulo de tu aportacin, redacta tu comentario en el rea de texto y da clic en el botn Enviar al foro.

ACTIVIDAD 2 Investiga las diferencias que existen entre la solucin iterativa y la solucin recursiva, comntalas en el foro de la asignatura. Pulsa el botn Colocar un nuevo tema de discusin aqu. Escribe en el apartado Asunto el ttulo de su aportacin, redacta tu comentario en el rea de texto y da clic en el botn Enviar al foro.

81

ACTIVIDAD 3 Realiza un cuadro comparativo con las caractersticas de los mtodos de ordenacin: burbuja, insercin, seleccin, quick sort y shell. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

82

CUESTIONARIO DE REFORZAMIENTO
Contesta las siguientes preguntas: Realiza tu actividad en un documento en Word, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza tu archivo donde lo guardaste, seleccinalo y presiona Subir este archivo para guardarlo en la plataforma. 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.
83

LO QUE APREND
Retoma el apartado Lo que s y complementa la informacin con lo aprendido y lo investigado, no olvides citar tus referencias.

Realiza tu actividad en un procesador de textos, gurdala en tu computadora

84

EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes aseveraciones. Una vez que concluyas, obtendrs tu calificacin de manera automtica.

Verdadera 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. ( )

Falsa ( )

( )

( )

( )

( )

( )

()

( )

( )

85

EXAMEN DE AUOEVALUACIN 2
1. Es la propiedad que tienen ciertos problemas de poder resolverse a travs de un algoritmo. 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.

Problema

de

decisin 2 Computabilidad 3 Indecidible 4 Recursivo 5 Computables

5. Problemas que pueden resolverse con una MT.

86

EXAMEN DE AUTOEVALUACIN 3
Escribe sobre la lnea la opcin que mejor complete la sentencia.

1. Intercambia elementos que estn muy distantes.

2. Emplea la tcnica de divide y vencers para separar el problema en subproblemas mas pequeos 1 Burbuja 2 Seleccin 3 Shell 4 Insercin 5 Quicksort

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.

87

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.

88

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 DE INTERS
http://es.scribd.com/doc/27478655/ALGORITMOSCOTIDIANOS, 25/Marzo/2011; responsable de la pgina: Scribd; descripcin del sitio: Definicin y ejemplos de algoritmos cotidianos. http://www.mailxmail.com/curso-aprende-programar/metodosordenamiento-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.

89

UNIDAD 3

DISEO DE ALGORITMOS PARA LA SOLUCIN DE PROBLEMAS

90

OBJETIVO ESPECFICO
Al terminar la unidad, el alumno podr plantear, desarrollar y seleccionar un algoritmo determinado para solucionar un problema especfico.

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.
91

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: 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.

92

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.

LO QUE S

Investiga algunos de los distintos niveles de abstraccin para la construccin de algoritmos y comntalas con tu asesor.

93

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

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.

94

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 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


95

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. Existen dos tipos de ciclos: Mientras Hasta que

El primero se caracteriza por realizar la Evala la condicin despus de verificacin de la condicin antes de ejecutar las instrucciones una vez. ejecutar las instrucciones asociadas al ciclo.

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.

96

El ciclo MIENTRAS tiene el siguiente pseudocdigo:

mientras <condicion> hacer Instruccion1 Instruccion2 ... 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:

97

hacer Instruccion1 Instruccion2 ... 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.

98

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. 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:

99

Para <variable> = <valor inicial> hasta <valor tope> [paso <incremento>] hacer Instruccion1 Instruccion2 ... Instruccion n Fin para <variable>

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:

100

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 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:

101

<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 Instruccion n [si no Instruccion 3

102

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:

103

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>

104

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.

105

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.
106

Una vez ms, no nos importa si la solucin es ptima o no. Normalmente se 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
107

nuevos

candidatos

es

posible

alcanzar

una

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.

108

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. 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.

109

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. 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.
110

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 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.

111

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. 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.


112

RAMIFICACION

Se construyen los posibles nodos hijos del nodo seleccionado en la etapa anterior.

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.

113

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. 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.

114

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)

115

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-entoncessino, 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.

116

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

117

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.

118

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 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.
119

2.-Los programas muy grandes requieren diagramas laboriosos y complejos. 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.

120

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.

121

A continuacin se presenta un ejemplo de diagrama de flujo. Algoritmo: Imprimir los factoriales para los nmeros del 1 al 10.

INICIO

N=1

FACT=1

FACT=N*FACT

N, FACT

N =10

No
N=N+1

Si
FINAL Cabe mencionar, que puede haber varias soluciones y alguna ser la ms ptima.

122

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.

123

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.

124

ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1 Elabora un mapa conceptual del contenido del tema. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

125

ACTIVIDAD 1 Elabora un cuadro comparativo de las diferentes tcnicas de diseo de algoritmos. Envalo en un documento a tu asesor. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

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. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.
126

CUESTIONARIO DE REFORZAMIENTO

Contesta las siguientes preguntas: Realiza tu actividad en un documento en Word, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza tu archivo donde lo guardaste, seleccinalo y presiona Subir este archivo para guardarlo en la plataforma. 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?

127

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? 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? Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma

128

EXAMEN DE AUTOEVALUACIN 1
Responde si son verdaderas (V) o falsas (F) las siguientes aseveraciones. Una vez que concluyas, obtendrs tu calificacin de manera automtica.

Verdadera 1. Las condiciones son aquellas que hacen llamadas a s mismas en su definicin, ( )

Falsa ( )

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.
129

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

130

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

131

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

132

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.

133

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 ELECTRONICOS
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

134

UNIDAD 4

IMPLANTACIN DE ALGORITMOS

135

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.

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.
136

Asimismo, se analizan los dos enfoques de diseo de sistemas: el refinamiento progresivo y el procesamiento regresivo, comparando sus ventajas y limitaciones.

LO QUE S
Busca tres definiciones de programacin.
Escribe lo que ser el inicio de tu protocolo de investigacin

Elabora tu actividad en Word y gurdala en tu computadora.

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.

137

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

138

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.

139

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.

140

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.

141

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.

142

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.

143

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 z x+y; imprimir (z); x y; y z; 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.

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.

144

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:

Problem a Subproblema 1
MDULO

Subproblema 2

Procedimiento Devuelve una tarea especfica

Funciones Devuelve 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.
145

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:
146

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 continuar Salir

para

147

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)

148

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 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.
149

El mdulo 1 de empleados contendr un submen con las opciones de altas, bajas y los cambios a los registros de los empleados. 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.

150

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.

151

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.

152

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.

153

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.

154

ACTIVIDADES DE APRENDIZAJE
ACTIVIDAD 1 Realiza un diagrama de flujo de la manera en que un algoritmo se convierte en un programa de computadora Realiza tu actividad en un procesador de textos, guardala en tu computadora y una vez que concluyas, presiona el botn Examinar. Localiza el archivo ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

ACTIVIDAD 2 Investiga qu otras estructuras de control existen que se deriven de las bsicas explicadas en este apunte. Pulsa el botn Colocar un nuevo tema de discusin aqu. Escribe en el apartado Asunto el ttulo de tu aportacin, redacta tu comentario en el rea de texto y da clic en el botn Enviar al foro.

155

ACTIVIDAD 3 Desarrolla un diagrama top down y uno de bottom up para un sistema de inventarios. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma

ACTIVIDAD 4 Investiga en una empresa que tipo de enfoque para desarrollar sus sistemas de informacin. Sube al foro tus comentarios. Pulsa el botn Colocar un nuevo tema de discusin aqu. Escribe en el apartado Asunto el titulo de tu aportacin, redacta tu comentario en el rea de texto y da clic en el botn Enviar al foro.

156

CUESTIONARIO DE REFORZAMIENTO
Contesta las siguientes preguntas: Realiza tu actividad en un documento en Word, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza tu archivo donde lo guardaste, seleccinalo y presiona Subir este archivo para guardarlo en la plataforma. 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?

157

LO QUE APRENDI
Retoma el apartado Lo que s y complementa la definicin que le has dado a programacin, y anexa sus derivaciones. Pulsa el botn Iniciar o editar mi entrada de diario, escribe lo que ser el inicio de tu protocolo de investigacin. Si deseas borrar algo de lo que hasta el momento llevas escrito, pulsa el botn Revertir. Cuando decidas concluir tu trabajo del da, pulsa el botn Guardar cambios.

158

EXAMEN DE AUTOEVALUACIN 1
Relaciona las columnas colocando el nmero en el espacio que le corresponde Cargar datos muestra y seguir la lgica marcada 1 Compilacin por el diagrama o el pseudocdigo Se diagraman los pasos del problema 2 Codificacin 3 Prueba de

Verifica la sintaxis del cdigo fuente en busca de escritorio errores. 4 Prueba del

Se ingresan datos muestra para el anlisis de los programa resultados 5 Diseo del

Traduce cada grafico del diagrama o lnea del algoritmo pseudocdigo a una instruccin de algn lenguaje de programa

159

EXAMEN DE AUTOEVALUACIN 2
Relaciona las columnas colocando el nmero en el espacio que le corresponde: Estructuras de control bsicas Ventajas de la programacin estructurada Una caracterstica importante en un programa estructurado 3. Iteracin, La programacin estructurada est basada en Serie de instrucciones que se ejecutan seleccin, secuencia. 4. Ser ledo en secuencia. 5. Secuencia 1. Productividad del programador 2. Teorema de la estructura

sucesivamente

160

EXAMEN DE AUTOEVALUACIN 3
Responde si son verdaderas (V) o falsas (F) las siguientes aseveraciones. Una vez que concluyas, obtendrs tu calificacin de manera automtica. Verdadera 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. ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) Falsa ( ) ( ) ( )

161

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. Una vez que concluyas, obtendrs tu calificacin de manera automtica.

Verdadera 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. ( ) ( ) ( ) ( )

Falsa ( )

( )

( )

( )

162

5.- Un programa estructurado contiene instrucciones de desvi del flujo de control. 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.

( )

( )

( ) ( )

( ) ( )

( )

( )

( )

( )

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/modularidadprocedimientos-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.
163

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. 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)

164

UNIDAD 5

EVALUACIN DE ALGORITMOS

165

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.

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.

166

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.

LO QUE S
Elabora un cuadro sinptico con las principales caractersticas de un algoritmo, haciendo nfasis la evaluacin. Realiza tu actividad en un procesador de textos, gurdala en tu computadora.

167

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.

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.

168

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 (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 ] ;


169

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. 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.

170

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 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.
171

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).

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.

172

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.

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.

173

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 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.
174

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

175

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.

176

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.

177

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.

178

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.

179

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.

180

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. Realiza tu actividad en un procesador de textos, guardala en tu computadora y una vez que concluyas, presiona el botn Examinar. Localiza el archivo ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.

ACTIVIDAD 2 Elabora un mini manual para documentar programas. Realiza tu actividad en un procesador de textos, gurdala en tu computadora y una vez concluyas, presiona el botn Examinar. Localiza el archivo, ya seleccionado, presiona Subir este archivo para guardarlo en la plataforma.
181

ACTIVIDAD 3 Investiga en una empresa el procedimiento para llevar a cabo el mantenimiento de programas. Pulsa el botn Colocar un nuevo tema de discusin aqu. Escribe en el apartado Asunto el ttulo de tu aportacin, redacta tu comentario en el rea de texto y da clic en el botn Enviar al foro.

182

CUESTIONARIO DE REFORZAMIENTO
Contesta las siguientes preguntas: Realiza tu actividad en un documento en Word, gurdala en tu computadora y una vez concluida, presiona el botn Examinar. Localiza tu archivo donde lo guardaste, seleccinalo y presiona Subir este archivo para guardarlo en la plataforma. 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?

183

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 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 1 Sintaxis 2 Depuracin 3 Prueba de programas 4 Clculo

184

EXAMEN DE AUTOEVALUACIN 2
Relaciona las columnas colocando el nmero en el espacio que le corresponde Es una extensin de la documentacin del sistema El programador debe trabajar conjuntamente con ella Incluye copia de la ultima compilacin del programa con todas las opciones 1 Lista de Programas 2 Documentacin de programas 3 Especificacin de programas

185

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: 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: 1 Preventivo 2 Adaptativo 3 Correctivo

186

EXAMEN DE AUTOEVALUACIN 4
Responde si son verdaderas (V) o falsas (F) las siguientes aseveraciones. Una vez que concluyas, obtendrs tu calificacin de manera automtica.

Verdadera
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. ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )

Falsa
( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )

( )

( )

( )

( )

( )

( )

( )

( )

( )

( )

187

MESOGRAFA
SITIOS DE INTERS
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, Universidad programas. de Valencia, Apunte sobre la 25/Marzo/2011, documentacin de

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.

188

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)

189

UNIDAD 1 E1 1.- F 2.- F E2 3. Alfabeto 1. Frase 4. Cadena vaca 5. Lenguaje 2. Gramtica E3 1. F 2. F 3. F 4.V 5. F E4 1. d 2. d 3. a 4. b 5. b

UNIDAD 2 E1 1. V 2. F 3. V 4. F 5. F E2 2. Computabilidad 1. Problema de decisin 4. Recursivo 3. Indecidible 5. Computables E3 2. Seleccin 5. Quicksort 3. Shell 1. Burbuja 4. Insercin

UNIDAD 4 E1 3. Prueba de escritorio 5. Diseo del algoritmo 1. Compilacin E2 3. Iteracin, seleccin, secuencia. 1. Productividad del E3 1- F 2. F 3. F 4. V 5. F 6. V 7. F 8. V 9. V E4 1. F 2. F 3. V 4. V 5. F 6. F 7. V 8. V 9. V

4. Prueba del programador programa 2. Codificacin 4. Ser ledo en secuencia. 2. Teorema de la estructura 5. Secuencia

190

ANEXO

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

Вам также может понравиться