Vous êtes sur la page 1sur 229

UNIDAD I.

GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

UNIDAD 1: GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON


ALGORITMOS

En el siguiente esquema se representan los contenidos temáticos correspondientes a la


primera unidad temática de Algoritmos Computacionales, cada uno de estos temas
guardan relación entre sí.

Ilustración 1. Mapa de contenidos temáticos. Unidad 1

VINCULACIÓN DIDÁCTICA

CONTENIDO-COMPETENCIAS:

Diferencia entre los diferentes tipos de problemas que se le presenten para que, con base
en ello, identifica la solución correcta para cada problema, mediante el desarrollo de un
algoritmo que permita encontrar la solución más rápida.

1
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1.1. INTRODUCCIÓN

Pretendemos presentar una serie de conceptos y definiciones propios del estudio de los
algoritmos, su análisis y diseño.

En el mismo podremos encontrar los conceptos de algoritmo y algunos de sus


componentes, análisis y diseño. También veremos los diferentes tipos de formas y
tamaños o medidas en que se pueden almacenar y representar los datos y estructuras en
un algoritmo o programa. En ese mismo orden encontraremos las diferentes técnicas para
diseñarlos como son el método de la fuerza bruta, el voraz, divide y vencerás,
programación dinámica, de vuelta atrás, entre otros.

Es importante el estudio y conocimiento de lo que hoy conocemos como Algoritmos


Computacionales, que desde su aparición hasta nuestros días es, y seguirá siendo; vital
para el desarrollo de aplicaciones para computadoras y el manejo y dominio de la lógica
de programación para resolver problemas.

Compañero y compañera, recuerda que este es el inicio de una gran aventura en el


mundo del conocimiento y en tu formación intelectual, vamos a estudiar con mucho
entusiasmo.

1.1.1 Objetivo: general y específicos

Objetivo general:

Que los estudiantes alcancen una visión general y sistemática de lo que conocemos como
algoritmos.

Objetivos específicos:

Introducir los conceptos propios sobre Algoritmo, su importancia en el mundo de las


aplicaciones para computadoras y el manejo de lógica de programación, además de:

 Proporcionar una idea de su uso

 Visualizar sus ventajas e importancia

2
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

 Definir sus tipos y variantes

 Proporcionar conceptos sobre su análisis y diseño

 Proporcionar concepto sobre las técnicas de diseño

 Desglosar sus variantes (ordenación, búsqueda, etc.)

1.1.2. Marco histórico

Los algoritmos no son sólo una curiosidad académica u objeto de estudio de una ciencia.
Son la base de todo proceso metódico, formal o informal, y los encontramos por todas
partes con múltiples nombres: receta, proceso, método, técnica, procedimiento, fórmula,
rutina, conjuro. Un diccionario común describirá como algoritmo al conjunto de símbolos
y procedimientos usados en la realización de un cálculo. Descripciones similares se
encuentran incluso en los diccionarios

Especializados. El desarrollo de la informática y computación han hecho que el término


adquiera cierto nivel de cotidianidad, sin que eso implique la pérdida de la rigurosidad
requerida para dar a una serie de pasos el apelativo de algoritmo. Para muchos será una
palabra más, producto de nuestra era tecnológica, pero su origen se remonta muy atrás
en el tiempo.

Un algoritmo es un conjunto de operaciones y procedimientos que deben seguirse para


resolver un problema. La palabra algoritmo se deriva del nombre latinizado del gran
Matemático Árabe Mohamed Ibn Al’Kwarizmi, el cual escribió sobre los años 800 y 825 su
obra Quitad Al Mugabala, donde se recogía el sistema de numeración hindú y el concepto
del cero. Fue Fibinacci, el que tradujo la obra al latín y el inicio con la palabra: Algoritmi
Dicit.

La exposición clara de cómo calcular de una manera sistemática a través de algoritmos


diseñados para ser usados con algún tipo de dispositivo mecánico similar a un ábaco, más
que con lápiz y papel, muestra la intuición y el poder de abstracción de Al'Khwarizmi.
Hasta se preocupaba de reducir el número de operaciones necesarias en cada cálculo. Por

3
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

esta razón, aunque no haya sido él el inventor del primer algoritmo, merece que este
concepto esté asociado a su nombre.

Los babilonios que habitaron en la antigua Mesopotamia, empleaban unas pequeñas bolas
hechas de semillas o pequeñas piedras, a manera de "cuentas" y que eran agrupadas en
carriles de caña. Más aún, en 1.800 A.C. un matemático babilónico inventó los algoritmos
que le permitieron resolver problemas de cálculo numérico. En 1850 A.C. un algoritmo de
multiplicación similar al de expansión binaria es usado por los egipcios.

Finalmente, la palabra que conocemos no apareció en un diccionario sino hasta la edición


de 1957 del “Webster´s New World Dictionary”. Las matemáticas son, en cierto sentido,
una colección de algoritmos. La aparición de las computadoras, propiciada por la
necesidad y propósito de realizar cálculos y conteos, obligó a mucha gente a hablar de
métodos y procedimientos para describir los programas que para ellas se elaboraban;
programas que eran en sí la representación de un procedimiento matemático, de un
algoritmo. La escritura de programas es entonces la elaboración o implementación de
algoritmos, aunque claro no podemos afirmar que hacer matemáticas sea sólo hacer
programas. Al final, programar bien es hacer matemáticas y como todo buen matemático,
todo buen programador debe contar con un buen método (formal o intuitivo) que le
permita asegurarse de que sus programas son correctos. Aquí es donde empieza a verse la
importancia de la definición y concepción del término algoritmo.

Podemos ver que tanto las matemáticas como la computación se originan del acto de
contar. Sin embargo, las primeras se encargan de descubrir las verdades acerca de las
estructuras abstractas; la segunda, de estudiar el conjunto de acciones que obedecen a
reglas formales estructuradas en el tiempo.

4
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Ilustración 2. Alan M. Turing Ilustración 3. Emil León Post A este respecto los trabajos
de Alan M. Turing y Emil León
Post han sido decisivos y con
profundas implicaciones en
ambas disciplinas.

Ilustración 4. Máquina de Post

Es importante saber que sus


modelos (la Máquina de Turing y la
Máquina de Post) son las
formalizaciones aceptadas de lo que
debe considerarse como un
Ilustración 5. Máquina de Turing
procedimiento efectivo, el cual
devuelve una respuesta o indica la
falta de ésta a un problema.

El lenguaje algorítmico es aquel por


medio al cual se realiza un análisis
previo del problema a resolver y
encontrar un método que permita
resolverlo. El conjunto de todas las
operaciones a realizar y en orden en
que se deben efectuarse, se le
denomina algoritmo.

Es un método para resolver un problema mediante una serie de datos precisos, definidos
y finitos.
5
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1.1.3. Generalidades

La comunicación es un proceso complejo que requiere de una serie de reglas simples,


pero indispensables para poderse llevar a cabo. Las dos principales son las siguientes:

1. Los menajes deben correr en un sentido a la vez

2. Debe forzosamente existir 4 elementos: Emisor, Receptor, Medio de Comunicación


(canal) y Mensaje

Ilustración 6. Ciclo del proceso de comunicación

6
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1.2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS

Desde el punto de vista educativo, la programación de computadoras posibilita no solo


activar una amplia variedad de estilos de aprendizaje (Stager, 2003) sino desarrollar el
pensamiento algorítmico. Adicionalmente, compromete a los estudiantes en la
consideración de varios aspectos importantes para la solución de problemas: decidir sobre
la naturaleza del problema, seleccionar una representación que ayude a resolverlo y,
monitorear sus propios pensamientos (metacognición) y estrategias de solución. Este
último, es un aspecto que deben desarrollar desde edades tempranas. No debemos
olvidar que solucionar problemas con ayuda de la computadora puede convertirse en una
excelente herramienta para adquirir la costumbre de enfrentar problemas predefinidos de
manera rigurosa y sistemática, aun, cuando no se utilice una computadora para
solucionarlo.

Esto en cuanto a la solución de problemas, pero hay otra habilidad de pensamiento que
también se puede ayudar a desarrollar con un curso de Algoritmos Computacionales y
Programación: La Creatividad.

El reto enorme que recae hoy sobre los sistemas educativos a distancia consiste en lograr
que se generen las estrategias adecuadas para que los estudiantes se desarrollen como
pensadores creativos. Para la sociedad actual es prioritario que las personas desarrollen
sus habilidades de pensamiento de orden superior para que puedan desempeñarse con
éxito en ella. Desde este punto de vista, la presente unidad de aprendizaje, se concentra
en el desarrollo de la creatividad y de habilidades para solucionar problemas
predefinidos.

Solución de problemas

Una de las acepciones que trae el Diccionario de Real Academia de la Lengua Española
(RAE) respecto a la palabra Problema es “Planteamiento de una situación cuya respuesta
desconocida debe obtenerse a través de métodos científicos”. Con miras a lograr esa
respuesta, un problema se puede definir como una situación en la cual se trata de alcanzar
una meta y para lograrlo se deben hallar y utilizar medios y estrategias.

7
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

La mayoría de problemas tienen algunos elementos en común: un estado inicial; una meta,
lo que se pretende lograr; un conjunto de recursos, lo que está permitido hacer y/o
utilizar; y un dominio, el estado actual de conocimientos, habilidades y energía de quien va
a resolverlo (Moursund, 1999).

Casi todos los problemas requieren, que quien los resuelve, los divida en submetas que,
cuando son dominadas (por lo regular en orden), llevan a alcanzar el objetivo. La solución
de problemas también requiere que se realicen operaciones durante el estado inicial y las
submetas, actividades (conductuales, cognoscitivas) que alteran la naturaleza de tales
estados (Schunk, 1997).

Cada disciplina dispone de estrategias específicas para resolver problemas de su ámbito;


por ejemplo, resolver problemas matemáticos implica utilizar estrategias propias de las
matemáticas. Sin embargo, algunos psicólogos opinan que es posible utilizar con éxito
estrategias generales, útiles para resolver problemas en muchas áreas. A través del
tiempo, la humanidad ha utilizado diversas estrategias generales para resolver problemas.
Schunk (1997), Woolfolk (1999) y otros, destacan los siguientes métodos o estrategias de
tipo general:

Ensayo y error: Consiste en actuar hasta que algo funcione. Puede tomar mucho tiempo
y no es seguro que se llegue a una solución. Es una estrategia apropiada cuando las
soluciones posibles son pocas y se pueden probar todas, empezando por la que ofrece
mayor probabilidad de resolver el problema.

Por ejemplo, una bombilla que no prende: revisar la bombilla, verificar la corriente
eléctrica, verificar el interruptor.

Iluminación: Implica la súbita conciencia de una solución que sea viable. Es muy utilizado
el modelo de cuatro pasos formulado por Wallas (1921): preparación, incubación,
iluminación y verificación. Estos cuatro momentos también se conocen como proceso
creativo. Algunas investigaciones han determinado que cuando en el periodo de
incubación se incluye una interrupción en el trabajo sobre un problema se logran mejores
resultados desde el punto de vista de la creatividad. La incubación ayuda a "olvidar" falsas

8
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

pistas, mientras que no hacer interrupciones o descansos puede hacer que la persona que
trata de encontrar una solución creativa se estanque en estrategias inapropiadas.

Heurística: Se basa en la utilización de reglas empíricas para llegar a una solución. El


método heurístico conocido como “IDEAL”, formulado por Bransford y Stein (1984),
incluye cinco pasos:

Identificar el problema; definir y presentar el problema; explorar las estrategias viables;


avanzar en las estrategias; y lograr la solución y volver para evaluar los efectos de las
actividades (Bransford & Stein, 1984).

Ilustración 7. Matemático Poyla El matemático Polya (1957) también formuló un método


heurístico para resolver problemas que se aproxima mucho
al ciclo utilizado para programar computadoras.

Algoritmos: Consiste en aplicar adecuadamente una serie


de pasos detallados que aseguran una solución correcta. Por
lo general, cada algoritmo es específico de un dominio del
conocimiento. La programación de computadoras se apoya
en este método.

Modelo de procesamiento de información: El modelo propuesto por Newell y


Simon (1972) se basa en plantear varios momentos para un problema (estado inicial,
estado final y vías de solución). Las posibles soluciones avanzan por subtemas y requieren
que se realicen operaciones en cada uno de ellos.

Lluvia de ideas: Consiste en formular soluciones viables a un problema. El modelo


propuesto por Mayer (1992) plantea: definir el problema; generar muchas soluciones (sin
evaluarlas); decidir los criterios para estimar las soluciones generadas; y emplear esos
criterios para seleccionar la mejor solución. Requiere que los estudiantes no emitan
juicios con respecto a las posibles soluciones hasta que terminen de formularlas.

9
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Como se puede apreciar, hay muchas estrategias para solucionar problemas; sin embargo,
se utilizaran dos de estas estrategias: Heurística y Algorítmica. Según Polya (1957), cuando
se resuelven problemas, intervienen cuatro operaciones mentales:

- Entender el problema

- Trazar un plan

- Ejecutar el plan (resolver)

- Revisar

Numerosos autores de textos escolares de matemáticas hacen referencia a estas cuatro


etapas planteadas por Polya.

Ilustración 8. Etapas planteadas por Poyla

Interpretación dinámica y cíclica de las etapas planteadas por Polya para resolver
problemas.

Es necesario hacer énfasis en la naturaleza dinámica y cíclica de la solución de problemas.


En el intento de trazar un plan, los estudiantes pueden concluir que necesitan entender
mejor el problema y deben regresar a la etapa anterior; o cuando han trazado un plan y
tratan de ejecutarlo, no encuentran cómo hacerlo; entonces, la actividad siguiente puede
ser intentar con un nuevo plan o regresar y desarrollar una nueva comprensión del
problema (Wilson, Fernández & Hadaway, 1993; Guzdial, 2000).

10
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

TIP

La mayoría de los textos escolares de matemáticas abordan la Solución de Problemas bajo


el enfoque planteado por Polya. Se pueden identificar las siguientes sugerencias propuestas
a los estudiantes para llegar a la solución de un problema:

1.2.1. Comprender el problema

 Leer el problema varias veces

 Establecer los datos del problema

 Aclarar lo que se va a resolver (¿Cuál es la pregunta?)

 Precisar el resultado que se desea lograr

 Determinar la incógnita del problema

 Organizar la información

 Agrupar los datos en categorías

 Trazar una figura o diagrama

1.2.2. Hacer el plan

 Escoger y decidir las operaciones a efectuar

 Eliminar los datos inútiles

 Descomponer el problema en otros más pequeños

1.2.3. Ejecutar el plan (resolver)

 Ejecutar en detalle cada operación

 Simplificar antes de calcular

 Realizar un dibujo o diagrama


11
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1.2.4. Analizar la solución (revisar)

 Dar una respuesta completa

 Hallar el mismo resultado de otra manera

 Verificar por apreciación que la respuesta es adecuada

Ejemplo:

En un juego, el ganador obtiene una ficha roja; el segundo, una ficha azul; y el tercero, una
amarilla. Al final de varias rondas, el puntaje se calcula de la siguiente manera: Al cubo de
la cantidad de fichas rojas se adiciona el doble de fichas azules y se descuenta el cuadrado
de las fichas amarillas. Si Andrés llegó 3 veces en primer lugar, 4 veces de último y 6 veces
de intermedio, ¿Qué puntaje obtuvo?

Respuesta aplicando la metodología:

Comprender el problema

 Leer detenidamente el problema

 ¿Cuántos colores de fichas se reparten?

 ¿Cuántas fichas rojas, azules y amarillas obtuvo Andrés?

 ¿Qué pregunta el problema?

Hacer el plan

 Para hallar el puntaje que obtiene Andrés por sus llegadas de primero, calcular el cubo
de la cantidad de fichas rojas

 Para hallar el puntaje por sus llegadas en segundo lugar, calcular el doble de la cantidad
de fichas azules

 Para hallar el puntaje que pierde por sus llegadas en último lugar, calcular el cuadrado
de la cantidad de fichas amarillas

 Para hallar el puntaje total, calcular la suma de los puntajes por las fichas rojas y azules,
restarle los puntos de las fichas amarillas

12
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Ejecutar el plan (resolver)

 Por tres fichas rojas: 33 = 27 puntos

 Por seis fichas azules: 6 x 2 = 12 puntos

 Por cuatro fichas amarillas: 42 = 16 puntos

 Para obtener el puntaje final de Andrés, sumar los puntos

 Obtenidos con las fichas rojas y azules (27 + 12 = 39 puntos) y de este resultado restar
los puntos representados por las fichas amarillas (39 – 16 = 23 puntos)

Analizar la solución (revisar)

 El puntaje que obtuvo Andrés es 23 puntos

 Verificar las operaciones y comparar los cálculos con la solución estimada

El anterior es un problema típico en clase de matemáticas. Es muy importante que los


estudiantes reflexionen sobre las actividades que realizan para solucionarlo
(metacognición) y las agrupen de acuerdo a las etapas que contenga la estrategia de
solución empleada.

Es momento de reforzar tus aprendizajes mediante la resolución de la Actividad


Complementaria 1.1, para posteriormente resolver la Actividad de Aprendizaje 1.1, la cual
tiene valor para tu calificación. Mucho éxito.

13
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1.3. ALGORITMOS

El programador de computadoras es antes que nada una persona que resuelve problemas,
por lo que para llegar a ser un programador eficaz se necesita aprender a resolver
problemas de un modo riguroso y sistemático. A la metodología necesaria para resolver
problemas mediante programas se denomina Metodología de la Programación. El eje
central de esta metodología es el concepto, ya tratado, de algoritmo.

Un algoritmo es un método para resolver un problema. Aunque la popularidad del


término ha llegado con el advenimiento de la era informática, algoritmo proviene de:

Mohammed Al'Khwarizmi, matemático persa que vivió durante el siglo IX y alcanzo


gran reputación por el enunciado de las reglas para sumar, restar, multiplicar y dividir
números decimales; La traducción al latín del apellido de la palabra algorismus derivo
posteriormente en algoritmo.

Euclides, el gran matemático griego (del siglo IV antes de Cristo) que invento un método
para encontrar el máximo común divisor de dos números, se considera con
Al’Khwarizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos).

Ilustración 9. Niklaus Wirth El profesor Niklaus Wirth, inventor de Pascal, Modula-2


y Oberon, titulo uno de sus más famosos libros,
Algoritmos + Estructuras de Datos = Programas,
significándonos que solo se puede llegar a realizar un
buen programa con el diseño de un algoritmo y una
correcta estructura de datos.

Para llegar a la realización de un programa es necesario el


diseño previo de algoritmo, de modo que sin algoritmo
no puede existir un programa.

Los algoritmos son independientes tanto del lenguaje de programación en que se expresan
como de la computadora que lo ejecuta. En cada problema el algoritmo se puede expresar
en un lenguaje diferente de programación y ejecutarse en una computadora distinta; sin
embargo, el algoritmo será siempre el mismo. Así, por ejemplo, en una analogía con la vida

14
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

diaria, una receta de un plato de cocina se puede expresar en español, inglés o francés,
pero cualquiera que sea el lenguaje, los pasos para la elaboración del plato se realizaran sin
importar el idioma del cocinero.

1.3.1. Razones para estudiar los algoritmos

Con el logro de computadoras cada vez más rápidas se podría caer en la tentación de
preguntarse si vale la pena preocuparse por aumentar la eficiencia de los algoritmos. ¿No
sería más sencillo aguardar a la siguiente generación de computadoras?. Vamos a
demostrar que esto no es así. Supongamos que se dispone, para resolver un problema
dado, de un algoritmo que necesita un tiempo exponencial y que, en una computadora, su
implementación del mismo emplea 10-4 x 2n segundos.

Este programa podrá resolver un ejemplar de tamaño n=10 en una décima de segundo.
Necesitará casi 10 minutos para resolver un ejemplar de tamaño 20. Un día entero no
bastará para resolver uno de tamaño 30. En un año de cálculo ininterrumpido, a duras
penas se resolverá uno de tamaño 38. Imaginemos que necesitamos resolver ejemplares
más grandes y compramos para ello un computador cien veces más rápido. El mismo
algoritmo conseguirá resolver ahora un ejemplar de tamaño n en sólo 10-6 2n segundos.
¡Qué decepción al constatar que, en un año, apenas se consigue resolver un ejemplar de
tamaño 45! En general, si en un tiempo dado se podía resolver un ejemplar de tamaño n,
con la nueva computadora se resolverá uno de tamaño n+7 en ese mismo tiempo.

Imaginemos, en cambio que investigamos y encontramos un algoritmo capaz de resolver el


mismo problema en un tiempo cúbico, la implementación de este algoritmo en la
computadora inicial podría necesitar, por ejemplo, 10-2 n3 segundos. Ahora se podría
resolver en un día un ejemplar de un tamaño superior a 200 un año permitiría alcanzar
casi el tamaño 1500 por tanto, el nuevo algoritmo no sólo permite una aceleración más
espectacular que la compra de un equipo más rápido, sino que hace dicha compra más
rentable dado estos argumentos, podemos resumir las siguientes razones para justificar el
estudiar los algoritmos:

15
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

1. Evitar reinventar la rueda. Para algunos problemas de programación ya existen buenos


algoritmos para solucionarlos, para esos algoritmos ya fueron analizadas sus
propiedades por ejemplo; confianza en su exactitud y eficiencia.

2. Para ayudar cuando desarrollen sus propios algoritmos. No siempre existe un


algoritmo desarrollado para resolver un problema, no existe regla general de creación
de algoritmos, muchos de los principios de proyecto de algoritmos ilustrados por
algunos de los algoritmos que estudiaremos son importantes en todos los problemas
de programación. El conocimiento de los algoritmos bien definidos provee una fuente
de ideas que pueden ser aplicadas a nuevos algoritmos.

3. Ayudar a entender herramientas que usan algoritmos particulares por ejemplo,


herramientas de compresión de datos:

 Pack usa Códigos Huffman

 Compress usa LZW

 Gzip usa Lempel-Ziv

4. Útil conocer técnicas empleadas para resolver problemas de determinados tipos.

1.3.2. Definición de lenguaje

Definición de lenguaje

Lenguaje: Es una serie de símbolos que sirven para transmitir uno o más mensajes
(ideas) entre dos entidades diferentes, a la transmisión de mensajes se le conoce
comúnmente como comunicación.

1.3.3. Lenguajes de programación

Un lenguaje de programación: Es un conjunto de símbolos, caracteres y reglas


(programas) que le permiten a las personas comunicarse con la computadora.

16
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Los lenguajes de programación tienen un conjunto de instrucciones que nos permiten


realizar operaciones de entrada/salida, calculo, manipulación de textos, lógica/comparación
y almacenamiento/recuperación

Los lenguajes de programación se clasifican en:

a. Lenguaje Maquina: Son aquellos cuyas instrucciones son directamente entendibles


por la computadora y no necesitan traducción posterior para que la CPU pueda
comprender y ejecutar el programa. Las instrucciones en lenguaje maquina se
expresan en términos de la unidad de memoria más pequeña el bit (digito binario 0 o
1).

b. Lenguaje de bajo nivel (ensamblador): En este lenguaje las instrucciones se


escriben en códigos alfabéticos conocidos como mnemotécnicos para las operaciones
y direcciones simbólicas.

c. Lenguaje alto nivel: Los lenguajes de programación de alto nivel (BASIC, Pascal,
Cobol, Fortran, etc.) son aquellos en los que las instrucciones o sentencias a la
computadora son escritas con palabras similares a los lenguajes humanos (en general
en inglés), lo que facilita la escritura y compresión del programa.

1.3.4. Definición de algoritmo

Cuando se habla de algoritmos, con frecuencia aparecen tres tipos de pensamiento que
generalmente se relacionan con ellos y que se utilizan indiscriminadamente como
sinónimos por lo tanto es importante puntualizar a qué se refiere cada uno de estos
pensamientos:

Pensamiento Computacional

Según Moursund (2006), el pensamiento computacional hace referencia a la


representación y solución de problemas utilizando inteligencia humana, de máquinas o de
otras formas que ayuden a resolver el problema.

17
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Pensamiento Algorítmico

El pensamiento algorítmico se refiere al desarrollo y uso de algoritmos que puedan ayudar


a resolver un tipo específico de problema o a realizar un tipo específico de tarea.

Pensamiento Procedimental

Por su parte, el pensamiento procedimental se ocupa del desarrollo y utilización de


procedimientos diseñados para resolver un tipo específico de problema o para realizar un
tipo específico de tarea, pero que no necesariamente, siempre resulta exitoso.

Por otra parte y de acuerdo con un reporte del Consejo Nacional de Investigación de
Estados Unidos (National Research Council, NRC, 2004), conocido como “Being Fluent
with Information Technology”, el Pensamiento Algorítmico incluye elementos tales como:

Descomposición funcional, repetición (iteración y/o recursión), organización de datos


(registro, campo, arreglo, lista, etc), generalización y parametrización, diseño por
descomposición de un problema en partes más pequeñas y manejables (top-down) y
refinamiento.

El Pensamiento Algorítmico está fuertemente ligado al pensamiento procedimental


requerido en la programación de computadoras; sin embargo, su desarrollo puede
conducir a los estudiantes a aproximarse guiada y disciplinadamente a los problemas de
forma que este pueda transferirse a otros ambientes diferentes a los de la programación.
En pocas palabras, la programación de computadoras aporta al ámbito educativo un
laboratorio para desarrollar habilidades indispensables en la vida real del Siglo XXI.

Una diferencia notoria entre un algoritmo y un programa es que el algoritmo incorpora las
características estructurales básicas de la computación, independientemente de los
detalles de su implementación; mientras que un programa tiene un conjunto específico de
detalles para resolver un problema. Se puede observar que una técnica de solución
(correspondiente al algoritmo) se puede utilizar en diferentes situaciones problemáticas
(correspondiente a los programas). De manera inversa, se espera que una solución exitosa
de problemas incorpore procesos generales que son independientes de las situaciones
específicas (NRC, 2004).

18
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Un programa consiste de uno o más procedimientos con instrucciones paso a paso que
pueden ejecutarse en una computadora; por lo tanto, utilizar el diseño de procedimientos
que solucionen o ayuden a solucionar problemas con diferentes niveles de complejidad es
un recurso que puede aprovechar el docente para captar el interés de los estudiantes en
actividades de programación.

El razonamiento abstracto es otro tipo de actividad de aprestamiento que se puede


llevar a cabo con los estudiantes para desarrollar los pensamientos algorítmico y
procedimental. El razonamiento abstracto básicamente es un proceso de ordenación de
objetos, situaciones o sucesos en secuencias lógicas de acuerdo con algún criterio
previamente establecido. Para ello se debe comprender e interpretar los cambios en
función de la forma cómo varían las características de interés de los objetos o sucesos
estudiados. .

En la ciencia de la computación y en la programación, los algoritmos son más importantes


que los lenguajes de programación o las computadoras. Un lenguaje de programación es
tan solo un medio para expresar un algoritmo y una computadora es solo un procesador
para ejecutarlo, tanto el lenguaje de programación como la computadora son los medios
para obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso
correspondiente.

Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy


importante será el diseño de algoritmos, el diseño de la mayoría de los algoritmos
requiere creatividad y conocimientos profundos de la técnica de la programación, en
esencia, la solución de un problema se puede expresar mediante un algoritmo.

¿Qué es un Algoritmo?

 Es un método para la resolución de problemas

 Es un conjunto de pasos a seguir para la solución a un problema

 Es una serie finita de instrucciones para realizar una tarea

Así podemos, decir que:

Algoritmo es un conjunto finito de instrucciones precisas para resolver un problema.


19
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Algoritmo es un método o proceso seguido para resolver un problema. Si el problema


es visto como una función, entonces el algoritmo toma una entrada y la transforma en la
salida.

Problema es una función o asociación de entradas con salidas. Un problema puede tener
muchos algoritmos por tanto, un algoritmo es un procedimiento para resolver un
problema cuyos pasos son concretos y no ambiguos. El algoritmo debe ser correcto, de
longitud finita y debe terminar para todas las entradas, un programa es una instanciación
de un algoritmo en un lenguaje de programación.

Definición 1: Es un conjunto de pasos, procedimientos o acciones que permiten alcanzar


un resultado o resolver un problema.

Definición 2: Un algoritmo es un conjunto finito de pasos definidos, estructurados en el


tiempo y formulados con base en un conjunto finito de reglas no ambiguas, que proveen
un procedimiento para dar la solución o indicar la falta de ésta a un problema en un
tiempo determinado.

Definición 3: Un algoritmo es una serie de pasos organizados que describe el proceso a


seguir para solucionar un problema específico.

Definición 4: Un algoritmo se puede definir como una secuencia finita de instrucciones


cada una de las cuales tiene un significado claro y puede ser efectuada con una cantidad
finita de esfuerzo en una longitud de tiempo también finito.

Tipos de algoritmos:

Cualitativos: Emplean palabras. Ejemplo: Receta de cocina, cambiar una rueda, usar la
guía telefónica.

Cuantitativos: Utilizar cálculos numéricos. Ejemplo: Resolver una ecuación de segundo


grado.

Algoritmo para leer las páginas de un libro:

1. Inicio

2. Abrir el libro en la 1ª página

20
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

3. Leer la página

4. ¿Es la última que deseo leer?

5. Sí: Ve al paso 7

6. No: Ve al paso 5

7. Pasar a la siguiente página

8. Ve al paso 3

9. Cerrar el libro

10. Fin

1.4. CARACTERÍSTICAS DE UN ALGORITMO

21
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

En la práctica, para evaluar un buen algoritmo se considera el tiempo que requiere su


ejecución, esto puede ser expresado en términos del número de veces que se ejecuta
cada paso. Otros criterios de evaluación pueden ser la adaptabilidad del algoritmo al
computador, su simplicidad y elegancia, etc. Algunas veces se tienen varios algoritmos para
solucionar el mismo problema, y se debe decidir cuál es el mejor. Esto último conduce al
“Análisis de Algoritmos”, dado un algoritmo las características que debe cumplir son:

1.4.1. Preciso

Indicar el orden de realización de cada paso, cada paso de un algoritmo debe estar
precisamente definido y sin ambigüedades.

1.4.2. Definido

Es decir, si se sigue un algoritmo dos veces, se debe obtener el mismo resultado.

1.4.3. Finito

Un algoritmo debe siempre terminar después de un número finito de pasos.

Otras características adicionales que deben cumplir con:

• Una secuencia de instrucciones claras y finitas

• Debe ser correcto y debe resolver el problema planteado en todas sus facetas

• Debe ser legible

Ilustración 10. Elementos que conforman un algoritmo

22
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

• Entrada. Los datos iniciales que posee el algoritmo antes de ejecutarse

• Proceso. Acciones que lleva a cabo el algoritmo

• Salida. Datos que obtiene finalmente el algoritmo

Ejemplo 1: calcular el área de un rectángulo

Ilustración 11. Análisis del problema

El cálculo del área del rectángulo se puede dividir en:

• Entrada: Datos (altura, base)

