En el capítulo previo estudiamos el funcionamiento del método de ordenamiento QuickSort. Aquí presentaremos el pseudocódigo del algoritmo así como también realizaremos el análisis de complejidad temporal del mismo.
Pseudocódigo
QUICKSORT
Entrada: S -> secuencia de enteros.
Salida: S -> la misma secuencia ordenada.
si longitud(S) > 1
p <- pivot(S)
S1 <- crearVector(p - 1)
S2 <- crearVector(longitud(S) - p)
S1 <- S[1... p - 1]
S2 <- S[p + 1... longitud(S)]
S1 <- QuickSort(S1)
S2 <- QuickSort(S2)
S <- S1 + S[p] + S2
fin si
devolver S
fin QUICKSORT
El pseudocódigo para el método pivot es el siguiente
PIVOT
Entrada: S -> secuencia de enteros.
Salida: p -> posición del elemento utilizado para pivotear.
p <- S[1]
k <- 2
t <- longitud(S)
mientras S[k] <= p y k < longitud(S)
k <- k + 1
fin mientras
mientras S[t] > p
t <- t - 1
fin mientras
mientras k < t
aux <- S[k]
S[k] <- S[t]
S[t] <- aux
mientras S[k] <= p
k <- k + 1
fin mientras
mientras S[t] > p
t <- t - 1
fin mientras
fin mientras
aux <- S[1]
S[1] <- S[t]
S[t] <- aux
devolver t
fin PIVOT
Análisis de Complejidad Temporal
Analizando el método pivot en primera instancia podemos ver que su costo es de O(n) ya que los "mientras" anidados tienen como restricción el "mientras" principal. A su vez, el método QuickSort posee dos llamadas recursivas.
Dependiendo la ubicación del pivot (ya habíamos visto que cuanto más cerca del elemento mediano mayor eficiencia tendría el método), si el mismo cae cerca del centro de la cadena, el análisis de costos es el siguiente:
Se tiene que a = 2, b = 2 y k = 1 lo que finalmente da lugar a un costo O(n*log(n)) al igual que el método MergeSort.
Por el contrario, si el pivot cae cerca de alguno de los extremos (el peor caso), tenemos
Aquí a = 1, b = 1 y k = 1 (estamos en el Caso 1 de los métodos recursivos) dando una complejidad de O(n2).
En el peor de los casos, este algoritmo es menos eficiente que MergeSort. Cabe mencionar que en situaciones de la vida cotidiana, donde los datos tienen una distribución aleatoria (cualquiera de los ordenamientos es igualmente probable), se puede demostrar (está fuera de los alcances de este curso) que si bien el orden es igual para ambos algoritmos en el caso promedio, el tiempo de ejecución es menor para QuickSort.
Fuentes:
Programación III - Apuntes de Cátedra. Cuadrado Estrebou, María Fernanda. Trutner, Guillermo Hernán.
No hay comentarios:
Publicar un comentario