SlideShare una empresa de Scribd logo
1 de 25
Recursividad
Divide y Vencerás

Programación
Lester Sánchez
Universidad de La Habana
2013 – 2014
Divide y Vencerás
1. Dividir el problema complejo en subproblemas
simples
2. Conquistar (resolver) los problemas simples

3. Vencer (resolver) el problema original a partir de
las soluciones de los problemas simples

Programación, UH 2013-2014

2
Estructura general de un algoritmo
recursivo
Algoritmo RECURSIVO
IF (Problema Simple)

Resolverlo directamente
Dividir

ELSE
Dividir en subproblemas P1, P2, ..., Pn

Resolver(P1); Resolver(P2); ... Resolver(Pn)
Conquistar

Combinar las soluciones de cada subproblema
Vencer

Programación, UH 2013-2014

3
Composition with Large Red Plane, Yellow, Black, Gray and Blue
Piet Mondrian, 1921
Quiero generar esta figura
Programación, UH 2013-2014

5
1

Problema Inicial:
Dividir el rectángulo
en varias regiones

Subproblema: Dividir el
rectángulo en dos rectángulos
más pequeños, y resolver el
mismo problema en cada uno

Programación, UH 2013-2014

6
1

Subproblema 1:
Resolverlo de la
misma forma
Caso Base: Cuando
Alto o Ancho sean
demasiado pequeños

Subproblema 2: Caso
Base. No hay que
dividirlo más

2

Programación, UH 2013-2014

7
1

2

4

7

8

6

10

5

1

9

4

11
3

3

2

6

5

7
9

8
k Problema Complejo
k Problema Simple (Caso Base)

10

11

Cada problema complejo se divide en dos nuevos subproblemas
Programación, UH 2013-2014

8
Ejemplo: Mondrian

Dividir los dos
nuevos rectángulos
que se forman

Obtener
punto de
división
Dividir los dos
nuevos rectángulos
que se forman

Dibujar
línea
divisoria
Programación, UH 2013-2014

9
DEMO
Mondrian

Programación, UH 2013-2014

10
Ejemplo: Máximo de un Array
4, 17, 44, 10, 30, 25, 6 Max (44, 25)=44
Max (17, 44)=44

Max (25, 6)=25

20, 25, 6

4, 17, 44, 10
Max (4, 17)=17

Max (44, 10)=44

4 17
4

17

44 10
44

10

Max (20, 25)=25

20 25
20

6

25

Cada problema se divide en dos nuevos subproblemas (buscar máximo en cada mitad)
Hasta que la mitad tenga 1 elemento (caso base), el máximo

Programación, UH 2013-2014

11
Ejemplo: Máximo de un Array
El método público
se limita a invocar
al recursivo con los
parámetros iniciales
Método Recursivo.
Recibe índices para
limitar el rango
donde buscar
Si hay un único
elemento, es el máximo

Programación, UH 2013-2014

El máximo del array es el
máximo de los máximos
de cada mitad

12
Búsqueda Binaria
Ejemplos de la vida cotidiana
‐ Buscar una palabra en un diccionario
‐ Buscar un nombre en el directorio telefónico
‐ Buscar una página de un libro
‐ Retomar la visualización de un video

En general optimizamos la búsqueda cuando los
elementos están ordenados
Optimización en este caso significa hacer menos comparaciones para
encontrar el elemento… o determinar que no está
Programación, UH 2013-2014

13
Búsqueda Binaria
0

1

4

6

2

3

4

5

6

7

8

9

10 12 17 25 29 30 41 44

29 > 17

25 29 30 41 44

29 < 30

25 29

29 > 25

29

29 = 29

Se encontró el elemento haciendo solo 4 comparaciones!
Programación, UH 2013-2014

14
Búsqueda Binaria
0

1

4

6

2

3

4

5

6

7

8

9

10 12 17 25 29 30 41 44

28 > 17

25 29 30 41 44

28 < 30

25 29

28 > 25

29

28 != 29

Se determinó que el elemento no está haciendo solo 4 comparaciones!

Programación, UH 2013-2014

15
Búsqueda Binaria
1

2

3

4

5

6

7

8

…

n