• Proceso: Cálculo del área (= base x altura

• Salida: de datos (base, altura, área)

Ilustración 12. Fórmula para el área del rectángulo

Ejemplo 2: Algoritmo para preparar “fríjoles con chicharrón" para 8 raciones

“8 platos”

 Entrada: Los datos de entrada (ingredientes)

23
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

2 kilos de frijoles

1 cucharada de aceite vegetal o de girasol

1/4 de kilo de tocino cortado en trocitos

2 zanahorias peladas

2 cubos de caldo de carne

1 cucharada de sal

16 tazas de agua

 Proceso

Proceso de preparación y guisado de los frijoles “receta”

a. Se lavan bien los frijoles y se dejan remojando en el agua desde la noche anterior

b. Al día siguiente, se ponen en la olla a presión con el agua en

c. Que se remojaron, el aceite, el tocino y la zanahoria

d. Se cocinan sin sal hasta que estén blandos, aproximadamente por 1 hora

e. Se licúa una pequeña cantidad de los frijoles con la zanahoria, los cubos de caldo y la
sal, y se agrega a los frijoles

f. Se cocinan media hora más con la olla destapada hasta que espesen

 Salida: 8 Raciones (platos) de frijoles

Hemos llegado al término de la primera unidad de Algoritmos Computacionales. Te


invitamos a resolver las actividades correspondientes poniendo en práctica tus
habilidades de autoaprendizaje y autorregulación. Recuerda que cuentas con el apoyo
permanente de tu asesor(a) y tutor(a).

24
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

RESUMEN UNIDAD 1

En cada proceso que realizamos en nuestra vida cotidiana nos vemos en la necesidad de
utilizar los algoritmos para la solución de problemas, utilizando los diferentes métodos
establecidos o no establecidos, para ello tenemos que decidir sobre la naturaleza del
problema y cuál sería la solución más viable monitoreando nuestros propios pensamientos
y analizar las posibles estrategias de solución, nos damos cuenta que para poder
resolverlo necesitamos desarrollar nuestra creatividad y tener habilidades para ir
solucionando problemas predefinidos y con la practica día a día podemos desarrollar
algoritmos computacionales los cuales nos ayudaran a tener una más rápida y mejor
solución a problemas más complejos.

Definimos como algoritmo: aplicar adecuadamente una serie de pasos detallados que
aseguran una solución correcta. Existen varias técnicas para la solución de problemas, sin
embargo, Poyla nos dice que intervienen 4 operaciones mentales al momento de
solucionar un problema, estas son las siguientes:

- Entender el problema

- Trazar un plan

- Ejecutar el plan (resolver)

- Revisar

Mohammed Al'Khwarizmi, matemático persa que vivió durante el siglo IX y alcanzo gran
reputación por el enunciado de las reglas para sumar, restar, multiplicar y dividir números
decimales; La traducción al latín del apellido de la palabra algorismus derivo
posteriormente en algoritmo.

25
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Euclides, el gran matemático griego (del siglo IV antes de Cristo) que invento un método
para encontrar el máximo común divisor de dos números, se considera con Al’Khwarizmi
el otro gran padre de la algoritmia (ciencia que trata de los algoritmos).

Para finalizar vimos las características principales de los algoritmos y como los llevamos a
cabo y nos damos cuenta que es lo que hacemos a diario en nuestra vida cotidiana al
resolver un problema pero ahora ya podemos utilizar nuevas técnicas y podemos realizar
nuestro algoritmo para cualquier problema que enfrentemos ya sea que utilicemos solo
palabras o números ya que existen dos tipos de algoritmos los cuales son: cualitativos y
cuantitativos, es decir podemos hacer el algoritmo de cómo preparar una sopa
(cualitativo) o bien el algoritmo de cómo realizar una suma de tres números (cuantitativo).

Un algoritmo debe de ser preciso, definido y finito.

Y recordemos siempre que un algoritmo se conforma por los siguientes elementos:


Entrada: son los datos que vamos a utilizar

Proceso: la operación o forma en la que se va a resolver el problema

Salida: la solución al problema

26
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD I. GENERALIDADES Y SOLUCIÓN DE PROBLEMAS CON ALGORITMOS

Tabla 1. Criterios de evaluación de la Unidad 1

UNIDAD PRODUCTO VALOR OBSERVACIONES

1.1 Introducción Mapa conceptual 5%

1.2 Metodología para la


solución de problemas

1.3 Algoritmos Cuadro sinóptico 5%

1.4 Características de
un algoritmo

TOTAL UNIDAD 1 10%

REFERENCIAS COMPLEMENTARIAS

López, J. (2009). Algoritmos y programación (guía para docentes). Recuperado el 08 de


Septiembre de 2012, de: http://eduteka.icesi.edu.co/pdfdir/AlgoritmosProgramacion.pdf

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

Universidad Nacional Autónoma de México (2003). Tutorial para la asignatura análisis,


diseño e implantación de algoritmos. Recuperado el 03 de Septiembre de 2012, de:

http://fcasua.contad.unam.mx/apuntes/interiores/docs/98/1/analisis_algoritmos.pdf

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

27
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

UNIDAD 2: TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

En el siguiente esquema se representan los contenidos temáticos correspondientes a la


primera unidad temática de Algoritmos Computacionales, cada uno de estos temas
guardan relación entre sí animo compañero y compañera vamos por más.

Ilustración 1. Mapa de contenidos temáticos. Unidad 2

INTRODUCCION

El contenido tematico de esta unidad pretende lograr que identifiques las diferentes
técnicas para la representación de algoritmos en la cual estudiaremos y aprenderemos
desde que es y como realizar un diagrama de flujo, pseudocódigos, diagramas, hasta la
creación y desarrollo de algoritmos.

En el primer tema conoceremos acerca de los diagramas de flujo, el cual es la


representación esquemática de un algoritmo que muestra graficamente los pasos para la
solución de determinado problema, conociendo cada uno de los simbolos, normas y
recomendaciones que se utilizan para la elaboración de los mismos y como realizar las
pruebas de escritorio de cada uno de ellos.

1
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

En el tema siguiente identificaremos la definición de pseudocódigo las ventajas de


utilizarlos y las caracteristicas de los pseudocódigos.

Como tercer tema tenemos los diagramas estructurados los cuales son una técnica hibrida
entre diagramas de flujo y pseudocódigos. Estudiaremos sus características y la
representación de las estructuras de control (secuencia, iteración y decisión).

Para finalizar nuestra unidad estudiaremos los pasos para la creación y desarrollo de los
algoritmos, conociendo a fondo cada uno de ellos los pasos que veremos son los sigientes:
Declaración del problema, desarrollo de un modelo, diseño de procedimientos de
solución, validación, implementación, análisis y complejidad, pruebas y documentación.

Cabe señalar que cada uno de los temas que veremos en esta unidad son de vital
importancia para una buena representación de los algoritmos.

VINCULACIÓN DIDÁCTICA

CONTENIDO-COMPETENCIAS:

Conoce las técnicas de diseño de algoritmos y desarrolla la capacidad de poder aplicar,


desarrollar y documentar el uso sistemático de abstracción de algoritmos de solución de
problemas confiables, fáciles de comprender y modificar.

2.1. DIAGRAMAS DE FLUJO

2.1.1. Introducción a la diagramación

Diagramas de flujo: representación esquemática de un algoritmo que muestra


gráficamente los pasos a seguir para alcanzar la solución de un problema.

El diagrama de flujo se compone de figuras que ilustran los pasos o procesos a seguir para
alcanzar la solución del problema. Los símbolos presentados permiten crear una
estructura gráfica flexible que ilustra los pasos a seguir. Un diagrama de flujo permite con
facilidad la posterior escritura de un programa en algún lenguaje de programación.

2
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Los diagramas de flujo son una de las técnicas más utilizadas para representar gráficamente
la secuencia de instrucciones de un algoritmo. Estas instrucciones están compuestas por
operaciones, decisiones lógicas y ciclos repetitivos, entre otros. La solución de un
problema puede contener varios conjuntos de instrucciones (procedimientos o métodos)
que tienen como finalidad ejecutar cada uno de los procesos necesarios para llegar a la
solución de un problema a partir de los datos disponibles (estado inicial).

Ventajas de los diagramas de flujo.

Utilizar diagramas de flujo para representar un algoritmo tiene claras ventajas,


especialmente cuando son construidos por estudiantes.

Numerosas investigaciones han mostrado que el Aprendizaje Visual es uno de los mejores
métodos para enseñar habilidades del pensamiento. Las técnicas que utilizan formas
gráficas para representar ideas e información ayudan a los estudiantes a clarificar su
pensamiento, y a procesar, organizar y priorizar nueva información.

Los diagramas visuales revelan patrones, interrelaciones e interdependencias además de


estimular el pensamiento creativo. La utilización de Diagramas ayuda a los estudiantes a:

 Clarificar el pensamiento: Ellos pueden ver cómo se conectan los procesos y se


dan cuenta de cómo estos se pueden organizar o agrupar para darles el orden lógico
correcto.

• Identificar pasos erróneos: Sobre un diagrama es más fácil identificar los cambios
que se requieren para el correcto funcionamiento de un programa de computador que
hacerlo sobre el código.

Favorecen la comprensión del proceso a través de mostrarlo como un dibujo. El cerebro


humano reconoce fácilmente los dibujos. Un buen diagrama de flujo reemplaza varias
páginas de texto. Permiten identificar los problemas y las oportunidades de mejora del
proceso. Se identifican los pasos redundantes, los flujos de los reproceso, los conflictos de
autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisión.

3
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan,


facilitando a los empleados el análisis de las mismas. Son una excelente herramienta de
capacitación en el desarrollo de tareas, actividades y de mejoras a procesos.

Las ventajas de diseñar un diagrama de flujo antes de empezar a generar el código de un


programa son, entre otras:

 Forzar la identificación de todos los pasos de una solución de forma clara y lógica

 Establecer una visión amplia y objetiva de la solución

 Verificar si se han tenido en cuenta todas las posibilidades

 Comprobar si hay procedimientos duplicados

 Representar gráficamente una solución (es más simple hacerlo con gráficas que
mediante palabras)

 Facilitar a otras personas la comprensión de la secuencia lógica de la solución planteada

 Posibilitar acuerdos con base en la aproximación común a una solución de un


problema, resolver ambigüedades o realizar mejoras

 Establecer posibles modificaciones (resulta más fácil depurar un programa con el


diagrama que con el listado del código)

 Agilizar la codificación (traducción) del algoritmo en un lenguaje de programación

 Servir como elemento de documentación de la solución del problema

2.1.2. Simbología

Un diagrama de flujo utiliza símbolos estándar en el que cada paso del algoritmo se
visualiza dentro del símbolo y en el orden en que estos pasos se ejecutan, se indica
conectándolos con flechas llamadas líneas de flujo, ya que indican el flujo lógico del
algoritmo.

Los símbolos utilizados en los diagramas de flujo han sido estandarizados por la ANSI
(American National Institute) y por la ISO (International Standard Organization).
4
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla 1: tabla de símbolos utilizada para el diseño de un diagrama de flujo

Tabla de símbolos utilizada para el diseño de un diagrama de flujo.

Símbolo Función

5
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla de símbolos utilizada para el diseño de un diagrama de flujo.

Símbolo Función

Ilustración 2. Inicio Símbolo utilizado para marcar el inicio y el fin del diagrama de
flujo

Ilustración 3. Lectura Símbolo utilizado para ingresar los datos de entrada (expresa
lectura)

Ilustración 4. Proceso Símbolo utilizado para representar un proceso. En su interior


se expresan asignaciones, operaciones aritméticas, cambios de
valor de celdas en memoria, etc.

Ilustración 5. Dirección Símbolos utilizados para indicar la dirección del flujo del
diagrama

Ilustración 6. Si entonces Símbolo utilizado para representar la estructura selectiva si


entonces; en su interior se almacena una condición que
determina el flujo del diagrama

Ilustración 7. Si entonces/sino Símbolo utilizado para representar la estructura selectiva si


entonces/sino; en su interior se almacena una condición que
determina el flujo del diagrama

Ilustración 8. Decisión múltiple Símbolo utilizado para representar una decisión múltiple. En
su interior se almacena un selector y dependiendo de su valor,
se sigue por una de las ramas

Ilustración 9. Impresión Símbolo utilizado para representar la impresión de un


resultado (expresa escritura)

6
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla de símbolos utilizada para el diseño de un diagrama de flujo.

Símbolo Función

Ilustración 10. Conexión Símbolo utilizado para expresar conexión dentro de una
misma página

Ilustración 11. Conexión entre Símbolo utilizado para expresar conexión entre páginas
paginas
diferentes

Ilustración 12. Módulo de un Símbolo utilizado para expresar un módulo de un problema:


problema
para continuar con el flujo normal del Diagrama es necesario
primero resolver el subproblema enunciado en su interior

2.1.3. Normas y recomendaciones para la elaboración de diagramas de flujo

Pasos a seguir para construir un diagrama de flujo:

 Establecer el alcance del proceso a describir, de esta manera quedará fijado el


comienzo y el final del diagrama, frecuentemente el comienzo es la salida del proceso
previo y el final la entrada al proceso siguiente

 Identificar y listar las principales actividades/subprocesos que están incluidos en el


proceso a describir y su orden cronológico

 Si el nivel de destalle definido incluye actividades menores, listarlas también.


Identificar y listar los puntos de decisión

 Construir el diagrama respetando la secuencia cronológica y asignando los


correspondientes símbolos

 Asignar un título al diagrama y verificar que esté completo y describa con exactitud el
proceso elegido

7
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Reglas para la construcción de diagramas de flujo

Todo diagrama de flujo debe tener un inicio y un fin.

Ilustración 13. Inicio y fin

Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser rectas
verticales y horizontales y no se deben cruzar.

Ilustración 14. Forma correcta

Ilustración 16. Forma incorrecta

Ilustración 15. Forma correcta

Ilustración 17. Forma incorrecta

Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben estar
conectadas.

El diagrama de flujo debe ser construido de arriba hacia abajo (top-down) y de izquierda a
derecha (left-right).

La notación empleada en el diagrama de flujo debe ser independiente del lenguaje de


programación.

Si el diagrama de flujo requiere más de una hoja para su construcción, se debe utilizar
conectores adecuados y enumerar las páginas convenientemente.

8
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

A un símbolo del diagrama (excepto líneas) no puede llegar más de una línea.

Ilustración 18. Forma incorrecta Ilustración 20. Forma incorrecta

Ilustración 19. Forma correcta

Ilustración 21. Forma correcta

2.1.4. Elaboración de diagramas de flujo

Esquema general de un diagrama de flujo

Ilustración 22. Esquema general del diagrama de flujo

9
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ejemplo 2.1. Construya un diagrama de flujo tal que dado los datos A, B, C y D que
representan números enteros, escriba los mismos en orden inverso.

Solución

Ilustración 23. Solución al ejemplo 2.1 (diagrama de flujo general)

Ejemplo 2.2. Escriba (en papel) un diagrama de flujo que tenga como entradas los datos
enteros A y B y escriba el resultado de la siguiente expresión:

(A + B) ^2 / 3

El símbolo ^2 : Al cuadrado

Solución

Consideraciones:

a. Datos: A y B (variables de tipo entero).

b. Para indicar un proceso utilizamos

c. Para asignar un valor o una expresión a una variable utilizamos

Variable  expresión o valo

10
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla 2: tabla de solución de ejercicio 2.1

Diagrama de flujo Prueba de escritorio

Ilustración 24. Explicación de las variables:


Diagrama de flujo

 A, B: variables de tipo entero.

 RES: variable de tipo real, almacena el resultado de la


operación.

# A B A+B (A+B)^2 RES=((A+B)^2)/


3

1 5 6 11 121 40.33

2 7 10 17 289 96.33

3 0 3 3 9 3.00

4 12 2 14 196 65.33

5 14 -5 9 81 27.00

2.1.5. Pruebas de escritorio de un diagrama de flujo

La prueba de escritorio es una herramienta útil para entender que hace un determinado
diagrama de flujo, o para verificar que un algoritmo cumple con la especificación sin
necesidad de ejecutarlo. Básicamente, una prueba de escritorio es una ejecución ‘a mano’
del algoritmo, por lo tanto se debe llevar registro de los valores que va tomando cada una
de las variables involucradas en el mismo.

Ejemplo 2.3. Un estudiante obtiene 5 calificaciones a lo largo del semestre. Escriba (en
papel) un diagrama de flujo que imprima el promedio de sus calificaciones.

Solución

11
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Consideraciones:

a. Datos: CAL1, CAL2, CAL3, CAL4, CAL5

Variables de tipo real que representan las 5 calificaciones.

b. El promedio de las calificaciones está dado por la formula

(CAL1+ CAL2+ CAL3+ CAL4 + CAL5) / 5

c. Para asignar un valor o una expresión a una variable utilizamos

Variable  expresión o valor

d. Diagrama de flujo

Tabla 3: tabla de solución de ejercicio 2.3

Diagrama de flujo Prueba de escritorio

Ilustración 25. Diagrama de Explicación de las variables:


flujo

 CAL1, CAL2, CAL3, CAL4, CAL5: variables de


tipo real que representan las calificaciones

 PRO: variable de tipo real, almacena el promedio


de la operación

CAL1 CAL2 CAL3 CAL4 CAL5 PRO

4 10 5 6 7 6.4

1 1 1 1 1 1

4 5 10 20 3 8.4

10 3 10 5 2 6.0

En las siguientes direcciones de Internet se puede encontrar información de software para


la elaboración de Diagramas de Flujo:

12
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

• Eduteka – Diagramas de Flujo

http://www.eduteka.org/modulos.php?catx=4&idSubX=117

• GraFI-co http://www.eduteka.org/pdfdir/graFIco.rar

• SmartDraw http://www.smartdraw.com

• WinEsquema http://www.softonic.com/ie/27771/WinEsquema

• Dia Win32 Installer http://www.softonic.com/ie/33781/dia

• DFD 1.0 http://www.softonic.com/ie/16035/DFD

• Paraben's Flow Charter http://www.paraben.com/html/flow.html

• Edraw Flowchart http://www.edrawsoft.com/flowchart.php

• Novagraph Chartist http://www.tucows.com/preview/289535.html

• Flow Charting 6 http://www.patton-patton.com

• OrgPlus http://www.tucows.com/preview/281861.html

• Antechinus Draw Magic http://www.tucows.com/preview/254904.html

13
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

2.2. PSEUDOCÓDIGOS

Es un mezcla de lenguaje de pseudoprogramación y de lenguaje natural es decir, muy


parecido a un lenguaje de programación, es muy fácil de utilizar, ya que es muy similar al
español (inglés o cualquier otro idioma).

Pseudocódigo: forma genérica de escribir un algoritmo, por medio de un lenguaje simple


sin necesidad de conocer la sintaxis de un lenguaje de programación.

Algunas palabras utilizadas en el pseudocódigo:

– Inicio

– Fin

– Leer

– Escribir

– Asignar (x_ y+z)

2.2.1. Definición de pseudocódigo

En esencial, el pseudocódigo se puede definir como un lenguaje de especificaciones de


algoritmos. Es la representación narrativa de los pasos que debe seguir un algoritmo para
dar solución a un problema determinado, el pseudocódigo utiliza palabras que indican el
proceso a realizar, utiliza palabras, no gráficos.

Ejemplo 2.4. Calculo del área del rectángulo

Inicio

leer; base, altura

área base x altura

escribir; base, altura, área

Fin

14
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ejemplo 2.5. Algoritmo cualitativo: Hacer una llamada telefónica utilizando


Pseudocódigo y diagrama de flujo.

Ilustración 26. Algoritmo cualitativo

2.2.2. Ventajas de utilizar el pseudocódigo

 Ocupa menos espacio en una hoja de papel

 Permite representar en forma fácil operaciones repetitivas complejas

Es muy fácil pasar de pseudocódigo a un programa en algún lenguaje de programación

 Si se siguen las reglas se puede observar claramente los niveles que tiene cada
operación

2.2.3. Características de los pseudocódigos

Las principales características son:

 Se puede ejecutar en una computadora

 Es una forma de representación sencilla de utilizar y de manipular

 Facilita el paso del programa al lenguaje de programación

 Es independiente del lenguaje de programación que se vaya a utilizar

15
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

 Es un método que facilita la programación y solución al algoritmo del programa

Ejemplo 2.6. Invertir datos. Dado un conjunto de datos de entrada hacer el


pseudocódigo y diagrama de flujo que invierte el orden de los mismos y los imprima.
Utilizando las variables A, B, C y D son variables de tipo entero.

Tabla 4: tabla de solución de ejercicio 2.6

Pseudocódigo Diagrama de flujo

Se definen las variables a utilizar: Ilustración 27. Diagrama de flujo

A, B, C, D variables de tipo entero.

Se elabora el pseudocódigo:

Inicio

Leer A, B, C, D

Escribir D, C, B, A

Fin

Observaciones

Escribir un programa es sencillo cuando se conoce las


instrucciones del pseudocódigo. La “tarea intelectual"
consiste en la construcción del diagrama de flujo.

Ejemplo 2.7. Calcular el área de un triángulo rectángulo y muestre el resultado en


pantalla, hacer el pseudocódigo y el diagrama de flujo.

Tabla 5: tabla de solución de ejercicio 2.7

Seudocódigo Diagrama de flujo

Se definen las variables a

16
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

utilizar:

DIV variable de tipo real

BASE variable de tipo real Ilustración 28. Diagrama de flujo

ALTURA variable de tipo real

AREA variable de tipo real

Se elabora el pseudocódigo:

Inicio

DIV  2

Leer la base BASE

Leer la altura ALTURA

Hace un calculo

AREA  BASE *
ALTURA

Calcular el área

AREA  AREA / DIV

Mostrar AREA

Final

Ejemplo 2.8. Obtener el cuadrado y el cubo de un número entero positivo y mostrar los
resultados, hacer el pseudocódigo y el diagrama de flujo.

17
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla 6: tabla de solución de ejercicio 2.8

Pseudocódigo Diagrama de flujo

Se definen las variables a utilizar: Ilustración 29. Diagrama de flujo

NUM es una variable de tipo entero

CUA variable de tipo real

CUB variable de tipo real

Se elabora el pseudocódigo

Inicio

Leer NUM

Obtener el cuadrado del numero

CUA  NUM*NUM

Obtener el cubo del numero

CUB  NUM^3

Escribir resultados:

El cuadrado del numero CUA

El cubo del numero CUB

Fin

18
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ejemplo 2.9. Calcular el perímetro y área del rectángulo, hacer el pseudocódigo y el


diagrama de flujo.

Tabla 7: tabla de solución de ejercicio 2.9

Pseudocódigo Diagrama de flujo

Se definen las variables a utilizar:

BASE variable de tipo real

ALTURA variable de tipo real

AREA variable de tipo real

PERIMETRO variable de tipo real

Se elabora el pseudocódigo:

Inicio

Leer BASE

Leer ALTURA

Calcular el área

AREA  BASE * ALTURA

Calcular el perímetro

PERIMETRO  2*(BASE+ALTURA)

Escribir resultados:

El área AREA

El perímetro PERIMETRO

Fin

Antes de iniciar con el estudio del tercer tema de esta unidad te invitamos a realizar los
ejercicios propuestos en la Actividad Complementaria 2.1 con el fin de reforzar tu
aprendizaje al máximo, así como la Actividad de Aprendizaje 2.1. ¡¡Mucho éxito!!

19
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

20
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

2.3. DIAGRAMAS ESTRUCTURADOS (NASSI-SCHNERMAN)

El diagrama estructurado Nassi-Shneiderman es una técnica hibrida (una mezcla) entre


Diagramas de Flujo y Pseudocódigo. Esta técnica, también conocida como Diagrama de
Chapín, utiliza una serie de cajas, similar a los diagramas de flujos, pero no requiere la
utilización de flechas, debido a que su flujo siempre es descendente. En programación de
computadoras un diagrama Nassi-Shneiderman (o NSD por sus siglas en inglés) es una
representación gráfica que muestra el diseño de un programa estructurado. Fue
desarrollado en 1972 por Isaac Nassi y Ben Shneiderman, este diagrama también es
conocido como estructograma, ya que sirven para representar la estructura de los
programas.

Ejemplo 2.10:

Tabla 8: tabla de ejemplo 2.10

Inicio

Acción 1

Acción 2

………..

Fin

Está basado en un diseño top-Down (de lo complejo a lo simple), el problema que


resolver es dividido en subproblemas cada vez más pequeños - y simples - hasta que solo
queden instrucciones simples y construcciones para el control de flujo.

El diagrama Nassi-Shneiderman refleja la descomposición del problema en una forma


simple usando cajas anidadas para representar cada uno de los subproblemas.

Ejemplo 2.11. Calcular el impuesto de una persona.

21
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ilustración 30. Solución al ejemplo 2.11

2.3.1. Que es un diagrama estructurado

Diagrama estructurado: Son una técnica que permite formular algoritmos mediante
una representación geométrica y de asignación de espacios de un bloque específico.

2.3.2. Características de los diagramas estructurados

 En la primera caja debe ir el nombre o título del algoritmo, en el recuadro siguiente


debe ir la palabra Inicio

 La última instrucción de un Diagrama NSD debe ser el recuadro Fin.


Todas las declaraciones de variables, funciones deben estar especificadas bajo el
recuadro que contiene la palabra Inicio

 Las estructuras de selección y cíclicas deben estar lo más clara posible


El diseño debe caer en una hoja, a excepción de la utilización de funciones, las cuales
pueden estar en otra hoja, debido a que se consideran un algoritmo diferente

Desventajas de los diagramas NSD

 En algoritmos extensos su diseño es muy difícil de comprender

 La mantención o modificación de este tipo de diagramas es tediosa

22
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

 Requiere de hojas muy extensas para ser escrito, debido a que carece de conectores
que permitan su conexión con otras hojas

2.3.3. Representación de las estructuras de control

(Secuencia, iteración y decisión)

Cuenta con un conjunto limitado de símbolos para representar los pasos del algoritmo,
por ello se apoya en expresiones del lenguaje natural; sin embargo, dado que el lenguaje
natural es muy extenso y se presta para la ambigüedad, solo se utiliza un conjunto de
palabras, a las que se denomina palabras reservadas.

Secuencia

Ilustración 31. Secuencia

Iteración

 Ciclo Mientras

Ilustración 32. Ciclo mientras

23
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

 Ciclo Repetir

Ilustración 33. Ciclo repetir

 Ciclo Desde / Para

Ilustración 34. Ciclo desde/para

 Alternativas anidadas. Consta de una serie de estructuras si, unas interiores a


otras; a su vez, dentro de cada estructura pueden existir diferentes acciones. Se utiliza
para diseñar estructuras que contengan más de dos alternativas.

Ilustración 35. Alternativas anidadas

24
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Decisión

 Decisión simple.

Ilustración 36. Decisión simple

 Alternativa doble

Ilustración 37. Alternativa doble

 Alternativa múltiple

Ilustración 38. Alternativa múltiple

25
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ilustración 39. Alternativa múltiple

Ilustración 40. Alternativa múltiple

Ejemplo 2.12. Elabora una solución, la más conveniente, para calcular el valor de la suma
1 + 2 + 3 + … + 100, utilizando la estructura mientras (algoritmo visto en clase).

algoritmo suma_1_a_100

var

entero: contador, SUMA

Inicio

contador ← 1

SUMA ← 0

mientras contador <= 100 hacer

SUMA ← SUMA + contador


26
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

contador ← contador + 1

fin_mientras

escribir (‘La suma es:’, SUMA)

fin

algoritmo suma_1_a_100

var

entero: contador, SUMA

begin

contador ← 1

SUMA ← 0

while contador <= 100 do

SUMA ← SUMA + contador

contador ← contador + 1

endwhile

write (‘La suma es:’, SUMA)

end

27
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ilustración 41. Solución al ejercicio 2.12

Ejemplo 2.13. Elabora una solución, la más conveniente, para calcular la suma de todos
los números pares entre 2 y 1000, utilizando la estructura desde.

algoritmo pares_2_a_1000

var

entero: i, SUMA

inicio

SUMA ← 0

desde i ← 2 hasta 1000 incremento 2 hacer

SUMA ← SUMA + i

fin_desde

28
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

escribir (‘La suma es:’, SUMA)

fin

algoritmo pares_2_a_1000

var

entero: i, SUMA

begin

SUMA ← 0

for i ← 2 to 1000 increase 2 do

SUMA ← SUMA + i

endfor

write (‘La suma es:’, SUMA)

end

29
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Ilustración 42. Solución al ejercicio 2.13

Ejemplo 2.14. Elabora una solución, la más conveniente, para calcular la suma de los
números impares hasta N (inclusive), utilizando la estructura repetir.

algoritmo impares_1_a_N

var

entero: N, contador, SUMA

inicio

SUMA ← 0

contador ← 1

Leer (N)

repetir

SUMA ← SUMA + contador

30
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

contador ← contador + 2

hasta_que contador > N

escribir (‘La suma es:’, SUMA)

fin

Ilustración 43. Solución al ejercicio 2.14

Ejemplo 2.15. Elabora una solución, la más conveniente, para calcular el factorial de un
número N (N! = N * (N – 1) * (N – 2) * … * 3 * 2 * 1).

algoritmo factorial

var

entero: i, N, FACTORIAL

inicio

31
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

leer (N)

si N < 0 entonces

escribir (‘El número dado debe ser positivo.’)

si_no

FACTORIAL ← 1

Si N > 1 entonces

desde i ← 2 hasta N incremento 1 hacer

FACTORIAL ← FACTORIAL * i

fin_desde

fin_si

escribir (‘El factorial de’, N, ‘es:’, FACTORIAL)

fin_si

fin si

Ilustración 44. Solución al ejercicio 2.15

32
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

2.4. PASOS PARA LA CREACIÓN Y DESARROLLO DE ALGORITMOS

2.4.1. Declaración del problema

Especificación. Se conoce también como definición del problema o análisis del


programa. En este paso se determinan la información inicial para la elaboración de la
solución del problema. Es donde se determina qué es lo que se debe resolver, de qué
presupuestos se debe partir, preparar y entender el planteamiento del problema.

Plantear el problema requiere de cinco tareas:

I. Determinación de objetivos del problema: Debe definirse claramente el problema


que deberán ser resuelto o las tareas que hay que realizar, esto permitirá saber qué
es lo que se pretende solucionar y proporcionará información útil para el
planeamiento de la solución

II. Determinación de la salida deseada: Los datos seleccionados deben ser arreglados en
una forma ordenada para producir información, esta salida podría ser una salida de
impresión o de presentación en el monitor

III. Determinación de los datos de entrada: Una vez identificada la salida que se desea,
se pueden determinar los datos de entrada y la fuente de estos datos, los datos
deben ser recolectados y analizados

IV. Determinación de los requerimientos de procesamiento: Aquí se definen las tareas


de procesamiento que deben desempeñarse para que los datos de entrada se
conviertan en una salida

V. Documentación de las especificaciones del problema: Es importante disponer de


documentación permanente, deben registrarse todos los datos necesarios para el
procesamiento requerido. Esto conduce al siguiente paso

2.4.2. Desarrollo de un modelo

33
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

La representación de los fenómenos se hace a través de modelos, los cuales son


abstracciones que destacan las características más sobresalientes de ellos, o bien, aquellas
características que sirvan al objetivo para el cual se realiza el modelo. Los problemas
computables pueden representarse a través de lenguaje matemático o con la definición de
algoritmos. Un algoritmo para un problema es una secuencia de pasos a seguir, no
ambiguos, finitos y determinísticos que llevan a la solución de un problema. Para poder
elaborar un modelo de solución del problema en la teoría de algoritmos, es necesario
recordar que existen diferentes modelos de para el desarrollo de un algoritmo, el cual
debe y puede escribirse como una expresión en algún lenguaje:

 Descripción narrada

 Notación matemática

 Pseudocódigo

 Diagramas de flujo

 Lenguaje de computadora

Esta fase se lleva a cabo en un papel, estableciendo lo más claramente posible la finalidad
de cada etapa, los datos que se necesitan de entrada, los datos que producirán en salida,
los algoritmos que se utilizaran, etc.

2.4.3. Diseño del procedimiento de solución

Para diseñar un algoritmo de solución se debe comenzar por identificar las tareas más
importantes para resolver el problema y disponerlas en el orden en el que han de ser
ejecutadas. Los pasos en esta primera descripción pueden requerir una revisión adicional
antes de obtener un algoritmo claro, preciso y completo, es diseñar cualquier solución al
problema o las aplicaciones que se requieren para satisfacer las necesidades, en este paso
se genera una solución con técnicas de programación como diseño descendente de
programas, pseudocódigos, diagramas de flujo y estructuras lógicas.

34
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

2.4.4. Validación

Prueba de escritorio: Este paso se aplica siguiendo paso por paso las instrucciones del
algoritmo, anotando los diferentes valores que van tomando las variables, de forma que se
pueda verificar si hay errores en alguna instrucción, obviamente éste método es muy
engorroso para algoritmos muy extensos, por lo que en estos casos no sería aplicable.

2.4.5. Implementación

Una vez que el algoritmo está diseñado, representado mediante pseudocódigo y verificado
se debe pasar a la fase de codificación o traducción del algoritmo a un determinado
lenguaje de programación, que deberá ser completada con la ejecución y comprobación
del programa en computadora.

2.4.6. Análisis y complejidad

Consiste realizar el análisis y propuestas de solución simples.

2.4.7. Pruebas

Consiste en verificar la funcionalidad del programa a través de varios métodos para


detectar errores posibles. Los métodos de Prueba son:

a. Chequeo de escritorio. El usuario revisa la solución en un listado línea por línea en


busca de errores de lógica

b. Prueba manual de datos de muestra. Se corre la prueba de escritorio simulando el


programa en forma manual aplicando datos tanto correctos como incorrectos para
comprobar que funciona correctamente

35
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

2.4.8. Documentación

Consiste en describir por escrito a nivel técnico los procedimientos relacionados con el
problema, algoritmo o programa y su modo de uso. También se debe documentar el
programa para que sea más entendible.

¿Para quién es la documentación?

- Usuarios

- Operadores

- Programadores

- Analistas de sistemas

- Administradores de sistemas

Los documentos que se elaboran son el Manual de Usuario y Manual del Analista.

A los usuarios se les elabora un manual de referencia para que aprendan a utilizar el
programa. Esto se hace a través de capacitaciones y revisión de la documentación del
manual de usuario, el manual del usuario no está escrito a nivel técnico sino al de los
distintos usuarios previstos y explica en detalle cómo usar el programa, es la descripción
de las tareas que realiza el programa, instrucciones necesarias para su instalación puesta
en marcha y funcionamiento, recomendaciones de uso, menús de opciones, método de
entrada y salida de datos, mensajes de error, recuperación de errores, etc. A los
operadores por si se presentan mensajes de error, sepan cómo responder a ellos. Además
que se encargan de darle soporte técnico al programa.

A los programadores a través del manual del analista para que recuerden aspectos de la
elaboración del programa o en caso que otras personas puedan actualizarlo o modificarlo
(darle mantenimiento) y no son necesariamente las personas que lo diseñaron. Es por ello,
que la documentación debe contener algoritmos y diagramas de flujo de los diferentes
módulos que lo constituyen y las relaciones que se establecen entre ellos; listados del
programa, corridas, descripción de variables que se emplean en cada módulo, cuáles son

36
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

comunes a diferentes módulos y cuáles locales; descripción de los ficheros de cada


módulo y todo lo que sea de importancia para un programador.

A los analistas de sistemas que son las personas que deberán proporcionar toda la
información al programador, estos se encargan de hacer una investigación previa de cómo
realizar la solución del problema, el algoritmo y el programa, y debe documentar con las
herramientas necesarias para que el programador pueda desarrollar el sistema en algún
lenguaje de programación adecuado.

Hemos llegado al término de esta unidad donde has podido conocer los algoritmos
computacionales y los métodos para desarrollarlos. Te invitamos a resolver la Actividad
Complementaria 2.2 para reforzar tus conocimientos y la Actividad de Aprendizaje 2.2
que sumará puntos a tu calificación.

RESUMEN DE LA UNIDAD 2

Entendemos como diagrama de flujo la representación esquemática de un algoritmo que


muestra gráficamente los pasos a seguir para alcanzar la solución de un problema. Los
diagramas de flujo se componen de varias figuras o símbolos que ilustran el proceso a
seguir para la solución de un problema.

Algunas de las ventajas que se tiene al construir los diagramas de flujo es que hace más
visible la información que utilizamos en la solución de un problema, esto ayuda a clarificar
las ideas de lo que queremos resolver a procesar organizar y priorizar nueva información,
además de que estimulan el pensamiento creativo el cual es indispensable para la solución

37
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

de problemas; así mismo nos ayuda a identificar los pasos erróneos que pudiéramos tener
y hacer las modificaciones pertinentes para posteriormente poder agilizar la codificación
del algoritmo a un lenguaje de programación.

Un diagrama de flujo utiliza símbolos estándar en el que cada paso del algoritmo se
visualiza dentro del símbolo y en el orden en que estos pasos se ejecutan, se indica
conectándolos con flechas llamadas líneas de flujo, ya que indican el flujo lógico del
algoritmo.

Los diagramas de flujo siempre deben de tener un inicio y un fin, aunque existen infinidad
de símbolos utilizados en los diagramas de flujo, el esquema general del diagrama de flujo
es el siguiente:

Ilustración 45. Esquema general del diagrama de flujo

38
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

Tabla 9. Criterios de evaluación de la Unidad 2

UNIDAD PRODUCTO VALOR OBSERVACIONES

2.1. Diagramas de Ejercicios 5%


flujo

2.2 Técnicas de
diseño de Algoritmos

2.3 Estrategias de Ejercicios 5%


diseño de algoritmos

2.4 Pasos para la


creación y desarrollo
de Algoritmos

TOTAL UNIDAD 2 10%

REFERENCIAS COMPLEMENTARIAS

Colegio de Bachilleres del Estado de Sonora. (2007). Algoritmos y diagramación. Manual de


prácticas. Recuperado el 27 de Febrero de 2017, de:
https://creatonpy.wikispaces.com/file/view/algoritmos-y-diagramacion.pdf

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

República Bolivariana de Venezuela, Ministerio de Educación Superior, Fundación Misión


Sucre. Programa Nacional de Formación en Sistemas e Informática. Ejemplos y ejercicios.
Recuperado el 21 de marzo del 2017, de:

39
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 2. TÉCNICAS PARA LA REPRESENTACIÓN DE ALGORITMOS

https://es.slideshare.net/angelfg/ejemplos-de-algoritmos

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

Universidad de Antioquia, Facultad de Ciencias Exactas y Naturales, Departamento de


Matemáticas. (2009). Introducción a los Computadores Algoritmos computacionales.
Recuperado el 27 de Febrero de 2017, de:
http://ciencias.udea.edu.co/programas/pregrado/CNM-130/docs/clase4sinp.pdf

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

40
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

UNIDAD 3: COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

En el siguiente esquema se representan los contenidos temáticos correspondientes a la


primera unidad temática de Algoritmos Computacionales, cada uno de estos temas
guardan relación entre sí.

Ilustración 1. Mapa de contenidos temáticos. Unidad 3

INTRODUCCION

En esta unidad temática se pretende mostrar los componentes y técnicas para el diseño de
algoritmos, de esta manera podremos elegir que componentes llevara nuestro algoritmo
de acuerdo al problema que deseemos resolver a si mismo utilizar la mejor técnica para
hacerlo más rápido y eficiente.

Como primer tema conoceremos y aplicaremos los componentes de un algoritmo, estos


son: Tipos de datos, operadores, variables, expresiones y estructuras de control.

En el siguiente tema podremos apreciar las técnicas de diseño de algoritmos, las cuales
nos ayudaran a automatizar nuestros programas y de acuerdo a cada uno de ellos
podemos utilizar la técnica más sencilla que facilite la elaboración de nuestro algoritmo, las

1
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

técnicas que veremos son las siguientes: Programación estructurada, el diseño de Top-
Down, la programación modular y la codificación estructurada.

En el tercer tema abordaremos la eficiencia de los algoritmos, definiendo eficiencia como:


“es la virtud y facultad para lograr un efecto determinado”, se dice que un algoritmo es
eficiente cuando logra llegar a sus objetivos planteados utilizando la menos cantidad de
recursos posibles, para lograr lo anterior tendremos que analizar los siguientes conceptos:
Eficiencia, medidas de eficiencia, concepto de instancia y tamaño de los datos.

Para finalizar con nuestra unidad temática estudiaremos el tema de estrategias de diseño
de algoritmos de las cuales podemos elegir la que mejor se adapte para el diseño de
nuestro algoritmo, dependiendo del problema que deseemos resolver, las estrategias que
veremos son: Recursión, dividir para conquistar, técnicas Ávidas, método de retroceso y
programación dinámica.

VINCULACIÓN DIDÁCTICA

CONTENIDO-COMPETENCIAS:

Reconoce los componentes de un algoritmo, identifica las técnicas de diseño de


algoritmos, analiza y fundamenta cuando un algoritmo es eficaz pero no eficiente.

Compañero y compañera es momento de centrar toda tu atención en el contenido ya que


estamos en la recta final d esta gran aventura, conociendo los algoritmos. ¡Mucho éxito!

3.1. COMPONENTES DE UN ALGORITMO

Definición de algoritmo

En programación, un algoritmo establece, de manera genérica e informal, la secuencia de


pasos o acciones que resuelve un determinado problema, los algoritmos constituyen la
documentación principal que se necesita para poder iniciar la fase de codificación y, para
representarlos, se utiliza, fundamentalmente, dos tipos de notación: pseudocódigo y

2
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

diagramas de flujo, el diseño de un algoritmo es independiente del lenguaje que después se


vaya a utilizar para codificarlo.

Un algoritmo escrito en pseudocódigo siempre se suele organizar en tres secciones:


cabecera, declaraciones y cuerpo, en la sección de cabecera se escribe el nombre del
algoritmo, en la sección de declaraciones se declaran algunos objetos (variables,
constantes, etc.) que va a utilizar el programa. En el cuerpo están descritas todas las
acciones que se tienen que llevar a cabo en el programa, y siempre se escriben entre las
palabras inicio y fin. Por ejemplo, el algoritmo de un programa que va a calcular la suma de
dos números enteros cualesquiera introducidos por el usuario y después, va a mostrar
por pantalla el resultado obtenido, puede ser el siguiente:

algoritmo Sumar

variables

entero a, b, c

inicio
escribir( "Introduzca el primer número (entero): " )

leer( a )

escribir( "Introduzca el segundo número (entero): " )

leer( b )

c←a+b

escribir( "La suma es: ", c )

fin

3
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.1.1. Tipos de datos

Datos: Es la expresión general que describe los objetos con los cuales opera el programa.
Por ejemplo, la edad y el domicilio de una persona, forman parte de sus datos. Los datos
se sitúan en objetos llamados variables.

¿Qué tipos de datos existen?

 Datos de tipo entero

 Datos de tipo real

 Datos de tipo lógico

 Datos de tipo carácter

 Datos tipo cadena

Clasificación de los tipos de datos

Los datos que utilizan los programas (o algoritmos) se pueden clasificar en base a
diferentes criterios. Uno de los más significativos es aquel que dice que todos los datos
que utilizan los programas son simples o compuestos “estructuras de datos”.

a) Simples

