Práctica DivideyVenceras

download Práctica DivideyVenceras

of 2

Transcript of Práctica DivideyVenceras

  • 8/20/2019 Práctica DivideyVenceras

    1/2

    Facu ltad de In gen iería de Sist em as e In fo rm átic a

    [email protected] Pág. 1

    Práctica – Divide y Vencerás

    1. Par más cercano. Dado un conjunto de puntos en el plano cartesiano (x; y) diseñe unalgoritmo "divide y vencerás" para encontrar el par de puntos más cercano dentro de unconjunto de puntos en el plano.

    Una forma de resolver este problema es usando la fuerza bruta calculando las distancias entretodos los pares de puntos.

    La técnica "divide y vencerás" nos permite obtener una solución más eficiente de la siguienteforma:

    a. Dividir : Se encuentra una línea vertical L que divide el conjunto P en dos conjuntos P I y P D de forma que cada uno contiene la mitad de los puntos en P. Todos los puntos en P I estána la izquierda de la línea L y todos los puntos en P D se encuentran a la derecha.

    El vector X se divide en dos subvectores X I y XD que contienen los puntos en P I y P D

    ordenados según el valor de su coordenada x. De igual forma, el vector Y se divide en dosarrays Y I e Y D que contienen los puntos de P I y P D, ordenados según su coordenada y.

    b. Resolver: Una vez divididos los vectores, se hacen las llamadas recursivas para encontrarlos puntos más cercanos en P I y P D. La primera de ellas toma como argumentos lospuntos P I y los vectores X I e Y I. La segunda considera los puntos P D y los vectores X D eYD. Sean δ I y δ D las distancias más pequeñas en P I y P D.

    c. Combinar : Los puntos más cercanos son aquéllos que se encontraron a menor distanciaen las llamadas recursivas (δ = min{δ I, δ D}) o bien es un par con un punto en P I y otro enP D. El algoritmo, por tanto, debe encontrar si existe un par a una distancia menor que δ. Laclave está en saber que estos puntos, de existir, se encuentran dentro de una ventana con2δ de ancho y δ de alto centrada alrededor de la línea L.

  • 8/20/2019 Práctica DivideyVenceras

    2/2

    Facu ltad de In gen iería de Sist em as e In fo rm átic a

    [email protected] Pág. 2

    2. Diseñe un algoritmo "divide y vencerás" para encontrar el mínimo y máximo de un arregloutilizando divide y vencerás.

    3. Diseñe un algoritmo "divide y vencerás" que permita calcular el k−ésimo menor elemento deun vector.

    4. Modifique el algoritmo "divide y vencerás" para la multiplicación de grandes enteros de forma

    que permita multiplicar números en binario. Ilustre el funcionamiento del algoritmo a la hora demultiplicar los siguientes enteros:

    A = 10011011 y B = 10111010

    5. Diseñe un algoritmo "divide y vencerás" que permita encontrar la mediana de un vector sintener que ordenar el vector previamente.

    6. Dado un vector ordenado de números enteros X, diseñe un algoritmo "divide y vencerás" quepermita determinar si existe un índice i tal que X[i] = i.

    7. Un array se dice que tiene un elemento mayoritario si más de la mitad de sus elementostienen el mismo valor. Dado un array A, nos proponen que diseñemos un algoritmo eficiente

    que nos permita determinar sin un array tiene un elemento mayoritario y, en caso afirmativo,identifique dicho elemento. Ahora bien, los elementos del array no tienen por qué pertener aun dominio ordenado como el de los números enteros y, por tanto, NO se pueden realizarcomparaciones del tipo A[i] > A[j]. En cualquier caso, sí que se pueden realizarcomprobaciones del tipo A[i] = A[j].

    8. Diseñe un algoritmo "divide y vencerás" para ordenar el vector mediante el método Mergesort.

    a. Dividir nuestro conjunto en dos mitades.

    b. Ordenar recursivamente cada mitad.

    c. Combinar las dos mitades ordenadas