Quicksort Ordenamiento rápido - Benemérita Universidad Autónoma

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