Un dato simple es indivisible (atómico), es decir, no se puede descomponer.


Ejemplo: Un año es un dato simple.

Año...: 2006

Un año se expresa con un número entero, el cual no se puede descomponer.

Ejemplo: Otro ejemplo de dato simple es una letra.

Letra...: t

Una letra se representa con un carácter del alfabeto. Pero, cuando varias letras se
agrupan, entonces se obtiene un dato compuesto por varios caracteres.

4
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Simples como numéricos y alfanuméricos y Estructuras de datos que pueden ser


internas o externas. (No tienen estructura); Numéricos (enteros, reales....etc.), cuyo
contenido es una serie de dígitos (0-9). Carácter (char, string), Lógicos.

b) Compuestos o Estructuras de datos que pueden ser internas o externas.

Sin embargo, un dato compuesto está formado por otros datos.

Conjuntos de simples que están relacionados entre si, arrays, cadena de caracteres,
etc.

Ejemplo: Una fecha es un dato compuesto por tres datos simples (día, mes, año).
Fecha:
Día : 30

Mes : 11

Año : 2006

Ejemplo 4: Para formar un nombre de persona se utilizan varios caracteres.


Nombre : Ana (dato compuesto por tres caracteres)

A continuación, se van a estudiar cinco tipos de datos: entero, real, lógico, carácter y
cadena, de ellos, tan solo el tipo cadena es compuesto. Los demás son los tipos de datos
simples considerados estándares. Esto quiere decir que la mayoría de los lenguajes de
programación permiten trabajar con ellos. Por ejemplo, en lenguaje C es posible utilizar
datos de tipo entero, real y carácter, sin embargo, los datos de tipo lógico no se pueden
utilizar, ya que, no existen en este lenguaje. Existen otros tipos de datos, simples y
compuestos, que se estudiarán más adelante. A los tipos de datos simples estándares
también se les conoce como tipos de datos primitivos, básicos o fundamentales.

3.1.2. Operadores

Operación de asignación

Es el modo de darle valores a una variable. Se representa con el símbolo u operador, el


cual se conoce como instrucción o sentencia de asignación.

5
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Sintaxis: Nombre de la variable = expresión.

Ejemplo: cociente=1 x=67 y=56 h=’jaime’

Un Operador es un símbolo o palabra que significa que se ha de realizar cierta acción


entre uno o dos valores que son llamados operadores. Los operadores son aquellos que
nos sirven para hacer operaciones.

Tipos de Operadores:

a) Aritméticos (su resultado es un número): potencia, * , / , mod, div, + , -

b) Relacionales (su resultado es un valor de verdad): =, <, >, <=, >=, <>

c) Lógicos o Booleanos (su resultado es un valor de verdad): not, and, or, nand, nor.

d) Alfanuméricos : El punto (.) concatena dos o más cadenas de texto

e) Asociativos. El único operador asociativo es el paréntesis ( ), el cual permite


indicar en qué orden deben realizarse las operaciones. Cuando una expresión se
encuentra entre paréntesis, indica que las operaciones que están dentro de ellos
deben realizarse primero. Si en una expresión se utilizan más de un paréntesis se
deberá proceder primero con los que se encuentren más hacia el centro de la
expresión.

Tabla de operadores lógicos o Booleanos: (donde a y b son variables binarias) y (a sola en


el NOT es una variable unaria)

Tabla 1. Tabla de operadores lógicos.

A B AND OR NAND NOR A NOT

0 0 0 0 1 1 1 0

0 1 0 1 1 0 0 1

1 0 0 1 1 0

1 1 1 1 0 0

6
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.1.3. Variables

Las Variables son zonas de memoria cuyo contenido cambia durante la fase de
procesamiento de información. Son objetos cuyo valor puede ser modificado a lo largo de
la ejecución de un programa. Las variables llevan un nombre llamado identificador. Este
puede ser una cadena de letras y dígitos, es importante mencionar que depende del
lenguaje a utilizar.

Por ejemplo: x, curso99, nom_alum, etc.

Los Identificadores son palabras creadas por los programadores para dar nombre a los
objetos y demás elementos que necesitamos declarar en un programa: variables,
constantes, tipos, estructuras de datos, archivos, subprogramas, etc. En C++ y en Php, no
así en HTML, las letras mayúsculas se tratan como diferentes y distintas unas de otras.

Por ejemplo, contador, Contador y CONTADOR son tres nombres de identificadores


distintos. Un identificador no puede ser igual a una palabra reservada, y no debe tener el
mismo nombre que una función, ya sea definida por el usuario o de las bibliotecas propias
del programa.

Constantes son objetos cuyo valor permanece invariable a lo largo de la ejecución de un


programa. Una constante es la denominación de un valor concreto, de tal forma que se
utiliza su nombre cada vez que se necesita referenciarlo.

Por ejemplo, si se desea obtener un reporte para cada uno de los empleados de una
empresa, con sus datos generales, la fecha y cantidad de dinero que recibieron la última
semana, el dato fecha puede ser una constante ya que es el mismo para todos.

3.1.4. Expresiones

Una expresión es un conjunto de paréntesis, constantes y variables o funciones, se


evalúan y como resultado se obtiene un valor.

Expresiones Son representaciones de un cálculo necesario para la obtención de un


resultado. Estas pueden ser valores constantes, funciones o combinaciones de valores,
variables, funciones y operadores que cumplen determinadas reglas de construcción de
una expresión. Son un conjunto de operadores y operandos que producen un valor.

7
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Por ejemplo:

cos (pi() * x) + 12.56 * sqrt(100)

3.1.5. Estructuras de control

Un problema se puede dividir en acciones elementales o instrucciones, usando un número


limitado de estructuras o instrucciones de control (básicas) y sus combinaciones que
pueden servir para resolver dicho problema.

Instrucciones

Son cada una de las órdenes que forman el algoritmo.

Tipos de instrucciones:

a) Instrucciones de declaración

Nos sirven para declarar constantes o variables en el programa / algoritmo. Siempre


que vayamos a usar una variable / constante hay que declararla.

b) Instrucciones primitivas

Son las que hacen funciones sencillas como leer, escribir por pantalla o una asignación.

leer (variable)

imprimir (variable)

asignación a = b + 1

c) Instrucciones de control

Son las que dirigen el flujo de ejecución del algoritmo.

Tipos:

Secuénciales: Una detrás de otra, conforme se van encontrando, de arriba a abajo.


Selectivas: Pueden ser de tres tipos:

* Simples * Dobles * Compuestas

8
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.2. TÉCNICAS DE DISEÑO DE ALGORITMOS

3.2.1. Programación estructurada

La programación estructurada es un estilo con el cual se busca que el programador


elabore programas sencillos y fáciles de entender. Para ello, la programación estructurada
hace uso de tres estructuras básicas de control. Éstas son:

 Estructura Secuencial

 Estructura Selectiva

 Estructura Repetitiva (Iterativa)

La programación estructurada se basa un teorema fundamental, el cual afirma que


cualquier algoritmo o programa, no importa el tipo de trabajo que ejecute, puede ser
elaborado utilizando únicamente las tres estructuras básicas (secuencia, selección,
iteración).

Definición de las tres estructuras básicas

Estructura Secuencial

Ilustración 2. Estructura secuencial Indica que las instrucciones de un programa se ejecutan una
después de la otra, en el mismo orden en el cual aparecen
en el programa.

Se representa gráficamente como una caja después de otra,


ambas con una sola entrada y una única salida.

Las cajas A y B pueden ser definidas para ejecutar desde


una simple instrucción hasta un módulo o programa
completo, siempre y cuando éstos también sean programas
apropiados.

9
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Estructura Selectiva

Ilustración 3. Estructura selectiva También conocida como la estructura SI-


VERDADERO-FALSO, plantea la selección
entre dos alternativas con base en el resultado
de la evaluación de una condición; equivale a la
instrucción IF de todos los lenguajes de
programación y se representa gráficamente de
la siguiente manera:

En el diagrama de flujo anterior, C es una


condición que se evalúa; A es la acción que se
ejecuta cuando la evaluación de esta condición
resulta verdadera y B es la acción ejecutada
cuando el resultado de la evaluación indica
falso. La estructura también tiene una sola
entrada y una sola salida; y las funciones A y B
también pueden ser cualquier estructura básica
o conjunto de estructuras.

Estructura Repetitiva (Iterativa)

10
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 4. Estructura repetitiva (iterativa) También llamada la estructura HACER-


MIENTRAS-QUE, corresponde a la ejecución
repetida de una instrucción mientras que se
cumple una determinada condición.

El diagrama de flujo para esta estructura es el


siguiente:

Aquí el bloque A se ejecuta repetidamente


mientras que la condición C se cumpla o sea
cierta. También tiene una sola entrada y una sola
salida; igualmente A puede ser cualquier
estructura básica o conjunto de estructuras.

Ventajas de la Programación Estructurada

Con la programación estructurada, elaborar algoritmos sigue siendo una labor que
demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este nuevo estilo
podemos obtener las siguientes ventajas:

1. Los algoritmos son más fáciles de entender. Un algoritmo estructurado puede ser
leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a
otro en la lógica, lo cual es típico de otros estilos programación.

2. Se logra una reducción del esfuerzo en las pruebas. El seguimiento de las fallas o
depuración (debugging o pruebas de escritorio) se facilita debido a la lógica más
visible, de tal forma que los errores se pueden detectar y corregir más fácilmente.

3. Se crean algoritmos más sencillos y más rápidos.

3.2.2. El diseño Top-Down

El diseño Top-Down fue promovido en la década de 1970 por el investigador de IBM


Harlan Mills y Nickaus Wirth. Mills desarrolló conceptos de programación estructurada
para utilizarlos y probarlos en un proyecto de 1969 que tenía como objetivo automatizar

11
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

algunos procedimientos del periódico New York Times. El desarrollo de este proyecto
hizo que se dispersara y se ampliara la idea de hacer los programas con esta filosofía de
trabajo al resto de los desarrolladores de IBM, así como al resto de la industria del
software. Por su parte, Nicklaus Wirth, desarrolló entre otros lenguajes, el lenguaje de
programación Pascal, escribió un artículo muy importante acerca del Desarrollo de
programas por medio de refinamiento de pasos. Esta idea de diseñar programas
permaneció como principal corriente de desarrollo hasta fines de la década de 1980.

Ilustración 5. Niclaus Wirth (izq.) y Harlan D. Mills


(der.)

Niclaus Wirth y Harlan D. Mills fueron los


primeros promotores del diseño Top-Down en
la década de 1970.

La solución a los problemas computacionales


puede llegar a ser muy complicada y compleja.
Cuando los programas son de miles de líneas, o
componerse de diversos archivos de código, es
imposible mantener todos los detalles del
programa en mente cuando se desarrolla un
algoritmo.

El diseño top-down es una herramienta que presenta en primer lugar una solución a un
problema general utilizando tres o cuatro pasos solamente. Cada uno de esos pasos en la
primera solución se divide en otros subpasos. Este proceso se repite varias veces, en cada
iteración se produce una solución más detallada al problema original. Cuando los pasos ya
no se pueden subdividir, el algoritmo ha terminado. El diseño top-down también se
conoce como descomposición funcional o refinamiento de pasos.

Top Down

También conocida como de arriba-abajo y consiste en establecer una serie de niveles de


mayor a menor complejidad (arriba-abajo) que den solución al problema. Consiste en
efectuar una relación entre las etapas de la estructuración de forma que una etapa

12
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de


información.

Este diseño 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 utilización de la técnica de diseño Top-Down tiene los siguientes objetivos básicos:

- Simplificación del problema y de los subprogramas de cada descomposición.

- Las diferentes partes del problema pueden ser programadas de modo independiente e
incluso por diferentes personas.

- El programa final queda estructurado en forma de bloque o módulos lo que hace más
sencilla su lectura y mantenimiento.

El diseño TOP-DOWN de algoritmos y programas

Utilizaremos abstracción en un sentido de “obtener la esencia” al identificar o percibir el


problema, de elevar nuestro punto de vista para ir englobando las partes componentes.
Veo a una pequeña hormiga circulando por la corteza de una rama, si logro abstraerme
puedo pasar a considerar el árbol en su totalidad, el bosque, la cuenca del río, la unidad
bioclimática, el continente, el planeta Tierra.

Es un camino hacia arriba, desde lo sencillo a lo complejo, desde las partes componentes
hasta las unidades englobadoras.

Utilizaremos aprehender en un doble sentido de coger, asir, abarcar y de llegar a conocer.


De acercar nuestro punto de vista para ir descifrando, conociendo, desentrañando las
partes componentes, veo el planeta Tierra, el continente, la unidad bioclimática, la cuenca
del río, el bosque, un árbol, una pequeña hormiga circulando por la rama del árbol, es un
camino hacia abajo, desde lo complejo a lo sencillo, desde las unidades englobadoras hasta
las partes componentes.

La abstracción del problema. La aprehensión del problema. ¿Por qué unas personas ven
cosas que otras no ven teniendo delante lo mismo?

13
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 6. Figura abstracta

En la figura tenemos el conocido efecto óptico de la copa y las dos caras, según
consideremos como fondo la parte blanca o la parte gris veremos una cosa u otra. Los
procesos de abstracción y aprehensión están en buena medida condicionados por nuestras
características personales, nuestras capacidades pero también por el ejercicio y esfuerzo,
el empeño y el uso de métodos o enfoques adecuados.

Analizaremos ahora lo que los programadores llaman diseño top – down de algoritmos
desde una perspectiva un poco libre. Existen desarrollos teóricos más o menos detallados,
pero nos conformaremos con “aprehender el espíritu”. El llamado diseño top – down
(arriba – abajo) de algoritmos o programas, no es otra cosa que trasladar al ámbito de la
programación una estrategia de resolución de problemas muy antigua, basada en la
capacidad humana de abstracción. Quizás algún emperador romano llegó a plantearse un
esquema parecido al siguiente:

14
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 7. Esquema para conquistar las Galias

Partió de un objetivo. Su condición humana no le permitía aprehender el mismo: era


demasiado abstracto, demasiado largo o complejo quizás para conocer todo lo que
implicaba. Dividió el problema en partes componentes más fáciles de aprehender. Algunas
ya le resultaban fácilmente comprensibles y ejecutables, pero otras seguían manteniendo
abstracción y complejidad. Estas las volvió a dividir y así sucesivamente hasta que su
objetivo complejo podía ser alcanzado a través de muchas acciones sencillas, construyó el
esquema desde lo general a lo particular, desde lo abstracto a lo aprehensible. Y lo
ejecutó desde lo particular a lo general, construyendo abstracciones complejas a partir de
elementos simples. Y conquistó Las Galias.

Cuando hablábamos de “Conocer el problema” planteamos la necesidad de dividirlo en


extensión y complejidad para hacerlo programable. Y proponíamos una regla orientativa:
“Sólo trataremos de programar aquello que mentalmente somos capaces de abarcar en
método, extensión y condicionantes”. Por otro lado clasificamos los problemas en de
resolución directa, documentada, iterativa, a resolver con tabla de decisión o de
resolución intuida pero método paso a paso a determinar.

Llega el momento de matizar planteamientos y de reestructurar nuestra clasificación de


los problemas. Posiblemente ya somos capaces de resolver los problemas que
mentalmente somos capaces de abarcar. Pero si sólo pudiéramos resolver los problemas
que somos capaces de “aprehender”, no habríamos llegado a desarrollar la energía
atómica, los trenes de alta velocidad o los sistemas bancarios modernos. Entonces, ¿Cómo
enfrentarnos a problemas que superan nuestra capacidad de aprehensión? Pues, de forma

15
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

muy sencilla, aplicando los criterios de abstracción y concreción que estamos viendo y
vamos a seguir desarrollando. La clasificación de problemas podemos definirla de una
nueva manera:

Ilustración 8. Clasificación de problemas

Llamamos problemas de resolución unipersonal a aquellos que se ajustan a la capacidad


de una persona. Pueden ser breves y directos, resolubles en unos pocos minutos, o largos
y complejos, implicando varios años de trabajo. Pero están limitados terriblemente por el
factor humano: una cabeza y dos manos. Por otro lado, la resolución grupal abarcaría
desde dos hasta miles de personas trabajando en un mismo objetivo.

Aprehensión global del problema significa que, aunque lo resolvamos por partes o paso a
paso, el proceso en su totalidad lo tenemos presente y conocemos o somos conscientes
de todas las partes.

Resolución por módulos en sucesión significaría que hemos dividido el problema en partes
y nos centramos en una de ellas, desconociendo o ignorando a las demás. El concepto de
módulo aplicado en la clasificación es libre: no ha de coincidir exactamente con lo que
hemos llamado módulo como elemento definido de programación. Podría sustituirse por
“partes” o “componentes”.

La resolución grupal sería la aplicable a problemas que se dividen en partes pero no para
abordar una detrás de la otra, como estaremos obligados a hacer si trabajamos solos, sino

16
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

para abordar varias partes simultáneamente o lo que se llama “atacar el problema por
varios frentes”.

Podemos modificar ahora el enunciado “Sólo trataremos de programar aquello que


mentalmente somos capaces de abarcar” por este otro, sin duda más ambicioso:

“Podemos desarrollar programas que exceden la capacidad de comprensión humana. Para


ello descompondremos los problemas abstractos sucesivamente hasta llegar a partes
componentes que mentalmente sea posible abarcar. El programa surgirá al integrar dichas
partes formando estructuras cada vez más complejas”.

Definido el problema u objetivo, podemos realizar un índice descendente de contenidos,


o, gráficamente, un esquema o diagrama descendente de contenidos. Supongamos el
objetivo: “Estudiar la tierra desde el punto de vista político”.

Tabla 2. Índice descendente de contenidos.

Índice descendente de contenidos

1. Planeta Tierra

1.1 Aguas internacionales

1.1.1 Océano Pacífico

1.1.2 Océano Índico

1.1.3 Océano Atlántico

1.1.4 Océano Ártico

1.2 Países reconocidos internacionalmente

1.3 Territorios no reconocidos o en litigio

1.3.1 Territorios fronterizos en litigio

1.3.2 Territorios adscritos no reconocidos internacionalmente

1.3.3 Territorios no adscritos y no reclamados

17
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

La numeración es libre pero ha de reflejar cuáles son las partes componentes de cada
estructura superior.

Esquema descendente de contenidos:

Ilustración 9. Esquema descendente de contenidos

La numeración es optativa y libre, al predominar el componente gráfico. Su principal


función es identificar un punto de partida en un esquema independiente.

Cada elemento del gráfico se denomina nodo. Cada nodo se encuentra en un nivel de
concreción o definición. El nivel 0 corresponde al problema primigenio que no ha sufrido
subdivisiones, el nivel 1 a los nodos que se derivan de una única división, el nivel 2 a los
nodos que se derivan de la división de nodos del nivel 1, el nivel 3 a los nodos que se
derivan de la división de nodos del nivel 2 y así sucesivamente.

Un índice descendente de contenidos puede recordar, muy de lejos, a un algoritmo, y un


esquema descendente a un diagrama de flujo. Pero obviamente son cosas muy distintas
conceptualmente. En general, nosotros preferimos usar los esquemas descendentes para
determinar los módulos del programa, o los módulos y esqueletos de los módulos, sin
llegar a un nivel de subdivisión que alcance a bucles, instrucciones, etc. Pero es posible
continuar descomponiendo hasta que aparecen nodos coincidentes con elementos del
pseudocódigo o el diagrama de flujo. Aun así, la única coincidencia será la aparición de
elementos similares, pero su organización y concepto siguen siendo distintos.

18
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

El uso del diseño Top-Down en programación, y hablando en abstracto, un problema


suele constar de tres partes típicas:

Ilustración 10. Diseño de Top Dow

Ejemplo 1. Aplicando la metodología Top-Down para el algoritmo de calcular el


volumen de un cilindro conociendo su altura y diámetro.

Ilustración 11. Metodología de Top Down

El nivel de desarrollo tiene que ser determinado por el algoritmo o programador. ¿Por
qué el nodo 1 no se subdivide? Porque el contenido del nodo 1 se controla mentalmente,
se entiende sin problema. Si se desglosa, se estará prácticamente a nivel de instrucción
elemental, haciendo uso de la metodología Top-Down el esquema descendente para ver la
estructura del algoritmo o programa.

19
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 12. Conocer el volumen de un cilindro mediante la metodología de Top-Down

En este ejemplo vemos algunas cosas interesantes. En primer lugar, no se ha buscado


tratar de usar un lenguaje directamente enfocado a la programación. En vez de
“Determinar diámetro (m)”, se podía haber escrito Pedir D, lo cual es más directo y más
“estilo de programador”. Sin embargo, no vemos muy razonable buscar un enfoque
directo a la programación porque existen herramientas mucho más potentes para ello
(pseudocódigo y diagramas de flujo). El objetivo del esquema descendente Top-Down de
contenidos es tener clara la estructura del programa, sus partes, para después
programarlo, que tener un desarrollo parecido al código del programa. Así pues, dados
estos objetivos, entendemos más claro escribir “Determinar diámetro (m)”, que nos
informa de que hemos de programar la captura de un dato (diámetro) que se espera en
metros, que escribir “Pedir D” que resulta poco descriptivo.

Otra cuestión que podemos ver es que dentro de los nodos de un nivel, algunos son
relativamente abstractos y otros elementales. Por ejemplo, en el nivel 2 el nodo “Preparar
datos para entrada en fórmula” goza de cierta abstracción, mientras que el nodo 8
“Mostrar volumen del cilindro” es de carácter elemental. Conclusión: el nivel en que se
encuentra un nodo no necesariamente refleja su grado de abstracción, siendo este
intrínseco al nodo sin importar su situación. Así, en un problema muy largo podríamos

20
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

encontrarnos nodos de nivel 1 de carácter elemental y no subdividido frente a nodos de


nivel 24 de carácter fuertemente abstracto.

Por último, en relación al esquema anterior, vemos un nodo que da lugar a otro de
inferior nivel sin que exista subdivisión. Esto obedece a abstracciones que constan de un
único componente elemental o a procesos englobadores que comprenden un único
elemento. Normalmente se trata de nodos abstractos cuya descendencia podría ser
amplia, pero que por circunstancias específicas del programa engloban a un solo elemento.
En este caso, “Salida de resultados” podría constar de distintos componentes, pero por
circunstancias específicas del algoritmo sólo tiene una.

Ejemplo 2.

Ilustración 13. Ejemplo 2

En este ejemplo se supone que por circunstancias específicas del programa se estableció
una única vía al entrar en el nodo de condiciones de acceso. Pero podía haber sido del
tipo:

21
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 14. Ejemplo utilizando diferentes condiciones

Ejemplo 3. Consideremos otro caso, el del problema de determinar si un número es


par o impar (cuyo algoritmo vimos al estudiar la instrucción Si... Entonces, aunque
recordemos que no habíamos introducido aún el concepto de módulo). El esquema
descendente podría ser algo así:

Ilustración 15. Ejemplo 3

Olvidándonos de que es un ejemplo y suponiendo que fuera un programa con cientos de


líneas, aquí tendríamos la estructura del programa. A partir de esta visión de conjunto
tendríamos que decidir cómo organizamos el código y los módulos. Un módulo irá
usualmente asociado a un nodo que requiere un desarrollo de cierta extensión y
complejidad. Vamos a suponer distintas organizaciones para nuestro ejemplo con el
supuesto de cientos de líneas.

22
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.2.3. La programación modular

Concepto de subalgoritmo

Subalgoritmo, Subprograma o Módulo: Parte de un programa que realiza una tarea


concreta mediante una serie de instrucciones.

Ventajas

 Facilita el diseño descendente

 Disminuye la complejidad del algoritmo

 Disminuye el tamaño total del programa

 Reusabilidad: ahorro de tiempo de programación

 División de la programación entre un equipo de programadores, reducción del tiempo


de desarrollo

 Facilidad en la depuración: comprobación individual de los módulos

 Programas más fáciles de modificar

 Estructuración en librerías específicas (biblioteca de módulos)

Criterios de descomposición Modular

Programación modular es uno de los métodos de diseño es más flexible y potentes


para mejorar la productividad de un algoritmo o programa.

23
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ilustración 16. Programación modular

Es momento de reforzar tus aprendizajes mediante la resolución de la Actividad


Complementaria 3.1, para posteriormente resolver la Actividad de Aprendizaje 3.1, la cual
tiene valor para tu calificación. Mucho éxito.

24
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.3. EFICIENCIA DE ALGORITMOS