n/2

(n/2)/2 = n/4 = n/22
((n/2)/2)/2 = n/8 = n/23
.
.
.

Cantidad de elementos
del nuevo fragmento
Cuando n/2k = 1 no hay
nada más que dividir

(((n/2)/2)/2) … /2 = n/2k
k es la cantidad
máxima de divisiones

Programación, UH 2013-2014

16
Búsqueda Binaria

O sale por aquí
Buscar en la 2da mitad

Buscar en la 1ra mitad
O sale por aquí
Programación, UH 2013-2014

17
Ordenación por Mezcla (Merge
Sort)
Si se tienen dos arrays ordenados, se pueden mezclar
de forma tal que el array resutante siga ordenado
ALGORITMO RECURSIVO
1. Dividir el array en dos mitades
2. Ordenar cada mitad de la misma forma
3. Mezclar las dos mitades
4. Una mitad de 1 elemento está ordenada

Programación, UH 2013-2014

18
Ejemplo: Ordenación por Mezcla
38

38

43

3

43

27
27

38
27

43

27

38

27

3

43

38

10

82

38

10

82

9
27

10

82

9

43

9

10

82

9

3

27

82

9

3

3
Programación, UH 2013-2014

9
9

43

38
3

3

10

43

82

82
19
Ordenación por Mezcla
Se utiliza para
hacer la mezcla

Si el fragmento tiene un solo
elemento, está ordenado!
Ordenar la 1ra mitad
Ordenar la 2da mitad
Mezclar las dos
mitades ordenadas
Programación, UH 2013-2014

20
Ordenación por Mezcla

Copiar los restantes
de la 1ra mitad
Copiar los restantes
de la 2da mitad
Copiar el fragmento
ordenado al array original

Programación, UH 2013-2014

21
Clase Práctica
Implementar la búsqueda en un array desordenado
int Buscar (int[] a, int n)
Determinar cantidad mínima de inserciones requeridas para
convertir una cadena en palíndromo
Ejemplo: A la cadena “abcb” basta con insertarle una “a” por
detrás para convertirla en palíndromo (abcba) y a “abecba”
basta con insertarle una “e” en el medio (abeceba) o una “c”
(abcecba).
int InsercionesPalindromo(string s)
Programación, UH 2013-2014

22
Clase Práctica
Implemente el algoritmo de ordenación QuickSort.
void QuickSort(int[] a)
El QuickSort se basa en la idea de reorganizar los elementos
de un array, seleccionando un elemento (pivote) y colocando
todos los menores que él al inicio del array y los mayores e
iguales al final. Implemente esta estrategia en un algortimo
recursivo utilizando la técnica de divide y vencerás.

Programación, UH 2013-2014

23
Clase Práctica
Un TAXISTA se desplaza por una ciudad en la que solo está
permitido conducir hacia el ESTE y hacia el SUR. Calcule la
cantidad de caminos desde un origen hasta un destino.

int CantidadCaminos(int xOrig, int yOrig, int
xDest, int yDest)
Calcule la cantidad de cadenas balanceadas que pueden
formarse con n pares de paréntesis.
int CadenasBalanceadas(int n)

Programación, UH 2013-2014

24
Clase Práctica
Implemente un método que imprima en la Consola la
descomposición en sumandos de un número n.
Ejemplo: n = 5
1+1+1+1+1
1+1+1+2
1+2+2
1+1+3
1+4
2+3
5
void DescomposicionSumandos(int n)

Programación, UH 2013-2014

25

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Recursividad
RecursividadRecursividad
Recursividad
 
Listas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UPListas doblemente enlazadas C++ UP
Listas doblemente enlazadas C++ UP
 
Algoritmo divide y vencerás
Algoritmo divide y vencerásAlgoritmo divide y vencerás
Algoritmo divide y vencerás
 
Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamiento
 
Proyecto calculadora
Proyecto calculadoraProyecto calculadora
Proyecto calculadora
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Listas
ListasListas
Listas
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Quicksort
QuicksortQuicksort
Quicksort
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Planificacion cpu
Planificacion cpuPlanificacion cpu
Planificacion cpu
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Merge sort
Merge sortMerge sort
Merge sort
 
