You are on page 1of 4

Facultad de Ciencias Exactas, Ingenier y Agrimensura a Escuela de Ciencias Exactas y Naturales Departamento de Computacion Estructuras de Datos

Prctica 2 a Sorting
1. Resuelve los siguientes enunciados sobre los algoritmos selection sort, insertion sort, bubble sort y Quicksort a) Estudiar la complejidad espacial y temporal en el peor caso y el mejor caso, junto con la estabilidad de cada algoritmo. b) Cul de los algoritmos es el ms eciente al aplicarse a un archivo ya ordenado? a a c) Cul de los algoritmos es el ms eciente al aplicarse a un archivo ordenado en orden a a inverso? 2. Sea un arreglo A con n elementos indexado a partir de 1 y key una clave. Se arma que el siguiente procedimiento devuelve T rue si y solo s la clave key se encuentra en el arreglo A. procedure search(A, n, key) l := 1; r := n; while r > l do p = (l + r) div 2; if (A[p] = key) return True; end if (A[p] < l = p + else r = p; end end if (A[l] = key) return True; end return False; end a) Bajo qu hiptesis es correcta la armacin? Justicar su respuesta. e o o b) Cmo se podr disminuir la cantidad de comparaciones que realiza el algoritmo? o a c) Podr eliminarse el bloque if al nal del algoritmo? a key) 1;

Prctica 2 a Sorting

Pgina 1 a

Estructuras de Datos

3. Estudiar qu efectos tienen sobre la correccin y la complejidad del algoritmo Radix sort las e o siguientes modicaciones en su funcionamiento: a) Uso de un algoritmo de ordenacin auxiliar inestable para ordenar cada columna. o b) Comenzar la ordenacin desde la columna con el d o gito ms signicativo. a 4. Demostrar que la complejidad temporal del algoritmo Radix sort es (d(n + k)), donde n es la cantidad de enteros a ordenar, d es el nmero de d u gitos de cada entero, y cada entero se encuentra en el intervalo [1..k]. 5. Supongamos que se extiende el pseudocdigo imperativo con todos los operadores bitwise o binarios estndar (&, |, <<, >>, ~) sobre la representacin de los enteros. Implementar Radix a o sort usando como columnas los d gitos binarios de dicha representacin, y estudiar su complejidad. o Nota: No est permitido cambiar la base de los nmeros. Se debe extraer cada d a u gito binario usando los operadores provistos. 6. Se tiene un arreglo A de dimensn n con claves dentro del conjunto {1, 2, . . . , k}. Se desea o ordenar ascendentemente sus elementos en un arreglo B pero no se tiene ningn mecanismo para u comparar claves entre s y slo se dispone de un arreglo C de dimensin k como espacio auxiliar. o o a) Construir un algoritmo en pseudocdigo imperativo que resuelva el problema. o b) Calcular el orden de complejidad temporal del algoritmo suponiendo que k = O(n). c) En clase se coment que el problema de ordenacin tiene orden de complejidad (n log n) (cota o o inferior). El orden calculado en el punto anterior, contradice ese resultado? 7. Sea el array E A S Y Q U E S T I O N : a) Cuantas comparaciones utiliza el ShellSort para lograr un array 7-sorted? b) Cuantas comparaciones utiliza el ShellSort para lograr un array 3-sorted? c) Cuantas comparaciones utiliza el ShellSort para lograr un array h-sorted sabiendo que el tamao del arreglo en de N elementos? n d) Cuantas comparaciones realizar el Quicksort en dicho array? e) Cuanto tarda el QuickSort al ordenar un array con todos sus elementos iguales? 8. Describir un mtodo general para transformar cualquier algoritmo de ordenacin inestable e o en uno estable. Qu desventajas tiene este mtodo desde el punto de vista de la complejidad e e espacial y temporal? 9. Sean A1 , A2 , . . . , Ak listas ordenadas ascendentemente con n elementos en total. Disee n e implemente un algoritmo que fusione las k listas en una unica lista B de tamao n ordenado n ascendentemente en tiempo O(n log k). 10. En los algoritmos Burbuja o Seleccin, el elemento ms pequeo de a[i..n] es colocado en o a n la posicin i mediante intercambios, para valores sucesivos de i. Otra posibilidad es colocar el o elemento mximo de a[1..j] en la posicin j, para valores de j entre n y 1. A este algoritmo a o se le denomina ordenacin por Ladrillos (Bricksort). Implementar dicho algoritmo y estudiar su o complejidad.

Prctica 2 a Sorting

Pgina 2 a

Estructuras de Datos