Un objetivo natural en el desarrollo de un algoritmo o programa de computadora es


mantener tan bajo como sea posible el consumo de los diversos recursos,
aprovechándolos de la mejor manera que se encuentre. Se desea un buen uso, eficiente,
de los recursos disponibles, sin desperdiciarlos. Para que un programa sea práctico, en
términos de requerimientos de almacenamiento y tiempo de ejecución, debe organizar sus
datos en una forma que apoye el procesamiento eficiente.

Siempre que se trata de resolver un problema, puede interesar considerar distintos


algoritmos, con el fin de utilizar el más eficiente. Pero, ¿cómo determinar cuál es "el
mejor"?. La estrategia empírica consiste en programar los algoritmos y ejecutarlos en un
computador sobre algunos ejemplares de prueba. La estrategia teórica consiste en
determinar matemáticamente la cantidad de recursos (tiempo, espacio, etc.) que
necesitará el algoritmo en función del tamaño del ejemplar considerado.

El tamaño de un ejemplar x corresponde formalmente al número de dígitos binarios


necesarios para representarlo en el computador, pero a nivel algorítmico consideraremos
el tamaño como el número de elementos lógicos contenidos en el ejemplar.

3.3.1. Concepto de eficiencia

El Diccionario de la Real Academia Española indica que la eficiencia es “virtud y facultad


para lograr un efecto determinado”.

Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la


menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y de
esfuerzo humano.

Un algoritmo es eficaz cuando alcanza el objetivo primordial, el análisis de resolución del


problema se lo realiza prioritariamente. Puede darse el caso de que exista un algoritmo
eficaz pero no eficiente, en lo posible debemos de manejar estos dos conceptos
conjuntamente. La eficiencia de un programa tiene dos ingredientes fundamentales:
espacio y tiempo.

25
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

 La eficiencia en espacio es una medida de la cantidad de memoria requerida por un


programa

 La eficiencia en tiempo se mide en términos de la cantidad de tiempo de ejecución del


programa

Ambas dependen del tipo de computadora y compilador, por lo que no se estudiará aquí
la eficiencia de los programas, sino la eficiencia de los algoritmos. Asimismo, este análisis
dependerá de si trabajamos con máquinas de un solo procesador o de varios de ellos.

3.3.2. Medidas de eficiencia

Inventar algoritmos es relativamente fácil. En la práctica, sin embargo, no se pretende sólo


diseñar algoritmos, sino más bien que buenos algoritmos. Así, el objetivo es inventar
algoritmos y probar que ellos mismos son buenos.

La calidad de un algoritmo puede ser avalada utilizando varios criterios. Uno de los
criterios más importantes es el tiempo utilizado en la ejecución del algoritmo. Existen
varios aspectos a considerar en cada criterio de tiempo, uno de ellos está relacionado con
el tiempo de ejecución requerido por los diferentes algoritmos, para encontrar la solución
final de un problema o cálculo particular, normalmente, un problema se puede resolver
por métodos distintos, con diferentes grados de eficiencia, por ejemplo: búsqueda de un
número en una guía telefónica.

Cuando se usa una computadora es importante limitar el consumo de recursos.

Recurso Tiempo

 Aplicaciones informáticas que trabajan “en tiempo real” requieren que los cálculos se
realicen en el menor tiempo posible.

 Aplicaciones que manejan un gran volumen de información si no se tratan


adecuadamente pueden necesitar tiempos impracticables.

Recurso Memoria

 Las máquinas tienen una memoria limitada.

26
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

El análisis de la eficiencia de los algoritmos (memoria y tiempo de ejecución) consta de


dos fases: Análisis A Priori y Prueba A Posteriori.

El Análisis A Priori (o teórico) entrega una función que limita el tiempo de cálculo de un
algoritmo, consiste en obtener una expresión que indique el comportamiento del
algoritmo en función de los parámetros que influyan, esto es interesante porque:

 La predicción del costo del algoritmo puede evitar una implementación posiblemente
laboriosa

 Es aplicable en la etapa de diseño de los algoritmos, constituyendo uno de los factores


fundamentales a tener en cuenta

En la Prueba A Posteriori (experimental o empírica) se recogen estadísticas de tiempo


y espacio consumidas por el algoritmo mientras se ejecuta. La estrategia empírica consiste
en programar los algoritmos y ejecutarlos en una computadora sobre algunos ejemplares
de prueba, haciendo medidas para:

 Una máquina concreta

 Un lenguaje concreto

 Un compilador concreto

 Datos concretos

La estrategia teórica tiene como ventajas que no depende de la computadora ni del


lenguaje de programación, ni siquiera de la habilidad del programador, permite evitar el
esfuerzo inútil de programar algoritmos ineficientes y de desperdiciar tiempo de máquina
para ejecutarlos, también permite conocer la eficiencia de un algoritmo cualquiera que sea
el tamaño del ejemplar al que se aplique.

Criterios para determinar qué un algoritmo es eficiente:

a) Tiempo consumido para ejecutarse

b) Memoria usada para ejecutarse

c) Simplicidad

27
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

d) Adaptabilidad del algoritmo a las computadoras

e) Elegancia

f) Costo económico en su confección y puesta a punto

g) Exactitud en la resolución del problema

Criterios adicionales a tomarse en cuenta también para la eficiencia de un algoritmo:

a) Construcción (parte formal, teórica)

b) Expresión (para favorecer una buena implementación, buscar

c) la expresión lo más clara y concisa)

d) Validación (ver que realmente resuelve el problema)

e) Análisis del funcionamiento <— EFICIENCIA

f) Test (corrección de errores que se detectan)

3.3.3. Concepto de instancia

La palabra Instancia significa: Solicitud o Insistencia.

Una instancia de un algoritmo o programa es una copia de una versión ejecutable del
programa que ha sido escrito en la memoria del computador.

Un problema de computadora consiste en una caracterización de un conjunto de datos de


entrada, junto con la especificación de la salida deseada en base a cada entrada.

Un problema de computadora tiene una o más instancias, que son valores particulares
para los datos de entrada, sobre los cuales se puede ejecutar el algoritmo para resolver el
problema.

Ejemplo: el problema de computadora de multiplicar dos números enteros tiene por


ejemplo, las siguientes instancias: multiplicar 345 por 4653, multiplicar 2637 por 10000,
multiplicar -32341 por 12, etc.

Un problema de computadora abarca a otro problema de computador si las instancias del


segundo pueden ser resueltas como instancias del primero en forma directa.

28
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

3.3.4. Tamaño de los datos

Tamaño del dato. Variable o expresión en función de la cual intentaremos medir la


complejidad del algoritmo.

Es claro que para cada algoritmo la cantidad de recurso (tiempo, memoria) utilizados
depende fuertemente de los datos de entrada. En general, la cantidad de recursos crece a
medida que crece el tamaño de la entrada. El análisis de esta cantidad de recursos no es
viable de ser realizado instancia por instancia.

Se definen entonces las funciones de cantidad de recursos en base al tamaño (o talla) de la


entrada. Suele depender del número de datos del problema, este tamaño puede ser la
cantidad de dígitos para un número, la cantidad de elementos para un arreglo, la cantidad
de caracteres de una cadena, en problemas de ordenación es el número de elementos a
ordenar, en matrices puede ser el número de filas, columnas o elementos totales, en
algoritmos recursivos es el número de recursiones o llamadas propias que hace la función.

En ocasiones es útil definir el tamaño de la entrada en base a dos o más magnitudes. Por
ejemplo, para un grafo es frecuente utilizar la cantidad de nodos y de arcos. En cualquier
caso, se debe elegir la misma variable para comparar algoritmos distintos aplicados a los
mismos datos.

3.4. ESTRATEGIAS DE DISEÑO DE ALGORITMOS

3.4.1. Recursión

La recursividad es una técnica fundamental en el diseño de algoritmos eficientes, que


está basada en la solución de versiones más pequeñas del problema, para obtener la
solución general del mismo, se dice que un método es recursivo si contiene llamadas o
invocaciones a sí mismo.

Una instancia del problema se soluciona según la solución de una o más instancias
diferentes y más pequeñas que ella, es una herramienta poderosa que sirve para resolver
cierto tipo de problemas reduciendo la complejidad y ocultando los detalles del problema.
Esta herramienta consiste en que una función o procedimiento se llama a sí mismo, una

29
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

gran cantidad de algoritmos pueden ser descritos con mayor claridad en términos de
recursividad, típicamente el resultado será que sus programas serán más pequeños.

La recursividad es una alternativa a la iteración o repetición, y aunque en tiempo de


computadora y en ocupación en memoria es la solución recursiva menos eficiente que la
solución iterativa, existen numerosas situaciones en las que la recursividad es una solución
simple y natural a un problema que en caso contrario ser difícil de resolver. Por esta
razón se puede decir que la recursividad es una herramienta potente y útil en la
resolución de problemas que tengan naturaleza recursiva y, por ende, en la programación.
Existen numerosas definiciones de recursividad, algunas de las más importantes o sencillas
son éstas:

• Un objeto es recursivo si figura en su propia definición

• Una definición recursiva es aquella en la que el objeto que se define forma parte de la
definición (recuerde la regla gramatical: lo definido nunca debe formar parte de la
definición)

La característica importante de la recursividad es que siempre existe un medio de salir de


la definición, mediante la cual se termina el proceso recursivo.

Ventajas:

• Puede resolver problemas complejos

• Solución más natural

Desventajas:

• Se puede llegar a un ciclo infinito

• Versión no recursiva más difícil de desarrollar

• Para la gente sin experiencia es difícil de programar

3.4.2. Dividir para conquistar

Esta técnica es muy utilizada en la solución de problemas, esto se debe a que la idea básica
de esta técnica es simple, tenemos un problema complejo al cual dividimos en

30
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

subproblemas más pequeños a resolver, para resolver cada subproblema seguimos el


mismo procedimiento hasta que llegamos a un problema que es trivial, una vez resueltos
los subproblemas los combinamos para dar solución al problema original.

Muchos algoritmos útiles tienen una estructura recursiva, de modo que para resolver un
problema se llaman recursivamente a sí mismos una o más veces para solucionar
subproblemas muy similares. Esta estructura obedece a una estrategia dividir-y-conquistar,
en que se ejecuta tres pasos en cada nivel de la recursión:

 Dividir. Dividen el problema en varios subproblemas similares al problema original


pero de menor tamaño;

 Conquistar. Resuelven recursivamente los subproblemas si los tamaños de los


subproblemas son suficientemente pequeños, entonces resuelven los subproblemas de
manera directa; y luego,

 Combinar. Combinan estas soluciones para crear una solución al problema original.

La técnica Dividir para Conquistar (o Divide y Vencerás) consiste en descomponer el caso


que hay que resolver en subcasos más pequeños, resolver independientemente los
subcasos y por último combinar las soluciones de los subcasos para obtener la solución
del caso original.

3.4.3. Técnicas ávidas

El método ávido es una técnica que se utiliza para encontrar la solución óptima a un
problema. La manera de lograrlo es tomar un elemento a la vez e ir agregándolo a la
solución siempre que y cuando el hacerlo mantenga la solución óptima encontrada hasta
ese momento.

El nombre de algoritmos ávidos, también conocidos como voraces (su nombre original
proviene del término inglés greedy) se debe a su comportamiento: en cada etapa “toman
lo que pueden” sin analizar consecuencias, es decir, son glotones por naturaleza, en lo que
sigue veremos un conjunto de problemas que muestran cómo diseñar algoritmos ávidos y
cuál es su comportamiento, en este tipo de algoritmos el proceso no acaba cuando
disponemos de la implementación del procedimiento que lo lleva a cabo, lo importante es

31
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

la demostración de que el algoritmo encuentra la solución óptima en todos los casos, o


bien la presentación de un contraejemplo que muestra los casos en donde falla.

Los algoritmos ávidos o voraces (Greedy Algorithms) son algoritmos que toman
decisiones de corto alcance, basadas en información inmediatamente disponible, sin
importar consecuencias futuras. Suelen ser bastante simples y se emplean sobre todo para
resolver problemas de optimización, como por ejemplo, encontrar la secuencia óptima
para procesar un conjunto de tareas por una computadora, hallar el camino mínimo de un
grafo, etc. Habitualmente, los elementos que intervienen son:

a. un conjunto o lista de candidatos (tareas a procesar, vértices del grafo, etc.)

b. un conjunto de decisiones ya tomadas (candidatos ya escogidos)

c. una función que determina si un conjunto de candidatos es una solución al problema


(aunque no tiene por qué ser la óptima)

d. una función que determina si un conjunto es completable, es decir, si añadiendo a este


conjunto nuevos candidatos es posible alcanzar una solución al problema, suponiendo
que esta exista

e. una función de selección que escoge el candidato aún no seleccionado que es más
prometedor

f. una función objetivo que da el valor/coste de una solución (tiempo total del proceso,
la longitud del camino, etc.) y que es la que se pretende maximizar o minimizar

Para resolver el problema de optimización hay que encontrar un conjunto de candidatos


que optimiza la función objetivo, los algoritmos voraces proceden por pasos.

Inicialmente el conjunto de candidatos es vacío, a continuación, en cada paso se intenta


añadir al conjunto el mejor candidato de los aún no escogidos, utilizando la función de
selección. Si el conjunto resultante no es completable, se rechaza el candidato y no se le
vuelve a considerar en el futuro, en caso contrario, se incorpora al conjunto de candidatos
escogidos y permanece siempre en él, tras cada incorporación se comprueba si el
conjunto resultante es una solución del problema. Un algoritmo voraz es correcto si la
solución así encontrada es siempre óptima.

32
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Ejemplo 1. Problema del cambio. Suponiendo que el sistema monetario de un país está
formado por monedas de valores v1,v2,...,vn, el problema del cambio de dinero consiste
en descomponer cualquier cantidad dada M en monedas de ese país utilizando el menor
número posible de monedas.

Planteamiento

En primer lugar, es fácil implementar un algoritmo ávido para resolver este problema, que
es el que sigue el proceso que usualmente utilizamos en nuestra vida diaria. Sin embargo,
tal algoritmo va a depender del sistema monetario utilizado y por ello vamos a plantearnos
dos situaciones para las cuales deseamos conocer si el algoritmo ávido encuentra siempre
la solución óptima:

a) Suponiendo que cada moneda del sistema monetario del país vale al menos el doble
que la moneda de valor inferior, que existe una moneda de valor unitario, y que
disponemos de un número ilimitado de monedas de cada valor.

b) Suponiendo que el sistema monetario está compuesto por monedas de valores 1, p,


p2, p3,..., pn, donde p > 1 y n > 0, y que también disponemos de un número ilimitado
de monedas de cada valor.

Solución

Comenzaremos con la implementación de un algoritmo ávido que resuelve el problema


del cambio de dinero:

Algoritmo

TYPE MONEDAS =(M500,M200,M100,M50,M25,M5,M1);(*sistema monetario*)

VALORES = ARRAY MONEDAS OF CARDINAL; (* valores de monedas *)

SOLUCION = ARRAY MONEDAS OF CARDINAL;

PROCEDURE Cambio(n:CARDINAL;VAR valor:VALORES;VAR cambio:SOLUCION);

(* n es la cantidad a descomponer, y el vector "valor" contiene los valores de cada una


de las

monedas del sistema monetario *)


33
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

VAR moneda:MONEDAS;

BEGIN

FOR moneda:=FIRST(MONEDAS) TO LAST(MONEDAS) DO

cambio[moneda]:=0

END;

FOR moneda:=FIRST(MONEDAS) TO LAST(MONEDAS) DO

WHILE valor[moneda]<=n DO

INC(cambio[moneda]);

DEC(n,valor[moneda])

END

END

END Cambio;

Este algoritmo es de complejidad lineal respecto al número de monedas del país, y por
tanto muy eficiente. Respecto a las dos cuestiones planteadas, comenzaremos por la
primera, supongamos que nuestro sistema monetario está compuesto por las siguientes

monedas:

TYPE MONEDAS = (M11,M5,M1); valor:={11,5,1};

Tal sistema verifica las condiciones del enunciado pues disponemos de moneda de valor
unitario y cada una de ellas vale más del doble de la moneda inmediatamente inferior.

Consideremos la cantidad n = 15, el algoritmo ávido del cambio de monedas descompone


tal cantidad en:

15 = 11 + 1 + 1 + 1 + 1

Es decir, mediante el uso de cinco monedas, sin embargo, existe una descomposición que
utiliza menos monedas (exactamente tres):

15 = 5 + 5 + 5

34
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Aunque queda comprobado que bajo estas circunstancias el diseño ávido no puede
utilizarse, las razones por las que el algoritmo falla quedarán al descubierto cuando
analicemos el siguiente punto.

3.4.4. Método del retroceso (backtracking)

Esta técnica se utiliza en algoritmos de búsqueda. Los algoritmos diseñados en base a esta
técnica pueden realizar una búsqueda exhaustiva de un espacio grande de búsqueda (del
orden n! o aún cn). Para ser efectiva normalmente deben de utilizarse heurísticas que
permitan reducir el espacio de búsqueda tanto como sea posible. El principio es sencillo,
tratar todas las soluciones posibles para un problema.

3.4.5. Programación dinámica

La solución de problemas mediante esta técnica se basa en el llamado principio de óptimo


enunciado por Richard Bellman en 1953 y que dice: “En una secuencia de decisiones óptima
toda subsecuencia ha de ser también óptima”. Bellman utilizo la programación dinámica para
optimizar problemas complejos que pueden ser discretizados y secuencializados.

En informática, la programación dinámica es un método para reducir el tiempo de


ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y
subestructuras óptimas, como se describe a continuación.

Para que un problema pueda ser abordado por esta técnica ha de cumplir dos
condiciones:

• La solución al problema ha de ser alcanzada a través de una secuencia de decisiones,


una en cada etapa

• Dicha secuencia de decisiones ha de cumplir el principio de óptimo

En grandes líneas, el diseño de un algoritmo de Programación Dinámica consta de los


siguientes pasos:

35
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

1. Planteamiento de la solución como una sucesión de decisiones y verificación de que


ésta cumple el principio de óptimo

2. Definición recursiva de la solución

3. Cálculo del valor de la solución óptima mediante una tabla en donde se almacenan
soluciones a problemas parciales para reutilizar los cálculos

4. Construcción de la solución óptima haciendo uso de la información contenida en la


tabla anterior calculada en el punto 3

Ejemplo 1. Cálculo de los números de FIBONACCI

Se trata del cálculo de los términos de la sucesión de números de Fibonacci, dicha


sucesión podemos expresarla recursivamente en términos matemáticos.

| 1 si n = 0,1

Fib(n) = |

| Fib(n−1)+ Fib(n− 2) si n >1

Por tanto, la forma más natural de calcular los términos de esa sucesión es mediante un
programa recursivo:

PROCEDURE FibRec(n:CARDINAL):CARDINAL;

BEGIN

IF n<=1 THEN RETURN 1

ELSE

RETURN FibRec(n-1) + FibRec(n-2)

END

END FibRec;

Hemos llegado al término de la tercera unidad temática de Algoritmos Computacionales.


Te invitamos a resolver las actividades correspondientes poniendo en práctica tus

36
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

habilidades de autoaprendizaje y autorregulación. Recuerda que cuentas con el apoyo


permanente de tu asesor(a) y tutor(a).

RESUMEN DE LA UNIDAD 3

En programación, un algoritmo establece, de manera genérica e informal, la secuencia de


pasos o acciones que resuelve un determinado problema. El diseño de un algoritmo es
independiente del lenguaje que después se vaya a utilizar para codificarlo.

Los algoritmos tienen los siguientes componentes.

 Datos: son los objetos con los cuales opera el programa, por ejemplo: edad,
domicilio de una persona, cantidad etc., los datos los podemos clasificar en simples
o compuestos
 Operadores: un operador es un símbolo o palabra que significa que se ha de
realizar cierta acción entre uno o dos valores que son llamados operadores. Los
operadores son aquellos que nos sirven para hacer operaciones. por ejemplo suma
resta, división y multiplicación
 Los operadores se clasifican en aritméticos, relacionales, lógicos o Booleanos y
alfanuméricos
 Variables: son zonas de memoria cuyo contenido cambia durante la fase de
procesamiento de información

37
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

 Expresiones: Son representaciones de un cálculo necesario para la obtención de un


resultado
 Estructuras de control

Existen varias técnicas para el diseño de algoritmos entre ellas están:

La programación estructurada: la cual busca que el programador elabore programas


sencillos y fáciles de entender, para ello la programación estructurada hace uso de tres
estructuras básicas de control, estas son:

 Estructura Secuencial
 Estructura Selectiva
 Estructura Repetitiva (Iterativa)

El diseño de Top Down: este diseño 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 programación modular: es uno de los métodos de diseño es más flexible y


potentes para mejorar la productividad de un algoritmo o programa.

Como objetivo principal al desarrolla un algoritmos es mantener tan bajo el consumo de


los recurso que tenemos y aprovecharlos al máximo, un algoritmo es eficiente cuando
logra llegar al objetivo planteado utilizando los mínimos recursos utilizados.

Y para finalizar hemos visto que tenemos varias técnicas para el diseño de los algoritmos
las cuales son: recursión, divide para conquistar, técnicas ávidas, método del retroceso
(backtracking) y la programación dinámica.

38
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 3. COMPONENTES Y TÉCNICAS DE DISEÑO DE ALGORITMOS

Tabla 3. Criterios de evaluación de la Unidad 3

UNIDAD PRODUCTO VALOR OBSERVACIONES

3.1. Componentes de Cuadro sinóptico 5%


un algoritmo

3.2 Técnicas de
diseño de Algoritmos

3.3. Eficiencia de Ejercicios 5%


algoritmos.

3.4. Estrategias de
diseño de algoritmos.

TOTAL UNIDAD 3 10%

39
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

UNIDAD 4: TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN


En el siguiente esquema se representan los contenidos temáticos correspondientes a la
primera unidad temática de Algoritmos Computacionales, cada uno de estos temas
guardan relación entre sí.

SECUENCIA DIDACTICA

Ilustración 1. Mapa de contenidos temáticos. Unidad 4

VINCULACIÓN DIDÁCTICA

CONTENIDO-COMPETENCIAS:

Identifica, clasifica y resuelve problemas con algoritmos computacionales aplicados en


procesos metódicos, formales o informales, y que se encuentran por todas partes con
múltiples nombres: recetas, procesos, métodos, técnicas, procedimientos, fórmulas y
rutinas.

1
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

INTRODUCCION

El contenido temático de esta unidad pretende lograr que identifiques los diferentes tipos
de algoritmos que podemos utilizar para la solución de un problema utilizando los menos
recursos posibles, a su vez también conoceremos diferentes lenguajes de programación
los cuales nos servirán para desarrollar los programas necesarios para solucionar
problemas de una forma rápida y eficaz.

Como primer tema de esta unidad se abordara algoritmos de ordenamiento en el cual


podremos apreciar que ordenar es colocar información de una manera especial,
basándonos en un criterio ya establecido, dentro de estos algoritmos veremos los
siguientes tipos de ordenamiento: Concepto de ordenamiento, ordenamiento por
inserción, ordenamiento por selección, ordenamiento de la burbuja, ordenamiento rápido
(Quicksort), ordenamiento por montículo y ordenamiento por mezclas sucesivas (Merge
sort).

El siguiente tema habla de los algoritmos de búsqueda en donde aprenderemos que un


algoritmo de búsqueda está diseñado para localizar un elemento con ciertas propiedades
dentro de una estructura de datos, los algoritmos de búsqueda que veremos son:
Búsqueda lineal, búsqueda binaria, arboles de búsqueda, búsqueda por transformación de
claves (Hashing) y búsqueda en textos.

En el tercer tema podemos apreciar la teoría de grafos donde nos daremos cuenta que en
la informática utilizamos infinidad de grafos, así mismo en los algoritmos utilizaremos los
siguientes: grafo no dirigido, grafo dirigido, ddefiniciones básicas, grafos con pesos y árbol.

Y para finalizar la unidad de aprendizaje veremos los diferentes lenguajes de programación,


dándonos cuenta que algunos han evolucionado a lo largo del tiempo y siguen vigentes y
muchos otros se utilizaron en un periodo de tiempo más o menos largo y en la actualidad
ya no se usan.

Es muy importante que en cada uno de los contenidos que veremos pongas mucha
atención y analices a fondo, así mismo se proactivo y proactiva e investiga las dudas que te
surjan y no puedas encontrarlas dentro del contenido y aproveches al máximo la
información.
2
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Animo compañero y compañera estas en la recta final para terminar esta unidad temática.

4.1. ALGORITMOS DE ORDENAMIENTO

4.1.1. Concepto de ordenamiento

El ordenamiento es una labor común que realizamos continuamente. ¿Pero te has


preguntado qué es ordenar? ¿No? Es que es algo tan corriente en nuestras vidas que no
nos detenemos a pensar en ello. Ordenar es simplemente colocar información de una
manera especial basándonos en un criterio de ordenamiento.

En la computación el ordenamiento de datos también cumple un rol muy importante, ya


sea como un fin en sí o como parte de otros procedimientos más complejos. Se han
desarrollado muchas técnicas en este ámbito, cada una con características específicas, y
con ventajas y desventajas sobre las demás. Aquí voy a mostrarte algunas de las más
comunes, tratando de hacerlo de una manera sencilla y comprensible.

Conceptos preliminares.

Antes de ver los algoritmos de ordenamiento se revisaran algunos conceptos importantes


para un mejor entendimiento:

 Clave: La parte de un registro por la cual se ordena la lista. Por ejemplo, una lista de
registros con campos nombre, dirección y teléfono se puede ordenar alfabéticamente
de acuerdo al clave nombre, en este caso los campos dirección y teléfono no se toman
en cuenta en el ordenamiento.

 Criterio de ordenamiento (o de comparación): EL criterio que utilizamos para


asignar valores a los registros con base en una o más claves. De esta manera
decidimos si un registro es mayor o menor que otro. En el pseudocódigo presentado
más adelante simplemente se utilizarán los símbolos < y >, para mayor simplicidad.

 Registro: Un grupo de datos que forman la lista. Pueden ser datos atómicos (enteros,
caracteres, reales, etc.) o grupos de ellos, que en C equivalen a las estructuras.

Cuando se estudian algoritmos de todo tipo, no sólo de ordenamiento, es bueno tener


una forma de evaluarlos antes de pasarlos a código, que se base en aspectos

3
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

independientes de la plataforma o el lenguaje, de esta manera podremos decidir cuál se


adapta mejor a los requerimientos de nuestro programa, así que veamos estos aspectos:

 Estabilidad: Cómo se comporta con registros que tienen claves iguales. Algunos
algoritmos mantienen el orden relativo entre éstos y otros no. Veamos un ejemplo. Si
tenemos la siguiente lista de datos (nombre, edad): "Pedro 19, Juan 23, Felipe 15,
Marcela 20, Juan 18, Marcela 17", y la ordenamos alfabéticamente por el nombre con
un algoritmo estable quedaría así: "Felipe 15, Marcela 20, Marcela 17, Juan 23, Juan 18,
Pedro 19". Un algoritmo no estable podría dejar a Juan 18 antes de Juan 23, o a
Marcela 20 después de Marcela 17.

 Tiempo de ejecución: La complejidad del algoritmo, que no tiene que ver con
dificultad, sino con rendimiento. Es una función independiente de la implementación.
Identificar una operación fundamental que realice el algoritmo, que en este caso es
comparar, ahora contar cuántas veces el algoritmo necesita comparar, si en una lista
de n términos realiza n comparaciones la complejidad es O(n).

 Requerimientos de memoria: El algoritmo puede necesitar memoria adicional para


realizar su labor, en general es preferible que no sea así, pero es común en la
programación tener que sacrificar memoria por rendimiento.

4.1.2. Ordenamiento por inserción

El ordenamiento por inserción (insertion sort en inglés) es una manera muy natural de
ordenar para un ser humano y puede usarse fácilmente para ordenar un mazo de cartas
numeradas en forma arbitraria, requiere O(n²) operaciones para ordenar una lista de n
elementos.

Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado.


Después, cuando hay k elementos ordenados de menor a mayor, se toma el elemento k+1
y se compara con todos los elementos ya ordenados, deteniéndose cuando se encuentra
un elemento menor (todos los elementos mayores han sido desplazados una posición a la

4
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

derecha). En este punto se inserta el elemento k+1 debiendo desplazarse los demás
elementos.

El algoritmo de ordenamiento por inserción es una de las técnicas de ordenamiento más


comunes, y es a menudo utilizado por los jugadores de cartas, cada tarjeta que un jugador
coge la inserta en el lugar que le corresponde en su mano de cartas para mantener una
secuencia particular. Es similar al proceso típico de ordenar tarjetas de nombres (cartas de
una baraja) por orden alfabético, que consiste en insertar un nombre en su posición
correcta dentro de una lista o archivo que ya está ordenado, así el proceso en el caso de
la lista de enteros A = 50, 20, 40, 80, 30.

Ilustración 2. Método de ordenación por inserción

Ejemplo de funcionamiento: El 32 debe ser insertado entre 26 y 47, y por lo tanto 47, 59 y
96 deben ser desplazados.

k+1

11 26 47 59 96 32

5
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

11 26 47 59 96

11 26 32 47 59 96

En la implementación computacional, el elemento k+1 va comparándose de atrás para


adelante, deteniéndose con el primer elemento menor. Simultáneamente se van haciendo
los desplazamientos.

1 26 47 59 96 32

11 26 47 59 96

11 26 47 59 96

11 26 47 59 96

11 26 32 47 59 96

El algoritmo en pseudocódigo (con listas que empiezan por 0) debería ser como el
siguiente:

Pseudocódigo

algoritmo insertSort( A : lista de elementos ordenables )

para i=1 hasta longitud(A) hacer

index=A[i]

j=i-1

mientras j>=0 y A[j]>index hacer

A[j+1] = A[j]

j=j-1

fin mientras

A[j+1] = index

fin para

fin algoritmo

6
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Aunque este algoritmo tiene un mejor orden de complejidad que el de burbuja, es muy
ineficiente al compararlo con otros algoritmos como quicksort, sin embargo, para listas
relativamente pequeñas el orden por inserción es una buena elección, no sólo porque
puede ser más rápido para cantidades pequeñas de elementos sino particularmente debido
a su facilidad de programación.

Implementación

A continuación se muestra el Ordenamiento por inserción en distintos lenguajes de


programación:

Lenguaje de programación C

void ordIns(int vector[], int n)

int i, j, indice;

for (i=1; i < n; i++)

indice = vector[i];

for (j=i-1;j >= 0 && vector[j] > indice;j--)

vector[j + 1] = vector[j];

vector[j+1] = indice;

Lenguaje de programación C++

