Ordenación rápida (QuickSort)

Slides:



Advertisements
Presentaciones similares
El tamaño asignado para cada partición es el mismo. Cada partición, será ocupada por un proceso de menor o igual tamaño. El programador debe diseñar el.
Advertisements

ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
Resolución aproximada de ecuaciones Ejemplos
Tema 4 TRANSFORMADA Z..
Diseño y análisis de algoritmos
Infiltracion Generalidades.
IBD Clase 7.
Problemas Resueltos de Límites de Funciones
Problemas Resueltos sobre Reglas de cálculo de Límites
Generación de Números Seudo-Aleatorios
ALGORITMOS DE ORDENAMIENTO
Unidad 1: ECUACIONES DIFERENCIALES DE PRIMER ORDEN
Sistemas de Control en Tiempo Discreto
Las estructuras de arreglos fueron usadas en las primeras computadoras digitales, cuando la programación se hacía todavía en lenguaje máquina, para tablas.
ORDENACION POR EL METODO DE LA SACUDIDA (SHAKER SORT)
ÁRBOLES BINARIOS DE BUSQUEDA
Tema 1: Programación dinámica
Son problemas secuenciales: El problema se puede dividir en etapas. Definición: Método que permite determinar de manera eficiente las decisiones que optimizan.
Bloque 2: Divide y Vencerás
PROGRAMACION DE ESTRUCTURAS DE DATOS
IBD Plan 2003 Clase 4. UNLP - Facultad de InformáticaIBD - CLASE 4 2 Archivos - Búsqueda Búsqueda de información (costo) # de comparaciones (operaciones.
Estructuras matemáticas del método de elementos finitos
PROGRAMA DE ALGEBRA LINEAL
METODO DE ORDENAMIENTO POR SELECCIÓN.
Solución de problemas por búsqueda inteligente
Integrantes: Esteban Jiménez Guesseppe Lozada Mario Rodriguez Gustavo Tenorio Fabio.
Recurrencia Programación II 3-4 de febrero de 2009.
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
2- SIMPLEX.
GABIELA ORTEGA VAZQUEZ MARIA DE JESUSU MONTALVO MTV.
M.C. Yalu Galicia Hdez. (FCC/BUAP)
Resolución de Problemas Método Simplex
Programación Lineal Unidad 1 Parte 3.
Campo de direcciones de la E.D.O. de primer orden: y’=f(x,y)
Algoritmos para Ordenar datos
Resolver el siguiente sistema de ecuaciones por el método de gauss jordan
(Organización y Manejo de Archivos)
Continuación Unidad 3 Generación de variables aleatorias.
Divide y vencerás 1. Método general.
INTRODUCCIÓN ECUACIONES DE MAXWELL Hacia 1860, James Clerk Maxwell dedujo que las leyes fundamentales de la electricidad y el magnetismo podían resumirse.
INSTITUTO TECNOLOGICO DE APIZACO
Distribución Normal Distribución Normal
Quicksort Expositores: Mancera Hernández Yves Alejandro Murillo Sánchez Cesar Silva Cobos Andrés Alfredo.
Capítulo 7 Gestión de memoria.
María Camila Torres Quiroz 10 informática 2 CEFA 2012
Simular: Representar una cosa, fingiendo o imitando lo que no es.
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
Análisis y Diseño de Algoritmos
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
Algoritmos de Ordenamiento y Complejidad
Procesamiento Digital de Imágenes
Estructura de Datos M.C. J. Andrés V. F. FCC/BUAP
Muchas veces ha sucedido que una chica queda accidentada en carretera y nadie presta ayuda por temor a ser robado y más aún en la forma como esta chica.
Ordenamiento en lenguaje c
Quick Sort Estructuras de Datos Universidad Autónoma de Tlaxcala Unidad Académica Multidisciplinaria 14 de Septiembre de 2012.
Matriz inversa Método Gauss Jordan.
Números Complejos.
METODOS DE BUSQUEDA EN C++ Oscar Michel Ruiz León
Muestreo de Aceptación
Hoja de Cálculo EXCEL Introducción a la informática
DIVISIÓN DE POLINOMIOS 2
CALCULO INTEGRAL (ARQ)
Árboles Binarios de Búsqueda (ABB)
TEMA: ENFOQUES EN EL ANALISIS Y DISEÑO DE SISTEMAS DE TRABAJO
ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández
Análisis cinemático: ACELERACION

Fundamentos de Computación
Representación de la Información en el Computador Prof. Manuel B. Sánchez.
1 Tema 10: Administración de la Memoria Sistemas Operativos (Tema 13 en apuntes prof. Rovayo)
Transcripción de la presentación:

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

ORDENACIÓN RÁPIDA (QUICKSORT) 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:

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

ALGORITMO RECURSIVO 1.- i=izq j=der pivote= a[(izq + der)/2] 2.- hacer 2.1.- mientras (a[i]<pivote)i+ + 2.2.- mientras(a[j]>pivote)j-- 2.2.1.- si i< j Entonces aux= a[i] a[i]=a[j] a[j]=aux i+ + j - - fin del paso 2.2.1 fin del paso 2 3.- mientras i<=j 4.- si izq<j entonces quicksort(a, izq, j) 5.- si i<der entonces quicksort(a, i, der) fin ALGORITMO RECURSIVO http://www.it.uc3m.es/java/ordenacion/QuickSort.html

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.

RAPIDO ITERATIVO {TOP, INI, Fin y POS‘(Son variables de tipo entero 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 2.1.- si INI<(POS-1) entonces TOP=TOP+1 Pilamenor[TOP]=INI Pilamayor[TOP]=POS-1 2.2 {fin condicional del paso 2.1} 2.3.- Si fin>(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 2.3.1 repetir mientras(A[POS]>=A[IZQ]) Y POS != IZQ Hacer IZQ=IZQ+1 2.3.2 {fin del ciclo del paso 2.3.1} 2.3.3 si POS=IZQ Entonces BAND =false Hacer AUX=A[POS] A[POS]=A[IZQ] A[IZQ]=AUX POS=IZQ 2.3.4 {fin del ciclo condicional del paso 2.3.3} 2.4 {fin del condicional del paso 2.3} {fin del ciclo del paso 2}

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

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

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 - 1 + a(n-1) lo que tiene solución a(n) = O(n2). 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).