Quicksort Ordenamiento rápido Análisis y diseño de Algoritmos Dr. Ivo H. Pineda Torres Facultad de Ciencias de la Computación Benemérita Universidad Autónoma de Puebla Enero 2012 Ordenamiento Rápido algoritmo que tiene un desemepño pobre pero en sistemas con memoria virtual trabaja mejor pues el ordenmiento tiene lugar en el momento. Es un algoritmo que está basado en el paradigma de diseño Divide y Vencerás. Divide el arreglo (reacomoda) A[p..r ] en dos subarreglos A[p..q − 1]yA[q + 1..r ] de manera que cada elemento de A[p..q − 1] es menor o igual a A[q], el cual a su vez es menor o igual a cada elemento de A[q + 1..r ]. Calcular el índice q es parte del procedimiento partición. Conquista Ordenano los subarreglosA[p..q − 1] y A[q + 1..r ] mediante llamadas recursivas a quicksort. Combina Dado que los subarreglos son ordenados en el lugar, no se necesita combinarlos pues el arreglo A[p..r ] ya está 2 of 9 ordenado. Implementación de Quicksort QUICKSORT(A, p, r) 1 if p < r 2 then q ← PARTITION(A, p, r) 3 QUICKSORT(A, p, q - 1) 4 QUICKSORT(A, q + 1, r) PARTITION(A, p, r) 1 x ← A[r ] 2i←p-1 3 for j ← p to r − 1 4 do if A[j] ≤ x 5 then i ← i + 1 6 cambia A[i] ↔ A[j] 7 cambia A[i + 1] ↔ A[r ] 8 return i + 1 comportamiento de Quicksort Peor Caso • Depende de como se realice la partición , la cual puede ser de alguna manera desbalanceada. comportamiento de Quicksort Peor Caso • Depende de como se realice la partición , la cual puede ser de alguna manera desbalanceada. • Produciendo un subproblema de tamaño (n − 1) elementos y otro subproblema con 0 elementos. comportamiento de Quicksort Peor Caso • Depende de como se realice la partición , la cual puede ser de alguna manera desbalanceada. • Produciendo un subproblema de tamaño (n − 1) elementos y otro subproblema con 0 elementos. • Para efectos de nuestro problema vamos a asumir que cada llamada recursiva genera particiones no balanceadas, cada partición tendrá un costo de θ(n) comportamiento de Quicksort Peor Caso • Depende de como se realice la partición , la cual puede ser de alguna manera desbalanceada. • Produciendo un subproblema de tamaño (n − 1) elementos y otro subproblema con 0 elementos. • Para efectos de nuestro problema vamos a asumir que cada llamada recursiva genera particiones no balanceadas, cada partición tendrá un costo de θ(n) • y dado que el efecto de una llamada recursiva en un sub arreglo de tamaño cero toma T (0) = θ(1), por lo que la ecuación de recurrencia será: comportamiento de Quicksort. cont T (n) = T (n − 1) + T (0) + θ(n) = T (n − 1) + θ(n) = n X θ(k) k=1 n X = θ( k)Serie aritmética k=1 2 = θ(n ) El peor caso tiene orden cuadrático. comportamiento de Quicksort. Mejor caso • Se logra cuando se generan particiones balanceadas, es decir que cada una es de un tamaño no mayor a n/2, comportamiento de Quicksort. Mejor caso • Se logra cuando se generan particiones balanceadas, es decir que cada una es de un tamaño no mayor a n/2, • lo que equivale a que una es bn/2c y otra dn/2e − 1. comportamiento de Quicksort. Mejor caso • Se logra cuando se generan particiones balanceadas, es decir que cada una es de un tamaño no mayor a n/2, • lo que equivale a que una es bn/2c y otra dn/2e − 1. • Por lo que la función de recurrencia es conocida como T (n) ≤ 2T (n/2) + θ(n). comportamiento de Quicksort. Mejor caso • Se logra cuando se generan particiones balanceadas, es decir que cada una es de un tamaño no mayor a n/2, • lo que equivale a que una es bn/2c y otra dn/2e − 1. • Por lo que la función de recurrencia es conocida como T (n) ≤ 2T (n/2) + θ(n). • y esto tiene un orden θ(nlgn) que sería el caso del algoritmo Mezcla y Ordena. comportamiento de Quicksort. caso especial • suponga que el algoritmo de partición la realiza en una proporción de 9 a 1. comportamiento de Quicksort. caso especial • suponga que el algoritmo de partición la realiza en una proporción de 9 a 1. • la ecuación de recurrencia será T (n) ≤ T (9n/10) + T (n/10) + cn comportamiento de Quicksort. caso especial • suponga que el algoritmo de partición la realiza en una proporción de 9 a 1. • la ecuación de recurrencia será T (n) ≤ T (9n/10) + T (n/10) + cn • si siempre se realiza esta partición de manera constante a pesar de ser desbalanceada. comportamiento de Quicksort. caso especial • suponga que el algoritmo de partición la realiza en una proporción de 9 a 1. • la ecuación de recurrencia será T (n) ≤ T (9n/10) + T (n/10) + cn • si siempre se realiza esta partición de manera constante a pesar de ser desbalanceada. • asumimos que se ejecuta en O(nlogn). comportamiento de Quicksort. caso especial • suponga que el algoritmo de partición la realiza en una proporción de 9 a 1. • la ecuación de recurrencia será T (n) ≤ T (9n/10) + T (n/10) + cn • si siempre se realiza esta partición de manera constante a pesar de ser desbalanceada. • asumimos que se ejecuta en O(nlogn). • veamos como es gráficamente Figura: Ejemplo de Quicksort Desbalanceado