template <class T> void insertionSort(std::vector<T>& v, int fin) {

7
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

int i, j, index;

for (i=1; i <fin; i++)

index = v.at(i);

j = i-1;

while (j >= 0 && v.at(j)>index) {

v.at(j+1)=v.at(j);

j--;

v.erase(v.begin()+j+1);

v.insert(v.begin()+j+1,index);

public static void insertSort (int[]& v) {

int aux;

int j;

for (int i=1; i<v.length; i++) {

aux=v[i];

for (j=i-1; j>=0 && v[j]>aux; j--){

v[j+1] = v[j];

v[j] = aux;

8
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

JavaScript

for (var i=1; i < vector.length; i++) {

var temp = vector[i];

var j = i-1;

while (j >= 0 && vector[j] > temp) {

vector[j + 1] = vector[j];

j--;

vector[j+1] = temp;

Php

function insert_sort($arr){

$count = count($arr);

for($i=1; $i<$count; $i++){

$tmp = $arr[$i];

for ($j=$i-1; $j>=0 && $arr[$j] > $tmp; $j--)

$arr[$j+1] = $arr[$j];

$arr[$j+1] = $tmp;

return $arr;

Pascal

9
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Procedure InsertionSort(var insertion:Array_integer; array_size: Integer);

Var

i, j, index : Integer;

Begin

For i := 2 to array_size do

Begin

index := insertion[i];

j := i-1;

While ((j > 0) AND (insertion[j] > index)) do

Begin

insertion[j+1] := insertion[j];

j := j - 1;

End;

insertion[j+1] := index;

End;

End;

4.1.3. Ordenamiento por selección.

El ordenamiento por selección (Selection Sort en inglés) es un algoritmo de ordenamiento

que requiere O operaciones para ordenar una lista de n elementos.

Su funcionamiento es el siguiente:

 Buscar el mínimo elemento de la lista

 Intercambiarlo con el primero

 Buscar el mínimo en el resto de la lista

10
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Intercambiarlo con el segundo

Y en general:

 Buscar el mínimo elemento entre una posición i y el final de la lista

 Intercambiar el mínimo con el elemento de la posición i

Considérese el algoritmo para ordenar un array A de enteros en orden ascendente, esto


es del número más pequeño al mayor, si el array A tiene n elementos, se trata de ordenar
los valores del array de modo que el dato contenido en A[0] sea el valor más pequeño, el
valor almacenado en A[1] el siguiente más pequeño, y así hasta A[n-1] que ha de contener
el elemento de mayor valor.

El algoritmo de selección se apoya en sucesivas pasadas que intercambian el elemento más


pequeño sucesivamente con el primer elemento de la lista, A[0]en la primera pasada, en
síntesis, se busca el elemento más pequeño de la lista y se intercambia con A[0], primer
elemento de la lista.

A[0] A[1] A[2]....A[n-1]

Después de terminar esta primera pasada, el frente de la lista está ordenado y el resto de
la lista A[1], A[2]...A[n-1] permanece desordenada, la siguiente pasada busca en esta lista
desordenada y selecciona el elemento más pequeño, que se almacena entonces en la
posición A[1].

De este modo los elementos A[0] y A[1] están ordenados y la sublista A[2], A[3]...A[n-1]
desordenada; entonces, se selecciona el elemento más pequeño y se intercambia con A[2].

El proceso continúa n-1 pasadas; en ese momento la lista desordenada se reduce a un


elemento (el mayor de la lista) y el array completo ha quedado ordenado.

Ejemplo. Aplicar el algoritmo por selección, considere un array A con 5 valores enteros
51, 21, 39, 80, 36:

Solución

11
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 3. Solución

De esta manera se puede escribir el siguiente pseudocódigo para ordenar una lista de n
elementos indexados desde el 1:

Pseudocódigo

para i=1 hasta n-1

minimo = i;

para j=i+1 hasta n

si lista[j] < lista[mínimo] entonces

minimo = j /* (!) */

fin si

fin para

intercambiar(lista[i], lista[minimo])

fin para

12
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener que


ordenar un vector de enteros, esta mejora no es muy sustancial, pero cuando hay que
ordenar un vector de estructuras más complejas, la operación intercambiar() sería más
costosa en este caso, este algoritmo realiza muchas menos operaciones intercambiar() que
el de la burbuja, por lo que lo mejora en algo. Si la línea comentada con (!) se sustituyera
por intercambiar(lista[i], lista[j]) tendríamos una versión del algoritmo de la burbuja
(naturalmente eliminando el orden intercambiar del final).

Otra desventaja de este algoritmo respecto a otros como el de burbuja o de inserción


directa es que no mejora su rendimiento cuando los datos ya están ordenados o
parcialmente ordenados. Así como, por ejemplo, en el caso de la ordenación de burbuja
se requeriría una única pasada para detectar que el vector ya está ordenado y finalizar, en
la ordenación por selección se realizarían el mismo número de pasadas
independientemente de si los datos están ordenados o no.

Java

void selecccion(int[] a)

for (int i = 0; i < a.length - 1; i++)

int min = i;

for (int j = i + 1; j < a.length; j++)

if (a[j] < a[min])

min = j;

13
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

if (i != min)

int aux= a[i];

a[i] = a[min];

a[min] = aux;

void ordsel(int x[], int n)

int min,i,j,aux,ban;

for(i=0 ; i<n-1 ; i++)

ban=0;

min=i;//min es el elemento primero de la sublista

for(j=i+1 ; j<n ; j++){//Esta es la sublista

if (x[min] > x[j]){

min=j;//min ahora apunta a el elemento menor de la sublista

ban=1;//seteamos ban a 1 para que efectue el intercambio dentro de la sublista

if(ban){

aux=x[min];

14
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

x[min]=x[i];

x[i]=aux;

Basic

For i = 1 To n - 1

minimo = i

For j = i + 1 To n

If x(minimo) > x(j) Then

minimo = j

End If

Next j

temp = x(i)

x(i) = x(minimo)

x(minimo) = temp

Next i

C++

#include <iostream>

#include <vector>

using namespace std;

template <class T>

void ordena_seleccion(vector<T>& v) {

for (int i = 0; i < v.size(); ++i) {

15
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

int min = i;

for (int c = i + 1; c < v.size(); ++c) {

if (v[min] > v[c]) min = c;

T aux = v[i];

v[i] = v[min];

v[min] = aux;

JavaScript

for(var i=0 ; i<vector.length-1 ; i++)

var menor = i;

for(var j=i+1 ; j<vector.length ; j++)

if (vector[menor] > vector[j]) menor = j;

var temp = vector[menor];

vector[menor] = vector[i];

vector[i] = temp;

PHP

function IntercambiarElementos(&$arreglo,$pos1,$pos2){

$aux=$arreglo[$pos1];

16
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

$arreglo[$pos1]=$arreglo[$pos2];

$arreglo[$pos2]=$aux;

function PosicionMenorElemento($arreglo,$posinicial){

$posmenor=$posinicial;

for($i=$posinicial+1;$i<count($arreglo);$i++){

if($arreglo[$i]<$arreglo[$posmenor]){

$posmenor=$i;

return $posmenor;

function OrdenamientoPorSeleccion(&$arreglo){

for($i=0;$i<count($arreglo);$i++){

$posmenor=PosicionMenorElemento($arreglo,$i);

if($posmenor>$i){

IntercambiarElementos($arreglo,$i,$posmenor);

4.1.4. Ordenamiento de la burbuja

La Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de


ordenamiento, funciona revisando cada elemento de la lista que va a ser ordenada con el

17
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

siguiente, intercambiándolos de posición si están en el orden equivocado, es necesario


revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual
significa que la lista está ordenada, este algoritmo obtiene su nombre de la forma con la
que suben por la lista los elementos durante los intercambios, como si fueran pequeñas
"burbujas", también es conocido como el método del intercambio directo dado que
solo usa comparaciones para operar elementos, se lo considera un algoritmo de
comparación, siendo el más sencillo de implementar.

Este algoritmo realiza el ordenamiento de una lista a de n valores, en este caso de n


términos numerados del 0 al n-1, consta de dos bucles anidados uno con el índice i que da
un tamaño menor al recorrido de la burbuja en sentido inverso de 2 a n y un segundo
bucle con el índice j con un recorrido desde 0 hasta n-i, para cada iteración del primer
bucle, que indica el lugar de la burbuja.

La burbuja son dos términos de la lista seguidos, j y j+1, que se comparan si el primero es
menor que el segundo sus valores se intercambian.

Esta comparación se repite en el centro de los dos bucles dando lugar a la postre a una
lista ordenada, puede verse que el número de repeticiones sola depende de n y no del
orden de los términos, esto es, si pasamos al algoritmo una lista ya ordenada, realizara
todas las comparaciones exactamente igual que para una lista no ordenada, esta es una
característica de este algoritmo, luego veremos una variante que evita este inconveniente.

A pesar de que el ordenamiento de burbuja es uno de los algoritmos más sencillos de


implementar, su orden O (n2) lo hace muy ineficiente para usar en listas que tengan más
que un número reducido de elementos. Incluso entre los algoritmos de ordenamiento de
orden O (n2), otros procedimientos como el ordenamiento por inserción son
considerados más eficientes.

En el caso de un array (lista) con n elementos, la ordenación por burbuja requiere hasta n-
1 pasadas, por cada pasada se comparan elementos adyacentes y se intercambian sus
valores cuando el primer elemento es mayor que el segundo elemento, al final de cada
pasada, el elemento mayor ha “burbujeado” hasta la cima de la sublista actual. Por

18
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

ejemplo, después que la pasada 0 está completa, la cola de la lista A[n-1] está ordenada y
el frente de la lista permanece desordenado. Las etapas del algoritmo son :

 En la pasada 0 se comparan elementos adyacentes


(A[0],A[1]),(A[1],A[2]),(A[2],A[3]),...(A[n-2],A[n-1])

Se realizan n-1 comparaciones, por cada pareja (A[i],A[i+1]) se intercambian los


valores si A[i+1] < A[i]. Al final de la pasada, el elemento mayor de la lista está situado
en A[n-1]

 En la pasada 1 se realizan las mismas comparaciones e intercambios, terminando con el


elemento de segundo mayor valor en A[n-2]

 El proceso termina con la pasada n-1, en la que el elemento más pequeño se almacena
en A[0] . El algoritmo tiene una mejora inmediata, el proceso de ordenación puede
terminar en la pasada n-1, o bien antes. Si en un una pasada no se produce intercambio
alguno entre elementos del array es porque ya está ordenado, entonces no es
necesario mas pasadas.

Procedimiento (Algoritmo)

Dado un vector a1, a2, a3, ... an


1) Comparar a1 con a2 e intercambiarlos si a1 > a2 o a1<a2
2) Seguir hasta que todo se haya comparado an-1 con an
3) Repetir el proceso anterior n-1 veces

Pseudocodigo: Complejidad

for(i=0; i < n-1; i++){ T(n2)

for(j=0; j < n-1; j++){ T(n)

if(vec[j] > vec[j+1]){ T(1)

aux=vec[j]; T(1)

vec[j]=vec[j+1]; T(1)

vec[j+1]=aux;} T(1)

19
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ejemplo 1. Aplicando el algoritmo de la burbuja ordenar el siguiente arreglo de números


vector: 44, 55, 12, 42, 94, 18, 6, 67.

Solución

El procedimiento de la burbuja es el siguiente:

 Ir comparando desde la casilla 0 numero tras número hasta encontrar uno mayor, si
este es realmente el mayor de todo el vector se llevará hasta la última casilla, si no es
así, será reemplazado por uno mayor que él

 Este procedimiento seguirá así hasta que haya ordenado todas las casillas del vector.

 Una de las deficiencias del algoritmo es que ya cuando ha ordenado parte del vector
vuelve a compararlo cuando esto ya no es necesario

 Tabla 1. Procedimiento de burbuja ejemplo 1.

Vector
Variables
pos 0 1 2 3 4 5 6 7

i J a[j] a[j+1] inicio 44 55 12 42 94 18 6 67

0 1 55 12 cambio 44 12 55 42 94 18 6 67

0 2 55 42 cambio 44 12 42 55 94 18 6 67

0 4 94 18 cambio 44 12 42 55 18 94 6 67

0 5 94 6 cambio 44 12 42 55 18 6 94 67

0 6 94 67 cambio 44 12 42 55 18 6 67 94

1 0 44 12 cambio 12 44 42 55 18 6 67 94

1 1 44 42 cambio 12 42 44 55 18 6 67 94

1 3 55 18 cambio 2 42 44 18 55 6 67 94

20
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Vector
Variables
pos 0 1 2 3 4 5 6 7

i J a[j] a[j+1] inicio 44 55 12 42 94 18 6 67

1 4 55 6 cambio 12 42 44 18 6 55 67 94

2 2 44 18 cambio 12 42 18 44 6 55 67 94

2 3 44 6 cambio 12 42 18 6 44 55 67 94

3 1 42 18 cambio 12 18 42 6 44 55 67 94

3 2 42 6 cambio 12 18 6 42 44 55 67 94

4 1 18 6 cambio 12 6 18 42 44 55 67 94

5 0 12 6 ordenado 6 12 18 42 44 55 67 94

Ejemplo 2. Aplicando el algoritmo de la burbuja ordenar el siguiente arreglo de números


arreglo: 8, 6, 4, 26.

Solución

El procedimiento de la burbuja es el siguiente:

 Ir comparando desde la casilla 0 numero tras número hasta encontrar uno mayor, si
este es realmente el mayor de todo el vector se llevará hasta la última casilla, si no es
así, será reemplazado por uno mayor que él

 Este procedimiento seguirá así hasta que haya ordenado todas las casillas del vector

 Una de las deficiencias del algoritmo es que ya cuando ha ordenado parte del vector
vuelve a compararlo cuando esto ya no es necesario

Tabla 2. Procedimiento de burbuja ejemplo 2.

21
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

arreglo
8 6 4 26 acción
original

6 8 4 26 compara el 8 con 6 y los intercambia

paso 1 6 4 8 26 compara el 8 con 4 y los intercambia

6 4 8 26 compara el 8 con 26 y no los intercambia

4 6 8 26 compara el 4 con 6 y los intercambia

paso 2 4 6 8 26 compara el 6 con 8 y no los intercambia

4 6 8 26 compara el 8 con 26 y no los intercambia

4 6 8 26 compara el 4 con 6 y no los intercambia

paso 3 4 6 8 26 compara el 6 con 8 y no los intercambia

4 6 8 26 compara el 8 con 26 y no los intercambia

Ejemplo 3. Se ilustra el funcionamiento del algoritmo de la burbuja con un array de 5


elementos (A = 50, 20, 40, 80, 30) donde se introduce una variable interruptor para
detectar si se ha producido intercambio en la pasada.

22
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 4. Pasada 0, Ejemplo 3

Ilustración 5. Pasada 1, ejemplo 3

En la pasada 2, sólo se hacen dos comparaciones y se produce un intercambio.

Ilustración 6. Pasada 2, ejemplo 3

En la pasada 3, se hace una única comparación de 20 y 30, y no se produce intercambio.

23
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 7. Pasada 3, ejemplo 3

En consecuencia, el algoritmo de ordenación de burbuja mejorado contempla dos bucles


anidados: el bucle externo controla la cantidad de pasadas (al principio de la primera
pasada todavía no se ha producido ningún intercambio por tanto la variable interruptor se
pone a valor falso (0) ; el bucle interno controla cada pasada individualmente y cuando se
produce un intercambio, cambia el valor de interruptor a verdadero (1).

El algoritmo terminará, bien cuando se finalice la última pasada (n-1) o bien cuando el
valor del interruptor sea falso (0), es decir no se haya hecho ningún intercambio. La
condición para realizar una nueva pasada se define en la expresión lógica: (pasada < n-1)
&& interruptor

Podemos ver la implementación de este algoritmo en algún lenguaje de programación:

C#

static public void Ordenar(int[] vector) // Menor A Mayor

int temp = 0;

for (int i = 1; i < vector.Length; i++)

for (int x = vector.Length - 1; x >=i ; x--)

if (vector[x] < vector[x-1])

24
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

temp = vector[x];

vector[x] = vector[x -1];

vector[x-1] = temp;

4.1.5. Ordenamiento rápido (Quicksort)

El ordenamiento rápido (quicksort Descripción del algoritmo


en inglés) es un algoritmo creado por El algoritmo trabaja de la siguiente forma:
el científico británico en computación
 Elegir un elemento de la lista de elementos a
Charles Antony Richard Hoare basado
ordenar, al que llamaremos pivote.
en la técnica de divide y vencerás, que
permite, en promedio, ordenar n  Resituar los demás elementos de la lista a
elementos en un tiempo proporcional cada lado del pivote, de manera que a un
a n log n. lado queden todos los menores que él, y al

Ilustración 8. Charles Antony Richard Hoare


otro los mayores. Los elementos iguales al
pivote pueden ser colocados tanto a su
derecha como a su izquierda, dependiendo
de la implementación deseada. En este
momento, el pivote ocupa exactamente el
lugar que le corresponderá en la lista
ordenada.

 La lista queda separada en dos sublistas, una


formada por los elementos a la izquierda del

25
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

pivote, y otra por los elementos a su


derecha.

 Repetir este proceso de forma recursiva


para cada sublista mientras éstas contengan
más de un elemento. Una vez terminado este
proceso todos los elementos estarán
ordenados.

Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que


termine el pivote elegido.

 En el mejor caso, el pivote termina en el centro de la lista, dividiéndola en dos sublistas


de igual tamaño. En este caso, el orden de complejidad del algoritmo es O(n·log n).

 En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad


del algoritmo es entonces de O(n²). El peor caso dependerá de la implementación del
algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi
ordenadas. Pero principalmente depende del pivote, si por ejemplo el algoritmo
implementado toma como pivote siempre el primer elemento del array, y el array que
le pasamos está ordenado, siempre va a generar a su izquierda un array vacío, lo que
es ineficiente.

Técnicas de elección del pivote

El algoritmo básico del método Quicksort consiste en tomar cualquier elemento de la lista
al cual denominaremos como pivote, dependiendo de la partición en que se elija, el
algoritmo será más o menos eficiente.

 Tomar un elemento cualquiera como pivote tiene la ventaja de no requerir ningún


cálculo adicional, lo cual lo hace bastante rápido sin embargo, esta elección «a ciegas»
siempre provoca que el algoritmo tenga un orden de O(n²) para ciertas permutaciones
de los elementos en la lista.

26
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Otra opción puede ser recorrer la lista para saber de antemano qué elemento ocupará
la posición central de la lista, para elegirlo como pivote. Esto puede hacerse en O(n) y
asegura que hasta en el peor de los casos, el algoritmo sea O(n·log n). No obstante, el
cálculo adicional rebaja bastante la eficiencia del algoritmo en el caso promedio.

 La opción a medio camino es tomar tres elementos de la lista - por ejemplo, el


primero, el segundo, y el último - y compararlos, eligiendo el valor del medio como
pivote.

Técnicas de reposicionamiento

Una idea preliminar para ubicar el pivote en su posición final sería contar la cantidad de
elementos menores que él, y colocarlo un lugar más arriba, moviendo luego todos esos
elementos menores que él a su izquierda, para que pueda aplicarse la recursividad.

Existe, no obstante, un procedimiento mucho más efectivo. Se utilizan dos índices: i, al que
llamaremos índice izquierdo y j al que llamaremos índice derecho. El algoritmo es el
siguiente:

 Recorrer la lista simultáneamente con i y j por la izquierda con i (desde el primer


elemento), y por la derecha con j (desde el último elemento)

 Cuando lista[i] sea mayor que el pivote y lista[j] sea menor, se intercambian los
elementos en esas posiciones

 Repetir esto hasta que se crucen los índices

 El punto en que se cruzan los índices es la posición adecuada para colocar el pivote,
porque sabemos que a un lado los elementos son todos menores y al otro son todos
mayores (o habrían sido intercambiados)

Ver simulación del algoritmo

http://upload.wikimedia.org/wikipedia/commons/3/37/Bubble_sort_animation.gif

Recuperado el 08 de Marzo de 2017

http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif

Recuperado el 08 de Marzo de 2017


27
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Pseudocódigo

inicio

variables A: arreglo[1..100] entero

variables i,j,central:entero

variables primero, ultimo: entero

para i = 1 hasta 100

leer(A[i])

Fin para

primero = 1

ultimo = 100

qsort(A[],100)

Fin

Funcion qsort(primero, ultimo:entero)

i = primero

j = ultimo

central = A[(primero,ultimo) div 2]

repetir

mientras A[i]central

j=j-1

fin mientras

si i < = j

aux = A[i]

A[j] = A[i]

A[i] = aux

28
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

i=i+1

j=j-1

fin si

hasta que i > j

si primero < j

partir(primero,j)

fin si

si i < ultimo

partir(i, ultimo)

fin si

fin funcion qsort

29
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 9. Diagrama de flujo Ordenamiento rápido

Ejemplo 1. Se ordena una lista de números enteros aplicando el algoritmo quicksort,


como pivote se elige el primer elemento de la lista.

Ilustración 10. Se ordena una lista de números enteros aplicando el algoritmo quicksort

30
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 11. Seguimiento del ejercicio se ordena una lista de números enteros aplicando el algoritmo quicksort

Nota: El algoritmo quicksort requiere una estrategia de partición y la selección idónea del
pivote. Las etapas fundamentales del algoritmo dependen del pivote elegido aunque la
estrategia de partición suele ser similar.

Ejemplo 2. Ordenar una lista de números enteros aplicando el algoritmo quicksort.


Como pivote se elige el elemento central de la lista.

Lista original: 8 1 4 9 6 3 5 2 7 0

pivote (elemento central) 6

Solución

La etapa 2 requiere mover todos los elementos menores que el pivote a la parte izquierda
del array y los elementos mayores a la parte derecha. Para ello se recorre la lista de

31
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

izquierda a derecha utilizando un índice i, que se inicializa a la posición más baja (inferior),
buscando un elemento mayor al pivote. También se recorre la lista de derecha a izquierda
buscando un elemento menor. Para hacer esto se utilizará un índice j inicializado a la
posición más alta (superior).

El índice i se detiene en el elemento 8 (mayor que el pivote) y el índice j se detiene en el


elemento 0 (menor que el pivote)

Ilustración 12. Ordenar una lista de números enteros aplicando el algoritmo quicksort

Ahora se intercambian 8 y 0 para que estos dos elementos se sitúen correctamente en


cada sublista; y se incrementa el índice i, y se decrementa j para seguir los intercambios.

Ilustración 13. Ordenar una lista de números enteros aplicando el algoritmo quicksort

A medida que el algoritmo continúa, i se detiene en el elemento mayor, 9, y j se detiene


en el elemento menor, 2.

Ilustración 14. Ordenar una lista de números enteros aplicando el algoritmo quicksort

Se intercambian los elementos mientras que i y j no se crucen. En el momento en que se


cruzan los índices se detiene este bucle. En el caso anterior se intercambian 9 y 2.

32
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 15. Ordenar una lista de números enteros aplicando el algoritmo quicksort

Continúa la exploración y ahora el contador i se detiene en el elemento 6 (que es el


pivote) y el índice j se detiene en el elemento menor 5. Se intercambian 6 y 5, se
incrementa i y se decrementa j.

Ilustración 16. Ordenar una lista de números enteros aplicando el algoritmo quicksort

Los índices tienen actualmente los valores i = 5, j = 5. Continua la exploración hasta que i
> j, acaba con i = 6, j = 5.

Ilustración 17. Ordenar una lista de números enteros aplicando el algoritmo quicksort

En esta posición los índices i y j han cruzado posiciones en el array. En este caso se
detiene la búsqueda y no se realiza ningún intercambio ya que el elemento al que accede j
está ya correctamente situado. Las dos sublistas ya han sido creadas, la lista original se ha
dividido en dos particiones:

33
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 18. Ordenar una lista de números enteros aplicando el algoritmo quicksort

Ejemplo 3. Utilizar el método de ordenamiento quicksort. Dado el siguiente vector de


números A: 15, 67, 08, 16, 44, 27, 12, 35

Solución

Se selecciona A[i] x=15

Primera pasada (DER-IZQ)

A[8] >= x 35 >= 15 No hay intercambio

A[7] >= x 12 >= 15 Si hay intercambio

A: 12, 67, 08, 16, 44, 27, 15, 35

(IZQ-DER)

A[2] < = X 67 < = 15 Si hay intercambio

A: 12, 15, 08, 16, 44, 27, 67, 35

2da. Pasada (DER-IZQ)

A[6] >= x 27 >= 15 No hay intercambio

A[5] >= x 44 >= 15 No hay intercambio

A[4] >= x 16 >= 15 No hay intercambio

A[3] >= x 08 >= 15 Si hay intercambio

A: 12, 08, 15, 16, 44, 27, 67, 35

Como el recorrido de izquierda a derecha debería iniciarse en la misma posición donde se


encuentra el elemento x, el proceso se termina ya que el elemento x, se encuentra en la
posición correcta.

34
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

A: 12, 08, 15, 16, 44, 27, 67, 35

1er 2do Conjunto

Conjunto

16, 44, 27, 67, 35

x16

(DER-IZQ)

A[8]>=x No hay intercambio

A[7]>=x No hay intercambio

A[6]>=x No hay intercambio

A[5]>=x No hay intercambio

A: 12, 08, 15, 16, 44, 27, 67, 35

x44

(DER-IZQ)

A[8]>= x Si hay intercambio

A: 12, 08, 15, 16, 35, 27, 67, 44

(IZQ-DER)

A[6] < = x No hay intercambio

A[7] < = x Si hay intercambio

12, 08, 15, 16, 35, 27, 44, 67

12, 08, 15, 16, 35, 27, 44, 67

35, 27, 44, 67

x35

(DER-IZQ)

A[8] >= x No hay intercambio

35
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

A[7] >= x No hay intercambio

A[6] >= x Si hay intercambio

12, 08, 15, 16, 27, 35, 44, 67

12, 08

x12

(DER-IZQ)

A[2]>=x Si hay intercambio

El vector ordenado:

08, 12, 15, 16, 27, 35, 44, 67

4.1.6. Ordenamiento por montículo

El ordenamiento por montículos (heapsort en inglés) es un algoritmo de ordenamiento no

recursivo, no estable, con complejidad computacional

Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en un
montículo (heap), y luego extraer el nodo que queda como nodo raíz del montículo (cima)
en sucesivas iteraciones obteniendo el conjunto ordenado. Basa su funcionamiento en una
propiedad de los montículos, por la cual, la cima contiene siempre el menor elemento (o
el mayor, según se haya definido el montículo) de todos los almacenados en él.

La ordenación por montículos toma su nombre de las estructuras conocidas como


montículos, que son una clase especial de árboles. Este tipo de árboles poseen la
característica de que son binarios completos, lo que significa que cada vértice tiene a los
más dos hijos, y que todos sus niveles están completos, excepto (posiblemente) el último,
el cual se llena de izquierda a derecha. Otra particularidad que deben cumplir es que todo
vértice debe ser igual o mayor a cualquiera de sus hijos. En consecuencia, el elemento
mayor siempre los podemos encontrar en la raíz.

36
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 19. Ordenamiento por montículo

Ver el algoritmo http://www.youtube.com/watch?v=32jdzOmLsYQ

Descripción

He aquí una descripción en pseudocódigo del algoritmo. Se pueden encontrar


descripciones de las operaciones insertar en montículo y extraer cima del montículo en el
artículo sobre montículos.

function heapsort(array A[0..n]):

montículo M

integer i := 124578

for i = 0..n:

insertar_en_monticulo(M, A[i])

for i = 0..n:

A[i] = extraer_cima_del_monticulo(M)

return A

Ver simulación del algoritmo

http://upload.wikimedia.org/wikipedia/commons/f/fe/Heap_sort_example.gif

Algoritmo HeapSort en C++

#include "HeapSort.h"

37
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

#include <iostream>

#include <math.h>

using namespace std;

HeapSort::HeapSort( int* array, int arraySize )

this->array = array;

this->arraySize = arraySize;

void HeapSort::heapsort()

for (int i=0; i < arraySize; i++)

this->crearHeap( i );

void HeapSort::crearHeap(int desde)

for (int i=desde; i < arraySize; i++)

int padre = ((i - desde - 1)/2) + desde;

int j = i;

while (padre >= desde && this->array[padre] > this->array[j] )

int aux = this->array[padre];

38
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

this->array[padre] = this->array[j];

this->array[j] = aux;

j = padre;

padre = ((padre - desde - 1)/2) + desde;

void HeapSort::DoSort()

this->heapsort();

void main()

int tam = 100;

int * vector = new int[tam];

// ......SE CARGA EL VECTOR

HeapSort * sort = new HeapSort( vector, tam );

sort->DoSort(); //se ordena el vector

4.1.7. Ordenamiento por mezclas sucesivas (Merge sort)

El algoritmo de ordenamiento por mezcla (merge sort en inglés) es un algoritmo de


ordenamiento externo estable basado en la técnica divide y vencerás. Es de complejidad
O(n log n).

39
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 20. John Von Neumann Fue desarrollado en 1945 por John Von Neumann.

Conceptualmente, el ordenamiento por mezcla


funciona de la siguiente manera:

1. Si la longitud de la lista es 0 ó 1, entonces ya está


ordenada, en otro caso:

2. Dividir la lista desordenada en dos sublistas de


aproximadamente la mitad del tamaño

3. Ordenar cada sublista recursivamente aplicando el


ordenamiento por mezcla

4. Mezclar las dos sublistas en una sola lista


ordenada

El ordenamiento por mezcla incorpora dos ideas principales para mejorar su tiempo de
ejecución:

1. Una lista pequeña necesitará menos pasos para ordenarse que una lista grande

2. Se necesitan menos pasos para construir una lista ordenada a partir de dos listas
también ordenadas, que a partir de dos listas desordenadas. Por ejemplo, sólo será
necesario entrelazar cada lista una vez que están ordenadas

Ejemplo 1. Se tiene un arreglo de 8 elementos, se ordenan los 4 elementos de cada


arreglo y luego se mezclan. El arreglo de 4 elementos, se ordenan los 2 elementos de cada
arreglo y luego se mezclan. El arreglo de 2 elementos, como cada arreglo sólo tiene n = 1
elemento, solo se mezclan.

40
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 21. Ordenamiento por mezclas sucesivas (Merge sort)

Pseudocódigo

void ordenarMezcla(TipoEle A[], int izq, int der)

if ( izq < der )

centro = ( izq + der ) % 2;

ordenarMezcla( A, izq, centro );

ordenarMezcla( A, centro+1, der);

intercalar( A, izq, centro, der );

void intercalar(TipoEle A[], int a, int c, int b )

41
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

k = 0;

i = a;

j = c + 1;

n = b - a;

while ( i < c + 1 ) && ( j < b + 1 )

if ( A[i] < A[j] )

B[k] = A[i];

i = i + 1;

else

B[k] = A[j];

j = j + 1;

k = k + 1;

};

while ( i < c + 1 )

B[k] = A[i];

i++;

k++;

};

42
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

while ( j < b + 1 )

B[k] = A[j];

j++;

k++;

};

i = a;

for ( k = 0; k < n; i++ )

A[i] = B[k];

i++;

};

};

A continuación se describe el algoritmo en pseudocódigo (se advierte de que no se


incluyen casos especiales para vectores vacíos, etc.; una implementación en un lenguaje de
programación real debería tener en cuenta estos detalles):

function mergesort(array A[x..y])

begin

if ((y-x) > 0):

array A1 := mergesort(A[x..(int( x+y / 2))])

array A2 := mergesort(A[int(1+(x+y / 2))..y])

return merge(A1, A2)

else:

return A

43
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

end

function merge(array A1[0..n1], array A2[0..n2])

begin

integer p1 := 0

integer p2 := 0

array R[0..(n1 + n2 + 2)]//suponiendo que n1 y n2 son las posiciones

//del array y no el length de este mismo, de otro modo seria (n1 + n2)

while (p1 <= n1 and p2 <= n2):

if (p1 <= n1 and A1[p1] <= A2[p2]):

R[p1 + p2] := A1[p1]

p1 := p1 + 1

else

if (p2 <= n2 and A1[p1] > A2[p2]):

R[p1 + p2] := A2[p2]

p2 := p2 + 1

return R

end

C++

// En el código usamos la clase vector (#include <vector.h>) para crear los vectores,

// obviamente funciona igual de bien si se utilizan los arrays tipo C: TIPO V[]

template <class T, class U>

void fusiona(vector<T>& v, U ini, U med, U fin) {

vector<T> aux(fin - ini + 1);

int i = ini; // Índice de la parte izquierda

44
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

int j = med + 1; // Índice de la parte derecha

int k = 0; // Índice del vector aux

/* Mientras ninguno de los índices llegue a su fin vamos realizando

comparaciones. El elemento más pequeño se copia al vector aux */

while (i <= med && j <= fin) {

if (v[i] < v[j]) {

aux[k] = v[i];

i++;

else {

aux[k] = v[j];

j++;

k++;

/* Uno de los dos sub-vectores ya ha sido copiado del todo, simplemente debemos
copiar todo el sub-vector que nos falte */

while (i <= med) {

aux[k] = v[i];

i++;

k++;

while (j <= fin) {

aux[k] = v[j];

45
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

j++;

k++;

/* Copiamos los elementos ordenados de aux al vector original v */

for (int n = 0; n < aux.size(); ++n) v[ini + n] = aux[n];

template <class T, class U>

void merge_sort(vector<T>& v, U ini, U fin) {

/* Si ini = fin el sub-vector es de un solo elemento y, por lo tanto

ya está ordenado por definición */

if (ini < fin) {

/*Considerar que el valor de med siempre es redondeado hacia abajo.*/

int med = (ini + fin)/2;

merge_sort(v, ini, med);

merge_sort(v, med + 1, fin);

fusiona(v, ini, med, fin);

Visual Basic

Option Base 1

Private Sub Form_Load()

Dim N As Integer

N = InputBox("Tamaño del arreglo: ", "MergeSort")

ReDim A(N) As Integer

46
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

For i = 1 To N

A(i) = CInt(InputBox("Elemento " & i & ":"))

Next

MergeSort N, A, 1, N

Dim Arreglo As String

For j = 1 To N

Arreglo = Arreglo & A(j) & " "

Next

MsgBox Arreglo, vbInformation, "MergeSort"

Unload Me

End Sub

Sub Merge(N As Integer, ByRef A() As Integer, ini As Integer, med As Integer, fin As
Integer)

Dim n1 As Integer

n1 = med - ini + 1

Dim n2 As Integer

n2 = fin - med

ReDim L(n1 + 1) As Integer

ReDim R(n2 + 1) As Integer

For z = 1 To n1

L(z) = A(ini + z - 1)

Next

For z = 1 To n2

R(z) = A(med + z)

47
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Next

L(n1 + 1) = 32767

R(n2 + 1) = 32767

Dim i As Integer

Dim j As Integer

i=1

j=1

For k = ini To fin

If L(i) <= R(j) Then

A(k) = L(i)

i=i+1

ElseIf L(i) > R(j) Then

A(k) = R(j)

j=j+1

End If

Next

End Sub

Sub MergeSort(N As Integer, ByRef A() As Integer, inicio As Integer, fin As Integer)

If inicio < fin Then

Dim medio As Integer

medio = (inicio + fin) \ 2

MergeSort N, A, inicio, medio

MergeSort N, A, medio + 1, fin

Merge N, A, inicio, medio, fin

48
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

End If

End Sub

Java

public class MergeSort{

private int A[];

public int[] OrdenaMerge(int[] L) {

int n = L.length;

if (n > 1){

int m = (int) (Math.ceil(n/2.0));

int [] L1 = new int[m];

int [] L2 = new int[n-m];

for (int i = 0; i < m; i++){

L1[i] = L[i];

for (int i = m; i < n; i++){

L2[i-m] = L[i];

L = merge(OrdenaMerge(L1), OrdenaMerge(L2));

return L;

public int[] eliminar(int [] l){

int [] L = new int[l.length-1];

for(int i = 1; i < l.length; i++){

49
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

L[i-1] = l[i];

return L;

public int[] merge(int[] L1, int[] L2) {

int[] L = new int[L1.length+L2.length];

int i = 0;

while ((L1.length != 0) && (L2.length != 0)) {

if (L1[0] < L2[0]){

L[i++] = L1[0];

L1 = eliminar(L1);

if (L1.length == 0){

while (L2.length != 0) {

L[i++] = L2[0];

L2 = eliminar(L2);

else{

L[i++] = L2[0];

L2 = eliminar(L2);

if (L2.length == 0) {

while (L1.length != 0) {

L[i++] = L1[0];

50
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

L1 = eliminar(L1);

return L;

public void generarNumeros(){

Random ran = new Random();

int x;

for(int i = 0; i < A.length; i++){

x = (int)(ran.nextDouble()*10000);

A[i] = x;

public void imprimir(){

for(int i = 0; i < A.length; i++){

System.out.println(A[i]);

public int[] getA(){

return A;

public void setA(int []A){

51
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

this.A = A;

4.2. ALGORITMOS DE BÚSQUEDA

Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento con
ciertas propiedades dentro de una estructura de datos; por ejemplo, ubicar el registro
correspondiente a cierta persona en una base de datos, o el mejor movimiento en una
partida de ajedrez. La variante más simple del problema es la búsqueda de un número en
un vector.

4.2.1. Búsqueda lineal

La Programación Lineal es un procedimiento o algoritmo matemático mediante el cual se


resuelve un problema indeterminado, formulado a través de un sistema de ecuaciones
lineales, optimizando la función objetivo, también lineal.

Consiste en optimizar (minimizar o maximizar) una función lineal, denominada función


objetivo, de tal forma que las variables de dicha función estén sujetas a una serie de
restricciones que expresamos mediante un sistema de inecuaciones lineales.

Historia de la programación lineal

El problema de la resolución de un sistema lineal de inecuaciones se remonta, al menos, a


Joseph Fourier, después de quien nace el método de eliminación de Fourier-Motzkin. La
programación lineal se plantea como un modelo matemático desarrollado durante la
Segunda Guerra Mundial para planificar los gastos y los retornos, a fin de reducir los
costos al ejército y aumentar las pérdidas del enemigo, se mantuvo en secreto hasta 1947.
En la posguerra, muchas industrias lo usaron en su planificación diaria.

Los fundadores de la técnica son George Dantzig, quien publicó el algoritmo simplex, en
1947, John von Neumann, que desarrolló la teoría de la dualidad en el mismo año y Leonid

52
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Kantoróvich, un matemático ruso, que utiliza técnicas similares en la economía antes de


Dantzig y ganó el premio Nobel en economía en 1975. En 1979 otro matemático ruso,
Leonid Khachiyan, diseñó el llamado Algoritmo del elipsoide, a través del cual demostró
que el problema de la programación lineal es resoluble de manera eficiente, es decir, en
tiempo polinomial. Más tarde, en 1984, Narendra Karmarkar introduce un nuevo método
del punto interior para resolver problemas de programación lineal, lo que constituiría un
enorme avance en los principios teóricos y prácticos en el área.

El ejemplo original de Dantzig de la búsqueda de la mejor asignación de 70 personas a 70


puestos de trabajo es un ejemplo de la utilidad de la programación lineal. La potencia de
computación necesaria para examinar todas las permutaciones a fin de seleccionar la
mejor asignación es inmensa (factorial de 70, 70!); el número de posibles configuraciones
excede al número de partículas en el universo. Sin embargo, toma sólo un momento
encontrar la solución óptima mediante el planteamiento del problema como una
programación lineal y la aplicación del algoritmo simplex. La teoría de la programación
lineal reduce drásticamente el número de posibles soluciones óptimas que deben ser
revisadas.

Aplicaciones

La programación lineal constituye un importante campo de la optimización por varias


razones, muchos problemas prácticos de la investigación de operaciones pueden
plantearse como problemas de programación lineal. Algunos casos especiales de
programación lineal, tales como los problemas de flujo de redes y problemas de flujo de
mercancías se consideraron en el desarrollo de las matemáticas lo suficientemente
importantes como para generar por si mismos mucha investigación sobre algoritmos
especializados en su solución. Una serie de algoritmos diseñados para resolver otros tipos
de problemas de optimización constituyen casos particulares de la más amplia técnica de la
programación lineal. Históricamente, las ideas de programación lineal han inspirado
muchos de los conceptos centrales de la teoría de optimización tales como la dualidad, la
descomposición y la importancia de la convexidad y sus generalizaciones, del mismo
modo, la programación lineal es muy usada en la microeconomía y la administración de

53
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

empresas, ya sea para aumentar al máximo los ingresos o reducir al mínimo los costos de
un sistema de producción, algunos ejemplos son la mezcla de alimentos, la gestión de
inventarios, la cartera y la gestión de las finanzas, la asignación de recursos humanos y
recursos de máquinas, la planificación de campañas de publicidad, etc.

Otros son:

 Optimización de la combinación de cifras comerciales en una red lineal de distribución


de agua

 Aprovechamiento óptimo de los recursos de una cuenca hidrográfica, para un año con
afluencias caracterizadas por corresponder a una determinada frecuencia

 Soporte para toma de decisión en tiempo real, para operación de un sistema de obras
hidráulicas

 Solución de problemas de transporte

Existen diferentes de formas de la representación de un árbol binario

Ilustración 22. Árbol binario

Un árbol binario tiene infinidad de aplicaciones

En algoritmos computaciones se aplica en la representación de estructuras anidadas

54
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 23. Estructuras anidadas

Representación de expresiones algebraicas

Ilustración 24. Representación de expresiones algebraicas

Ejemplo 1. Este es un caso curioso, con solo 6 variables (un caso real de problema de
transporte puede tener fácilmente más de 1.000 variables) en el cual se aprecia la utilidad
de este procedimiento de cálculo.

Existen tres minas de carbón cuya producción diaria es:

 La mina "a" produce 40 toneladas de carbón por día

 La mina "b" produce 40 t/día

55
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 La mina "c" produce 20 t/día

En la zona hay dos centrales termoeléctricas que consumen:

 La central "d" consume 40 t/día de carbón

 La central "e" consume 60 t/día

Los costos de mercado, de transporte por tonelada son:

 De "a" a "d" = 2 monedas

 De "a" a "e" = 11 monedas

 De "b" a "d" = 12 monedas

 De "b" a "e" = 24 monedas

 De "c" a "d" = 13 monedas

 De "c" a "e" = 18 monedas

Ilustración 25. Modelo del problema

Modelo del problema

Si se preguntase a los pobladores de la zona cómo organizar el transporte, tal vez la


mayoría opinaría que debe aprovecharse el precio ofrecido por el transportista que va de
"a" a "d", porque es más conveniente que los otros, debido a que es el de más bajo precio.

En este caso, el costo total del transporte es:

 Transporte de 40 t de "a" a "d" = 80 monedas

56
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Transporte de 20 t de "c" a "e" = 360 monedas

 Transporte de 40 t de "b" a "e" = 960 monedas

 Total 1.400 monedas

Sin embargo, formulando el problema para ser resuelto por la programación lineal se
tienen las siguientes ecuaciones:

 Restricciones de la producción:

 Restricciones del consumo:

 La función objetivo será:

La solución de costo mínimo de transporte diario resulta ser:

 Xb-d = 40 resultando un costo de 12 x 40 = 480 monedas

 Xa-e = 40 resultando un costo de 11 x 40 = 440 monedas

 Xc-e = 20 resultando un costo de 18 x 20 = 360 monedas

 Total 1.280 monedas

120 monedas menos que antes

4.2.2. Búsqueda Binaria

El algoritmo de búsqueda binaria es un excelente método para buscar datos dentro de una
estructura (generalmente un arreglo unidimensional). Se le da el nombre de búsqueda

57
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

binaria por que el algoritmo divide en dos el arreglo, aludiendo al concepto de bit, el cual
puede tener dos estados.

La única condición para usar este algoritmo es que los datos dentro del arreglo estén
ordenados de menor a mayor.

La solución más fácil para realizar una búsqueda es por fuerza bruta, pero este método
puede resultar bastante ineficiente cuando se tiene una gran cantidad de datos, ya que
habría que buscar posición por posición hasta encontrar el dato que queremos.
El pseudocódigo por fuerza bruta es bastante sencillo:

for(int i=0; i<Arreglo.length; i++)


if(Arreglo[i] == elemento)
System.out.println("\n Elemento encontrado en la posición: " + i);

Solo se recorre todo el arreglo y verificamos si la posición i es igual al dato que queremos
buscar, el código anterior se puede mejorar simplemente agregandole una bandera, pero
aun así no es lo suficientemente bueno.

El algoritmo de búsqueda binaria es el siguiente:

1. Se declaran los índices superior e inferior. El inferior en 0 y el superior con el


tamaño del arreglo menos 1

2. Se calcula el centro del arreglo con la siguiente fórmula:

centro = (superior + inferior) / 2

3. Verificamos si el arreglo en la posición centro es igual al dato que buscamos. Si es igual


significa que encontramos el dato y retornamos centro

4. Si son diferentes verificamos si el arreglo en la posición centro es mayor al dato que


queremos buscar. Si es mayor actualizamos superior: superior = centro - 1, si no
actualizamos inferior: inferior = centro + 1

5. Volvemos al paso 2

6. Si cuando ya no se cumpla la condición del ciclo y no se encontró el dato retornamos


-1 indicando que el dato no se encuentra en el arreglo

58
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ejemplo 1. Supongamos que tenemos el arreglo {2, 3, 5, 7, 9, 11, 14, 18, 22, 25} y
queremos buscar el dato 18.

Solución. Aplicando el algoritmo de búsqueda binaria

1. Entonces

a. el inferior toma el valor de 0 y,

b. el superior el valor de 9 (ya que es tamaño del arreglo menos 1).

2. Calculamos el centro, centro = (superior + inferior) / 2

centro = (9 + 0) / 2

centro = 4

división entera(ignorando la parte decimal)

Arreglo en la posición centro es 9 (Arreglo[centro] = 9) ya que se empieza a contar


desde 0

3. Comprobamos si arreglo en la posición centro es igual al dato que queremos buscar


Arreglo[centro] = dato, como Arreglo[centro] = 9 y dato = 18

Si no son iguales por lo tanto ahora verificamos

Si es mayor, en este caso no lo es entonces

actualizamos inferior = centro + 1, esto hace que podamos descartar todos los datos
del centro hacia atrás, esto reduce nuestro arreglo a {11, 14, 18, 22, 25}

4. Y así seguiremos hasta que Arreglo[centro] = dato.


Como se puede notar este método es bastante eficiente en arreglos grandes, por
ejemplo supongamos que tenemos un arreglo de 10000 datos, y estamos buscando un
dato que se encuentra en la posición 6000, solo en la primera vuelta del ciclo ya se
pueden descartar los primeros 5000 valores, en cambio por fuerza bruta se tendrían
que realizar esos 6000 ciclos para poder localizar el dato.
El código completo quedaría así:

59
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

public class BusquedaBinaria


{
public static int busquedaBinaria(int[] Arreglo, int elemento)
{
int i = 0, centro = 0, posicion = 0, inferior = 0, superior = Arreglo.length-1;
while(inferior <= superior)
{
centro = (superior + inferior) / 2;
if (Arreglo[centro] == elemento)
return centro;
else
if (Arreglo[centro] > elemento)
superior = centro - 1;
else
inferior = centro + 1;
}
return -1;
}
public static void main (String[] args)
{
java.util.Scanner Leer = new java.util.Scanner(System.in);
System.out.print("Tamaño del arreglo: ");
int tamañoArreglo = Leer.nextInt();
int[] Arreglo = new int[tamañoArreglo];
for(int i=0; i<Arreglo.length; i++)
Arreglo[i] = Leer.nextInt();
System.out.print("Elemento a buscar: ");
int elemento = Leer.nextInt();
int posicion = busquedaBinaria(Arreglo, elemento);
if(posicion == -1)

60
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

System.out.println("\nElemento no encontrado");
else
System.out.println("\nElemento " + elemento + " encontrado en la posición " +
posicion);
}
}

4.2.3. Arboles de Búsqueda

Un árbol binario de búsqueda también llamados BST (acrónimo del inglés Binary
Search Tree) es un tipo particular de árbol binario que presenta una estructura de datos
en forma de árbol usada en informática.

Ilustración 26. Árbol binario de búsqueda. Para una fácil comprensión queda resumido
en que es un árbol binario que cumple que
el subárbol izquierdo de cualquier nodo (si
no está vacío) contiene valores menores
que el que contiene dicho nodo, y el
subárbol derecho (si no está vacío)
contiene valores mayores.

Para estas definiciones se considera que hay una relación de orden establecida entre los
elementos de los nodos. Que cierta relación esté definida, o no, depende de cada lenguaje
de programación. De aquí se deduce que puede haber distintos árboles binarios de
búsqueda para un mismo conjunto de elementos.

La altura h en el peor de los casos siempre el mismo tamaño que el número de elementos
disponibles. Y en el mejor de los casos viene dada por la expresión

, donde ceil indica redondeo por exceso.

61
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

El interés de los árboles binarios de búsqueda (ABB) radica en que su recorrido en


inorden proporciona los elementos ordenados de forma ascendente y en que la búsqueda
de algún elemento suele ser muy eficiente.

Dependiendo de las necesidades del usuario que trate con una estructura de este tipo se
podrá permitir la igualdad estricta en alguno, en ninguno o en ambos de los subárboles
que penden de la raíz. Permitir el uso de la igualdad provoca la aparición de valores dobles
y hace la búsqueda más compleja.

Un árbol binario de búsqueda no deja de ser un caso particular de árbol binario, así
usando la siguiente especificación de árbol binario.

Operaciones

Todas las operaciones realizadas sobre árboles binarios de búsqueda están basadas en la
comparación de los elementos o clave de los mismos, por lo que es necesaria una
subrutina, que puede estar predefinida en el lenguaje de programación, que los compare y
pueda establecer una relación de orden entre ellos, es decir, que dados dos elementos sea
capaz de reconocer cual es mayor y cual menor. Se habla de clave de un elemento porque
en la mayoría de los casos el contenido de los nodos será otro tipo de estructura y es
necesario que la comparación se haga sobre algún campo al que se denomina clave.

Búsqueda

La búsqueda consiste acceder a la raíz del árbol, si el elemento a localizar coincide con
éste la búsqueda ha concluido con éxito, si el elemento es menor se busca en el subárbol
izquierdo y si es mayor en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido
encontrado se supone que no existe en el árbol. Cabe destacar que la búsqueda en este
tipo de árboles es muy eficiente, representa una función logarítmica. El máximo número
de comparaciones que necesitaríamos para saber si un elemento se encuentra en un árbol
binario de búsqueda estaría entre [log2(N+1)] y N, siendo N el número de nodos. La
búsqueda de un elemento en un ABB (Árbol Binario de Búsqueda) se puede realizar de
dos formas, iterativa o recursiva.

62
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ejemplo de versión iterativa en el lenguaje de programación C, suponiendo que estamos


buscando una clave alojada en un nodo donde está el correspondiente "dato" que
precisamos encontrar:

C#

data Buscar_ABB(abb t,clave k)

abb p;

dato e;

e=NULL;

p=t;

if (!estaVacio(p))

while (!estaVacio(p) && (p->k!=k) )

if (k < p->k)

p=p->l;

if (p->k < k)

p=p->r;

if (!estaVacio(p) &&(p->d!=NULL) )

63
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

e=copiaDato(p->d);

return e;

Inserción

La inserción es similar a la búsqueda y se puede dar una solución tanto iterativa como
recursiva. Si tenemos inicialmente como parámetro un árbol vacío se crea un nuevo nodo
como único contenido el elemento a insertar. Si no lo está, se comprueba si el elemento
dado es menor que la raíz del árbol inicial con lo que se inserta en el subárbol izquierdo y
si es mayor se inserta en el subárbol derecho. De esta forma las inserciones se hacen en
las hojas.

Ilustración 27. Inserción en subárbol

Evolución de la inserción del elemento "5" en un ABB.

Como en el caso de la búsqueda puede haber varias variantes a la hora de implementar la


inserción en el TAD (Tipo Abstracto de Datos), y es la decisión a tomar cuando el
elemento (o clave del elemento) a insertar ya se encuentra en el árbol, puede que éste sea
modificado o que sea ignorada la inserción. Es obvio que esta operación modifica el ABB
perdiendo la versión anterior del mismo.
64
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

A continuación se muestran las dos versiones del algoritmo en pseudolenguaje, iterativa y


recursiva, respectivamente.

PROC InsertarABB(árbol:TABB; dato:TElemento)

VARIABLES

nuevonodo,pav,pret:TABB

clavenueva:Tclave

ele:TElemento

INICIO

nuevonodo <- NUEVO(TNodoABB)

nuevonodo^.izq <- NULO

nuevonodo^.der <- NULO

nuevonodo^.elem <- dato

SI ABBVacío (árbol) ENTONCES

árbol <- nuevonodo

EN OTRO CASO

clavenueva <- dato.clave

pav <- árbol // Puntero Avanzado

pret <- NULO // Puntero Retrasado

MIENTRAS (pav <- NULO) HACER

pret <- pav

ele = pav^.elem

SI (clavenueva < ele.clave ) ENTONCES

pav <- pav^.izq

EN OTRO CASO

65
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

pav <- pav^.dch

FINSI

FINMIENTRAS

ele = pret^.elem

SI (clavenueva < ele.clave ) ENTONCES

pret^.izq <- nuevonodo

EN OTRO CASO

pret^.dch <- nuevonodo

FINSI

FINSI

FIN

PROC InsertarABB(árbol:TABB; dato:TElemento)

VARIABLES

ele:TElemento

INICIO

SI (ABBVacío(árbol)) ENTONCES

árbol <- NUEVO(TNodoABB)

árbol^.izq <- NULO

árbol^.der <- NULO

árbol^.elem <- dato

EN OTRO CASO

ele = InfoABB(árbol)

SI (dato.clave < ele.clave) ENTONCES

InsertarABB(árbol^.izq, dato)

66
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

EN OTRO CASO

InsertarABB(árbol^.dch, dato)

FINSI

FINSI

FIN

Borrado

La operación de borrado no es tan sencilla como las de búsqueda e inserción. Existen


varios casos a tener en consideración:

 Borrar un nodo sin hijos o nodo hoja: simplemente se borra y se establece a nulo
el apuntador de su padre.

Ilustración 28. Borrar un nodo sin hijos o nodo hoja

Nodo a eliminar 74

 Borrar un nodo con un subárbol hijo: se borra el nodo y se asigna su subárbol


hijo como subárbol de su padre.

Ilustración 29. Borrar un nodo con un subárbol hijo

Nodo a eliminar 70

67
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Borrar un nodo con dos subárboles hijo: la solución está en reemplazar el valor
del nodo por el de su predecesor o por el de su sucesor en inorden y posteriormente
borrar este nodo. Su predecesor en inorden será el nodo más a la derecha de su
subárbol izquierdo (mayor nodo del subarbol izquierdo), y su sucesor el nodo más a la
izquierda de su subárbol derecho (menor nodo del subarbol derecho). En la siguiente
figura se muestra cómo existe la posibilidad de realizar cualquiera de ambos
reemplazos:

Ilustración 30. Borrar un nodo con 2 subárboles hijos

Nodo a eliminar 59

El siguiente algoritmo en C realiza el borrado en un ABB. El procedimiento reemplazar


busca la mayor clave del subárbol izquierdo y la asigna al nodo a eliminar.

C#

void borrar(tArbol **a, int elem)

tArbol *aux;

if (*a == NULL)

return;

if ((*a)->clave < elem)

borrar(&(*a)->hDerecho, elem);

else if ((*a)->clave > elem)

borrar(&(*a)->hIzquierdo, elem);

68
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

else if ((*a)->clave == elem)

aux = *a;

if ((*a)->hIzquierdo == NULL)

*a = (*a)->hDerecho;

else if ((*a)->hDerecho == NULL)

*a = (*a)->hIzquierdo;

else

reemplazar(&(*a)->hIzquierdo, &aux);

free(aux);

void reemplazar(tArbol **a, tArbol **aux)

if ((*a)->hDerecho == NULL)

(*aux)->clave = (*a)->clave;

*aux = *a;

*a = (*a)->hIzquierdo;

else

reemplazar(&(*a)->hDerecho, aux);

69
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Recorridos

Se puede hacer un recorrido de un árbol en profundidad o en anchura.

Los recorridos en anchura son por niveles, se realiza horizontalmente desde la raíz a
todos los hijos antes de pasar a la descendencia de alguno de los hijos.

El coste de recorrer el ABB es O(n) ya que se necesitan visitar todos los vértices.

El recorrido en profundidad lleva al camino desde la raíz hacia el descendiente más lejano
del primer hijo y luego continúa con el siguiente hijo. Como recorridos en profundidad
tenemos inorden, preorden y postorden.

Los tres criterios principales para recorrer un árbol binario y visitar todos sus nodos son,
recorrer el árbol en:

Preorden:

Se ejecutan las operaciones:

1. Visitar la raíz

2. recorrer el subárbol izquierdo en preorden

3. recorrer el subárbol derecho en preorden

Entreorden:

Se ejecutan las operaciones:

1. recorrer el subárbol izquierdo en entreorden

2. Visitar la raíz

3. recorrer el subárbol derecho en entreorden

Postorden:

Se ejecutan las operaciones:

1. recorrer el subárbol izquierdo en postorden

2. recorrer el subárbol derecho en postorden

3. Visitar la raíz
70
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Una propiedad de los ABB es que al hacer un recorrido en profundidad inorden


obtenemos los elementos ordenados de forma ascendente.

Ilustración 31. Árbol binario de búsqueda Ejemplo árbol binario de búsqueda

Resultado de hacer el recorrido en:

Inorden =[6, 9, 13, 14, 15, 17, 20, 26, 64, 72].

Preorden =[15, 9, 6, 14, 13, 20, 17, 64, 26, 72].

Postorden=[6, 13, 14, 9, 17, 26, 72, 64, 20, 15].

Ejemplo 1. Determinar los recorridos del siguiente árbol binario

Ilustración 32. Árbol binario

Solución.

Recorridos

Preorden (Raiz-Izq-Der): A,B,D,E,C,F,G

Inorden (Izq-Raiz-Der): D,B,E,A,F,C,G

Postorden(Izq-Der-Raiz): D,E,B,F,G,C,A

71
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

4.2.4. Búsqueda por transformación de claves (Hashing)

Orígenes del término

El término hash proviene, aparentemente, de la analogía con el significado estándar (en


inglés) de dicha palabra en el mundo real: picar y mezclar. Donald Knuth cree que H. P.
Luhn, empleado de IBM, fue el primero en utilizar el concepto en un memorándum
fechado en enero de 1953. Su utilización masiva no fue hasta después de 10 años.

Definición

Una función de Hash es una caja negra que tiene como entrada una llave y como salida una
dirección h(K)=address

Ejemplo. h(LOWELL)=4

Ilustración 33. Búsqueda por transformación de claves (Hashing)

Función Hash

A las funciones hash (adopción más o menos directa del término inglés hash function)
también se les llama funciones picadillo, funciones resumen o funciones de digest
(adopción más o menos directa del término inglés equivalente digest function) 1 2 3 Una
función hash H es una función computable mediante un algoritmo,

72
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

H: U → M

X → h(x)

que tiene como entrada un conjunto de elementos, que suelen ser cadenas, y los
convierte (mapea) en un rango de salida finito, normalmente cadenas de longitud fija. Es
decir, la función actúa como una proyección del conjunto U sobre el conjunto M.

Observar que M puede ser un conjunto definido de enteros. En este caso podemos
considerar que la longitud es fija si el conjunto es un rango de números de enteros ya que
podemos considerar que la longitud fija es la del número con mayor número de cifras.
Todos los números se pueden convertir al número especificado de cifras simplemente
anteponiendo ceros.

Normalmente el conjunto M tiene un número elevado de elementos y U es un conjunto


de cadenas con un número más o menos pequeño de símbolos. Por esto se dice que estas
funciones resumen datos del conjunto dominio. La idea básica de un valor hash es que
sirva como una representación compacta de la cadena de entrada. Por esta razón decimos
que estas funciones resumen datos del conjunto dominio.

Terminología asociada

Al conjunto U se le llama dominio de la función hash. A un elemento de U se le llama


preimagen o dependiendo del contexto clave o mensaje.

Al conjunto M se le llama imagen de la función hash. A un elemento de M se le llama valor


hash, código hash o simplemente hash.

Se dice que se produce una colisión cuando dos entradas distintas de la función de hash
producen la misma salida. De la definición de función hash podemos decir que U, el
dominio de la función, puede tener infinitos elementos; sin embargo, M, el rango de la
función, tiene un número finito de elementos debido a que el tamaño de sus cadenas es
fijo. Por tanto la posibilidad de existencia de colisiones es intrínseca a la definición de
función hash. Una buena función de hash es una que tiene pocas colisiones en el conjunto
esperado de entrada. Es decir, se desea que la probabilidad de colisión sea muy baja.

73
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Aplicaciones

Las funciones hash son usadas en múltiples campos, ejemplos:

 Herramienta básica para la construcción de utilidades más complejas

 Construcción de estructuras de datos: Su uso en distintas estructuras de datos hacen


más eficientes las búsquedas. Ej. tablas hash

 Construcción de esquemas de compromiso, los esquemas de compromiso permiten


que una entidad elija una valor entre un conjunto finito de posibilidades de tal forma
que no pueda cambiarla. Esa entidad no tiene que revelar su elección hasta si acaso el
momento final (la elección puede permanecer oculta)

 Construcción de algoritmos de cifrado/descifrado. Por ejemplo se usa en la


construcción de cifradores de flujo y de cifradores de bloque

 Construcción de algoritmos generadores de números pseudoaleatorios

 Construcción de cadenas pseudoaleatorias. Por ejemplo el llamado modelo de oráculo


aleatorio se basa en considerar que funciones hash con ciertas propiedades se
comportan como funciones que escogen cadenas al azar, se usa para el estudio de la
seguridad los esquemas criptográficos

 Construcción de algoritmos de testeo de pertenencia o no a un conjunto. Se han


usado funciones hash para la construcción de acumuladores criptográficos y filtros de
Bloom. Estas tecnologías permiten establecer mecanismos que permiten pronunciarse,
a veces con cierto grado de error, sobre la pertenencia o no a cierto conjunto

 Construcción de métodos de generación de sellos de tiempo confiables

 Herramienta para proteger la integridad

 En la firma digital

 Como dato que se firma: En los algoritmos de firma convencionales


normalmente en lugar de firmar todo el contenido se suele ser firmar
sólo el valor hash del mismo. Algunas de las motivaciones para hacer
esto son:

74
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

a) Cuando se usa para firmar algoritmos de firma por bloques donde los
mensajes son más largos que el bloque, no es seguro firmar mensajes bloque a
bloque ya que un enemigo podría borrar bloques del mensaje firmado o
insertar bloques de su elección en el mensaje antes de que sea firmado. Al
usar una función hash hacemos una transformación que hace a la firma
dependiente de todas las partes del mensaje.

b) Normalmente los valores hash son mucho más cortos que los datos originales
de entrada. Se puede mejorar mucho la velocidad de firma firmando el valor
hash en lugar de firmar el dato original.

c) Si los mensajes a firmar pueden tener cierta estructura algebraica y el


algoritmo de firma se comporta de forma que el sistema resultante puede ser
vulnerable a criptoanálisis con ataques de texto escogido, podemos usar
funciones hash para destruir esta estructura algebraica.

Como parte del algoritmo de firma: Se han desarrollado algoritmos de firma


que usan funciones hash en el propio algoritmo de firma como una herramienta
interna del mismo. Ejemplo de este tipo algoritmos son el esquema de firma de
Merkle.

 Suma de verificación (del inglés checksum): Cuando queremos almacenar o


transmitir información, para protegernos frente a errores fortuitos en el
almacenamiento o transmisión, es útil acompañar a los datos de valores hash
obtenidos a partir de ellos aplicando funciones hash con ciertas propiedades de
forma que puedan ser usados para verificar hasta cierto punto el propio dato. Al
valor hash se le llama Suma de verificación.

 Prueba de la integridad de contenidos. Por ejemplo cuando se distribuye un


contenido por la red, y se quiere estar seguro de que lo que le llega al receptor es
lo que se está emitiendo, se proporciona un valor hash del contenido de forma
que ese valor tiene que obtenerse al aplicar la función hash sobre el contenido
distribuido asegurando así la integridad. A esto se le suele llamar checksum
criptográfico debido a que es un checksum que requiere el uso de funciones

75
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

hash criptográficas para que sea difícil generar otros ficheros falso que tengan el
mismo valor hash. Otro ejemplo de uso esta tecnología para verificar la integridad
es calcular y guardar el valor hash de archivos para poder verificar posteriormente
que nadie (Ejemplo un virus) los ha modificado. Si en lugar de verificar la integridad
de un solo contenido lo que se quiere es verificar la integridad de un conjunto de
elementos, se pueden usar algoritmos basados en funciones hash como los árboles
de Merkle que se basan en aplicar reiteradamente las funciones hash sobre los
elementos del conjunto y sobre los valores hash resultantes.

 Herramientas vinculadas a la autenticación y control de acceso

 Autenticación de entidades: Por ejemplo es frecuente el uso para este propósito


de funciones hash deterministas con clave secreta que tienen ciertas propiedades
(Códigos de autenticación de mensajes). En estos esquemas tanto el servicio
de autenticación, o verificador, como la entidad que se quiere autenticar
mantienen en secreto la clave de la función hash. El esquema funciona de la
siguiente forma: El que se quiere autenticar genera un mensaje y calcula su valor
hash. Estos dos datos se mandan al verificador. El verificador comprueba que el
valor hash se corresponde con el mensaje enviado y de esta forma verifica que la
entidad tiene la clave secreta y por otra parte puede asegurar que el mensaje es
íntegro (no ha sido modificado desde que se calculó el valor hash). Observar que
el esquema no tiene la propiedad del no-repudio por parte del que se quiere
autenticar ya que el verificador, al disponer de la clave secreta, puede generar
también los valores hash.

 Protección de claves: Para comprobar la corrección de una clave no es necesario


tener la clave almacenada, lo que puede ser aprovechado para que alguien no
autorizado acceda a ella, sino almacenar el valor hash resultante de aplicar una
función hash determinista. De esta forma para verificar si una clave es correcta
basta con aplicar la función hash y verificar si el resultado coincide con el que
tenemos almacenado.

76
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Derivación de claves: Por ejemplo en algunas aplicaciones usan funciones hash para
derivar una clave de sesión a partir de un número de transacción y una clave
maestra. Otro ejemplo de aplicación sería el uso de funciones hash para conseguir
sistemas de autenticación con claves de un solo uso o OTP (del inglés One Time
Password). En este tipo de sistemas la clave es válida para un solo uso. Estos
sistemas están basados se basan en tener un semilla inicial y luego ir generando
claves (mediante un algoritmo que puede usar funciones hash) que pueden tener
un solo uso y así evitar ataques de REPLAY.

 Herramienta para la identificación y la rápida comparación de datos: Se pueden usar


funciones hash para proporcionar una identificación de objetos o situaciones. Una
buena función hash para este propósito debería ser rápida y asegurarse de que dos
objetos o situaciones que se considerar iguales den lugar al mismo valor hash.
Observar que dos objetos o situaciones pueden ser considerados iguales sin ser
idénticos. Por ejemplo podemos considerar iguales a dos ficheros que son distintos bit
a bit porque realmente son la digitalización de la misma película. Es labor del diseño de
la función hash capturar la esencia del criterio de igualdad. Por otra parte la evaluación
de la función hash debería ser poco costosa para facilitar la rápida comparación de
elementos candidatos a ser iguales y de esta forma poder implementar algoritmos de
búsqueda rápidos.

 Huellas digitales.- El uso de funciones hash aplicados a cadenas permiten obtener


valores hash que pueden usarse detectar fácilmente la aparición de esos datos en
distintos sitios. Pueden ser usados para distintos usos como búsqueda de virus,
autenticación con datos biométricos, detección de copias. La idea puede usarse
más allá de textos y ser aplicado a cualquier tipo de contenido multimedia: Las
funciones hash específicamente diseñadas para este propósito obtienen valores
hash que permiten detectar características intrínsecas del contenido multimedia,
de forma que se pueda identificar si dos archivos diferentes se corresponden con
el mismo contenido multimedia. Como aplicación práctica de este tipo de
algoritmo tenemos los programas que se ejecutan en dispositivos móviles y que
son capaces de adivinar el título de la canción que está sonando en la habitación

77
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

solamente capturando el sonido y comparándolo con estos valores hash. Este tipo
de algoritmos también se puede utilizar para protección de contenidos multimedia
ya que permite validar automáticamente si cierto fichero multimedia está
protegido o no por derechos de autor.

 Identificación de contenidos: En algunas aplicaciones se usa el valor hash de un


contenido multimedia para identificar ese contenido independientemente de su
nombre o ubicación. Esto es ampliamente usado en redes Peer-to-peer que
intercambian de archivos, tales como Kazaa, Ares Galaxy, Overnet, BitTorrent.

 Identificar un registro en una base de datos y permitir con ello un acceso más
rápido a los registros (incluso más rápido que teniendo índices).

 Algoritmos de búsqueda de subcadenas: Los algoritmos de búsqueda de


subcadenas tratan el problema de buscar subcadenas, a la que llaman patrón,
dentro de otra cadena a la que llaman texto. Hay algoritmos de este tipo que usan
funciones hash en su implementación. Ejemplo: algoritmo Karp-Rabin.

 Detección de virus: Para detectar los virus muchos antivirus definen funciones
hash que capturan la esencia del virus y que permiten distinguirlos de otros
programas o virus. Es lo que se llama firma del virus. Estas firmas son usadas por
los antivirus para poder detectarlos.

Muchas de las aplicaciones de las funciones hash son relativas al campo de la criptografía
(Cifradores, acumuladores criptográficos, firma digital, protocolos criptográficos de
autenticación). La Criptografía es una rama de las matemáticas que proporciona
herramientas para conseguir seguridad en los sistemas de información. Las funciones hash
interesantes en el área de la criptografía se caracterizan por cumplir una serie de
propiedades que permiten a las utilidades criptográficas que las utilizan ser resistente
frente ataques que intentan vulnerar la seguridad del sistema. A las funciones hash que
cumplen estas propiedades se las llama funciones hash criptográficas.

Búsqueda mediante transformación de claves (hashing)

78
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Es un método de búsqueda que aumenta la velocidad de búsqueda, pero que no requiere


que los elementos estén ordenados. Consiste en asignar a cada elemento un índice
mediante una transformación del elemento. Esta correspondencia se realiza mediante una
función de conversión, llamada función hash. La correspondencia más sencilla es la
identidad, esto es, al número 0 se le asigna el índice 0, al elemento 1 el índice 1, y así
sucesivamente. Pero si los números a almacenar son demasiado grandes esta función es
inservible. Por ejemplo, se quiere guardar en un array la información de los 1000 usuarios
de una empresa, y se elige el número de DNI como elemento identificativo. Es inviable
hacer un array de 100.000.000 elementos, sobre todo porque se desaprovecha demasiado
espacio. Por eso, se realiza una transformación al número de DNI para que nos de un
número menor, por ejemplo coger las 3 últimas cifras para guardar a los empleados en un
array de 1000 elementos. Para buscar a uno de ellos, bastaría con realizar la
transformación a su DNI y ver si está o no en el array.

La función de hash ideal debería ser biyectiva, esto es, que a cada elemento le
corresponda un índice, y que a cada índice le corresponda un elemento, pero no siempre
es fácil encontrar esa función, e incluso a veces es inútil, ya que puedes no saber el
número de elementos a almacenar. La función de hash depende de cada problema y de
cada finalidad, y se pueden utilizar con números o cadenas, pero las más utilizadas son:

 Restas sucesivas: esta función se emplea con claves numéricas entre las que existen
huecos de tamaño conocido, obteniéndose direcciones consecutivas. Por ejemplo, si el
número de expediente de un alumno universitario está formado por el año de entrada
en la universidad, seguido de un número identificativo de tres cifras, y suponiendo que
entran un máximo de 400 alumnos al año, se le asignarían las claves:

1998-000 --> 0 = 1998000-1998000


1998-001 --> 1 = 1998001-1998000
1998-002 --> 2 = 1998002-1998000
...
1998-399 --> 399 = 1998399-1998000
1999-000 --> 400 = 1999000-1998000+400

79
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

...
yyyy-nnn --> N = yyyynnn-1998000+(400*(yyyy-1998))

 Aritmética modular: el índice de un número es resto de la división de ese número


entre un número N prefijado, preferentemente primo. Los números se guardarán en
las direcciones de memoria de 0 a N-1. Este método tiene el problema de que cuando
hay N+1 elementos, al menos un índice es señalado por dos elementos (teorema del
palomar). A este fenómeno se le llama colisión, y es tratado más adelante. Si el
número N es el 13, los números siguientes quedan transformados en:

13000000 --> 0
12345678 --> 7
13602499 --> 1
71140205 --> 6
73062138 --> 6

 Mitad del cuadrado: consiste en elevar al cuadrado la clave y coger las cifras centrales.
Este método también presenta problemas de colisión:

123*123=15129 --> 51
136*136=18496 --> 84
730*730=532900 --> 29
301*301=90601 --> 06
625*625=390625 --> 06

 Truncamiento: consiste en ignorar parte del número y utilizar los elementos restantes
como índice. También se produce colisión. Por ejemplo, si un número de 8 cifras se
debe ordenar en un array de 1000 elementos, se pueden coger la primer, la tercer y la
última cifras para formar un nuevo número:

13000000 --> 100


12345678 --> 138
13602499 --> 169
71140205 --> 715
73162135 --> 715
80
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Plegamiento: consiste en dividir el número en diferentes partes, y operar con ellas


(normalmente con suma o multiplicación). También se produce colisión. Por ejemplo,
si dividimos los número de 8 cifras en 3, 3 y 2 cifras y se suman, dará otro número de
tres cifras (y si no, se cogen las tres últimas cifras):

13000000 --> 130=130+000+00


12345678 --> 657=123+456+78
71140205 --> 118 --> 1118=711+402+05
13602499 --> 259=136+024+99
25000009 --> 259=250+000+09

4.2.5. Búsqueda en Textos

El algoritmo de búsqueda de cadenas Boyer-Moore es un particularmente eficiente


algoritmo de búsqueda de cadenas, y ha sido el punto de referencia estándar para la
literatura de búsqueda de cadenas práctica. Fue desarrollado por Bob Boyer y J Strother
Moore en 1977. El algoritmo preprocesa la cadena objetivo (clave) que está siendo
buscada, pero no en la cadena en que se busca (no como algunos algoritmos que procesan
la cadena en que se busca y pueden entonces amortizar el coste del preprocesamiento
mediante búsqueda repetida). El tiempo de ejecución del algoritmo Boyer-Moore, aunque
es lineal en el tamaño de la cadena siendo buscada, puede tener un factor
significativamente más bajo que muchos otros algoritmos de búsqueda: no necesita
comprobar cada carácter de la cadena que es buscada, puesto que salta algunos de ellos.
Generalmente el algoritmo es más rápido cuanto más grande es la clave que es buscada,
usa la información conseguida desde un intento para descartar tantas posiciones del texto
como sean posibles en donde la cadena no coincida.

Cómo funciona el algoritmo

A la gente frecuentemente le sorprende el algoritmo de Boyer-Moore, cuando lo conoce,


porque en su verificación intenta comprobar si hay una coincidencia en una posición
particular marchando hacia atrás. Comienza una búsqueda al principio de un texto para la
palabra "ANPANMAN", por ejemplo, comprueba que la posición octava del texto en
proceso contenga una "N". Si encuentra la "N", se mueve a la séptima posición para ver si

81
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

contiene la última "A" de la palabra, y así sucesivamente hasta que comprueba la primera
posición del texto para una "A".

La razón por la que Boyer-Moore elige este enfoque está más clara cuando consideramos
que pasa si la verificación falla-por ejemplo, si en lugar de una "N" en la octava posición,
encontramos una "X". La "X" no aparece en "ANPANMAN", y esto significa que no hay
coincidencia para la cadena buscada en el inicio del texto-o en las siguientes siete
posiciones, puesto que todas fallarían también con la "X". Después de comprobar los ocho
caracteres de la palabra "ANPANMAN" para tan sólo un carácter "X", seremos capaces
de saltar hacia delante y comenzar buscando una coincidencia en el final en la 16.ª posición
del texto.

Esto explica por qué el rendimiento del caso promedio del algoritmo, para un texto de

longitud y patrón fijo de longitud , es : en el mejor caso, solo uno en


caracteres necesita ser comprobado. Esto también explica el resultado algo contra-
intuitivo de que cuanto más largo es el patrón que estamos buscando, el algoritmo suele
ser más rápido para encontrarlo.

El algoritmo pre-calcula dos tablas para procesar la información que obtiene en cada
verificación fallada: una tabla calcula cuantas posiciones hay por delante en la siguiente
búsqueda basada en el valor del carácter que no coincide; la otra hace un cálculo similar
basado en cuantos caracteres coincidieron satisfactoriamente antes del intento de
coincidencia fallado. (Puesto que estas dos tablas devuelven resultados indicando cuán
lejos "saltar" hacia delante, son llamada en ocasiones "tablas de salto", que no deberían ser
confundidas con el significado más común de tabla de saltos en ciencia de la computación)
El algoritmo se desplazará con el valor más grande de los dos valores de salto cuando no
ocurra una coincidencia.

82
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Tabla primera

La "A" no coincidente en la posición 5 (3 atrás desde la última letra de la aguja) excluye las
primeras 6 de las posibles posiciones iniciales mostradas.

Rellénese la primera tabla como sigue, para cada i menor que la longitud de la cadena de
búsqueda, constrúyase el patrón consistente en los últimos i caracteres de la cadena
precedida por un carácter no-coincidente, alinéense a la derecha el patrón y la cadena, y
anótese el menor número de caracteres para que el patrón tenga que desplazarse a la
izquierda para una coincidencia.

Ejemplo: Para la búsqueda de la cadena ANPANMAN, la tabla sería como sigue:


(NMAN significa una subcadena en ANPANMAN consistente en un carácter que no es 'N'
más los caracteres 'MAN'.)

Tabla 3. . Búsqueda de la cadena ANPANMAN

i Patrón Desplazamiento a la izquierda

Es cierto que la letra siguiente a la izquierda en 'ANPANMAN' no


0 N es N (es A), de aquí que el patrón N debe desplazarse una posición
a la izquierda para una coincidencia; por tanto = 1

AN no es una cadena en ANPANMAN, por tanto : el


1 AN desplazamiento izquierdo es el número de letras en 'ANPANMAN'
=8

Subcadena MAN coincide con ANPANMAN tres posiciones a la


2 MAN
izquierda. Por tanto desplazamiento a la izquierda = 3

Vemos que 'NMAN' no es una subcadena de 'ANPANMAN' pero


3 NMAN 'NMAN' es una posible subcadena 6 posiciones más a la izquierda :
('NMANPANMAN'); por tanto = 6

4 ANMAN 6

5 PANMAN 6

83
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

6 NPANMAN 6

7 ANPANMAN 6

La cantidad de desplazamiento calculada por la primera tabla es a veces llamada


"desplazamiento de sufijo bueno"2 o "regla de sufijo bueno (fuerte)". El algoritmo original
Boyer-Moore, usa una más simple, más débil, versión de la regla de sufijo bueno en que
cada entrada en tabla de arriba no requiere una no-coincidencia para el carácter de más a
la izquierda, esto es a veces llamado "regla del sufijo bueno débil y no es suficiente para
conseguir que Boyer-Moore funcione en tiempo lineal en el peor caso.

Segunda tabla

La segunda tabla es fácil de calcular.

Inicia en el último carácter de la cadena vista y muévase hacia el primer carácter, cada vez
que usted se mueve a la izquierda, si el carácter sobre el que está no está en ya en la tabla,
añádalo; su valor de desplazamiento es la distancia desde el carácter más a la derecha.
Todos los otros caracteres reciben un valor igual a la longitud de la cadena de búsqueda.

Ejemplo: Para la cadena ANPANMAN, la segunda tabla sería como se muestra (por claridad,
las entradas son mostradas en el orden que serían añadidas a la tabla): (La N que se
supuestamente sería cero está basada en la segunda N desde la derecha porque solo
anotamos el cálculo para las primeras letras).

Tabla 4. . Búsqueda de la cadena ANPANMAN, desplazamiento de la segunda tabla.

Carácter Desplazamiento La cantidad de desplazamiento calculada por


la segunda tabla es a veces llamada
A 1
"desplazamiento de carácter malo"
M 2

N 3

P 5

Caracteres restantes 8

84
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

4.3. TEORÍA DE GRAFOS

Introducción

La teoría de grafos (también llamada teoría de las gráficas) es un campo de estudio de las
matemáticas y las ciencias de la computación, que estudia las propiedades de los grafos
(también llamadas gráficas) estructuras que constan de dos partes, el conjunto de vértices,
nodos o puntos; y el conjunto de aristas, líneas o lados (edges en inglés) que pueden ser
orientados o no, la teoría de grafos es una rama de la matemáticas discretas y aplicadas, y
es una disciplina que unifica diversas áreas como combinatoria, álgebra, probabilidad,
geometría de polígonos, aritmética y topología, actualmente ha tenido mayor
preponderancia en el campo de la informática, las ciencias de la computación y
telecomunicaciones.

Ejemplos de grafos:

85
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 34. Grafo pez Ilustración 35. Grafo arco Ilustración 36. Grafo dodecaedro

El origen de la palabra grafo es griego y su significado etimológico es "trazar", aparece con


gran frecuencia como respuesta a problemas de la vida cotidiana, algunos ejemplos
podrían ser los siguientes: un gráfico de una serie de tareas a realizar indicando su
secuenciación (un organigrama), grafos matemáticos que representan las relaciones
binarias, una red de carreteras, la red de enlaces ferroviarios o aéreos o la red eléctrica
de una ciudad, en cada caso, es conveniente representar gráficamente el problema
dibujando un grafo como un conjunto de puntos (vértices) con líneas conectándolos
(arcos).

Definición 1:

Un grafo es básicamente un objeto geométrico aunque en realidad sea un objeto


combinatorio, es decir, un conjunto de puntos y un conjunto de líneas tomado de entre el
conjunto de líneas que une cada par de vértices.

Definición 2.

Un grafo es un conjunto de puntos (vértices) en el espacio, que están conectados por un


conjunto de líneas (aristas).

Otros conceptos básicos son:

 Dos vértices son adyacentes si comparten la misma arista

 Los extremos de una arista son los vértices que comparte dicha arista

86
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Un grafo se dice que es finito si su número de vértices es finito

Por otro lado, debido a su generalidad y a la gran diversidad de formas que pueden usarse,
resulta complejo tratar con todas las ideas relacionadas con un grafo.

Ilustración 37. Grafos simples

La teoría de los grafos estudia las propiedades de colecciones de objetos llamados nodos

(o vértices) conectados por vínculos llamados enlaces (varios otros nombres son:
arcos,

Aristas, elementos). Los enlaces de un grafo pueden o no tener orientación.

Ilustración 38. Grafo

Grafo

Un grafo es un par G = (V, E), donde

• V es un conjunto de puntos, llamados nodos, y

• E es un conjunto de pares de nodos, llamados enlaces

87
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

• Un enlace {n,m} se puede denotar nm

Ilustración 39. Enlace

Historia

El origen de la teoría de grafos se remonta al siglo XVIII Ilustración 40. Los 7 puentes del río
pregel en Königsberg
con el problema de los puentes de Königsberg, el cual
consistía en encontrar un camino que recorriera los
siete puentes del río pregel en la ciudad de Königsberg,
actualmente Kaliningrado, de modo que se recorrieran
todos los puentes pasando una sola vez por cada uno de
ellos.

88
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 41. Leonhard Euler

El trabajo de Leonhard Euler sobre el problema titulado


Solutio problematis and geometriam situs pertinentis (La
solución de un problema relativo a la geometría de la
posición) en 1736, es considerado el primer resultado de
la teoría de grafos, también se considera uno de los
primeros resultados topológicos en geometría (que no
depende de ninguna medida), este ejemplo ilustra la
profunda relación entre la teoría de grafos y la topología.

Ilustración 42. Gustav Kirchhoff

Luego, en 1847, Gustav Kirchhoff utilizó la teoría de


grafos para el análisis de redes eléctricas publicando sus
leyes de los circuitos para calcular el voltaje y la corriente
en los circuitos eléctricos, conocidas como leyes de
Kirchhoff, considerado la primera aplicación de la teoría
de grafos a un problema de ingeniería.

Ilustración 43. Francis Guthirie En 1852 Francis Guthrie planteó el problema de los
cuatro colores el cual afirma que es posible, utilizando
solamente cuatro colores, colorear cualquier mapa de
países de tal forma que dos países vecinos nunca tengan el
mismo color. Este problema, que no fue resuelto hasta un
siglo después por Kenneth Appel y Wolfgang Haken en
1976, puede ser considerado como el nacimiento de la
teoría de grafos. Al tratar de resolverlo, los matemáticos
definieron términos y conceptos teóricos fundamentales
de los grafos.

89
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

En 1857, Arthur Cayley estudió y resolvió el problema de enumeración de los isómeros,


compuestos químicos con idéntica composición (formula) pero diferente estructura
molecular. Para ello represento cada compuesto, en este caso hidrocarburos saturados
CnH2n+2, mediante un grafo árbol donde los vértices representan átomos y las aristas la
existencia de enlaces químicos.

El término «grafo», proviene de la expresión «graphic notation» usada por primera vez
por Edward Frankland y posteriormente adoptada por Alexander Crum Brown en 1884, y
hacía referencia a la representación gráfica de los enlaces entre los átomos de una
molécula.

Aplicaciones

La teoría de grafos resuelve diversos problemas como por ejemplo la síntesis de circuitos
secuenciales, contadores o sistemas de apertura, se utiliza para diferentes áreas por
ejemplo, Dibujo computacional en Ingeniería, para modelar trayectos como el de una
línea de autobús a través de las calles de una ciudad, en el que se puede obtener caminos
óptimos para el trayecto aplicando diversos algoritmos como puede ser el algoritmo de
Floyd. Para la administración de proyectos, se utilizan técnicas como PERT en las que se
modelan los mismos utilizando grafos y optimizando los tiempos para concretar los
mismos, ha servido de inspiración para las ciencias sociales, en especial para desarrollar un
concepto no metafórico de red social que sustituye los nodos por los actores sociales y
verifica la posición, centralidad e importancia de cada actor dentro de la red. Esta medida
permite cuantificar y abstraer relaciones complejas, de manera que la estructura social
puede representarse gráficamente. Por ejemplo, una red social puede representar la
estructura de poder dentro de una sociedad al identificar los vínculos (aristas), su
dirección e intensidad, la idea de la manera en que el poder se transmite y a quiénes.

Los grafos son importantes en el estudio de la biología y hábitat, el vértice representa un


hábitat y las aristas (o "edges" en inglés) representa los senderos de los animales o las
migraciones, con esta información, los científicos pueden entender cómo esto puede
cambiar o afectar a las especies en su hábitat.

Ejemplos de aplicaciones de la teoría de grafos:

90
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Tabla 5. Ejemplos de aplicaciones de la teoría de grafos.

Ilustración 44. Mapas Ilustración 45. Ilustración 46. Ilustración 47. Ilustración 48.
conceptuales Plano de estaciones Circuitos electrónicos Organigramas Isómeros Química
del metro.

Mapas Plano de Circuitos Organigramas Isómeros


conceptuales estaciones del electrónicos Química
metro.

Tipos de grafos

 Grafo simple. o simplemente grafo es aquel que acepta una sola una arista
uniendo dos vértices cualesquiera. Esto es equivalente a decir que una arista
cualquiera es la única que une dos vértices específicos. Es la definición estándar de
un grafo.

 Multígrafo. o pseudografo son grafos que aceptan más de una arista entre dos
vértices. Estas aristas se llaman múltiples o lazos (loops en inglés). Los grafos simples
son una subclase de esta categoría de grafos. También se les llama grafos no-
dirigidos.

 Grafo dirigido. Son grafos en los cuales se ha añadido una orientación a las aristas,
representada gráficamente por una flecha.

 Grafo etiquetado. Grafos en los cuales se ha añadido un peso a las aristas


(número entero generalmente) o un etiquetado a los vértices.

 Grafo aleatorio. Grafo cuyas aristas están asociadas a una probabilidad.

 Hipergrafo. Grafos en los cuales las aristas tienen más de dos extremos, es decir,
las aristas son incidentes a 3 o más vértices.

91
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Grafo infinito. Grafos con conjunto de vértices y aristas de cardinal infinito.

Ejemplos de aplicaciones de grafos:

Tabla 6. Ejemplos de aplicaciones de grafos.

Ilustración 49. Ilustración 50, Ilustración 52. Hipergrafo


Multígrafo Grafo dirigido.
Ilustración 51. Aleatorio

Un multígrafo con Grafo dirigido Grafo Ejemplo de hipergrafo


múltiples aristas aleatorio H={e1,e2,e3,e4}={{v1,v2,v3},{v2,v3},{v3,v5,v
(en rojo) y tres 6},{v4}}, definido sobre el conjunto base A
bucles (en azul). = {v1, v2, v3, v4, v5, v6, v7}. Aquí H es
propio, tiene dominio parcial, su
cardinalidad es 4 y su tamaño 28.

4.3.1. Grafo no dirigido

Un grafo no dirigido. Consiste en un conjunto de vértices V y un conjunto de arista A.

Un ejemplo de grafo no dirigido, la red de carreteras de un país representa en general un


grafo no dirigido, puesto que una misma carretera puede ser recorrida en ambos sentidos.

Ilustración 53. Grafo no dirigido

92
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

4.3.2. Grafo dirigido

Sea G=(V,A) un Grafo, donde V= conjunto de Vértices y A= conjunto de Aristas. Se


define:

Vértice adyacente: El vértice y es adyacente al vértice x, si y solo si, (x, y) es una arista del
grafo. En este caso, el arco (x, y) es incidente sobre el vértice y.

Ilustración 54. Grafo dirigido

y es el vértice “punta” y x es el vértice “cola” , del arco(x, y).

Camino: Es una secuencia de vértices v1, v2,…, vn tal que (vi -> vi+1) es una arista para 1
i n. Este camino conecta a v1 con vn.

Un ejemplo de grafo dirigido lo constituye la red de aguas de una ciudad ya que cada
tubería sólo admite que el agua la recorra en un único sentido.

Ilustración 55. Grafo dirigido

4.3.3. Definiciones básicas

Tabla 7. Definiciones básicas.

Grafo Concepto

93
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Grafo Concepto

Ilustración 56. Vértices adyacentes Vértices. Se denominan también nodos o puntos y


son objetos que pueden tener nombres y otras
propiedades.

Adyacencia. En un grafo, los vértices son adyacentes


si están unidos mediante una arista. Dos nodos son
Vértices adyacentes unidos adyacentes si existe solo un enlace entre ellos.
por una arista.

Ilustración 57. Árbol Árbol. Un árbol es un grafo conexo simple acíclico.


Algunas veces, un vértice del árbol es distinguido
llamándolo raíz. Los árboles se usan frecuentemente
como estructuras de datos en ciencias de la
computación
Un árbol no posee ciclos.

Ilustración 58. Arista Arista. Una arista o arco es una relación matemática
que conecta dos vértices. Una arista dirigida es una
arista de un dígrafo y tiene una dirección asociada
consigo, esto es, posee un vértice inicial y un vértice
final. Una arista no dirigida es una donde no se
Vértices unidos por una arista. distingue un vértice inicial ni uno final.

Ilustración 59. Bosque Bosque. Un bosque es un conjunto de árboles; o de


forma equivalente, un bosque es un grafo acíclico

Un bosque está formado por


uno o más árboles.

94
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Grafo Concepto

Ilustración 60. Bucle o lazo Bucle. Un bucle o lazo (loop en inglés) en un grafo o
digrafo es una arista que conecta al mismo vértice
consigo mismo. Un grafo simple no puede tener bucles.

Un bucle conecta un vértice


consigo mismo.

Ilustración 61. Búsqueda de anchura Búsqueda en anchura. La búsqueda en anchura o


BFS (Breadth First Search) es un algoritmo que
permite recorrer todos los vértices de un árbol de
manera ordenada, recorriendo primero los vértices
vecinos al inicial, luego los vértices vecinos a los

Orden en que se recorre un recorridos en el paso anterior y así sucesivamente hasta


grafo en una búsqueda en agotar la gráfica.
anchura.

Ilustración 62. Búsqueda en profundidad Búsqueda en profundidad. La búsqueda en


profundidad o DFS (Depth First Search) es un
algoritmo que permite recorrer todos los vértices de
un árbol de manera ordenada, avanzando sobre cada
rama hasta que no haya posibilidad de continuar y luego
se retrocede hasta la última bifurcación para seguir por
Orden en que se recorre un otra rama. Puede usarse para recorrer un grafo
grafo en una búsqueda en cualquiera si se usa un árbol generador del grafo.
profundidad.

95
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Camino.

Un camino es una sucesión de vértices tal que de cada uno de sus vértices existe una
arista hacia el vértice sucesor. Un camino simple es aquel en que todas las aristas del
camino son diferentes.

Dos caminos son ajenos o independientes si no tienen ningún vértice en común excepto el
primero y el último.

La longitud de un camino es el número de aristas que usa dicho camino, contando aristas
recorridas varias veces el mismo número de veces que las recorramos. En el ejemplo, (1,
2, 5, 1, 2, 3) es un camino con longitud 5, y (5, 2, 1) es un camino simple de longitud 2.

Camino simple: Es un camino en donde todos sus vértices son distintos, solo su vértice
de partida y de fin pueden ser los mismos.

Longitud del camino: Es el número de arcos a lo largo del camino (número de vértices
- 1, en caminos simples que no vuelven al punto de partida).

Ciclo Simple: Un ciclo simple de un grafo dirigido es un camino simple de longitud


mayor o igual a 1.

Grafo dirigido etiquetado: Es un grafo dirigido en el cual cada arco, cada vértice o
ambos pueden tener una etiqueta asociada. Una etiqueta puede ser un nombre o un valor
de cualquier tipo.

4.3.4. Grafos con pesos

Grafos ponderados, con pesos

• Un grafo ponderado asocia un valor (o costo) a cada enlace en el grafo

• El peso de un camino en un grafo ponderado es la suma de los pesos de todos los


enlaces atravesados

Ejemplos:

96
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 63. Ejemplo 1 Ilustración 64. Ejemplo 2 Ilustración 65. Ejemplo 3

4.3.5. Arboles

Un árbol es una estructura de datos jerarquizada Cada dato reside en un nudo, y existen
relaciones de parentesco entre nudos.

Los árboles constituyen estructuras de datos jerarquizados, y tienen multitud de


aplicaciones, como por ejemplo:

• Análisis de circuitos, Representación de estructuras de fórmulas matemáticas

• Organización de datos en bases de datos

• Representación de la estructura sintáctica en compiladores

• En muchas otras áreas de las ciencias del computador

Tabla 8. Definiciones básicas.

Ilustración 66. Árbol Un árbol está constituido por una colección de elementos
denominados nudos, uno de los cuales se distingue con el
nombre raíz, junto con una relación de 'parentesco' que
establece una estructura jerárquica sobre los nudos. Cada
nudo tiene un padre (excepto la raíz) y puede tener cero o
más hijos. Se denomina hoja a un nudo sin hijos.

Nomenclatura sobre árboles

97
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Raíz: es aquel elemento que no tiene antecesor; ejemplo: a.

Ilustración 67. Raíz

Rama: arista entre dos nodos.

Antecesor: un nodo X es el antecesor de un nodo Y si por alguna de las ramas de X se


puede llegar a Y.

Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede


llegar a X.

Grado de un nodo: el número de descendientes directos que tiene. Ejemplo: c tiene


grado 2, d tiene grado 0, a tiene grado 2.

Hoja: nodo que no tiene descendientes: grado 0. Ejemplo: d

Ilustración 68. Hoja

Nodo interno: aquel que tiene al menos un descendiente.

Nivel: número de ramas que hay que recorrer para llegar de la raíz a un nodo. Ejemplo: el
nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3.

Altura: el nivel más alto del árbol. En el ejemplo de la figura 1 la altura es 3.

Anchura: es el mayor valor del número de nodos que hay en un nivel. En la figura, la
anchura es 3.

98
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 69. Árbol y su nomenclatura.

Ejemplo 1. Diagrama de un árbol

Ilustración 70. Diagrama de un árbol

99
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ejemplo 2. Diagrama de árbol analizador sintáctico

Ilustración 71. Analizador sintáctico

4.4. LENGUAJES DE PROGRAMACIÓN

4.4.1. Definición de conceptos básicos

Introducción

Lenguajes de programación hay en gran cantidad, algunos han evolucionado a lo largo del
tiempo y siguen vigentes en el transcurso de muchos años, mientras que otros han sido
operativos durante un período más o menos largo y actualmente no se usan.

Dada esta gran variedad de lenguajes, no se pretende dar una visión de todos, sino una
clasificación en diversos tipos y concretar algunos de ellos. En general un lenguaje es un
método conveniente y sencillo de describir las estructuras de información y las secuencias
de acciones necesarias para ejecutar una tarea concreta.

Los lenguajes de programación utilizan juegos de caracteres "alfabeto" para comunicarse


con las computadoras. Las primeras computadoras sólo utilizaban informaciones
numéricas digitales mediante el código o alfabeto digital, y los primeros programas se

100
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

escribieron en ese tipo de código, denominado código máquina basado en dos dígitos 0 y
1, por ser entendible directamente por la máquina (computadora). La enojosa tarea de
programar en código máquina hizo que el alfabeto evolucionase y los lenguajes de
programación comenzaran a utilizar códigos o juegos de caracteres similares al utilizado
en los lenguajes humanos. Así, hoy día la mayoría de las computadoras trabajan con
diferentes tipos de juegos de caracteres de los que se destacan el código ASCII y el
EBCDIC.

De este modo, una computadora a través de los diferentes lenguajes de programación


utilizan un juego o código de caracteres que serán fácilmente interpretados por la
computadora y que pueden ser programados por el usuario.

Dos son los códigos más utilizados actualmente en computadoras, ASCII (American
Standard Code for Information Interchan-c) y EBCDIC (Extended Binary Coded Decimal
Intercha-@ige Code).

El código ASCII básico utiliza 7 bits (dígitos binarios. 0,1) para cada carácter a representar,
lo que supone un total de 27 (128) caracteres distintos. El código ASCII ampliado utiliza 8
bits y en ese caso consta de 256 caracteres. Este código ASCII ha adquirido una gran
popularidad. Ya que es el estándar en todas las familias de computadoras personales.

El código EBCDIC utiliza 8 bits por carácter v por consiguiente consta de 256 caracteres
distintos, su notoriedad reside en ser el utilizado por la firma, en general un carácter
ocupara un byte de almacenamiento de memoria, en computación, un programa es una
secuencia de instrucciones que permiten a una computadora procesar información
conocida como datos de entrada (input) para producir una información de salida (ouput) o
resultados.

Esas instrucciones pertenecen a (o están escritas en) un lenguaje de


programación determinado. Al igual que los lenguajes humanos, tales como el inglés o el
español, los lenguajes de programación poseen una estructura (gramática o sintaxis) y un
significado (semántica). La Gramática española trata de los diferentes, modos (reglas) en
que pueden ser combinados los diferentes tipos de palabras para formar sentencias o
101
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

frases aceptables en español. Los lenguajes de computadoras tienen menos combinaciones


aceptables que los lenguajes naturales, sin embargo, estas combinaciones deben ser
utilizadas correctamente; ello contrasta con los lenguajes naturales que se pueden utilizar
aunque no sigan reglas gramaticales e incluso aunque no sean comprendidos; finalmente,
un lenguaje de programación lo definiremos, como un conjunto de reglas, símbolos y
palabras especiales que permiten construir un programa.

Lenguaje de programación. Es un conjunto de símbolos junto a un conjunto de reglas


para combinar dichos símbolos que se usan para expresar programas, constan de un
léxico, una sintaxis y una semántica.

¿Qué conoces por léxico, sintaxis y semántica?

Léxico: Conjunto de símbolos permitidos o vocabulario.

Sintaxis: Reglas que indican cómo realizar las construcciones del lenguaje.

Semántica: Reglas que permiten determinar el significado de cualquier construcción del


lenguaje.

Tipos de lenguajes: Atendiendo al número de instrucciones necesarias para realizar una


tarea específica podemos clasificar los lenguajes informáticos en dos grandes bloques, los
lenguajes de bajo nivel y los de alto nivel.

Lenguaje de bajo nivel: Es el tipo de lenguaje que cualquier computadora es capaz de


entender. Se dice que los programas escritos en forma de ceros y unos están en lenguaje
de máquina, porque esa es la versión del programa que la computadora realmente lee y
sigue.

Lenguajes de alto nivel: Son lenguajes de programación que se asemejan a las lenguas
humanas usando palabras y frases fáciles de entender.

En un lenguaje de bajo nivel cada instrucción corresponde a una acción ejecutable por la
computadora, mientras que en los lenguajes de alto nivel una instrucción suele
corresponder a varias acciones.

Características de los lenguajes de alto nivel:

102
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

• Son independientes de la arquitectura física de la computadora

• Permiten usar los mismos programas en computadoras de diferentes arquitecturas


(portabilidad), y no es necesario conocer el hardware específico de la máquina

• La ejecución de un programa en lenguaje de alto nivel, requiere de una traducción del


mismo al lenguaje de la computadora donde va a ser ejecutado

• Una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias


instrucciones en lenguaje entendible por el computador

• Utilizan notaciones cercanas a las usadas por las personas en un determinado ámbito

• Se suelen incluir instrucciones potentes de uso frecuente que son ofrecidas por el
lenguaje de programación

4.4.2. Lenguajes de programación

Lenguajes de programación hay en gran cantidad, algunos han evolucionado a lo largo del
tiempo y siguen vigentes en el transcurso de muchos años, mientras que otros han sido
operativos durante un período más o menos largo y actualmente no se usan. Dada esta
gran variedad de lenguajes, no se pretende dar una visión de todos, sino una clasificación
en diversos tipos y concretar algunos de ellos. En general un lenguaje es un método
conveniente y sencillo de describir las estructuras de información y las secuencias de
acciones necesarias para ejecutar una tarea concreta.

Los lenguajes de programación utilizan juegos de caracteres "alfabeto" para comunicarse


con las computadoras. Las primeras computadoras sólo utilizaban informaciones
numéricas digitales mediante el código o alfabeto digital, y los primeros programas se
escribieron en ese tipo de código, denominado código máquina basado en dos dígitos 0 y
1, por ser entendible directamente por la máquina (computadora). La enojosa tarea de
programar en código máquina hizo que el alfabeto evolucionase y los lenguajes de
programación comenzaran a utilizar códigos o juegos de caracteres similares al utilizado
en los lenguajes humanos. Así, hoy día la mayoría de las computadoras trabajan con

103
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

diferentes tipos de juegos de caracteres de los que se destacan el código ASCII y el


EBCDIC.

De este modo, una computadora a través de los diferentes lenguajes de programación


utiliza un juego o código de caracteres que serán fácilmente interpretados por la
computadora y que pueden ser programados por el usuario.

Dos son los códigos más utilizados actualmente en computadoras, ASCII (American
Standard Code for Information Interchan-c) y EBCDIC (Extended Binary Coded Decimal
Intercha-@ige Code). El código ASCII básico utiliza 7 bits (dígitos binarios. 0,1) para cada
carácter a representar, lo que supone un total de 27 (128) caracteres distintos. El código
ASCII ampliado utiliza 8 bits y en ese caso consta de 256 caracteres. Este código ASCII ha
adquirido una gran popularidad, ya que es el estándar en todas las familias de
computadoras personales.

El código EBCDIC utiliza 8 bits por carácter v por consiguiente consta de 256 caracteres
distintos. Su notoriedad reside en ser el utilizado por la firma. En general un carácter
ocupara un byte de almacenamiento de memoria. Al igual que los lenguajes humanos, tales
como el inglés o el español, los lenguajes de programación poseen una estructura
(gramática o sintaxis) y un significado (semántica). La gramática española trata de los
diferentes, modos (reglas) en que pueden ser combinados los diferentes tipos de palabras
para formar sentencias o frases aceptables en español. Los lenguajes de computadoras
tienen menos combinaciones aceptables que los lenguajes naturales, sin embargo, estas
combinaciones deben ser utilizadas correctamente; ello contrasta con los lenguajes
naturales que se pueden utilizar aunque no sigan reglas gramaticales e incluso aunque no
sean comprendidos.

Generaciones de Lenguajes:

1. Lenguaje de máquina (Primera generación).

Es el lenguaje que la computadora entiende, su estructura está totalmente adaptada a


los circuitos de la máquina y la programación es tediosa porque los datos se
representan por ceros y unos. Es de bajo nivel. Es un conjunto de instrucciones
codificadas en binario (“0” ceros y “1” unos) que son capaces de relacionarse
104
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

directamente con los registros y circuitería del microprocesador de la computadora y


que resulta directamente ejecutable por éste, sin necesidad de otros programas
intermediarios. Los datos se referencian por medio de las direcciones de memoria
donde se encuentran y las instrucciones realizan operaciones simples.

Estos lenguajes están íntimamente ligados a la CPU y por eso no son transferibles.
(Baja portabilidad). Para los programadores es posible escribir programas directamente
en lenguaje de máquina, pero las instrucciones son difíciles de recordar y los
programas resultan largos y laboriosos de escribir y también de corregir y depurar.

Lenguaje ensamblador (Segunda Generación): Lenguaje de programación de


bajo nivel, pero simbólico porque las instrucciones se construyen usando códigos de
tipo mnemotécnico, lo cual facilita la escritura y depuración de los programas pero no
los acorta puesto que para cada acción se necesita una instrucción. El programa
ensamblador va traduciendo línea a línea a la vez que comprueba la existencia de
errores. Si localiza alguno da un mensaje de error. Algunas características que lo
diferencian del lenguaje de máquina son que permite el uso de comentarios entre las
líneas de instrucciones; en lugar de direcciones binarias usa identificadores como total,
X, Y, etc. Y los códigos de operación se representan por mnemotécnica, por lo cual
siempre tienen la desventaja de repertorio reducido de instrucciones, rígido formato
para estas, baja portabilidad y fuerte dependencia del hardware. Tiene la ventaja del
uso óptimo de los recursos hardware, permitiendo la obtención de un código muy
eficiente.

Ejemplos. Algunos códigos mnemotécnicos del lenguaje ensamblador

STO para guardar un dato

LOA para cargar algo en el acumulador

ADD para adicionar un dato

INP para leer un dato

MOV para mover un dato y ponerlo en un registro

END para terminar el programa

105
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Con la tercera generación avanzamos a los lenguajes de alto nivel, muchos de los
cuales se consideran exportables. Esto es, pueden correr en más de un tipo de
computadoras, se pueden exportar de una máquina a otra.

2. Lenguajes de procedimientos (Tercera Generación): Son lenguajes de alto


nivel similares al habla humana pero requieren cierta capacitación para su uso.

Sus ventajas son:

a. Independencia de la arquitectura física de la computadora (portabilidad), esto


significa que un mismo lenguaje puede funcionar (al menos en teoría) en distintos
computadores, por lo que tanto el lenguaje como los programas escritos con él
serán transportables de un computador a otro. En la práctica, esta característica
resulta limitada por la gran diversidad de versiones y dialectos que se constituyen
para cada lenguaje.

b. una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias


instrucciones en lenguaje máquina. Se llaman de procedimientos porque están
diseñados para expresar la lógica capaz de resolver problemas generales. Entre
estos están: Basic, Pascal, Cobol, C, C#, Fortran, Php, Python, Javascript, Delphi,
Java y muchos otros. Para que el lenguaje de procedimientos pueda funcionar debe
traducirse a lenguaje de máquina a fin de que la computadora lo entienda. Para ello
se han de usar programas traductores que realicen dicho proceso. Tienen la
capacidad de soportar programación estructurada.

3. Lenguajes orientados a problemas (4GL): Resultan más eficaces para la


resolución de un tipo de problemas acosta de una menor eficiencia para otros.
Requieren poca capacitación especial de parte del usuario. Son considerados de muy
alto nivel, diseñados para resolver problemas específicos. Incluye: lenguajes de consulta
y generador de aplicaciones.

Lenguajes de consulta: Permiten a no programadores usar ciertos comandos de


fácil comprensión para la búsqueda y generación de reportes a partir de una base de
datos. Ejemplo: El protocolo SQL (Sentence Query Language) sirve para consultar la
mayoría de bases de datos.
106
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Generador de aplicaciones: Quiere decir que cuando se diseña uno de estos


lenguajes, se tiene en cuenta que su finalidad es la resolución de problemas,
prescindiendo de la arquitectura del computador. Contiene varios módulos que han
sido preprogramados para cumplir varias tareas. Ejemplo: FileMaker, FoxPro, Access y
otros.

4. Lenguajes naturales. Lenguajes orientados a aplicaciones en inteligencia artificial,


como Lisp y Prolog. Dentro de este campo destacan las aplicaciones en sistemas
expertos, juegos, visión artificial (Jurasic Park) y robótica. Lisp es un lenguaje para
procesamiento de listas y manipulación de símbolos. Prolog es un lenguaje basado en la
lógica, para aplicaciones de bases de datos e Inteligencia Artificial. Blender permite
programar simulaciones y juegos en 3Dimensiones. Podemos decir entonces, que los
lenguajes de alto nivel, tienen las ventajas de mayor legibilidad de los programas,
portabilidad, facilidad de aprendizaje y facilidad de modificación.

Lenguajes de propósito general:

Ilustración 72. Lenguajes de propósito general

107
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 73. Lenguajes de propósito general

Intérpretes y Compiladores

Los compiladores, los intérpretes y los ensambladores se encargan de traducir lo que se


haya escrito en lenguaje de alto nivel (código fuente) y lo convierten a código objeto (casi
ejecutable).

Ilustración 74. Intérpretes y compiladores

Compilador: Es un programa que traduce un código escrito en un lenguaje de alto nivel


a un código en lenguaje de máquina que la computadora es capaz de entender y ejecutar
108
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

directamente. Un compilador es un tipo especial de programa, en cuanto a que sus


entradas o datos son algún programa y su salida es otro programa. Para evitar
confusiones, solemos llamar programa fuente o código fuente al programa de entrada, y
programa objeto o código objeto a la versión traducida que el compilador produce.
Código se usa frecuentemente para referirse a un programa o a una parte de él, sobre
todo cuando se habla de programas objeto.

Programa Fuente => Compilación => Programa Objeto

Ejemplos. Pascal, Cobol, Fortran, Ada, Modula 2, C, C++, C#, Php-Zend y muchos
otros. El compilador, informa al usuario de la presencia de errores en el programa fuente,
pasándose a crear el programa objeto cuando está libre de errores. El código objeto
puede ser ejecutado posteriormente. Una vez traducido un programa, su ejecución es
independiente de su compilación. Involucra dos pasos en su operación:

1. Convertir código fuente a objeto

2. Ejecutar el código objeto

La ventaja principal es que al tener el código objeto, el programa se ejecuta más rápido.

Fases de compilación:

1. Análisis: Dependiente del lenguaje. Independiente de la máquina

2. Sintaxis: Independiente del lenguaje. Dependiente de la máquina.

Interprete: Es el que permite que un programa fuente escrito en un lenguaje, vaya


traduciéndose y ejecutándose directamente sentencia a sentencia por la computadora.
Convierte uno por uno los enunciados del código fuente a código objeto antes de ser
ejecutados. Convierte y ejecuta el programa, línea por línea.

Ejemplos. Basic estándar, AutoLisp, Html, Php, JavaScript, etc.

Las ventajas de los intérpretes son:

- Resulta más fácil localizar y corregir errores (depuración de programas)

- Son más pedagógicos para aprender a programar

109
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

- El programa es más fácil de desarrollar

- Traducen programas de alto nivel

- No se generan nuevos archivos

Programa Fuente => Código Intermedio => Programa Objeto

Para cada una de las líneas se ejecuta el siguiente proceso:

1. Análisis de la instrucción de esa línea

2. Traducción de esa línea (si ya está correcta) a código objeto

3. Ejecución de esa línea

Lenguajes de programación

Un lenguaje de programación consiste en un conjunto de órdenes o comandos que


describen el proceso deseado. Cada lenguaje tiene sus instrucciones y enunciados verbales
propios, que se combinan para formar los programas de cómputo.

Los lenguajes de programación no son aplicaciones, sino herramientas que permiten


construir y adecuar aplicaciones.

Razones de estudio de lenguajes de programación

Cualquier notación para la descripción de algoritmos y estructuras de datos puede


llamarse lenguaje de programación; sin embargo se requiere además que un lenguaje de
programación sea implementado (implantado) en una computadora. Cientos de lenguajes
de programación se han diseñado e implementado. Ya en 1969, Samment enumeró 120
que han sido usados ampliamente y muchos otros se han desarrollados desde entonces.

Los lenguajes más antiguos han experimentado revisiones periódicas para reflejar la
influencia de otras áreas de la computación; los más nuevos reflejan una composición de
experiencias adquiridas en el diseño y de usos de estos y cientos de otros lenguajes más
antiguos. Algunas de las principales influencias en la evolución de diseños de lenguajes se
listan a continuación:

110
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

1. Capacidades de las computadoras. Las computadoras han evolucionado de las


máquinas pequeñas lentas y costosas máquinas de tubos de vacío de los años 50 a las
supercomputadoras y microcomputadoras de hoy.

2. Aplicaciones. El uso de la computadora se ha difundido rápidamente, de la


concentración original de aplicaciones militares críticas, científicas, negocios
industriales de los años 50 donde el costo podría estar justificado en los juegos en
computadora, en computadoras personales y aplicaciones en casi todas las áreas de la
actividad humana de hoy.

3. Métodos de programación. Los diseños de lenguajes han evolucionado para reflejar,


nuestra cambiante comprensión de los buenos métodos para escribir programas largos
y complejos y para reflejar los cambios en el entorno en el cuál se efectúa la
programación.

4. Métodos de implementación. El desarrollo de mejores métodos de implementación ha


influido en la selección de las características que se habrán de incluir en los nuevos
diseños.

5. Estudios teóricos. La investigación de las bases conceptuales del diseño e


implementación de lenguajes, a través del uso de métodos de matemáticos formales,
ha profundizado nuestro entendimiento de las fortalezas y debilidades de las
características de los lenguajes y, por tanto, ha influido en la inclusión de estas
características en los nuevos diseños de lenguaje.

6. Estandarización. La necesidad de lenguajes estándar que se puedan implementar con


facilidad en una variedad de computadoras y que permita que los programas sean
transportados de una computadora a otra ejerce una fuerte influencia conservadora
sobre la evolución de los diseños de lenguajes.

La evolución de los lenguajes de programación ha estado guiada por la evolución de:

 Las computadoras y sus sistemas operativos

 Las aplicaciones

 Los métodos de programación


111
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Los fundamento teóricos

 La importancia dada a la estandarización

Dominios de aplicación de los lenguajes de programación

El lenguaje apropiado que se use a menudo, depende del dominio de la aplicación que
resuelve el problema. El lenguaje adecuado que conviene usar para diversos dominios de
aplicación ha evolucionado a lo largo de los últimos 30 años. A continuación se muestra
una tabla con algunos de los lenguajes más importantes para diversos dominios de
aplicación.

Ilustración 75. Lenguajes de programación para diversos dominios

FORTRAN

En los años 50 se realizaron varios compiladores primitivos y fue en 1957 cuando apareció
el primer compilador de FORTRAN. El compilador de FORTRAN (FORmula
TRANslator) estaba diseñado para traducir a lenguaje máquina expresiones y operaciones
matemáticas, e incluso permitía la manipulación de matrices.

La aparición del FORTRAN fue un gran cambio para los programadores que no todos
aceptaron de buen grado. No les gustaba que sus programas fueran tratados por la

112
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

computadora como meros datos, y argumentaban que el código máquina generado por el
compilador nunca podría ser tan eficiente como el escrito por ellos directamente.

Esto no era generalmente así, puesto que el FORTRAN no fue diseñado pensando en
crear un lenguaje bien estructurado sino pensando en crear un traductor de expresiones
aritméticas a código máquina muy eficiente. Por ello, el diseño lógico de la computadora
IBM 704 para el que fue creado casi puede deducirse del lenguaje FORTRAN. En
diferentes versiones, cada vez más estructuradas, el lenguaje FORTRAN se ha utilizado
extensivamente desde que apareció hasta hoy en día, y puede considerarse el lenguaje
estándar del cálculo científico.

COBOL

(COmmon Business Oriented Langauge = lenguaje orientado a negocios comunes).Se ha


usado mucho desde los años 60 en aplicaciones de computadoras aplicadas a la
administración. Cobol ha a evolucionado a través de revisiones del diseño, que empezó
con la primera versión en 1960 y que condujo a la última revisión en 1974 (COBOL
1974). La implementación y el uso difundido de COBOL han conducido a esfuerzos por
estandarizar la definición del lenguaje. La primera definición estándar de COBOL se
publicó en 1968; la última definición revisada y actualizada apareció en 1974. El aspecto
más impresionante en un programa de COBOL es la organización en cuatro divisiones.

Esta organización es en gran parte el resultado de dos objetivos del diseño: el de separar
los elementos del programa dependientes de la máquina y el de separar las descripciones
de los algoritmos, para que cada uno pueda modificarse sin afectar al otro. El resultado es
una organización tripartita de programa. Las representaciones de datos de COBOL, tienen
un sabor definitivo de aplicación a los negocios pero son bastantes flexibles. La estructura
de datos básica es el registro. Los números y las cadenas de caracteres son los tipos de
datos elementales básicos. Las operaciones primarias integradas incluyen operaciones
aritméticas simples, lógicas y relaciónales.

ALGOL60

Algoritmie Languge (lenguaje algorítmico). Lenguaje de programación creado en los años


60´s que se usaba principalmente para el diseño de aplicaciones de cálculo, la versión más
113
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

conocida data del año 1968 que se conoció con el nombre de Proporciona recursos para
estructurar datos, similares a los que se pueden encontrar en lenguajes derivados de
ALGOL 60 como Pascal, C o Modula-2. Permite sobrecarga de operadores y colocar una
declaración en cualquier lugar donde pueda aparecer un enunciado (como en C++).

LISP

Ilustración 76. John Mc Carthy El lenguaje LISP lo diseño e implementó primero


John Mc Carthy y un grupo del instituto de
tecnología de Massachusetts alrededor de 1960. El
lenguaje se usa mucho en las investigaciones
computacionales en forma más prominente en el
área de inteligencia artificial (robótica, proceso del
lenguaje natural prueba de teoremas, sistemas de
inteligencia, etc.).

LISP es diferente a la mayoría de los otros lenguajes en muchos aspectos. Lo más


impresionante es la equivalencia de formas entre los programas y los datos en el lenguaje
en el cual se permite que las estructuras de datos se ejecuten como programas y que los
programas se ejecuten como datos. Ofrece una amplia variedad de primarias para la
creación, destrucción y modificación de listas (incluyendo las listas de propiedad). Las
primarias básicas de las operaciones aritméticas se proporcionan. Las estructuras de
control en LISP son relativamente simples. Las expresiones usadas para construir
programas se escriben en estricta forma polaca de Cambridge pueden incluir ramificación
condicional. Las referencias de LISP se basan principalmente en la regla de asociación más
reciente para referencias foráneas, que con frecuencia se implementan usando una simple
lista enlazada de asociaciones actuales. LISP se implementa más fácilmente con un
intérprete de software y simulación de software para todas las primarias la mayoría de las
implementaciones también proporcionan un compilador que puede usarse para compilar
las definiciones de la función seleccionada en código de máquina. Estas funciones
compiladas son ejecutables entonces por el intérprete de hardware (pero sigue
requiriéndose la simulación de software para muchas operaciones).

114
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

BASIC

Begginer´s All Purpose Symbolic Instruction Code (código de Instrucciones Simbólicas de


Todo Propósito para Principiantes). Lenguaje simbólico de programación de tercera
generación desarrollado en la década de los 60´s y destinado en sus inicios a la enseñanza
de la programación. Por su sencillez fue el lenguaje básico utilizado inicialmente en los
computadores personales. En general, y al contrario de lo que suele suceder con los más
importantes lenguajes simbólicos de programación, en BASIC se suele trabajar en modo
intérprete.

El tiempo de ejecución que emplea el programa compilado puede ser hasta diez veces
inferior que el empleado en el caso de actuar bajo intérprete. Mientras se está en fase de
desarrollo es muy conveniente trabajar en intérprete porque la inmediata ejecución del
programa en cada momento permite detectar los errores con gran rapidez, lo que es muy
positivo en un lenguaje destinado a principiantes que lógicamente cometen un gran
número de errores al desarrollar un programa.

El BASIC es un lenguaje poco estandarizado y hay diferencias bastantes apreciables del que
se utiliza en unos y otros sistemas. Aunque es un lenguaje poco utilizado en la informática
profesional, se ha empleado mucho en los microcomputadores y mientras en los primeros
años de los 80´s fue el lenguaje en el que se solían desarrollar las aplicaciones en micros.
Hay una versión avanzada del BASIC, denominada QUICK BASIC que además de dar
mayores prestaciones presenta las características de un lenguaje de programación algo
estructurado, evitando así el desarrollo de los típicos programas espagueti. A fines de los
90´s el BASIC ha dejado de utilizarse. Su heredero, aunque ya casi irreconocible, es el
Visual Basic cuya orientación a objetos lo ha hecho casi imprescindible en la programación
de la parte cliente de cualquier sistema cliente servidor.

115
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

PASCAL

Ilustración 77. Niklaus Wirth El lenguaje de programación Pascal fue desarrollado


originalmente por Niklaus Wirth, un miembro de la
International Federation of Information Processing (IFIP) El
Profesor Niklaus Wirth desarrolló Pascal para
proporcionar rasgos que estaban faltando en otros idiomas
en ese entonces. Sus principales objetivos para el lenguaje
Pascal era ser eficiente para llevarse a cabo y correrse los
programas, permite bien el desarrollo de estructuras y
también organizar programas, y para servir como un
vehículo para la enseñanza de los conceptos importantes
de programación de la computadora.

Pascal que se nombró gracias al matemático Blaise Pascal, el original idioma de Pascal
apareció en 1971 con última revisión publicada en 1973. Fue diseñado para enseñar las
técnicas de programación y otros temas a los estudiantes de la universidad y era el idioma
de opción de los años 60 a los 80s. Es un lenguaje estructurado en bloques. Un programa
en Pascal está formado siempre por un solo bloque de programas principal, que contiene
dentro de él definiciones del subprograma usado.

La parte más innovadora del diseño descansa en el trato de los tipos de datos. Una gran
sección de diferentes tipos de datos se proporciona: enteros, reales, carácter,
enumeraciones, booleanos, arreglos, registros, archivos secuenciales y una forma limitada
de conjuntos. Pascal permite que se dé por el programador la definición separada de un
tipo de datos. Pascal puede implementarse en forma eficiente sobre computadoras
convencionales. La traducción se hace en el código de máquina ejecutable, a pesar de que

116
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

algunas implementaciones en Pascal traduce al código de máquina virtual, que interpreta y


ejecuta un intérprete del software

PROLOG (programación lógica)

En Octubre de 1981, el gobierno japonés y más concretamente el Ministerio Japonés de


Comercio Internacional e Industria (MITI), anuncia la puesta en marcha de un proyecto
revolucionario equiparable a la carrera del espacio norteamericana.

Están dispuestos a ofrecer al mundo la siguiente generación, la Quinta Generación de


computadoras. Unas máquinas de Inteligencia Artificial que pueden pensar, sacar
conclusiones, emitir juicios e incluso comprender las palabras escritas y habladas.

La Quinta Generación prevé máquinas diseñadas para el tratamiento lógico, de


capacidades análogas a las capacidades de anteriores generaciones de computadoras para
tratar operaciones aritméticas. Se trata de computadoras que tienen el PROLOG como
lenguaje nativo (lenguaje máquina), con capacidad para procesar millones de inferencias
lógicas por segundo (LIPS). La programación lógica, representada por lenguajes como
Prolog, permite utilizar un subconjunto de la lógica de primer orden, concretamente las
cláusulas de Horn, para especificar sistemas. Su base formal permite razonar sobre estas
especificaciones, que pueden ser interpretadas directamente mediante resolución, con lo
que podemos realizar pruebas de la especificación. Además su propio carácter de
declarativos permite representar el qué, en lugar del cómo.

Sin embargo, el inconveniente de Prolog es que no está orientado al proceso. Al tratarse


de un lenguaje secuencial, no permite especificar sistemas que interactúan con el entorno
o sistemas compuestos por muchas partes que funcionan concurrentemente. Existen
lenguajes lógicos concurrentes, como Parlog, que subsanan estas deficiencias. Otro
inconveniente que presentan estos lenguajes es que no admiten tipos de datos, ni siquiera
definiciones de datos, por lo que son poco adecuados para especificaciones complejas.
Podemos decir que, aunque a veces hayan sido usados para la especificación, los lenguajes
lógicos no son lenguajes de especificación propiamente dichos.

117
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 78. Dennis Ritchie El lenguaje c, es un lenguaje de


programación de tercera generación
diseñada para poder crear aplicaciones de
todo tipo inicialmente se usaba en entornos
de tipo UNIX aunque después se extendió
en todas las plataformas. Su creador fue
Dennis Ritchie.

El lenguaje C reúne características de programación intermedia entre los lenguajes


ensambladores y los lenguajes de alto nivel; con gran poderío basado en sus operaciones a
nivel de bits (propias de ensambladores) y la mayoría de los elementos de la programación
estructurada de los lenguajes de alto nivel, por lo que resulta ser el lenguaje preferido
para el desarrollo de software de sistemas y aplicaciones profesionales de la programación
de computadoras.

Su diseño incluyo una sintaxis simplificada, la aritmética de direcciones de memoria


(permite al programador manipular bits, bytes y direcciones de memoria) y el concepto de
apuntador; además, al ser diseñado para mejorar el software de sistemas, se buscó que
generase códigos eficientes y uno portabilidad total, es decir el que pudiese correr en
cualquier máquina, logrados los objetivos anteriores, C se convirtió en el lenguaje
preferido de los programadores profesionales.

118
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Ilustración 79. Bjarne Stroustrup En 1980 Bjarne Stroustrup de los laboratorios Bell de
Murray Hill, New Jersey, inspirado en el lenguaje
Simula67 adiciono las características de la programación
orientada a objetos (incluyendo la ventaja de una
biblioteca de funciones orientada a objetos) y lo
denomino C con clases. Para 1983 dicha denominación
cambio a la de C++. Con este nuevo enfoque surge la
nueva metodología que aumenta las posibilidades de la
programación bajo nuevos conceptos.

119
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

RESUMEN DE LA UNIDAD 4.

Existes varios tipos de algoritmos y anudado a ello diferentes lenguajes de programación


en los cuales podemos ejecutar nuestros algoritmos, empezamos viendo los tipos de
algoritmos.

1. Algoritmos de ordenamiento: entendemos por ordenamiento a la acción que


realizamos al colocar cosas de una manera especial basándonos en un criterio de
ordenamiento, vemos que en computación el ordenamiento cumple un rol muy
importante ya sea para un para un fin en sí o como parte de otros procedimientos
más complejos.

Existen varios tipos de ordenamiento de algoritmos los cuales son:

Ordenamiento por inserción: esta es una de las técnicas más comunes las suelen utilizar
en el juego de cartas, ya que consiste en insertar cada carta en el lugar correcto ya se ha
de mayo a menor o viceversa, otro ejemplo seria cuando ya tenemos una lista de nombres
ordenada alfabéticamente y nos dan uno nuevo, tenemos que buscar el lugar correcto en
donde meterlo, de esa manera simple y sencilla funciona.

Ordenamiento por selección: El ordenamiento por selección (Selection Sort en inglés) es

un algoritmo de ordenamiento que requiere O operaciones para ordenar una lista de


n elementos. Este consiste en seleccionar el elemento más pequeño de la lista e
intercambiarlo por el primero, posteriormente volver a buscar el mínimo en la lista que
sobro y volverlo a intercambiar ahora con el segundo y así sucesivamente ya vimos los
ejemplos en el contenido.

Ordenamiento de la burbuja: Funciona revisando cada elemento de la lista que va a ser


ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado.
Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios,
lo cual significa que la lista está ordenada, también lo podemos llamar método de
intercambio directo.

Ordenamiento rápido: este algoritmo fue creado por el científico británico Antony
Richard basándose en la técnica divide y vencerás lo cual permite que se solucione en un

120
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

tiempo promedio, lo que hace es elegir un elemento de la lista al el cual llamaremos pivote
posteriormente colocara de un lado a los elementos mayores que él y del otro lado a los
elementos menores, si hay números iguales al pivote se ponen a su lado ya sea derecho o
izquierdo, ya que se hizo esto obtenemos dos sublistas y con cada una se repetirá el
proceso y así sucesivamente mientras estás contengan más de un elemento, al término del
proceso los elementos quedaran ordenados.

Ordenamiento por montículo: Este algoritmo consiste en almacenar todos los elementos
del vector a ordenar en un montículo (heap), y luego extraer el nodo que queda como
nodo raíz del montículo (cima) en sucesivas iteraciones obteniendo el conjunto ordenado.

Ordenamiento por mesclas sucesivas: este ordenamiento funciona de la siguiente manera


dividiremos la lista en dos sublistas aproximadamente a la mitad, ordenamos estas dos
sublistas aplicando el ordenamiento por mezcla, posteriormente mesclaremos las dos
sublistas en una sola.

2. Algoritmos de búsqueda: es aquel que está diseñado para buscar un elemento con
ciertas propiedades dentro de una estructura de datos.
 Podemos utilizar diferentes tipos de búsqueda entre ellas están:

 Búsqueda lineal: Consiste en optimizar (minimizar o maximizar) una función lineal,


denominada función objetivo, de tal forma que las variables de dicha función estén
sujetas a una serie de restricciones que expresamos mediante un sistema de
inecuaciones lineales.

 Búsqueda binaria: se le llama así ya que el algoritmo divide en dos arreglos, la única
condición para utilizar este arreglo es que los datos dentro del arreglo estén
ordenadas de menor a mayor, busca posición por posición hasta obtener el dato
que queremos.
 Arboles de búsqueda: Un árbol binario de búsqueda también llamados BST
(acrónimo del inglés Binary Search Tree) es un tipo particular de árbol binario que
presenta una estructura de datos en forma de árbol usada en informática.

 Búsqueda por transformación de claves: Una función de Hash es una caja negra que
tiene como entrada una llave y como salida una dirección h(K)=address
121
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

 Búsqueda en textos: también llamado de cadenas Boyer Moore este algoritmo


preprocesa la cadena objetivo (clave) que está siendo buscada, pero no en la
cadena en que se busca (no como algunos algoritmos que procesan la cadena en
que se busca y pueden entonces amortizar el coste del preprocesamiento
mediante búsqueda repetida).

3. Teoría de grafos: también llamada teoría de las gráficas es un campo de estudio


de las matemáticas y la ciencia de la computación que estudian los grafos.
4. Lenguajes de programación: existen diferentes tipos de lenguajes de
programación de los cuales algunos han ido evolucionando con el tiempo y algunos
otros se han quedado obsoletos, los lenguajes de programación utilizan juegos de
caracteres para comunicarse con las computadoras, entendemos como lenguaje de
programación que es un conjunto de símbolos junto a un conjunto de reglas para
combinar dichos símbolos que se usan para expresar programas, constan de un
léxico una sintaxis y una semántica.

Felicidades has concluido la unidad de aprendizaje de Algoritmos Computacionales, es


momento de realizar la actividad integradora la cual tiene un valor del 40% sobre tu
calificación, recuerda que cuentas en todo momento con el apoyo de tu asesor o asesora.

122
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63
UNIDAD 4. TIPOS DE ALGORITMOS Y LENGUAJES DE PROGRAMACIÓN

Tabla 9. Criterios de evaluación de la Unidad 4

UNIDAD PRODUCTO VALOR OBSERVACIONES

4.1. Algoritmos de Cuadro 5%


ordenamiento. comparativo

4.2. Algoritmos de
Búsqueda.

4.3. Teoría de Cuadro sinóptico 5%


grafos.

4.4. Lenguajes de
Programación.

TOTAL UNIDAD 4 10%

Instituto Técnico superior de Pereira. Programación Estructurada. Recuperado el 27 de


noviembre de 2012, de: https://es.slideshare.net/alfonso357/0000261-programacion-
estructurada

Para revisar el material indicado da clic en el siguiente enlace o bien, consulta


la sección de Descargables en la plataforma.

123
AV. JOSÉ MA. MORELOS PTE. NO. 905
SECRETARÍA DE EDUCACIÓN
TERCER PISO COLONIA LA MERCED
SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR Y SUPERIOR
TOLUCA, ESTADO DE MÉXICO, C.P. 50080
UNIVERSIDAD DIGITAL DEL ESTADO DE MÉXICO
TELÉFONO 318-48-63

Vous aimerez peut-être aussi