11. Una variante curiosa de los algoritmos anteriores resulta al combinar los mtodos de la e Burbuja y de los Ladrillos. La idea es ir colocando alternativamente el mayor valor de a[1..j] en a[j], y el menor valor de a[i..n] en a[i]. Implementar dicho algoritmo, conocido como Sacudidas (Shakersort), y estudiar su complejidad. 12. Realizar implementaciones iterativas para los procedimientos Quicksort y Mezcla. Estudiar sus complejidades (espacio y tiempo) y comparar los resultados con los obtenidos para las versiones recursivas. 13. Para el algoritmo de ordenacin Shellsort, dar un ejemplo que muestre que 2k, ..., 8, 4, 2, 1 o no es una buena secuencia de incrementos. 14. En el mtodo de ordenacin Quicksort: e o a) Qu ocurre si todos los elementos son iguales? e b) Cmo puede modicarse el algoritmo para optimizar este caso especial? o 15. Modicar el mtodo de Insercin de manera que use la bsqueda binaria para localizar e o u dnde introducir el siguiente elemento. Estudiar el impacto de esta mejora en la complejidad del o algoritmo y decidir si es rentable o no. 16. El algoritmo de ordenacin por Rastreo de un vector funciona de la siguiente manera: o comienza por el principio del vector y se mueve hacia el nal del vector, comparando los pares de elementos adyacentes hasta encontrar uno que no est en orden correcto. Lo intercambia y e comienza a moverse hacia el principio, intercambiando pares hasta encontrar un par en el orden correcto. Entonces se limita a cambiar de direccin y comienza otra vez hacia el nal del vector, o buscando de nuevo un par fuera de orden. Una vez que alcanza el extremo nal del vector, su misin ha terminado. Implementar dicho algoritmo y calcular su tiempo de ejecucin en los casos o o mejor, peor y medio. 17. En el mtodo de ordenacin por Mezcla, en vez de dividir el vector a[1..n] en dos mitades, e o podr amos dividirlo en tres subvectores de tamaos n , n+1 y n+2 , ordenarlos recursivamente, y n 3 3 3 luego combinarlos. Implementar este algoritmo, calcular su complejidad y compararlo con Mezcla. 18. Se quiere ordenar un arreglo utilizando el siguiente algoritmo de ordenacin: primero dividir o el arreglo como en merge sort hasta cierto nivel k de divisin, luego ordenar cada parte usando o insertion sort, y nalmente combinando todas las partes ya ordenadas usando merge. Cul es el a valor de k que minimiza el tiempo de ejecucin de todo el algoritmo en el peor y mejor caso? o 19. Sea la siguiente implementacion en Haskell del algoritmo de ordenacion Selection Sort: minl :: (Ord a) [a] a minl [x] = x minl (x:xs) = let y= minl xs in if x y then x else y delete :: (Eq a) a [a] [a] delete x [] = [] delete x (y:ys) | y == x = ys | otherwise = y : delete x ys ssort :: (Ord a) [a] [a] ssort [] = [] ssort xs@(_:_) = (minl xs) : ssort (delete (minl xs) xs)
Prctica 2 a Sorting Pgina 3 a

Estructuras de Datos

a) Cual es el orden de complejidad temporal y espacial de dicha implementacion? b) Se corresponde con el orden de complejidad de la implementacion vista en clase? c) Puede mejorarla en algun aspecto? (Ayuda: piense en una funcion que calcule el m nimo y elimine una ocurrencia del mismo en una sola pasada por la lista) 20. Sea la siguiente implementacion en Haskell del algoritmo de ordenacion Insert Sort: isort :: (Ord a) [a] [a] isort [] = [] isort (x: xs) = insert x (isort xs) where insert x [] = [x] insert x (y:ys) | x > y = y : insert x ys | otherwise = x : y : ys a) Cual es el orden de complejidad temporal y espacial de dicha implementacion? b) Se corresponde con el orden de complejidad de la implementacion vista en clase? c) Puede mejorarla en algun aspecto? (Ayuda: piense en una funcion que calcule el m nimo y elimine una ocurrencia del mismo en una sola pasada por la lista) 21. Sea la siguiente implementacin en Haskell del algoritmo de ordenacin Merge Sort: o o merge :: (Ord t) [t] [t] [t] merge [] ys = ys merge xs [] = xs merge l1@(x:xs) l2@(y:ys) | x < y = x : merge xs l2 | otherwise = y : merge l1 ys msort :: (Ord a) [t] [a] msort [] = [] msort xs = let n = length xs div 2 in merge (msort (take n xs)) (msort (drop n xs)) a) Funciona?. Justique su respuesta. b) Cul es el orden de complejidad temporal y espacial de dicha implementacin? a o c) Se corresponde con el orden de complejidad de la implementacin vista en clase? o

Prctica 2 a Sorting

Pgina 4 a

You might also like