0% encontró este documento útil (0 votos)
120 vistas

Divide y Venceras

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
120 vistas

Divide y Venceras

Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

Teora de Algoritmos Tema 2: Algoritmos Divide y Vencers 1

Tema 2: Algoritmos Divide y Vencers


2.1.- Introduccin

2.2.- La Bsqueda Binaria

2.3.- Ejercicio: Bsqueda del mayor y del menor elemento de un vector

Teora de Algoritmos Tema 2: Algoritmos Divide y Vencers 2

2.1.- Introduccin
Condiciones que debe cumplir un problema P para que se pueda resolver utilizando la tcnica Divide y Vencers (DYV): debe ser divisible en subproblemas P1, P2, (funcin de descomposicin) Todos los Pi deben ser de la misma naturaleza que P, pero de menor tamao Cada uno de estos Pi se puede resolver (utilizando la misma tcnica u otro algoritmo clsico) para obtener soluciones Si Con la combinacin de todas las Si (se debe poder!!) se obtiene la solucin S al problema original P (funcin de combinacin) NOTA: Por la naturaleza de la tcnica, el mtodo se expresa de manera natural mediante un algoritmo recursivo

Factor importante para la eficiencia prctica de cualquier algoritmo Divide y Vencers: clculo del umbral n0 El algoritmo Divide y Vencers puede resultar mas lento que el algoritmo clsico para casos que sean demasiado pequeos Un algoritmo Divide y Vencers debe evitar seguir avanzando recursivamente cuando el tamao de los casos ya no lo justifique

Restricciones que se imponen al algoritmo DYV genrico: La funciones de descomposicin y combinacin han de ser eficientes El nmero de subproblemas generados no debe ser muy grande La determinacin del umbral n0 ha de ser ptima El tamao de cada uno de los subproblemas ha de ser lo ms similar posible y no debe haber solapamiento entre ellos

Teora de Algoritmos Tema 2: Algoritmos Divide y Vencers 3

Esquema general de los algoritmos Divide y Vencers: Funcion Divide_y_Venceras(P: problema) { Devuelve la solucin del ejemplar P } Inicio Si P es suficientemente pequeo o simple Entonces devolver( solucion_simple(P) ) Si_No descomponer P en k partes (P1,P2,...,Pk); Para (i=1;i<=k;i++) Si=Divide_y_Venceras(Pi); devolver( combinar(P1, P2, ..., Pk) ); Fin

2.2.- La Bsqueda Binaria


No es un ejemplo puro de Divide y Vencers Se trata ms de un problema de simplificacin int busq_bin(T[1..N],x, int i, j) { int k; if(i==j)return(x==T[i]?i:x<T[i]?-i:(i++)) else { k=div(i+j+1,2).quot; if (x<T[k]) return(busq_bin(T,x,i,k-1)); else if (x>T[k]) return(busq_bin(T,x,k+1,j)); else return(k); } } Bsqueda binaria

Ejercicio 1: Mediante el Algoritmo de Divide y Venceras realizar una Bsqueda del mayor y del menor elemento de un vector (El vector no esta ordenado y tampoco se debe ordenar). Nota: Se recomienda hacer dos llamadas recursivas a la funcin, una realizando la busqueda en la subparte menor del arreglo y otra realizando la busqueda en la subparte mayor del arreglo.

También podría gustarte