Semana de las Matemáticas e Ingeniería - Laureate Legal ... · •Desarrollo de algoritmos...
Transcript of Semana de las Matemáticas e Ingeniería - Laureate Legal ... · •Desarrollo de algoritmos...
Semana de las Matemáticas e Ingeniería
Desarrollo de algoritmos recursivos empleando la aplicación PseInt
21 de Noviembre de 2013
• Desarrollo de algoritmos recursivos empleando la aplicación PSeInt
– Bienvenida
– Conceptos sobre el Diseño de Algoritmos
– Estructuras de control empleando PSeInt
– Introducción a los algoritmos recursivos
– Conclusiones
– Despedida y agradecimientos
Agenda
“Find a solution by trying one of several choices. If the
choice proves incorrect, computation backtracks or
restarts at the point of choice and tries another choice. It
is often convenient to maintain choice points and
alternate choices using recursion”.
Paul E. Black
Conocimiento previo:
A
= b * h
• A esta secuencia de pasos ordenada y definida, para dar solución a un problema se le conoce como algoritmo.
Conceptos sobre Algoritmos
¿Cómo calcularías el área
de un rectángulo?
1. Leer o ingresar la base
2. Leer o ingresar la altura
3. calcular el área multiplicando la
base y la altura
4. escribe o imprime el valor del área
• Representación:
Conceptos sobre Algoritmos
Mediante pseudocódigos
Mediante diagramas de flujo
• Herramienta de apoyo:
http://pseint.sourceforge.net/
Diseño de Algoritmos
E.C. Secuencial
Simple
E.C. Selectiva Doble
Múltiple
Desde
E.C. Repetitivas Mientras
Repetir - hasta
Estructuras de Algoritmos
• La empresa ACME desea realizar el pago de sus empleados, el cual se efectúa de la siguiente manera:
• El sueldo básico se calcula en base al numero de horas trabajadas basado en una tarifa horaria;
• La empresa otorga una bonificación del 20% del básico,
• Los descuentos serán del 10% de todos los ingresos.
• El sueldo neto, se obtiene de la suma de todos los ingresos menos los descuentos.
Estructura secuencial
• Solución:
Proceso condicional
Leer nota1
Leer nota2
Leer nota3
si (nota1 < nota2) Entonces
menor = nota1
Sino
menor = nota2
FinSi
Si (nota3 < menor) Entonces
menor = nota3
FinSi
Imprimir "menor nota : " menor
Imprimir "El promedio es " (nota1+nota2+nota3-menor)/2
FinProceso
• El promedio de un curso se obtiene de la media de las dos mayores notas de tres evaluaciones.
Estructura condicional
• Solución: prom = (n1 + n2 + n3) /3
Eliminando la menor, quedaría:
prom = (n1 + n2 + n3 - menor) /2
Proceso Repetitivo
Leer n
si (n==0)
fact = 1
Sino
fact = 1
Para i=1 Hasta n Hacer
fact = fact * i
FinPara
FinSi
Escribir "El factorial es: " fact
FinProceso
• Calcula el factorial de un número entero positivo
Estructuras repetitivas
• Solución: • Para todo número natural n, se
llama factorial de n al producto de todos los naturales desde 1 hasta n, considerando:
• si n = 0, n!= 1
• si n>=1
n! = 1 x 2 x 3 x ….x (n-1) x n
• El concepto de recursividad va ligado al de repetición
• Permite realizar repeticiones realizando llamados a si mismo una y otra vez.
• Estos algoritmos encapsulan esta referencia de forma bastante sencilla empleando dos partes:
– Parte base, indica el fin de la recursión, especificando los casos donde no es necesario realizar llamadas.
– Parte recursiva, donde se hacen llamadas a la función, pero están más próximas al caso base.
Los algoritmos recursivos
Proceso Recursivo
Leer n
Escribir "El factorial es: " factorial(n)
FinProceso
subproceso fact = factorial(n)
si (n==0)
fact = 1
Sino
fact = factorial(n-1) * n
FinSi
FinSubProceso
• Del caso: Calcular el factorial de un número entero positivo
De Repetitiva a Recursiva
• Solución:
• Recordemos
• si n = 0, n!= 1
• si n>=1
n! = 1 x 2 x 3 x ….x (n-1) x n
subproceso mover(ndiscos, bdesde, bhasta)
si (ndiscos > 0) entonces
bmedio = 6 - bdesde - bhasta
mover(ndiscos -1, bdesde, bmedio)
Imprimir "mover el disco " ndisco "
de " bdesde " a " bhasta
mover(ndiscos -1, bmedio, bhasta)
FinSi
FinSubProceso
• Se trata de un rompecabezas inventado en 1883 por el matemático francés Éduard Lucas, que consiste en pasar una serie de discos de diferentes tamaños de una barra vertical situada a la izquierda a otra barra vertical situada a la derecha.
• Para ello se puede utilizar una barra auxiliar situada en el centro de las otras dos, con la única restricción de que nunca un disco de menor tamaño puede quedar por debajo de otro mayor.
Recursivos – Las Torres de Hanoi
• Realizar un algoritmo que obtenga el m.c.d. de dos números
Ejemplos
• Solución:
• Se define el máximo común divisor de dos o más números enteros al mayor número que los divide sin dejar resto.
• Dado el siguiente modelo de laberinto, emplear recursividad para obtener una solución
Ejemplos
• Solución:
• Ventajas: • Ciertos problemas se adaptan de manera natural a soluciones recursivas-
Algunos problemas son esencialmente recursivos, por lo cual su implementación se facilita mediante un algoritmo de naturaleza recursiva, sin tener que cambiarlo a un método iterativo, por ejemplo. -En algunas ocasiones el código de un algoritmo recursivo es muy pequeño.
• Desventajas:
• Puede llegar a utilizar grandes cantidades de memoria en un instante, pues implementa una pila cuyo tamaño crece linealmente con el número de recursiones necesarias en el algoritmo. Si los datos en cada paso es
muy grande, podemos requerir grandes cantidades de memoria.
Conclusiones
• Joyanes Aguilar, Luis. (2008). Fundamentos de programación. Algorítmos, estructura de datos y objetos (519-549). España: Mc Graw Hill.
• Curso de Estructuras de Datos y Algoritmos / Algoritmos recursivos. (2013, febrero 10). Wikiversidad, . Consultado el 04:48, noviembre 5, 2013 en http://es.wikiversity.org/w/index.php?title=Curso_de_Estructuras_de_Datos_y_Algoritmos_/_Algoritmos_recursivos&oldid=67301
• Paul E. Black, "backtracking", in Dictionary of Algorithms and Data Structures [online], Vreda Pieterse and Paul E. Black, eds. 10 November 2008. Available from: http://www.nist.gov/dads/HTML/backtrack.html
• http://www.academia.edu/4607412/Algoritmo_de_Backtracking_Recursivo_y_no_Recursivo_para_la_Resolucion_de_un_Laberinto_y_su_Aplicacion_en_SDL
Bibliografía