La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Ordenación rápida (QuickSort) Maria Marlene Pech Keb Candelaria de Jesus Pech Dzul.

Presentaciones similares


Presentación del tema: "Ordenación rápida (QuickSort) Maria Marlene Pech Keb Candelaria de Jesus Pech Dzul."— Transcripción de la presentación:

1 Ordenación rápida (QuickSort) Maria Marlene Pech Keb Candelaria de Jesus Pech Dzul

2 Este método fue inventado por C.A.R. Hoare a comienzos de los '60s, y sigue siendo el método más eficiente para uso general. Se le conoce como método rápido y de ordenación por partición. Quicksort es un ejemplo clásico de la aplicación del principio de dividir para reinar. Su estructura es la siguiente: Primero se elige un elemento al azar, que se denomina el pivote. El arreglo a ordenar se reordena dejando a la izquierda a los elementos menores que el pivote, el pivote al medio, y a la derecha los elementos mayores que el pivote: ORDENACIÓN RÁPIDA (QUICKSORT)

3 - Usar el primer elemento del vector: esta solución funciona bien cuando la entrada es completamente aleatoria, pero será muy deficiente si la entrada está ordenada (O(n2)), también será muy deficiente si la entrada está parcialmente ordenada (este caso se da frecuentemente). - Pivote aleatorio: es más seguro que la alternativa anterior, pero tiene los inconvenientes de la generación de los números aleatorios, ya que si estos son de buena calidad es una operación costosa. - Mediana de 3: se trata de calcular la mediana de 3 elementos del vector. Lo ideal sería poder calcular la mediana de todos los elementos, de esta forma sería lo más balanceado posible, pero esto es muy costoso, por lo que calculando la mediana de 3 elementos podemos evitar de manera eficiente el peor caso. T[i] (primer elemento) T[j] (último elemento) T[(i+j) div 2]

4 1.- i=izq j=der pivote= a[(izq + der)/2] 2.- hacer mientras (a[i]pivote)j si i< j Entonces aux= a[i] a[i]=a[j] a[j]=aux i+ + j - - fin del paso fin del paso mientras i<=j 4.- si izq

5 Algoritmo iterativo Se puede aumentar la velocidad de ejecución eliminando la llamada recursiva. La eficiencia de ejecución es un factor muy importante en un proceso de ordenación.

6 RAPIDO ITERATIVO {TOP, INI, Fin y POS(Son variables de tipo entero. Pilamenor y pila mayor son arreglos unidimensionales 1.- hacer TOP=1, Pilamenor[TOP]=1 y Pilamayor[TOP]=n 2.- repetir mientras (TOP>0) hacer INI=Pilamenor[TOP] FIN=Pilamayor[TOP] TOp=TOp -1; Llamar al algoritmo reduceiterativo con INI, FIN, POS si INI (POS+1)entonces TOP=TOP+1 Pilamenot[TOP]=POS+1 Pilamayor[TOP]=FIN 2.4.-{fin condiconal del paso 2.3} 3.- {fin del ciclo del paso 2} RAPIDO ITERATIVO {TOP, INI, Fin y POS(Son variables de tipo entero. Pilamenor y pila mayor son arreglos unidimensionales 1.- hacer TOP=1, Pilamenor[TOP]=1 y Pilamayor[TOP]=n 2.- repetir mientras (TOP>0) hacer INI=Pilamenor[TOP] FIN=Pilamayor[TOP] TOp=TOp -1; Llamar al algoritmo reduceiterativo con INI, FIN, POS si INI (POS+1)entonces TOP=TOP+1 Pilamenot[TOP]=POS+1 Pilamayor[TOP]=FIN 2.4.-{fin condiconal del paso 2.3} 3.- {fin del ciclo del paso 2} Reduce iterativo {IZQ, DER, AUX variable de tipo entero. BAND es de tipo booleano hacer IZQ=INI, DER=FIN, POS=INI y BAND=TRUE repetir mientras (BAND=TRUE) repetir mientras (A[POS]<=A[DER]) y (POS != DER) hacer DER=DER-1 {fin condicional del paso 2.1} Si POS=DER entonces BAND=FALSE Si no Hacer AUX=A[POS] A[ POS]=A[DER] A[DER]=AUX POS=DER repetir mientras(A[POS]>=A[IZQ]) Y POS != IZQ Hacer IZQ=IZQ {fin del ciclo del paso 2.3.1} si POS=IZQ Entonces BAND =false Si no Hacer AUX=A[POS] A[POS]=A[IZQ] A[IZQ]=AUX POS=IZQ {fin del ciclo condicional del paso 2.3.3} 2.4 {fin del condicional del paso 2.3} {fin del ciclo del paso 2}

7 Para el peor caso (el pivote es siempre el menor (mayor)) tiene una complejidad cuadrática (O(n 2 )). En el mejor caso (el pivote es siempre la mediana) si tiene una complejidad O(n log n). La complejidad del QuickSort es O(n log n). ANALISIS DE EFICIENCIA

8 COSTO PROMEDIO Si suponemos, como una primera aproximación, que el pivote siempre resulta ser la mediana del conjunto, entonces el costo de ordenar está dado (aproximadamente) por la ecuación de recurrencia (n) = n + 2 a(n/2) Esto tiene solución a(n) = n log2 n y es, en realidad, el mejor caso de Quicksort. Para analizar el tiempo promedio que demora la ordenación mediante Quicksort, observemos que el funcionamiento de Quicksort puede graficarse mediante un árbol de partición: P >P


9 PEOR CASO El peor caso de Quicksort se produce cuando el pivote resulta ser siempre el mínimo o el máximo del conjunto. En este caso la ecuación de recurrencia es a(n) = n a(n-1) lo que tiene solución a(n) = O(n 2 ). Si bien este peor caso es extremadamente improbable si el pivote se escoge al azar, algunas implementaciones de Quicksort toman como pivote al primer elemento del arreglo (suponiendo que, al venir el arreglo al azar, entonces el primer elemento es tan aleatorio como cualquier otro). El problema es que si el conjunto viene en realidad ordenado, entonces caemos justo en el peor caso cuadrático. Lo anterior refuerza la importancia de que el pivote se escoja al azar. Esto no aumenta significativamente el costo total, porque el número total de elecciones de pivote es O(n).


Descargar ppt "Ordenación rápida (QuickSort) Maria Marlene Pech Keb Candelaria de Jesus Pech Dzul."

Presentaciones similares


Anuncios Google