Está en la página 1de 39

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Sorting
Mat as Barbeito
Algoritmos y Estructuras de Datos II DC - FCEN - UBA

Primer Cuatrimestre 2010

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

Aclaraciones sobre Heap Sort

Qu e complejidad tiene 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

Aclaraciones sobre Heap Sort

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

Aclaraciones sobre Heap Sort


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)? S , ya que eso cuesta O(n log n). Igualmente, aunque no inuya en la complejidad te orica nal, s lo hace en la pr actica. Es un ejemplo de c omo usar inteligentemente una estructura de datos. Es muy eciente para arreglos y no requiere memoria adicional.
Mat as Barbeito Sorting

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)

Las funciones izquierda y derecha devuelven la mitad correspondiente de una secuencia.


Mat as Barbeito Sorting

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

Aclaraciones sobre Merge Sort

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

Aclaraciones sobre Merge Sort

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

Aclaraciones sobre Quick Sort

Qu e complejidad tiene 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

Aclaraciones sobre Quick Sort

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

Aclaraciones sobre Quick Sort

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

Qu e quiere decir esto en castellano?

Mat as Barbeito

Sorting

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Cota inferior para algoritmos de ordenamiento

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

Enunciado del Ejercicio

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

En menos que n log n? ESH IMPOSHIIIBLE !!!

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

En menos que n log n? ESH IMPOSHIIIBLE !!!


Pero, pero... No era que no exist a un algoritmo para ordenar de complejidad menor a O(n log n) en el peor caso?

NO, lo que no existe es uno basado en comparaciones.

Mat as Barbeito

Sorting

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Pensando el algoritmo ...

Podemos usar algo de lo que ya vimos?

Mat as Barbeito

Sorting

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Pensando el algoritmo ...

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

Pensando el algoritmo ...

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

Idea del algoritmo

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

Idea del algoritmo

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

Idea del algoritmo

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)

La funci on max busca el mayor elemento en un arreglo de nat.


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 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

Contar tiene una complejidad en el peor caso de O(n).

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

Aclaraciones sobre Counting Sort

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

Aclaraciones sobre Counting Sort


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? Porque no nos olvidemos que sab amos que los n umeros a ordenar estaban acotados por una constante. Esto no sucede siempre. En particular, si O(m) > O(n) el algoritmo pierde su rapidez, y puede llegar a consumir una cantidad muy grande de memoria.
Mat as Barbeito Sorting

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Parcial del 1er cuatrimestre de 2009


Se desean ordenar los datos generados por un sensor industrial que monitorea la presencia de una determinada sustancia en un proceso qu mico. Cada una de estas mediciones es un n umero entero positivo. Dada la naturaleza del proceso se sabe que, dada una secuencia de n mediciones, a lo sumo n valores est an fuera del rango [20, 40]. Proponer un algoritmo que permita ordenar ascendentemente una secuencia de mediciones con las caracter sticas anteriores y cuya complejidad temporal sea O(n) en el peor caso, donde n es la longitud de la secuencia. Mostrar que la complejidad del algoritmo propuesto es O(n) en el peor caso, justicando claramente su respuesta.
Mat as Barbeito Sorting

Repaso de algoritmos de sorting Lower bound para algoritmos de ordenamiento Sorting sin comparaciones Ejercicio de Parcial

Segunda parte del ejercicio


Se desean ordenar los datos generados por un sensor industrial que monitorea la presencia de una determinada sustancia en un proceso qu mico. Cada una de estas mediciones es un n umero entero positivo. Dada la naturaleza del proceso se sabe que, dada una secuencia de n mediciones, a lo sumo n valores est an fuera del rango [20, 40]. Suponer que se cuenta con un registro hist orico de n mediciones ordenado ascendentemente (pero no se tiene informaci on de la distribuci on de los datos) y una secuencia n valores que se distribuyen como en el ordenada de primer inciso. Proponer un algoritmo que permita mostrar por pantalla en orden ascendente los n + n elementos y cuya complejidad temporal sea O(n) en el peor caso. Mostrar que la complejidad del algoritmo es O(n).
Mat as Barbeito Sorting

También podría gustarte