decrementa y vencerás ii - cinvestavertello/algorithms/sesion11.pdf · búsqueda por...
TRANSCRIPT
Decrementa y vencerás II
Dr. Eduardo A. RODRÍGUEZ TELLO
CINVESTAV-Tamaulipas
21 de febrero de 2018
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 1 / 22
1 Decrementa y vencerás II
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 2 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
1 Decrementa y vencerás IIAlgoritmo de decremento con factor constanteAlgoritmos de decremento variable
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 3 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Algoritmo de decremento con factor constante
En esta versión de algoritmos decrementa y vencerás el tamaño de lainstancia se reduce con el mismo factor (típicamente 2)Ejemplos:
Búsqueda binariaExponenciación por cuadradosMultiplicación por el método ruso
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 4 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Búsqueda binaria
Es un algoritmo muy eficiente para búsqueda en arreglosordenadosFunciona comparando el término buscado (llave) K con elelemento en la mitad del arreglo A[m]. Si son iguales, el algoritmose detiene, sino, se repite la misma operación recursivamente conla primera mitad del arreglo si K < A[m], o con la segunda mitaddel arreglo si K > A[m]
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 5 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Búsqueda binaria
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 6 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Búsqueda binaria, Eficiencia temporal
Peor caso
Arreglo no contiene la llave K. Operación básica: comparación entre K y A[m] (3 vías)
Cworst(n) = Cworst(bn/2c) + 1 para n > 1, Cworst(1) = 1
Esta relación de recurrencia ya la habíamos resuelto antesCworst(n) = blog2 nc + 1 = dlog2(n + 1)e ∈ Θ(log n)
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 7 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Búsqueda binaria, Eficiencia temporal
Peor casoArreglo no contiene la llave K. Operación básica: comparación entre K y A[m] (3 vías)
Cworst(n) = Cworst(bn/2c) + 1 para n > 1, Cworst(1) = 1
Esta relación de recurrencia ya la habíamos resuelto antesCworst(n) = blog2 nc + 1 = dlog2(n + 1)e ∈ Θ(log n)
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 7 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Búsqueda binaria, Eficiencia temporal
Ejemplos:
Para encontrar un elemento K en un arreglo ordenado de 1,000 elementos (oconfirmar que no está) toma sólo
dlog2(103 + 1)e = 10 comparaciones de 3 vías
Para encontrar un elemento K en un arreglo ordenado de 1’000,000 elementos(o confirmar que no está) toma sólo
dlog2(106 + 1)e = 20 comparaciones de 3 vías
Es un algoritmo óptimo para búsqueda en arreglos ordenados
El número de comparaciones en el caso promedio es sólo ligeramente máspequeño que en el peor caso:
Cavg(n) ≈ log2 n
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 8 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Multiplicación por el método ruso
Sean n y m dos enteros positivos cuyo producto deseamos encontrar(n representa el tamaño de la instancia). Se hace una tabla con 2columnas encabezadas por n y m
1 Dividir n entre 2, sucesivamente, ignorando el residuo, hastallegar a la unidad. Escribir los resultados en la columna n.
2 Multiplicar m por 2 tantas veces como veces se ha dividido n entre2. Escribir los resultados sucesivos en la columna m.
3 Sumar todos los números de la columna m que estén al lado deun número impar de la columna n. Éste es el resultado.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 9 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Multiplicación por el método ruso
Se multiplica 50× 65. El resultado se encuentra sumando todoslos elementos de la columna m que tienen un valor impar en lacolumna n
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 10 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Multiplicación por el método ruso
Este método funciona porque la multiplicación es distributiva, i.e.,a× (b + c) = a× b + a× c, así que:
65× 50 = 65× (0× 20 + 1× 21 + 0× 22 + 0× 23 + 1× 24 + 1× 25)= 65× (2 + 16 + 32)= (130 + 1040 + 2080)= 3250
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 11 / 22
Decrementa y vencerás II Algoritmo de decremento con factor constante
Ejercicio 1
1 Suponga que se le presenta un arreglo con 42 fotografías depersonas (ordenadas en 6 filas con 7 columnas) y se le solicitaidentificar una foto objetivo únicamente haciendo preguntas quepueden ser respondidas con sí y no. Además existe la restricciónde hacer el menor número de preguntas posible. Diseñe elalgoritmo más eficiente para este problema e indique el númeromás grande de preguntas que pueden requerirse.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 12 / 22
Decrementa y vencerás II Algoritmos de decremento variable
1 Decrementa y vencerás IIAlgoritmo de decremento con factor constanteAlgoritmos de decremento variable
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 13 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Algoritmos de decremento variable
En los algoritmos de tipo decrementa y vencerás con decrementovariable la reducción del tamaño de la instancia es diferente en cadauna de las iteraciones.
Ejemplos:Algoritmo de EuclidesAlgoritmo basado en partición para el problema de selecciónBúsqueda por interpolaciónAlgunos algoritmos para búsqueda en árboles binarios
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 14 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Algoritmo de Euclides
El algoritmo de Euclides se basa en la aplicación iterativa de lasiguiente ecuación:
gdc(m,n) = gdc(n,m m«od n)
Ejemplo:
gdc(80, 44) = gdc(44, 36) = gdc(36, 12) = gdc(12, 0) = 12
Es posible probar que el tamaño del problema (medido con el valor den) decrece al menos en la mitad después de dos iteraciones. Por lotanto, T(n) ∈ O(log n)
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 15 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección
Encontrar el k-ésimo elemento más pequeño en una lista de números.
Puede realizarse tomando ventaja de la idea de hacer una partición dela lista en torno a un elemento pivote p.
Existen dos técnicas algorítmicas para hacer esta partición: elalgoritmo de Hoare y el algoritmo de particionamiento de Lomuto.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 16 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección, algoritmo de Lomuto
Utiliza un subarreglo A[l . . . r] donde 0 ≤ l ≤ r ≤ n− 1, con tres partes(posiblemente vacías):
Un segmento con elementos conocidos < pUn segmento con elementos conocidos ≥ pUn segmento con elementos por comparar
Iniciando en i = l + 1, el algoritmo recorre A[l . . . r] hacia la derechamanteniendo esta estructura hasta obtener una particiónEn cada iteración, compara el elemento A[i] en el segmento conelementos por comparar con p. Si A[i] ≥ p, se incrementa i. Si A[i] < p,se incrementa s, se intercambian A[i] y A[s] y se incrementa i
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 17 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección, algoritmo de Lomuto
Cuando no hay elementos sin procesar, se intercambian el pivote p yA[s]
Esto permite encontrar la partición buscada
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 18 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección, algoritmo de Lomuto
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 19 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección, algoritmo de Lomuto
¿Cómo puede resolverse el problema de selección (encontrar el k-ésimoelemento más pequeño) aprovechando la partición de una lista?
Asumamos que la lista es un arreglo (cero basado) y que s es el índicedel pivote p después de aplicar el algoritmo de Lomuto para encontrar lapartición.Si s = k− 1, entonces el problema fue resuelto porque el pivote p es elk-ésimo elemento más pequeñoSi s > k− 1, el k-ésimo elemento más pequeño del arreglo puedeencontrarse como el k-ésimo elemento más pequeño en la parteizquierda de la particiónSi s < k− 1, el k-ésimo elemento más pequeño del arreglo puedeencontrarse como el (k− s)-ésimo elemento más pequeño en la partederecha de la partición
Si no se resuelve el problema, este se reduce y puede resolverse usando elmismo enfoque de manera recursiva.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 20 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Problema de selección, algoritmo quickselect
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 21 / 22
Decrementa y vencerás II Algoritmos de decremento variable
Algoritmo quickselect, complejidad
Mejor caso
Cuando al hacer la primera partición (usando n− 1 comparaciones) seresuelve el problema
Cbest(n) = n− 1 ∈ Θ(n)
Peor casoCuando se producen particiones no balanceadas (una parte vacía y otra conn− 1 elementos) en las n− 1 iteraciones
Cworst(n) = (n− 1) + (n− 2) + · · ·+ 1 =n(n− 1)
2∈ Θ(n2)
Caso promedio
Cavg(n) = C(n/2) + (n− 1) ∈ Θ(n)
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 22 / 22