Taller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL proceduralTaller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL procedural
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientos
 
Busquedas a Heuristicas
Busquedas a HeuristicasBusquedas a Heuristicas
Busquedas a Heuristicas
 
El metodo doolittle
El metodo doolittleEl metodo doolittle
El metodo doolittle
 
Recursividad
RecursividadRecursividad
Recursividad
 

Similar a Divide y vencerás: Recursividad

Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)
Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)
Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)ArmandoC42
 
Guia didactica final numeros enteros z
Guia didactica final numeros enteros zGuia didactica final numeros enteros z
Guia didactica final numeros enteros zandr3ava
 
Guia didactica final
Guia didactica finalGuia didactica final
Guia didactica finalandr3ava
 
Guia didactica 1
Guia didactica 1Guia didactica 1
Guia didactica 1andr3ava
 
Solucionar problemas por_medio_de_algoritmos
Solucionar problemas por_medio_de_algoritmosSolucionar problemas por_medio_de_algoritmos
Solucionar problemas por_medio_de_algoritmosEspitiaGiancarlo
 
jaisan
jaisanjaisan
jaisanjai
 
Tema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosTema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosPablo Haya
 
Clase 1 álgebra 2010 (pp tminimizer)
Clase 1 álgebra 2010 (pp tminimizer)Clase 1 álgebra 2010 (pp tminimizer)
Clase 1 álgebra 2010 (pp tminimizer)Karla Martinez
 
ARITMETICA 1 ejercicios de aplicacion(1).docx
ARITMETICA 1 ejercicios de aplicacion(1).docxARITMETICA 1 ejercicios de aplicacion(1).docx
ARITMETICA 1 ejercicios de aplicacion(1).docxMargotGomez2
 
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdf
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdfPOLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdf
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdfCamilaLpez87
 
Modulo estructura de_datos_2014
Modulo estructura de_datos_2014Modulo estructura de_datos_2014
Modulo estructura de_datos_2014Carlos Morales
 
Presentaciones exitosas
Presentaciones exitosasPresentaciones exitosas
Presentaciones exitosasJanninaD
 
Marian Dominguez
Marian DominguezMarian Dominguez
Marian DominguezJanninaD
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosWilliam Diaz S
 

Similar a Divide y vencerás: Recursividad (20)

Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)
Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)
Centro de estudios_tecnologicos_industril_y_de_servicios_no(2)
 
Guia didactica final numeros enteros z
Guia didactica final numeros enteros zGuia didactica final numeros enteros z
Guia didactica final numeros enteros z
 
Guia didactica final
Guia didactica finalGuia didactica final
Guia didactica final
 
Guia didactica 1
Guia didactica 1Guia didactica 1
Guia didactica 1
 
Solucionar problemas por_medio_de_algoritmos
Solucionar problemas por_medio_de_algoritmosSolucionar problemas por_medio_de_algoritmos
Solucionar problemas por_medio_de_algoritmos
 
jaisan
jaisanjaisan
jaisan
 
Tema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmosTema 3 - Técnicas básicas de diseño de algoritmos
Tema 3 - Técnicas básicas de diseño de algoritmos
 
ECUACIONES LINEALES 2º
ECUACIONES LINEALES  2ºECUACIONES LINEALES  2º
ECUACIONES LINEALES 2º
 
Solucionario Guia Ipn 2011 - Guia resuelta del IPN
Solucionario Guia Ipn 2011 - Guia resuelta del IPN Solucionario Guia Ipn 2011 - Guia resuelta del IPN
Solucionario Guia Ipn 2011 - Guia resuelta del IPN
 
Clase 1 álgebra 2010 (pp tminimizer)
Clase 1 álgebra 2010 (pp tminimizer)Clase 1 álgebra 2010 (pp tminimizer)
Clase 1 álgebra 2010 (pp tminimizer)
 
Documento para el_facilitador_u2
Documento para el_facilitador_u2Documento para el_facilitador_u2
Documento para el_facilitador_u2
 
