Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sorting
Mat as Barbeito
Algoritmos y Estructuras de Datos II DC - FCEN - UBA
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
El plato del d a:
Repasar algunos algoritmos de ordenamiento vistos en la clase te orica: Heap sort, Merge sort y Quick sort. Revisar la cota inferior para los algoritmos de sorting basados en comparaciones. Ver un nuevo algoritmo de sorting que no se basa en comparaciones. Resolver un ejercicio de parcial. ... y m as ...
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Heap Sort
Pseudoc odigo de Heap Sort HeapSort(inout a : Arreglo(int)) 1 var h : Heap, i : int 2 h array 2heap(a) 3 for i tam(a) 1 to 0 4 max proximo(h) 5 desencolar(h) 6 a[i] max
array 2heap es la funci on para transformar un arreglo en un heap basada en el algoritmo de Floyd.
Mat as Barbeito Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Qu e complejidad tiene en el peor caso? O(n log n) Tendr a la misma complejidad si no se usara la funci on array 2heap, y se generara el heap a lo bruto (es decir, insertando uno a uno los elementos del arreglo en un heap)?
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Merge Sort
Pseudoc odigo de Merge Sort MergeSort(inout a : Secu(int)) 1 var der, izq : Secu(int); i, m : int 2 if (long (a) > 1) 3 then 4 izq M ergeSort(izquierda(a)) 5 der M ergeSort(derecha(a)) 6 a M erge(izq, der)
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Merge Sort 2
Pseudoc odigo de la funci on Merge Merge(in a : Secu(int), in b : Secu(int)) res : Secu(int) 1 res vacia 2 while (long (a) > 0 long (b) > 0) 3 if (prim(a) > prim(b)) 4 then 5 ag (prim(b), res) 6 else 7 ag (prim(a), res) 8 concat(res, a) 9 concat(res, b)
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Es un ejemplo cl asico de un algoritmo que utiliza la t ecnica de Divide and Conquer. Es muy eciente para listas, ya que no necesita memoria adicional. Qu e complejidad tiene en el peor caso? Hay que usar ecuaciones de recurrencia o el Teorema Maestro para una demostraci on formal, aunque para tener una idea hay formas m as simples de pensarlo.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Es un ejemplo cl asico de un algoritmo que utiliza la t ecnica de Divide and Conquer. Es muy eciente para listas, ya que no necesita memoria adicional. Qu e complejidad tiene en el peor caso? Hay que usar ecuaciones de recurrencia para una demostraci on formal, aunque para tener una idea hay formas m as simples de pensarlo. En la te orica probaron que es O(n log n)
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Quick Sort
Pseudoc odigo de Quick Sort QuickSort(inout a : Secu(int)) 1 var izq, der : Secu(int); pivot : int 2 if (long (a) > 1) 3 then 4 pivot elegirP ivot(a) 5 while (esV acia?(a)) 6 if (prim(a) > pivot) 7 then 8 ag (prim(a), der) 9 else 10 ag (prim(a), izq ) 11 a f in(a) 12 a concat(QuickSort(izq ), QuickSort(der))
Mat as Barbeito Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Qu e complejidad tiene en el peor caso? O(n2 ) Sin embargo, en general en la pr actica funciona incluso mejor que Merge sort y Heap sort, Por qu e?
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Qu e complejidad tiene en el peor caso? O(n2 ) Sin embargo, en general en la pr actica funciona incluso mejor que Merge sort y Heap sort, Por qu e? Porque en el caso promedio la complejidad es O(n log n). El peor caso se puede mejorar mucho con la forma en que elegimos el pivot. Por ejemplo, si lo elegimos al azar la probabilidad de caer en el peor caso se reduce notablemente (m as sobre esto en Algo 3).
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Lower bound
En la te orica se demostr o que la cota inferior de la complejidad en el peor caso para los algoritmos de ordenamiento basados en comparaciones es O(n log n).
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Lower bound
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Qu e quiere decir esto en castellano? Signica que no existe ning un algoritmo de sorting basado en comparaciones que tenga una complejidad mejor que O(n log n) en el peor caso.
Mat as Barbeito Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Sea A[1 . . . n] un arreglo de n n umeros naturales en rango (cada elemento est a en el rango de 1 a m, siendo m alguna constante). Dise ne un algoritmo que ordene esta clase de arreglos en tiempo lineal en el peor caso. Demuestre que la cota temporal es correcta.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pero, pero... No era que no exist a un algoritmo para ordenar de complejidad menor a O(n log n) en el peor caso?
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Podemos usar algo de lo que ya vimos? No, si queremos lograr ordenar el arreglo en orden lineal en el peor caso, no podemos usar un algoritmo basado en comparaciones (es decir, ninguno de los que vimos hasta ahora).
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Podemos usar algo de lo que ya vimos? No, si queremos lograr ordenar el arreglo en orden lineal en el peor caso, no podemos usar un algoritmo basado en comparaciones (es decir, ninguno de los que vimos hasta ahora). Esto ser a imposible si no supieramos nada sobre los elementos del arreglo. Pero en este caso nos dicen que todos est an entre 1 y m (con m constante). Vamos a tener que usar eso de alguna forma. Pensemos c omo.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Podemos usar un arreglo auxiliar aux de tama no m, donde en cada posici on i se guarde la cantidad de repeticiones del n umero i + 1 en el arreglo original A.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Podemos usar un arreglo auxiliar aux de tama no m, donde en cada posici on i se guarde la cantidad de repeticiones del n umero i + 1 en el arreglo original A. Entonces, vamos recorriendo el arreglo A y sumamos uno al elemento que corresponda en aux.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Podemos usar un arreglo auxiliar aux de tama no m, donde en cada posici on i se guarde la cantidad de repeticiones del n umero i + 1 en el arreglo original A. Entonces, vamos recorriendo el arreglo A y sumamos uno al elemento que corresponda en aux. Luego, leemos aux desde la posici on 0 hasta n 1, sobreescribiendo A (para no usar m as memoria) seg un corresponda. Este algoritmo de ordenamiento se llama Counting Sort.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pseudocodeando 1
Pseudoc odigo de Counting Sort CountingSort(inout A : Arreglo(nat), in n : nat) 1 var aux : Arreglo(nat); m, i : nat 2 m max(A, n) 3 aux Arreglo(m) 4 for (i 0 to m 1) 5 aux[i] 0 6 Contar(A, n, aux) 7 Extender(aux, m, A)
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pseudocodeando 2
Pseudoc odigo de Contar Contar(inout a : Arreglo(nat), in n : nat, in c : Arreglo(nat)) 1 var i, pos : nat 2 for (i 0 to n 1) 3 pos a[i] 1 4 c[pos] c[pos] + 1
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pseudocodeando 2
Pseudoc odigo de Contar Contar(inout a : Arreglo(nat), in n : nat, in c : Arreglo(nat)) 1 var i, pos : nat 2 for (i 0 to n 1) 3 pos a[i] 1 4 c[pos] c[pos] + 1
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pseudocodeando 3
Pseudoc odigo de Extender Extender(inout c : Arreglo(nat), in m : nat, in a : Arreglo(nat)) 1 var i, j : nat 2 j0 3 for (i 0 to m 1) 4 while (c[i] > 0) 5 a[j ] i + 1 6 j j+1 7 c[i] c[i] 1
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Pseudocodeando 3
Pseudoc odigo de Extender Extender(inout c : Arreglo(nat), in m : nat, in a : Arreglo(nat)) 1 var i, j : nat 2 j0 3 for (i 0 to m 1) 4 while (c[i] > 0) 5 a[j ] i + 1 6 j j+1 7 c[i] c[i] 1
En el peor caso, el while se ejecuta n veces y el f or m. Entonces, Extender tiene complejidad O(n + m) en el peor caso.
Mat as Barbeito Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Demostraci on de la complejidad
Las complejidades en el peor caso de Contar y de Extender son O(n) y O(n + m) respectivamente.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Demostraci on de la complejidad
Las complejidades en el peor caso de Contar y de Extender son O(n) y O(n + m) respectivamente. Adem as, el f or de CountingSort tiene complejidad O(m) en el peor caso.
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Demostraci on de la complejidad
Las complejidades en el peor caso de Contar y de Extender son O(n) y O(n + m) respectivamente. Adem as, el f or de CountingSort tiene complejidad O(m) en el peor caso. Luego, la complejidad de CountingSort en el peor caso es O(n + m).
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Demostraci on de la complejidad
Las complejidades en el peor caso de Contar y de Extender son O(n) y O(n + m) respectivamente. Adem as, el f or de CountingSort tiene complejidad O(m) en el peor caso. Luego, la complejidad de CountingSort en el peor caso es O(n + m). Pero como, seg un el enunciado, m es alguna constante, entonces se reduce a O(n).
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
No rompe con la cota inferior para algoritmos de sorting que se demostr o en la te orica porque no est a basado en comparaciones. De hecho, nunca compara dos n umeros que se deseen ordenar. Si es mejor que Merge, Heap y Quick, por qu e no se usa directamente este?
Mat as Barbeito
Sorting
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial
Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial