recursividad y eficiencia - uam...

42
Recursividad y Eficiencia

Upload: others

Post on 15-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad y Eficiencia

Page 2: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Eficiencia

Page 3: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

DefiniciónLa Eficiencia de un algoritmo o eficiencia algorítmica indicala cantidad de recursos que utiliza en un sistema de cómputo

Métricas:ComplejidadTemporalComplejidad Espacial

Page 4: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

MétricasComplejidad Temporal. Se refiere al tiempo que le toma alalgoritmo terminar su tarea.

Complejidad Espacial. Relacionado con la cantidad dememoria necesaria.

Memoria del código fuenteMemoria de los datos utilizados

Page 5: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Notación OLa Notación O (O Grande) representa la complejidad de unalgoritmo en base a la cantidad de datos de entrada

No mide la rapidez de un algoritmo, sino cuánto aumenta eltiempo de ejecución en razón del aumento de datos deentrada

Page 6: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Medidas de ONotación Nombre Ejemplo

O(1) Constante Determinar si un número es par o impar

O(log n) Logarítmica Operaciones en árboles binarios balanceados

O(n) Lineal / 1er orden Buscar un elemento en un arreglo

O(n log n) Lineal logarítmica Ordenamiento quick sort

O(n2) Cuadrática / 2do orden Ordenamiento por burbuja

O(n!) Factorial

Page 7: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad

Page 8: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

IntroducciónLa recursividad o recurrencia es uno de los conceptosfundamentales en matemáticas y computación

La programación modular se basa en dividir un problema enbloques o módulos cada uno con una tarea en particular

Page 9: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Definiciones FormalesUna definición recursiva dice como obtener conceptosnuevos utilizando el mismo concepto que intenta definir

Un problema se divide en varias instancias del mismoproblema, pero de tamaño menor hasta llegar a un punto endonde se conoce el resultado.

Page 10: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

DefiniciónDefinición del Factorial

Factorial (n) = n * n-1 * n-2 * n-3 * …* 1 para n>0Factorial (n) = 1 si n es igual a 0

La definición Recursiva del Factorial esFactorial (n) = 1 si n=0Factorial (n) = n * Factorial (n-1) si n > 0

Page 11: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

EjemploAsí para calcular el factorial de 4 se tiene:

Factorial(4) = 4 * factorial(3) = 24Factorial(3) = 3 * factorial(2) = 6Factorial(2) = 2 * factorial(1) = 2Factorial(1) = 1 * factorial(0) = 1Factorial(0) = 1

Page 12: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Números de FibonacciLos números de Fibonacci definen una secuencia infinita:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144

En dónde un término n es la suma de los términos anterioresn-1 y n-2

Los términos F(0) y F(1) tienen los valores 0 y 1respectivamente

Page 13: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Representación RecursivaLa representación recursiva para obtener los números de Fibonacci es:

FN = FN-1 + FN-2 para N > 2F0 = 0F1 = 1

Page 14: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

EjemploFibonacci (5) es:

Fibonacci (5) = Fibonacci (4) + Fibonacci (3)Fibonacci (4) = Fibonacci (3) + Fibonacci (2)Fibonacci (3) = Fibonacci (2) + Fibonacci (1)Fibonacci (2) = Fibonacci (1) + Fibonacci (0)Fibonacci (1) = 1Fibonacci (0) = 0

Page 15: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Programación ModularEn un programa modular, sus módulos o funciones se invocanentre ellos dependiendo la tarea a realizar

Page 16: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

RecursividadConsiderando la existencia de módulos o funciones:

Una función es recursiva cuando se invoca a sí misma

Se considera una alternativa al uso de estructuras cíclicas o derepetición

Page 17: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Razonamiento RecursivoUn razonamiento recursivo tiene dos partes:

Caso base (B)Regla recursiva de construcción (R)

Un conjunto de objetos esta definido recursivamente siempreque:

( B ) Algunos elementos del conjunto se definan explícitamente( R ) El resto de los elementos se definan en términos de los yadefinidos

Page 18: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

ConsideracionesLa Regla recursiva de construcción (R) en algún momentodebe permitir que se alcance el o los valores base (B)

Page 19: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Tipos de RecursividadRecursividad Directa. Cuando un procedimiento incluye unallamada a si mismoRecursividad Indirecta. Cuando en una secuencia de llamadasa métodos, se regresa al inicial u originalRecursividad en Aumento. Cuando se crean operacionesdiferidas que tienen que realizarse después de que secomplete la ultima llamada recursivaRecursividad Simple. Solo se tiene una llamada recursiva enla funciónRecursividad Múltiple. Más de una llamada recursiva en elcuerpo de la función

Page 20: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad Directatipo nombre (int a, int b)

iniciosi (b = a)

regresa a

otro

regresa nombre(a, b*5)

fin

Page 21: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad Indirectatipo nombre (int a, int b)

iniciosi (b = a)

regresa aotro

regresa suma(a)fin

tipo suma (int a)

inicio

si (b = a)

regresa a

otro

regresa nombre(a, a+1)

fin

Page 22: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad en Aumentotipo nombre (int a)

iniciosi (a = 3)

regresa a

otroregresa a + nombre(a-2)

fin