ARITMETICA 1 ejercicios de aplicacion(1).docx
ARITMETICA 1 ejercicios de aplicacion(1).docxARITMETICA 1 ejercicios de aplicacion(1).docx
ARITMETICA 1 ejercicios de aplicacion(1).docx
 
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdf
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdfPOLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdf
POLINOMIOS Y ECUACIONES ALGEBRAICAS EN NUMEROS COMPLEJOS.pdf
 
Modulo estructura de_datos_2014
Modulo estructura de_datos_2014Modulo estructura de_datos_2014
Modulo estructura de_datos_2014
 
Presentaciones exitosas
Presentaciones exitosasPresentaciones exitosas
Presentaciones exitosas
 
Marian Dominguez
Marian DominguezMarian Dominguez
Marian Dominguez
 
Números racionales
Números racionalesNúmeros racionales
Números racionales
 
Números racionales
Números racionalesNúmeros racionales
Números racionales
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a Objetos
 

Último

programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 

Último (20)

programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 

Divide y vencerás: Recursividad

  • 1. Recursividad Divide y Vencerás Programación Lester Sánchez Universidad de La Habana 2013 – 2014
  • 2. Divide y Vencerás 1. Dividir el problema complejo en subproblemas simples 2. Conquistar (resolver) los problemas simples 3. Vencer (resolver) el problema original a partir de las soluciones de los problemas simples Programación, UH 2013-2014 2
  • 3. Estructura general de un algoritmo recursivo Algoritmo RECURSIVO IF (Problema Simple) Resolverlo directamente Dividir ELSE Dividir en subproblemas P1, P2, ..., Pn Resolver(P1); Resolver(P2); ... Resolver(Pn) Conquistar Combinar las soluciones de cada subproblema Vencer Programación, UH 2013-2014 3
  • 4. Composition with Large Red Plane, Yellow, Black, Gray and Blue Piet Mondrian, 1921
  • 5. Quiero generar esta figura Programación, UH 2013-2014 5
  • 6. 1 Problema Inicial: Dividir el rectángulo en varias regiones Subproblema: Dividir el rectángulo en dos rectángulos más pequeños, y resolver el mismo problema en cada uno Programación, UH 2013-2014 6
  • 7. 1 Subproblema 1: Resolverlo de la misma forma Caso Base: Cuando Alto o Ancho sean demasiado pequeños Subproblema 2: Caso Base. No hay que dividirlo más 2 Programación, UH 2013-2014 7
  • 8. 1 2 4 7 8 6 10 5 1 9 4 11 3 3 2 6 5 7 9 8 k Problema Complejo k Problema Simple (Caso Base) 10 11 Cada problema complejo se divide en dos nuevos subproblemas Programación, UH 2013-2014 8
  • 9. Ejemplo: Mondrian Dividir los dos nuevos rectángulos que se forman Obtener punto de división Dividir los dos nuevos rectángulos que se forman Dibujar línea divisoria Programación, UH 2013-2014 9
  • 11. Ejemplo: Máximo de un Array 4, 17, 44, 10, 30, 25, 6 Max (44, 25)=44 Max (17, 44)=44 Max (25, 6)=25 20, 25, 6 4, 17, 44, 10 Max (4, 17)=17 Max (44, 10)=44 4 17 4 17 44 10 44 10 Max (20, 25)=25 20 25 20 6 25 Cada problema se divide en dos nuevos subproblemas (buscar máximo en cada mitad) Hasta que la mitad tenga 1 elemento (caso base), el máximo Programación, UH 2013-2014 11
  • 12. Ejemplo: Máximo de un Array El método público se limita a invocar al recursivo con los parámetros iniciales Método Recursivo. Recibe índices para limitar el rango donde buscar Si hay un único elemento, es el máximo Programación, UH 2013-2014 El máximo del array es el máximo de los máximos de cada mitad 12
  • 13. Búsqueda Binaria Ejemplos de la vida cotidiana ‐ Buscar una palabra en un diccionario ‐ Buscar un nombre en el directorio telefónico ‐ Buscar una página de un libro ‐ Retomar la visualización de un video En general optimizamos la búsqueda cuando los elementos están ordenados Optimización en este caso significa hacer menos comparaciones para encontrar el elemento… o determinar que no está Programación, UH 2013-2014 13
  • 14. Búsqueda Binaria 0 1 4 6 2 3 4 5 6 7 8 9 10 12 17 25 29 30 41 44 29 > 17 25 29 30 41 44 29 < 30 25 29 29 > 25 29 29 = 29 Se encontró el elemento haciendo solo 4 comparaciones! Programación, UH 2013-2014 14
  • 15. Búsqueda Binaria 0 1 4 6 2 3 4 5 6 7 8 9 10 12 17 25 29 30 41 44 28 > 17 25 29 30 41 44 28 < 30 25 29 28 > 25 29 28 != 29 Se determinó que el elemento no está haciendo solo 4 comparaciones! Programación, UH 2013-2014 15
  • 16. Búsqueda Binaria 1 2 3 4 5 6 7 8 … n n/2 (n/2)/2 = n/4 = n/22 ((n/2)/2)/2 = n/8 = n/23 . . . Cantidad de elementos del nuevo fragmento Cuando n/2k = 1 no hay nada más que dividir (((n/2)/2)/2) … /2 = n/2k k es la cantidad máxima de divisiones Programación, UH 2013-2014 16
  • 17. Búsqueda Binaria O sale por aquí Buscar en la 2da mitad Buscar en la 1ra mitad O sale por aquí Programación, UH 2013-2014 17
  • 18. Ordenación por Mezcla (Merge Sort) Si se tienen dos arrays ordenados, se pueden mezclar de forma tal que el array resutante siga ordenado ALGORITMO RECURSIVO 1. Dividir el array en dos mitades 2. Ordenar cada mitad de la misma forma 3. Mezclar las dos mitades 4. Una mitad de 1 elemento está ordenada Programación, UH 2013-2014 18
  • 19. Ejemplo: Ordenación por Mezcla 38 38 43 3 43 27 27 38 27 43 27 38 27 3 43 38 10 82 38 10 82 9 27 10 82 9 43 9 10 82 9 3 27 82 9 3 3 Programación, UH 2013-2014 9 9 43 38 3 3 10 43 82 82 19
  • 20. Ordenación por Mezcla Se utiliza para hacer la mezcla Si el fragmento tiene un solo elemento, está ordenado! Ordenar la 1ra mitad Ordenar la 2da mitad Mezclar las dos mitades ordenadas Programación, UH 2013-2014 20
  • 21. Ordenación por Mezcla Copiar los restantes de la 1ra mitad Copiar los restantes de la 2da mitad Copiar el fragmento ordenado al array original Programación, UH 2013-2014 21
  • 22. Clase Práctica Implementar la búsqueda en un array desordenado int Buscar (int[] a, int n) Determinar cantidad mínima de inserciones requeridas para convertir una cadena en palíndromo Ejemplo: A la cadena “abcb” basta con insertarle una “a” por detrás para convertirla en palíndromo (abcba) y a “abecba” basta con insertarle una “e” en el medio (abeceba) o una “c” (abcecba). int InsercionesPalindromo(string s) Programación, UH 2013-2014 22
  • 23. Clase Práctica Implemente el algoritmo de ordenación QuickSort. void QuickSort(int[] a) El QuickSort se basa en la idea de reorganizar los elementos de un array, seleccionando un elemento (pivote) y colocando todos los menores que él al inicio del array y los mayores e iguales al final. Implemente esta estrategia en un algortimo recursivo utilizando la técnica de divide y vencerás. Programación, UH 2013-2014 23
  • 24. Clase Práctica Un TAXISTA se desplaza por una ciudad en la que solo está permitido conducir hacia el ESTE y hacia el SUR. Calcule la cantidad de caminos desde un origen hasta un destino. int CantidadCaminos(int xOrig, int yOrig, int xDest, int yDest) Calcule la cantidad de cadenas balanceadas que pueden formarse con n pares de paréntesis. int CadenasBalanceadas(int n) Programación, UH 2013-2014 24
  • 25. Clase Práctica Implemente un método que imprima en la Consola la descomposición en sumandos de un número n. Ejemplo: n = 5 1+1+1+1+1 1+1+1+2 1+2+2 1+1+3 1+4 2+3 5 void DescomposicionSumandos(int n) Programación, UH 2013-2014 25