Primer Semestre
COLABORADORES
DIRECTOR DE LA FCA
Dr. Juan Alberto Adam Siade
SECRETARIO GENERAL
L.C. y E.F. Leonel Sebastin Chavarra
COORDINACIN GENERAL
Mtra. Gabriela Montero Montiel
Jefe de la Divisin SUAyED-FCA-UNAM
COORDINACIN ACADMICA
Mtro. Francisco Hernndez Mendoza
FCA-UNAM
COAUTORES
L.C. Gilberto Manzano Pealoza
Mtro. Luis Fernando Ziga Lpez
ACTUALIZACIN
Mtro. Ren Montesano Brand
DISEO INSTRUCCIONAL
Lic. Chantal Ramrez Prez
Mayra Lilia Velasco Chacn
CORRECCIN DE ESTILO
L.F. Francisco Vladimir Aceves Gaytn
DISEO DE PORTADAS
L.CG. Ricardo Alberto Bez Caballero
Mtra. Marlene Olga Ramrez Chavero
L.DP. Ethel Alejandra Butrn Gutirrez
Primer Semestre
DISEO EDITORIAL
Mtra. Marlene Olga Ramrez Chavero
2 de 120
OBJETIVO GENERAL
Al finalizar el curso, el alumno ser capaz de implementar algoritmos en un lenguaje
de programacin.
TEMARIO OFICIAL
(64 horas)
Horas
1. Fundamentos de algoritmos
12
2. Anlisis de algoritmos
12
12
4. Implantacin de algoritmos
12
5. evaluaci de algoritmos
16
TOTAL
64
3 de 120
Primer Semestre
INTRODUCCIN GENERAL
Los algoritmos son una secuencia lgica y detallada de pasos para solucionar un
problema. Su campo es amplio y dinmico e intervienen directamente en la vida de las
organizaciones resolviendo problemas mediante programas de computadora en las
distintas reas de la empresa. As, dada su importancia, son objeto de estudio de la
asignatura Anlisis, Diseo e Implantacin de Algoritmos, desarrollada en cinco
unidades.
5 de 120
Primer Semestre
ESTRUCTURA CONCEPTUAL
Definicin de
Algoritmo
Autmatas y
lenguajes formales
Mquina de Turing
1. Fundamentos
de algoritmos
2. Anlisis de
algoritmos
Anlisis, diseo e
implementacin
de algoritmos
5. Evaluacin
de algoritmos
Refinamiento progresivo
Depuracin de prueba
Documentacin del
programa
Mantenimiento de
programas
3. Diseo de
algoritmos para la
solucin de
problemas
4. Implantacin
de algoritmos
Niveles de abstraccin
para la construccin de
algoritmos
Tcnicas de diseo de
algoritmos
6 de 120
Primer Semestre
UNIDAD 1
Fundamentos de algoritmos
7 de 120
Primer Semestre
OBJETIVO PARTICULAR
Al finalizar la unidad, el alumno podr identificar los componentes y propiedades de los
algoritmos.
TEMARIO DETALLADO
(12horas)
1. Fundamentos de algoritmos
1.1. Definicin de algoritmo
1.2. Propiedades de los algoritmos
1.3 Autmatas y lenguajes formales
1.4 Maquina de Turing
8 de 120
Primer Semestre
INTRODUCCIN
Hoy da, el algoritmo (de Al-Khowarizmi, sobrenombre del clebre matemtico
Mohamed Ben Musa) es una forma ordenada de describir los pasos para resolver
problemas. Es una manera abstracta de reducir un problema a un conjunto de pasos
que le den solucin. Hay algoritmos muy sencillos y de gran creatividad, aunque
tambin algunos 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 ellos. En este orden, ser de gran utilidad involucrarse en
su funcionamiento y terminologa para entender que, en ese contexto de autmatas, los
conceptos alfabeto, frase, cadena vaca, lenguaje, gramtica, etctera, cobran
particular relevancia.
9 de 120
Primer Semestre
10 de 120
Primer Semestre
Tomar 4 limones.
1.2. Propiedades
de los algoritmos
Para que un algoritmo realmente lo sea, cumplir con las caractersticas o propiedades
que se describen a continuacin.
FINITO
Dentro de la secuencia de pasos para realizar la tarea, debe tener una situacin
o condicin que lo detenga; 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 ordenara preparar un pastel; suponemos que
saben cmo hacerlo, y siguiendo las indicaciones de la receta, llegan a un paso
en el que se indica que se agregue azcar al gusto. Entonces, cada persona
incorporara azcar de acuerdo con sus preferencias y el resultado no sera el
mismo: los dos pasteles seran diferentes en sus caractersticas.
Concluimos que este ejemplo no es un algoritmo, puesto que existe una
ambigedad en el paso descrito.
OBTENER EL MISMO RESULTADO
En cualquier circunstancia, si se atienden en forma estricta los pasos del
algoritmo, siempre se debe llegar a un mismo resultado. Ejemplos: obtener el
mximo comn divisor de dos nmeros enteros positivos, armar un modelo a
escala, resolver una ecuacin, etctera.
Si carecen de cualquiera de estas caractersticas o propiedades, los pasos en cuestin
no son algoritmo.
12 de 120
Primer Semestre
1.3. Autmatas y
lenguajes formales1
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.
Vase G. Manzano, Tutorial para la asignatura Anlisis, diseo e implantacin de algoritmos, Mxico:
Fondo Editorial FCA, 2003.
13 de 120
Primer Semestre
Los inventores ms clebres son Pierre Jacquet Droz, autor del Dibujante y los
Msicos; y Jacques Vaucanson, hacedor del 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 la mquina de Turing, elaborado por
el matemtico ingls Alan Mathison Turing.
14 de 120
Primer Semestre
Este comportamiento es homogneo para todos los estados del autmata. Vale la pena
resaltar que el autmata que se representa 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 y descripcin de las salidas.
A continuacin se muestra la tabla correspondiente al diagrama que se present en la
figura anterior.
Estado actual
Entrada
Estado siguiente
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, se deduce 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
15 de 120
Primer Semestre
ALFABETO
Un alfabeto es el conjunto de todos los smbolos vlidos o posibles para una aplicacin.
En el campo de los autmatas, 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
empleado en el ejemplo del punto anterior, donde slo se aplican 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), cuya propiedad es tener sentido, significado y lgica.
Las frases parten del establecimiento de un vocabulario que dispone las palabras
vlidas del lenguaje sobre la base del alfabeto definido. Una frase vlida es aquella que
cumple con las reglas de la gramtica establecida.
CADENA VACA
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 sin
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
Un lenguaje es un conjunto de cadenas que obedecen a un alfabeto fijado. Y, entendido
como un conjunto de entradas, puede o no ser resuelto por un algoritmo.
GRAMTICAS 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.
16 de 120
Primer Semestre
Una forma de representar las gramticas es la Bakus-Naur (BNF), usada para describir
la sintaxis de un lenguaje dado, as como su notacin.
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
representa como:
<regla> = sentencias y frases. *
Las partes de la forma general BNF se definen como sigue:
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.
17 de 120
Primer Semestre
18 de 120
Primer Semestre
JERARQUIZACIN DE GRAMTICAS
Las gramticas pueden ser diversas, de acuerdo con las caractersticas que rigen la
formulacin de reglas de produccin vlidas, todas los cuales parten de gramticas arbitrarias,
o sea, las que consideran la existencia infinita de cadenas formadas por los smbolos del
lenguaje.
19 de 120
Primer Semestre
GRAMTICAS REGULARES
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.
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
es reconocido como una entrada vlida en una mquina de Turing.
Asociados a esta modalidad de lenguaje existen, de la misma manera, problemas
indecidibles: aquellos que no pueden ser resueltos, con todas sus variantes, por un
algoritmo.
En contraposicin con el lenguaje indecidible y los problemas vinculados a este tipo
de lenguajes, existen los problemas decidibles, relacionados con lenguajes del mismo
tipo y que tienen las caractersticas opuestas.
Esta clase de lenguajes se conocen tambin como recursivos o totalmente decidibles.
20 de 120
Primer Semestre
21 de 120
Primer Semestre
Hay
problemas
que
pueden
Proceso computable
decidible;
no computables o indecidibles. De
implementarse
como
el
computables
los
Proceso no computable
no
computables.
lenguaje
lo tenemos en la enumeracin de
indecidible
imposible
de
ser
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)
(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)
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 mquina de Turing se comienza con la cabeza de lectura-escritura sobre el 0,
tenemos la secuencia:
(q1, 0b) (q1, 1b) (q1, 10b) (q1, 11b) (q1, 110b)
NOTA: el carcter subrayado indica que la cabeza lectora/grabadora de la mquina de Turing
est posicionada sobre ese carcter.
Ejemplo 2
Disear una mquina de Turing que acepte el lenguaje L= {anbm| 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 primero sera transformada en caabbd; despus,
en ccabdd; y por ltimo, en cccddd.
Solucin:
(q2, c, D)
(q1, b)
(q2, c, D)
23 de 120
Primer Semestre
(q1, c)
(q4, d, ALTO)
(q1, d)
(q4, d, ALTO)
(q2, a)
(q2, a, D)
(q2, b)
(q2, b, D)
(q2, )
(q5, , I)
(q2, d)
(q5, d, I)
(q3, a)
(q3, a, I)
(q3, b)
(q3, b, I)
(q3, c)
(q1, c, D)
(q5, a)
(q3, a, I)
(q5, b)
(q3, d, I)
(q5, c)
(q4, c, ALTO)
(q1, aaabbb)
(q2, caabbb)
(q2, caabbb)
(q2, caabbb)
(q2, caabbb)
(q2, caabbb)
(q3, caabbd)
(q3, caabbd)
(q3, caabbd)
(q3, caabbd)
(q1, caabbd)
(q2, ccabbd)
(q2, ccabbd)
(q2, ccabbd)
(q2, ccabbd)
(q5, ccabbd)
(q3, ccabdd)
(q3, ccabdd)
(q3, ccabdd)
(q1, ccabdd)
(q2, cccbdd)
(q2, cccbdd)
(q5, cccbdd)
(q3, cccddd)
(q1, cccddd)
(q4, cccddd)
ALTO.
24 de 120
Primer Semestre
RESUMEN DE LA UNIDAD
Se presentaron conceptos y principios bsicos de los algoritmos, sus caractersticas y
terminologa, para aplicarlos en la resolucin de problemas (razn de ser de los
algoritmos). Con el apoyo de ejemplos, se gener una mejor comprensin de los
puntos tratados, ya que los algoritmos pueden ser muy sencillos o muy complejos.
Adems, se abord el tema de los autmatas, una aplicacin de los algoritmos. Los
autmatas, basados en una condicin de una situacin dada, llevarn a cabo acciones
que ya se encuentran programadas. En particular, se defini y estudi la mquina de
Turing, un ejemplo de los autmatas finitos deterministas que realizan slo una
actividad en una situacin dada.
25 de 120
Primer Semestre
BIBLIOGRAFA DE LA UNIDAD
SUGERIDA
Autor
Captulo
Pginas
Du y Ker-I Ko (2012)
7. Linear Programming
245-295
UNIDAD 2
26 de 120
Primer Semestre
Anlisis de algoritmos
OBJETIVO PARTICULAR
27 de 120
Primer Semestre
TEMARIO DETALLADO
(12 HORAS)
2. 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
INTRODUCCIN
En este tema, se realiza una descripcin de la etapa de anlisis para recabar la
informacin necesaria que indique una accin para la solucin de un problema, y se
28 de 120
Primer Semestre
29 de 120
Primer Semestre
30 de 120
Primer Semestre
El tiempo de ejecucin depende del tipo de datos de entrada, clasificados en tres casos
que se presentan a continuacin.
Caso ptimo
Datos de entrada con las mejores condiciones. 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 est ordenado
y el 50% restante no.
Peor caso
Datos de entrada ms desfavorable. Ejemplo: que los datos se encuentren completamente
desordenados.
Algunos algoritmos son muy sensibles a los datos de entrada, modificando cada
vez su rendimiento y causando que entre ellos no sean comparables en
absoluto.
2.2. Computabilidad
Una de las funciones principales de la computacin ha sido la solucin de problemas a
travs del uso de la tecnologa. Pero esto no ha logrado realizarse en la totalidad de los
casos debido a la computabilidad, caracterstica que tienen ciertos problemas de poder
resolverse a travs de un algoritmo, por ejemplo, una mquina de Turing.
Con base en esta propiedad, los problemas se dividen en tres categoras: irresolubles,
solucionables y computables (estos ltimos son un subconjunto de los segundos).
32 de 120
Primer Semestre
de
interpretaciones
sobre
una
misma
expresin.
Nos enfocaremos en la representacin de fenmenos
del segundo caso.
Modelo
La representacin de los fenmenos se hace a travs de modelos: abstracciones que
destacan las caractersticas ms sobresalientes de ellos, o bien las que sirvan al
objetivo para el cual se realiza el modelo.
Los problemas computables se representan a travs de lenguaje matemtico o con la
definicin de algoritmos. Es importante mencionar que todo problema calificado como
computable debe poder resolverse con una mquina de Turing.
33 de 120
Primer Semestre
Problema de decisin
Un problema de decisin es aquel cuya respuesta puede mapearse al conjunto de
valores {0,1}, esto es, que tiene slo dos posibles soluciones: s o no. Su
representacin se realiza a travs de una funcin cuyo dominio sea el conjunto citado.
Se dice que un problema es decidible cuando se resuelve 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.
Al contrario, un problema no decidible es aquel que no puede solucionarse por un
algoritmo en todos sus casos, ni su lenguaje asociado puede ser reconocido por una
mquina de Turing.
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.
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 matemtica. A travs de ella, se define 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 desde
un caso base.
35 de 120
Primer Semestre
El mecanismo que la induccin define parte del establecimiento de reglas que hacen
factible generar nuevos elementos, tomando como punto de partida una semilla (caso
base).
Primer principio
Segundo principio
inductivas,
su
sucesor
INDUCTIVA
36 de 120
Primer Semestre
Establece la manera como 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 llega a 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 vlida.
El primer valor para el cual debe ser vlida la funcin es para cuando n = 1.
37 de 120
Primer Semestre
La funcin P(n) cumple para el valor n = 1. Ahora debemos suponer que la funcin P(n)
cuando n = k (donde k representa cualquier nmero natural) tambin cumple; por tanto,
decimos que es verdadera. De esta forma, suponemos que realizamos un proceso
continuo de evaluacin a partir del 1 hasta k realizando incrementos de 1 en 1, con lo
que obtenemos:
P(1) : 1 1
P(2) : 1 3 2 2 4
P(3) : 1 3 5 3 2 9
38 de 120
Primer Semestre
k 2 2k 1 1 k 2 2k 2 1 k 2 2k 1
como k 1 k 2 2k 1
2
39 de 120
Primer Semestre
BINARIA O DICOTMICA
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. Cuando el elemento es menor, se busca en el primer subarreglo; y si es
mayor, 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
subarreglo:
{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
subarreglo:
{41, 52}
40 de 120
Primer Semestre
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 aplican sobre arreglos que almacenan grandes cantidades de
informacin; sin embargo, como utilizan posiciones pseudoaleatorias, el acceso a su
contenido es bastante lento.
Funcin hash
La funcin hash realiza la transformacin de claves (enteros o cadenas de caracteres)
a nmeros conocidos como hash, que contengan enteros en un rango [0..Q-1], donde
Q es el nmero de registros que podemos manejar en memoria, los cuales se
almacenan en la tabla hash.
La funcin h(k) debe
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.
41 de 120
Primer Semestre
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;
k, el valor a transformar; Frac, el
valor de la fraccin del producto a
tomar y 0 <= C <= 1.
Hashing por divisin
En este caso, la funcin se calcula simplemente como h(k) = modulo (k,Q), usando el 0
como el primer ndice de la tabla hash de tamao Q. Es importante elegir el valor de Q
con cuidado. Por ejemplo, si Q fuera par, todas las claves pares seran aplicadas a
localizaciones pares, lo que constituira un sesgo muy fuerte. Una regla simple para
seleccionar 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 si se requiere hacer
una cantidad considerable de bsquedas; es importante el factor tiempo.
Los mtodos de ordenacin ms conocidos son burbuja, seleccin, insercin y rpido
ordenamiento (quick sort), que se analizan a continuacin.
Burbuja
Es el mtodo ms sencillo, pero menos eficiente. Se basa en la comparacin de
elementos adyacentes e intercambio de los mismos si stos no guardan el orden
deseado; se van comparando de dos en dos los elementos del vector. El elemento
42 de 120
Primer Semestre
menor sube por el vector como las burbujas en el agua, y los elementos mayores van
descendiendo por el vector.
Pasos a seguir para ordenar un vector con este mtodo:
Paso
1
Descripcin
Asigna a n el tamao del vector. Si el tamao del vector
es igual a 10 elementos, entonces n vale 10.
43 de 120
Primer Semestre
Vemoslo con un ejemplo. Si el vector est formado por cinco enteros positivos,
entonces n es igual a 5. Se procede como sigue
Valores
Posicin
n=5
n=4
n=3
n=2
n=1
NOTA: las celdas de color gris claro representan la posicin actual; y las ms oscuras,
la posicin siguiente, segn 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 sea
posible elegir 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:
44 de 120
Primer Semestre
Lista
no ordenados
ordenada
02
Lista
ordenados
ordenada
02, 03
06
Despus del sexto paso, se tiene la siguiente lista:
Elementos restantes no
Lista ordenada
ordenados
14, 22, 14, 25
Insercin
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.
Por ejemplo, supngase que se desea ordenar los siguientes nmeros del vector: 9, 3,
4, 7 y 2.
PRIMERA COMPARACIN
Si (valor posicin 1 > valor posicin 2): 9 > 3? Verdadero, intercambiar.
Quedando como 3, 9, 4, 7 y 2
SEGUNDA COMPARACIN
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 COMPARACIN
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.
46 de 120
Primer Semestre
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
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: 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, el arreglo a ordenar, y N, el nmero de elementos
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.
Una vez que se termin de comparar "a" con todos los elementos, "a" ya se encuentra
en su lugar. A su izquierda, 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:
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 aplica el mismo
procedimiento. Se toma el subarreglo derecho (los mayores de "a") y se efecta
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 ascendente.
Shell
A diferencia del algoritmo de ordenacin por insercin, este algoritmo intercambia
elementos distantes. La velocidad del algoritmo depender de una secuencia de
48 de 120
Primer Semestre
valores (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.
49 de 120
Primer Semestre
RESUMEN DE LA UNIDAD
Es fundamental recabar la informacin necesaria para indicar una accin que solucione
un problema en forma adecuada, puesto que permite calcular el rendimiento del
algoritmo a travs de la cantidad de datos a procesar y el tiempo que tarde su
procesamiento.
50 de 120
Primer Semestre
BIBLIOGRAFA DE LA UNIDAD
SUGERIDA
Autor
Captulo
Pginas
Parameter Analysis od
287-308
Evolutionary Algotithms
51 de 120
Primer Semestre
UNIDAD 3
Diseo de algoritmos para la solucin
de problemas
52 de 120
Primer Semestre
OBJETIVO PARTICULAR
Al terminar la unidad, el alumno podr plantear, desarrollar y seleccionar un algoritmo
determinado para solucionar un problema especfico.
TEMARIO DETALLADO
(12 horas)
3. Diseo de algoritmos para la solucin de problemas
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
53 de 120
Primer Semestre
INTRODUCCIN
En esta unidad, se describe un mtodo por medio del cual es posible 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 de ste, el diseo de una solucin basada
en modelos y, por ltimo, la implementacin del algoritmo a travs de la escritura del
cdigo fuente, con la sintaxis de algn lenguaje de programacin.
Todo algoritmo tiene estructuras bsicas presentes en el modelado de soluciones. En
este material de estudio se abordan las siguientes: ciclos, contadores, acumuladores,
condicionales y rutinas recursivas.
Tambin se analizan las diferentes tcnicas de diseo de algoritmos para construir
soluciones que satisfagan los requerimientos de los problemas, entre las que destacan
las siguientes.
ALGORITMOS VORACES
Son utilizados para la solucin de problemas de optimizacin; fciles de disear y
eficientes al encontrar una solucin rpida al problema.
54 de 120
Primer Semestre
DIVIDE Y VENCERS
Fragmentan el problema en forma recursiva y solucionan cada subproblema; y la
suma de estas soluciones es la solucin del problema general
PROGRAMACIN DINMICA
Define subproblemas superpuestos y subestructuras ptimas; busca soluciones
ptimas del problema en su conjunto.
VUELTA ATRS (BACKTRACKING)
Encuentra soluciones a problemas que satisfacen restricciones. Va creando todas
las posibles combinaciones de elementos para obtener una solucin.
RAMIFICACIN Y PODA
Halla soluciones parciales en un rbol en expansin de nodos, utiliza diversas
estrategias (LIFO, FIFO y LC) para encontrar las soluciones y contiene una
funcin de costo que evala si las soluciones identificadas mejoran la solucin
actual; en caso contrario, poda el rbol para 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.
55 de 120
Primer Semestre
ANLISIS
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 sus procesos o funciones, 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
permita
identificar
sus
caractersticas ms relevantes.
DISEO
Una vez que se han analizado las causas del problema e 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.
IMPLEMETACIN
Por ltimo, ya que se tiene modelada la solucin, sta debe implementarse usando el
lenguaje de programacin ms adecuado.
56 de 120
Primer Semestre
Hasta que
condicin
antes
de
ejecutar
la
condicin
despus
de
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.
57 de 120
Primer Semestre
58 de 120
Primer Semestre
Suma=suma+n
n=n+1
fin mientras
Por otro lado, el pseudocdigo asociado a la instruccin hasta que, se define como
sigue:
hacer
Instruccion1
Instruccion2
...
Instruccin n
Hasta que <condicin>
Su diagrama se puede representar como:
59 de 120
Primer Semestre
hacer
Suma=suma+n
n=n+1
Se ha podido 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:
61 de 120
Primer Semestre
para n=0 hasta n=5 , [n+1] hacer (indicamos que comenzaremos en n=0 y
repetiremos hasta que n alcance el valor de 5, con un incremento del valor de n
en 1)
Suma=suma+n
fin para n
Acumuladores
Los acumuladores son variables que tienen como propsito almacenar valores
incrementales o decrementales a lo largo de la ejecucin del algoritmo; y utilizan 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:
<variable> = <variable> +
<incremento>
Condicionales
62 de 120
Primer Semestre
si <condicin> entonces
Instruccion1
Instruccin n
[si no
Instruccin 3
Instruccin n]
Fin si
imprime suma
Suma=suma+n
n=n+1
fin si
64 de 120
Primer Semestre
Es importante no confundir una rutina recursiva con una cclica, por ello se muestra a
continuacin el pseudocdigo genrico de una rutina recursiva:
<valor_retorno>
Nombre_Funcion (<parmetro
a> [,<parmetro b> ...])
si <caso_base> entonces
retorna <valor_retorno>
si no
Nombre_Funcion ( <parmetro
a -1> [, <parmetro b -1> ...] )
Fin si
65 de 120
Primer Semestre
Eficientes. Dan una solucin rpida al problema (aunque sta no sea siempre
la mejor).
Existe una funcin que comprueba si un cierto conjunto de candidatos constituye una
solucin del problema, ignorando si por el momento es ptima o no.
66 de 120
Primer Semestre
67 de 120
Primer Semestre
Una funcin objetivo que da el valor/costo de una solucin (tiempo total del
proceso, longitud del camino, etctera) y es la que se pretende maximizar o
minimizar.
Divide y vencers
Otra tcnica comn en el diseo de algoritmos es divide y vencers, que consta de dos
partes:
Primer Semestre
Las rutinas en las cuales el texto contiene al menos dos llamadas recursivas se
denominan algoritmos de divide y vencers; no as aquellas cuyo texto slo comprende
una.
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 combinar la solucin de los subproblemas para dar una solucin al
problema original.
La recursin finaliza cuando el problema es pequeo y la solucin fcil de construir
directamente.
Programacin dinmica
Inventada por el matemtico Richard Bellman en 1953, es un mtodo para reducir el
tiempo de ejecucin de un algoritmo mediante la utilizacin de subproblemas
superpuestos y subestructuras ptimas. 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
pasos:
1. Dividir el problema en subproblemas ms pequeos.
2. Resolver estos problemas de la mejor manera usando este proceso de tres
pasos recursivamente.
3. Aplicar estas soluciones ptimas para construir una solucin ptima al problema
original.
69 de 120
Primer Semestre
trmino
backtrack
fue
acuado
por
el
problemas
que
satisfacen
restricciones.
Los
problemas
que
deben
satisfacer
un
70 de 120
Primer Semestre
71 de 120
Primer Semestre
Ramificacin y poda
Esta tcnica de diseo de algoritmos es
similar a la de vuelta atrs y se emplea
regularmente para solucionar problemas de
optimizacin.
La tcnica genera un rbol de expansin de
nodos con soluciones, siguiendo distintas
estrategias: recorrido de anchura (estrategia
LIFO [last input first output] o ltima entrada
primera salida), en profundidad (estrategia
FIFO [first input first output] o primera
entrada primera salida), o empleando 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 ste. Si la cota muestra que cualquiera de estas soluciones no es
mejor que la 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 al que tiene 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 pronto la solucin ms econmica que la mejor encontrada
hasta el momento.
72 de 120
Primer Semestre
Para cada nodo del rbol dispondremos de una funcin de costo que calcule el valor
ptimo de la solucin si se contina por ese camino. No se puede realizar poda alguna
hasta haber hallado alguna solucin.
73 de 120
Primer Semestre
74 de 120
Primer Semestre
Si es necesaria una bifurcacin (cambio de flujo a otro punto del algoritmo), se emplean
etiquetas como:
suma 2 y 5
ir a final
(instrucciones)
(instrucciones)
final (etiqueta)
Para conservar la sencillez, se debe usar un lenguaje llano y natural. Despus que se
codifique, cada frase ser una lnea de comando del programa.
75 de 120
Primer Semestre
Las rdenes ms empleadas son hacer-mientras, hacer-hasta, si-entonces-sino, repitemientras. Por ejemplo:
Inicio
Accion1
Accion2
...
Fin
76 de 120
Primer Semestre
Inicio
Leer
Nombre,Hrs,Precio
Calcular
Salario = Hrs * Precio
Calcular
Imp = Salario* 0.16
Calcular
Neto = Salario + Imp
Escribir
Nombre, Imp, SNeto
Fin
77 de 120
Primer Semestre
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.
4. Se deben inicializar todas las variables al principio del diagrama. Esto es muy
recomendable, pues ayuda a recordar todas las variables, constantes y arreglos
que van a ser utilizados en la ejecucin del programa. Adems, nunca sabemos
cundo otra persona modificar el diagrama y necesitar saber de estos datos.
78 de 120
Primer Semestre
6. Todos los grficos estarn conectados con flechas de flujo. Jams debe dejarse
un grfico sin que tenga alguna salida, a excepcin del que marque el final del
diagrama.
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 demanda varias pruebas en borrador.
2. Los programas muy grandes requieren diagramas laboriosos y complejos.
3. Falta de normatividad en su elaboracin, lo que complica su desarrollo.
SMBOLO
DESCRIPCIN
Terminal. Indica el inicio y el final del
diagrama de flujo.
Entrada/Salida. Marca la entrada y salida
de datos.
Proceso. Seala la asignacin de un valor
en la memoria y/o la ejecucin de una
operacin aritmtica.
Decisin. Simboliza la realizacin de una
comparacin de valores.
de
pgina.
Indica
la
de
hoja.
Representa
la
Indica
la
salida
de
80 de 120
Primer Semestre
INICIO
N=1
FACT=1
FACT=N*FACT
N, FACT
No
N =10
N=N+1
Si
FINAL
Puede haber varias soluciones, pero una ser la ptima.
81 de 120
Primer Semestre
RESUMEN
En esta unidad, se analiz un mtodo por medio del cual se pueden construir
algoritmos. Se revisaron 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 y aterrizando en la implementacin del
algoritmo a travs de la escritura del cdigo fuente en un lenguaje de programacin.
82 de 120
Primer Semestre
BIBLIOGRAFA DE LA UNIDAD
SUGERIDA
Autor
Duy Ker-I Ko (2012)
Captulo
2. Greedy Strategy
Pginas
35-80
83 de 120
Primer Semestre
UNIDAD 4
Implantacin de algoritmos
84 de 120
Primer Semestre
OBJETIVO PARTICULAR
Al finalizar la unidad, el alumno podr llevar a cabo la realizacin de un programa a
partir de un algoritmo para un problema determinado.
85 de 120
Primer Semestre
TEMARIO DETALLADO
(12 HORAS)
4.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
INTRODUCCIN
En esta unidad, se aborda el mtodo para transformar un algoritmo a su expresin
computable: el programa. ste 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
86 de 120
Primer Semestre
87 de 120
Primer Semestre
DISEO DE ALGORITMO
Se diagraman los pasos del problema. Tambin se puede utilizar el pseudocdigo como la
descripcin abstracta del problema.
88 de 120
Primer Semestre
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.
CODIFICACIN
Traducir cada grfico del diagrama o lnea del pseudocdigo a una instruccin de algn lenguaje
de programacin. El cdigo fuente se guarda en archivo electrnico.
COMPILACIN
El compilador verifica la sintaxis del cdigo fuente en busca de errores, es decir, si se ha escrito
mal algn comando o regla de puntuacin del lenguaje. Se depura y 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.
Una vez que se produce el archivo ejecutable, el programa se hace independiente del
lenguaje de programacin que se emple para generarlo, por lo que permite su
portabilidad a otro sistema de cmputo. En resumen, el programa es la expresin
computable del algoritmo ya implementado, y puede utilizarse repetidamente en el rea
en donde se produjo el problema.
89 de 120
Primer Semestre
ITERACIN
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.
90 de 120
Primer Semestre
caracterstica
importante
en
un
programa
91 de 120
Primer Semestre
Estos beneficios derivan en parte del hecho que, aunque el programa tenga una
extensin significativa, en documentacin tiende siempre a estar al da.
El siguiente programa que imprime una secuencia de la serie de Fibonacci2 de la forma
1, 1, 2, 3, 5, 8, 13, 21, 34, 55 y 89, es un ejemplo de programacin estructurada.
PSEUDOCDIGO
PROGRAMA FUENTE EN
LENGUAJE C.
Inicio
entero x,y,z;
x=1;
y=1
imprimir (x,y);
mientras (x+y<100) hacer
zx+y;
imprimir (z);
xy;
yz;
fin mientras
fin.
#include <stdio.h>
#include <conio.h>
void main(void)
{
int x,y,z;
x=1;
y=1;
printf(%i,%i,x,y);
while (x+y<100) {
z=x+y;
printf(%i,z);
x=y;
y=z;
}
getch();
}
En la serie de Fibonacci, el tercer nmero es el resultado de la suma de los dos nmeros anteriores a
ste.
92 de 120
Primer Semestre
4.3. Modularidad
Un problema se puede dividir en subproblemas ms sencillos o mdulos. Dentro de los
programas, se les conoce como subprogramas y presentan dos tipos: procedimientos y
funciones. Ambos reciben datos del programa que los invoca, donde los primeros
devuelven una tarea especfica y las funciones un resultado:
Problema
Subproblema 1
Subproblema 2
Procedimiento
Funciones
Devuelve un
especfica
resultado
MDULO
93 de 120
Primer Semestre
Rutina
Es un algoritmo que realiza una tarea especfica y que puede ser invocado desde otro
algoritmo para ejecutar 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 sta.
Procedimiento
Es similar a una funcin, pero no regresa un resultado, sino que en su lugar realiza una
o varias tareas, por ejemplo, centrar una cadena en la pantalla de la computadora,
dibujar un marco, imprimir un mensaje etctera.
Ejemplo:
Procedimiento mensajeBienvenida
Inicio
Borrar pantalla
Imprimir Bienvenido al sistema
Imprimir Teclee cualquier tecla para continuar
Salir
95 de 120
Primer Semestre
96 de 120
Primer Semestre
Primer Semestre
Procesamiento regresivo
Es otra tcnica de anlisis y diseo de algoritmos. 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 ciertos rasgos especficos de las entradas.
Esta tcnica tambin es conocida como bottom-up (abajo-arriba), aunque suele pasar
que no alcance la integracin ptima y eficiente de las soluciones de los diversos
problemas.
Bottom-up
Es el diseo ascendente referido 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 con enfoque ascendente, es difcil
llegar a integrar los subalgoritmos a tal grado 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.
98 de 120
Primer Semestre
99 de 120
Primer Semestre
RESUMEN
En esta unidad, se estudi el programa, entendido como un conjunto de instrucciones
que realizan acciones especficas escritas en un lenguaje de programacin. De aqu la
importancia de analizar el mtodo para transformar un algoritmo a su expresin
computable, el programa.
100 de 120
Primer Semestre
BIBLIOGRAFA DE LA UNIDAD
SUGERIDA
Autor
Captulo
Pginas
161-184
101 de 120
Primer Semestre
UNIDAD 5
Evaluacin de algoritmos
102 de 120
Primer Semestre
OBJETIVO PARTICULAR
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.
TEMARIO DETALLADO
(16 horas)
5.Refinamiento progresivo
5.2 Depuracin y prueba
5.3 Documentacin del programa
5.4 Mantenimiento de programas
103 de 120
Primer Semestre
INTRODUCCIN
La evaluacin de algoritmos es un proceso de anlisis de su desempeo en el
tiempo de ejecucin que tardan para encontrar una solucin, y la cantidad de
recursos empleados para ello. Entre las tcnicas ms confiables para esto se
encuentran aquellas que miden la complejidad de algoritmos a travs de funciones
matemticas.
En esta unidad, se estudia la depuracin y prueba de programas, con el fin de
asegurar que estn libres de errores y 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 estos programas, y dejar una evidencia
de todas sus especificaciones.
Adems, los programas deben ser depurados para que cumplan de manera precisa
su objetivo, por lo que se les dar un mantenimiento adecuado. En este orden,
tambin se profundiza en los tipos de mantenimiento preventivo, correctivo y
adaptativo.
104 de 120
Primer Semestre
Como se observa, n es una variable o constante global que indica el tamao del
arreglo.
Se observa que 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, que puede ser creciente, decreciente o aleatoria:
Primer Semestre
108 de 120
Primer Semestre
Se dice que un programa est depurado si 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 error, tanto en tiempo de programacin como en ejecucin.
Los errores ms sencillos de detectar son de sintaxis, presentes cuando alguna
instruccin est mal escrita o se omiti puntuacin necesaria para el programa.
Existen tambin errores lgicos; en este caso, aunque el programa no contenga fallas
de sintaxis, no realiza el objetivo por el que fue creado. Pueden presentarse
incorrecciones en los valores de las variables, ejecuciones de programa que no
terminan, imprecisiones 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 genera 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.
Concluida la programacin, el analista volver a usar los datos de prueba para verificar
que el programa o sistema da los resultados correctos. En esta ocasin, concentrar su
atencin tambin en la interaccin correcta entre los diferentes programas y el
funcionamiento completo del sistema.
109 de 120
Primer Semestre
Verificar lo siguiente:
Todos los campos del registro cuyo valor determine una accin a seguir dentro de la
lgica del programa.
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 modificacin que surja como resultado de la programacin deber ser
expuesta y aceptada antes de aplicar el cambio.
Nombre del programa (cdigo). Indicar el cdigo que identifica el programa y el
ttulo del mismo
Descripcin. Sealar la funcin que realiza el programa.
Frecuencia de procesamiento. Diaria, semanal, quincenal, mensual, etctera.
110 de 120
Primer Semestre
111 de 120
Primer Semestre
PREVENTIVO
Cuando los programas no presentan errores, 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.
CORRECTIVO
Los programas presentan algn error en algn reporte, por lo que es
necesario revisar la codificacin para depurarlos y compilarlos. Se
deben realizar las pruebas al sistema, imprimiendo los reportes que
generan y verificar si los clculos que stos ofrecen son correctos.
ADAPTATIVO
Los programas no tienen errores, mas 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.
112 de 120
Primer Semestre
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 estudi tambin la importancia de la depuracin y
prueba de programas con el fin de asegurar que estn libres de errores y cumplan
eficazmente con el objetivo para el que fueron elaborados.
113 de 120
Primer Semestre
BIBLIOGRAFA DE LA UNIDAD
SUGERIDA
Autor
Captulo
Pginas
Diniz (2008)
6. Data-selective filtering
231-287
REFERENCIA BIBLIOGRFICA
BSICA
114 de 120
Primer Semestre
115 de 120
Primer Semestre
COMPLEMENTARIA
Cair Battistutti, Osvlado. (2006). Fundamentos de programacin: piensa en C. Mxico:
Pearson Educacin.
116 de 120
Primer Semestre
BIBLIOGRAFA ELECTRNICA
(Nota: todos los enlaces, consultados o recuperados, funcionan al 18/09/13
[dd/mm/aa])
Libros
Fuente
Captulos (s)
Liga
Captulo 2 (U,3)
http://link.springer.com/book/10.1007/
3-540-31759-7/page/1
http://link.springer.com/chapter/10.10
07/978-1-84996-104-2_7
http://link.springer.com/book/10.1007/
978-1-4614-1701-9/page/1
http://link.springer.com/chapter/10.10
07/978-3-642-34862-4_14#page-1
Captulo 1 (U, 1)
http://digitallibrary.theiet.org/content/books/cs/pb
cs015e
117 de 120
Primer Semestre
Captulo 1, 2 y 3 (U,1)
http://ehis.ebscohost.com/ehost/eboo
kviewer/ebook/nlebk_108086_AN?sid
=83214e9a-9ba4-4df6-9f30b696cfd62487@sessionmgr198&vid=
1&format=EB&lpid=lp_III
Captulo 7 (U, 4)
http://link.springer.com/chapter/
10.1007/978-3-642-02538-9_7
Captulo 8 (U,1)
http://unam.libri.mx/libro.php?libroId=
59#
http://link.springer.com/chapter/10.10
07/978-3-642-03450-3_1
Captulo 1 (U,4)
http://unam.libri.mx/libro.php?libroId=
125
Captulo 2 (U,2)
http://link.springer.com/book/10.1007/
978-0-85729-664-1/page/1
Captulo 9 (U,2 y 3)
http://www.netLibrary.com/urlapi.asp?
action=summary&v=1&bookid=33899
7
118 de 120
Primer Semestre
http://link.springer.com/chapter/10.10
07/978-1-4471-2227-2_3
Captulo 13 (U, 1 y 2)
http://unam.libri.mx/libro.php?libroId=
123
Captulo 2 (U,2)
http://link.springer.com/chapter/10.10
07/978-1-84800-070-4_2#page-1
Captulo 20 (U,1)
http://link.springer.com/chapter/10.10
07/978-1-4471-4610-0_19
http://epubs.siam.org/doi/abs/10.1137
/0218062
http://epubs.siam.org/doi/abs/10.1137
/S0097539792240583
119 de 120
Primer Semestre
120 de 120
Primer Semestre