Page 23: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad Simpletipo nombre (int a)

iniciosi (a = 1)

regresa a

otro

regresa nombre(a-1)

fin

Page 24: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recursividad Múltipletipo nombre (int n, int m)

iniciosi m = 0

regresa 1

otroregresa nombre (n-1,m) + nombre (n-1,m-1)

termina

Page 25: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Ventajas y DesventajasVentajas:

Algunos problemas son más sencillos de modelar e implementarutilizando recursividad

Desventajas:Es necesario la creación de varias variables lo que puedeocasionar problemas en memoriaEn general una función recursiva toma más tiempo enejecutarse que una iterativa

Page 26: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Diseño Dividir para VencerUn algoritmo recursivo es aquel que expresa la solución deun problema en términos de una llamada a si mismo.

Después de cada llamada, el problema se reduce en tamañohasta llegar a una solución trivial que es lo que se conocecomo caso base.

Page 27: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Creación de Algoritmos RecursivosLas claves para crear un algoritmo recursivo para resolver unproblema son:

Cada llamada recurrente se debe definir sobre un problemamenorDebe existir al menos un caso base para evitar recurrenciainfinitaSe debe analizar en qué momento se realizará la llamadarecursiva

Page 28: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

EjemploEl factorial de un numero n se define como n!

1*2*3*4*5*6*...*n

Considerar el caso cuando n=5En este caso:

5! = 5 * 4!4! = 4 * 3!3! = 3 * 4!

De esta forma se tiene:n! = n * (n-1)!

El caso base en el factorial por definición es:0! = 1

Page 29: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Algoritmo Recursivodouble factorial (entero n)

iniciosi(n=0)

regresa 1

otroregresa n * factorial (n-1)

fin

Page 30: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Sumatoria Sencillaint sumatoria (entero n)

iniciosi n<2

regresa n

otroregresa n + sumatoria (n-1)

fin

Page 31: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Sumatoria Límite Inferiorint sumatoria (entero li, entero n)

iniciosi n=li

regresa li

otroregresa n + sumatoria (li,n-1)

fin

Page 32: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Sumatoria Evaluadaint sumatoria (entero n)

iniciosi n=0

suma ← 02+2(0)-3otro

inicio

suma ←n2+2n-3

suma ← suma + sumatoria(n-1)fin

regresa suma

fin

Page 33: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Multiplicaciónint multiplica (a,b)

iniciosi (b=0)

regresa 0

otro

regresa a + multiplica(a,b-1)

fin

Page 34: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Potenciadoble potencia (a,b)

iniciosi (b=0)

regresa 1

otroregresa a * potencia(a,b-1)

fin

Page 35: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

CombinacionesCuantas combinaciones (n, m) de tamaño (m) puedenhacerse del tamaño total de un grupo (n)

Definición:Combinaciones ← g m=1Combinaciones ← 1 m=gCombinaciones ← combinaciones (n-1,m-1) +combinaciones(n-1,m)

Page 36: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Algoritmoint combinaciones(int n, int m)

iniciosi m = 1

comb ← notro si m = n

comb ← 1otro

comb ← combinaciones(n-1,m-1)+ combinaciones(n-1,m)

fin

Page 37: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Conversión a BinarioString binario (entero n)

iniciosi n ≥ 2

inicio

bin ←binario(n/2)

bin ← bin + (n%2)fin

otrobin ← bin + nregresa bin

fin

Page 38: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recorrer un Arreglovoid recorrer (arreglo, pos)

iniciosi pos = arreglo.longitudIMPRIMIR arreglo[pos]

otroinicioIMPRIMIR arreglo[pos]recorrer (arreglo, pos -+1)fin

fin

recorrer(arreglo,0)

Page 39: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Recorrido Inversovoid recorrerInvertido (arreglo, pos)

iniciosi pos = 0

IMPRIMIR arreglo[pos]

otro

inicio

IMPRIMIR arreglo[pos]

recorrerInvertido (arreglo, pos - 1)

fin

finrecorrer(arreglo,arreglo.longitud-1)

Page 40: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Buscar un Elementovoid buscarElemento (arreglo, valor, pos)

iniciosi pos = arreglo.longitud

IMPRIMIR “No encontrado”

otro si val = arreglo[pos]

IMPRIMIR “Elemento encontrado”

otro

buscarElemento (arreglo, valor,pos + 1)

fin

buscarElemento(arreglo,valor, 0)

Page 41: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Menor de los Elementosint menorElemento (arreglo, inicio, fin)

iniciosi inicio = fin

regresa a[inicio]otro

iniciomenor ← menorElemento(a,inicio+1,fin)si (menor > a[inicio]

menor ← menorotro

menor ← a[inicio]regresa menor

finfinrecorrer(arreglo,0, arreglo.longitud)

Page 42: Recursividad y Eficiencia - UAM Azcaptzalcoacademicos.azc.uam.mx/jfg/diapositivas/algoritmos_ed/Unidad_2.pdfCreación de Algoritmos Recursivos. y. Las claves para crear un algoritmo

Suma de los Elementosint sumatoria (arreglo, pos)

iniciosi pos = arreglo.longitud-1

regresa arreglo-longitud-1

otroregresa arreglo[pos]+sumatoria(arreglo,pos+1)

fin