Trabajo de Investigación - QuickSort
May 14, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Trabajo de Investigación - QuickSort...
Description
Ordenamiento de Vectores Método QuickSort
Carolina Escobar Restrepo Melissa Escobar Restrepo Evelyn Quinchia Velásquez
Fundamentos Profesora!" ###
$niversidad %%% Medell&n' ()*+
Contenido
,ntroducci-n..........................................................................................................( /eneralidades........................................................................................................0 Qu1 es un al2oritmo............. al2oritmo...................... ................. ................. ................. ................. ................. ....................................0 ............................0 Qu1 es un vector.................................................................................................0 3ipos de al2oritmos de ordenamiento................ ordenamiento......................... ............................... ...........................................0 .....................0 4l2oritmos basados en m1todos iterativos".......... iterativos".................. ................. ................. ................. ................. .................0 .........0 4l2oritmos basados en m1todos recursivos.............. recursivos...................... ................. ................. ................ ......................0 ..............0 M1todo Quic5sort 6rdenamiento Rápido!............... Rápido!....................... ................. ..........................................7 .................................7 4l2oritmo fundamental.........................................................................................7 Caracter&sticas del al2oritmo Quic58ort.............. Quic58ort....................... ................. ................. ...................................7 ..........................7 El al2oritmo es el si2uiente".............. si2uiente"...................... ................. ................. ..................................................+ ..........................................+ 9ia2rama de flu:o ordenamiento rápido................. rápido......................... ................. ................. ................ ................. ................; .......; 9escripci-n del al2oritmo.............. al2oritmo....................... ................. ................ ................. ................. .....................................< .............................< =C-mo ele2imos el pivote>................ pivote>........................ ................ ................. ................. ..........................................< ..................................< 4nálisis del al2oritmo...........................................................................................< Comple:idad computacional del Quic5sort.............. Quic5sort...................... ................. ................. ................. ........................? ...............? Comparaci-n de tiempos.............. tiempos...................... ................. ................. ................ ................. ................. ..............................@ ......................@ Eli2iendo el pivote............... pivote........................ ................. ................. ................. ................ ................. ................. .............................@ .....................@ Pseudoc-di2o en C................. C......................... ................. ................. ................ ..................................................*) ..........................................*) $n e:emplo.......................................................................................................** 4l2oritmo en Matlab..............................................................................................*( E:emplo *"........................................................................................................*( E:emplo ("........................................................................................................*+ E:emplo 0"........................................................................................................*; Referencias..........................................................................................................*< 9ocumentaci-n"................................................................................................*< Videos".............. Videos"....................... ................. ................ ................. ................. ................. ................. ...........................................*< ...................................*< E:emplo Matlab".............. Matlab"...................... ................. ................. ................. ................. ................ ................. ................................*< .......................*<
Introducción
Aos al2oritmos de ordenamiento nos permiten' como su nombre lo dice' ordenar. En este caso' nos servirán para ordenar vectores o matrices con valores asi2nados aleatoriamente. Bos centraremos en los m1todos más populares' analizando la cantidad de comparaciones que suceden' el tiempo que demora y revisando el c-di2o' escrito en ava' de cada al2oritmo. Este informe nos permitirá conocer más a fondo cada m1todo distinto de ordenamiento' desde uno simple hasta el más comple:o. 8e realizaran comparaciones en tiempo de e:ecuci-n' preDrequisitos de cada al2oritmo' funcionalidad' alcance' etc.
Generalidades
Qué es un algoritmo
Qué es un vector
Tipos de algoritmos de ordenamiento Para poder ordenar una cantidad determinada de nmeros almacenados en un vector o matriz' eisten distintos m1todos al2oritmos! con distintas caracter&sticas y comple:idad. Eiste desde el m1todo más simple' como el Gubblesort o M1todo Gurbu:a!' que son simples iteraciones' hasta el Quic5sort M1todo Rápido!' que al estar optimizado usando recursi-n' su tiempo de e:ecuci-n es menor y es más efectivo.
Algoritmos basados en métodos iterativos: Estos m1todos son simples de entender y de pro2ramar ya que son iterativos' simples ciclos y sentencias que hacen que el vector pueda ser ordenado. 9entro de los 4l2oritmos iterativos encontramos"
Gurbu:a ,nserci-n 8elecci-n 8hellsort
Algoritmos basados en métodos recursivos Estos m1todos son an más comple:os' requieren de mayor atenci-n y conocimiento para ser entendidos. 8on rápidos y efectivos' utilizan 2eneralmente la t1cnica H9ivide y VencerásI' que consiste en dividir un problema 2rande en varios pequeJos para que sea más fácil resolverlos. Mediante llamadas recursivas a s& mismos' es posible que el tiempo de e:ecuci-n y de ordenaci-n sea más -ptimo. 9entro de los al2oritmos recursivos encontramos"
6rdenamiento por Mezclas mer2e! 6rdenamiento Rápido quic5!
Método Quicksort (Ordenamiento !pido" Es el al2oritmo de ordenamiento más eficiente de todos' se basa en la t1cnica de K9ivide y VencerásK' que permite en promedio' ordenar n elementos en un tiempo proporcional a nLlo2n!.
Algoritmo #undamental
Ele2ir un elemento de la lista de elementos a ordenar' al que llamaremos pivote. Resituar los demás elementos de la lista a cada lado del pivote' de manera que a un lado queden todos los menores que 1l' y al otro los mayores. Aos elementos i2uales al pivote pueden ser colocados tanto a su derecha como a su izquierda' dependiendo de la implementaci-n deseada. En este momento' el pivote ocupa eactamente el lu2ar que le corresponderá en la lista ordenada. Aa lista queda separada en dos sublistas' una formada por los elementos a la izquierda del pivote' y otra por los elementos a su derecha. Repetir este proceso de forma recursiva para cada sublista mientras 1stas conten2an más de un elemento. $na vez terminado este proceso todos los elementos estarán ordenados.
El m1todo Quic5sort basa su estrate2ia en la idea intuitiva de que es más fácil ordenar una 2ran estructura de datos subdividi1ndolas en otras más pequeJas introduciendo un orden relativo entre ellas. En otras palabras' si dividimos el arre2lo a ordenar en dos subarre2los de forma que los elementos del subarre2lo inferior sean más pequeJos que los del subarre2lo superior' y aplicamos el m1todo reiteradamente' al final tendremos el arre2lo inicial totalmente ordenado. Eisten además otros m1todos conocidos' el de ordenaci-n por mont&culo y el de shell.
Caracter$sticas del algoritmo Quick%ort
El al2oritmo Quic5sort fue desarrollado en *@;( por 8ir Charles 4ntony Richard oare C. 4. R. oare!' antes de que se implementaran los primeros len2ua:es con capacidad para e:ecutar funciones recursivas. El ordenamiento por partici-n Quic5 8ort! se puede definir en una forma más conveniente como un procedimiento recursivo. 3iene aparentemente la propiedad de traba:ar me:or para elementos de entrada desordenados completamente' que para elementos semiordenados. Esta situaci-n es precisamente la opuesta al ordenamiento de burbu:a. Este tipo de al2oritmos se basa en la t1cnica Kdivide y vencerásK' o sea es más rápido y fácil ordenar dos arre2los o listas de datos pequeJos' que un arre2lo o lista 2rande. Bormalmente al inicio de la ordenaci-n se esco2e un elemento aproimadamente en la mitad del arre2lo' as& al empezar a ordenar' se debe lle2ar a que el arre2lo este ordenado respecto al punto de divisi-n o la mitad del arre2lo. 8e podrá 2arantizar que los elementos a la izquierda de la mitad son los menores y los elementos a la derecha son los mayores. Aos si2uientes pasos son llamados recursivos con el prop-sito de efectuar la ordenaci-n por partici-n al arre2lo izquierdo y al arre2lo derecho' que se obtienen de la primera fase. El tamaJo de esos arre2los en promedio se reduce a la mitad. 4s& se contina hasta que el tamaJo de los arre2los a ordenar es *' es decir' todos los elementos ya están ordenados.
En promedio para todos los elementos de entrada de tamaJo n' el m1todo hace 6n lo2 n! comparaciones' el cual es relativamente eficiente.
&l algoritmo es el siguiente:
Inicio variables A: arreglo[1..100 entero variables i!"!central:entero variables #rimero! ultimo: entero #ara i $ 1 %asta 100 leer&A[i' (in #ara #rimero $ 1 ultimo $ 100 )sort&A[!100' (in (uncion )sortrimero! ultimo:entero' i $ #rimero " $ ultimo central $ A[rimero!ultimo' div * re#etir mientras A[icentral " $ " + 1 ,n mientras si i - $ " au $ A[i A[" $ A[i A[i $ au i$i/1 " $ " + 1 ,n si %asta )ue i " si #rimero - " #artirrimero!"' ,n si si i - ultimo #artir&i! ultimo' ,n si ,n uncion )sort
'iagrama de #luo ordenamiento r!pido
'escripción del algoritmo Ele2ir un elemento de la lista de elementos a ordenar' al que llamaremos pivote. Aa idea central de este al2oritmo consiste en lo si2uiente"
8e toma un elemento de una posici-n cualquiera del arre2lo. 8e trata de ubicar a en la posici-n correcta del arre2lo' de tal forma que todos los elementos que se encuentran a su izquierda sean menores o i2uales a y todos los elementos que se encuentren a su derecha sean mayores o i2uales a . 8e repiten los pasos anteriores pero ahora para los con:untos de datos que se encuentran a la izquierda y a la derecha de la posici-n correcta de en el arre2lo. Resituar los demás elementos de la lista a cada lado del pivote' de manera que a un lado queden todos los menores que 1l' y al otro los mayores. En este momento' el pivote ocupa eactamente el lu2ar que le corresponderá en la lista ordenada. Repetir este proceso de forma recursiva para cada sublista mientras 1stas conten2an más de un elemento. $na vez terminado este proceso todos los elementos estarán ordenados. Como se puede suponer' la eficiencia del al2oritmo depende de la posici-n en la que termine el pivote ele2ido.
)Cómo elegimos el pivote* M1todo *" Ao ideal ser&a que el pivote fuera la mediana del vector para que las partes izquierda y derecha tuvieran el mismo tamaJo. M1todo (" recorremos el vector con un &ndice i desde ) a nD*' y otro &ndice : inversamente y cuando se crucen' es decir' ten2a el mismo valor' ese se seleccionara como pivote. M1todo 0" Ele2ir el valor de la primera posici-n del vector o la ltima M1todo 7" Ele2ir un valor en una posici-n aleatoria del vector En esta fi2ura se ilustra de me:or manera un vector con más elementos' usando como pivote el primer elemento"
An!lisis del algoritmo
Estabilidad" Bo es estable. Requerimientos de memoria" Bo requiere memoria adicional en su forma recursiva. En su forma iterativa la necesita para la pila. Venta:as" Muy rápido. Bo requiere memoria adicional.
9esventa:as" ,mplementaci-n un poco más complicada. Recursividad utiliza muchos recursos!. Mucha diferencia entre el peor y el me:or caso.
Compleidad computacional del Quicksort En el me:or de los casos tiene un costo de 6nLlo2 n!!. Que es cuando el pivote siempre queda al medio del arre2lo.
En el caso promedio tambi1n tiene un costo de 6nLlo2 n!!. 8e produce cuando el pivote se inclina más hacia un lado y los ( subarre2los tienen distinto tamaJo de elementos.
En el peor de los casos tiene un costo de 6nN(!. Cuando el pivote siempre se inclina hacia a un lado' es decir' 2enera un arre2lo de s-lo * elemento y una se2unda con el resto de elementos.
Para calcular el tiempo de e:ecuci-n se us- la funci-n cloc5! que determina el tiempo usado por el procesador. En este caso defino 0 variables ini' final y total. * ( 0 7 +
iniOcloc5! 4ntes del quic5sort" final O cloc5! 9espu1s que se e:ecuta el qu ic5sort total Odouble!final ini!! CA6CS8TPERT8EC El valor retornado por cloc5! debe ser dividido por el valor de la macro CA6CS8TPERT8EC
Cada al2oritmo de ordenamiento por definici-n tiene operaciones y cálculos m&nimos y máimos que realiza comple:idad!' a continuaci-n una tabla que indica la cantidad de cálculos que corresponden a cada m1todo de ordenamiento"
4l2oritmo
Gurbu:a ,nserci-n 8elecci-n 8hell Mer2e Quic5 Rápido!
6peraciones máimas
Un! Un7! Un! Un lo2n! Un lo2n! Un! en peor de los casos y Un lo2n! en el promedio de los casos.
Comparación de tiempos 8e han ordenado una cantidad determinada de elementos aleatorios en una lista mediante distintos m1todos de ordenamiento en se2undos!.
(+; elementos
+*( elementos
Gurbu:a" ).))7) 8elecci-n" ).))0) ,nserci-n" ).))7) Rápido" ).))*) 8hell" ).))*) Mer2e" ).))7)
()7? elementos
Gurbu:a" ).)(( 8elecci-n" ).)*+ ,nserci-n" ).)*0 Rápido" ).))*) 8hell" ).));) Mer2e" ).))+)
Gurbu:a" ).))+) 8elecci-n" ).))7) ,nserci-n" ).))+) Rápido" ).))*) 8hell" ).))() Mer2e" ).))0
*;0?7 elementos
Gurbu:a" *.)++ 8elecci-n" ).@ ,nserci-n" ).+ @. cont $ 1> 10. i &i - "' 11. tem# $ lista[i> 1*. lista[i $ lista["> 1?. lista[" $ tem#> 1@. else 1. cont $ 0>
1E. lista[su# $ tem#>
Bota" Aa primera llamada deber&a ser con la lista' cero )! y el tamaJo de la lista menos * como parámetros.
,n eemplo Esta vez voy a cambiar de lista +D0D G Insertion sort t%res%old! kk $ 1 G Quicksort n $ lengt%&'> $ )uicksorti&!1!n!kk'> end unction $ )uicksorti&!ll!uu!kk' G Sort &ll:uu' via )uick sort G 8ote: In #ractice! %ould be #assed bH reerence G Select #ivot and #artition data around it [ mm $ #artition&!ll!uu'> G ivide+and+con)uer i &&mm + ll' -$ kk' G Sort &ll:&mm + 1'' via insertion sort $ insertionsorti&!ll!mm + 1'> else G Sort &ll:&mm + 1'' via )uick sort $ )uicksorti&!ll!mm + 1!kk'> end i &&uu + mm' -$ kk' G Sort &&mm / 1':uu' via insertion sort $ insertionsorti&!mm / 1!uu'> else G Sort &&mm / 1':uu' via )uick sort $ )uicksorti&!mm / 1!uu!kk'> end end unction [ mm $ #artition&!ll!uu' G 6artition &ll:uu' around inde mm G 8ote: In #ractice! %ould be #assed bH reerence G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G Select #ivot G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G Met%od 1: Median+o+? #ivot ## $ medianot%ree&!ll!uu'> G Median+o+t%ree #ivot inde G Met%od *: 9andom #ivot G## $ randi&[ll uu'> G 9andom #ivot inde G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G 6artition around #ivot $ sDa#&!ll!##'> mm $ ll> or " $ &ll / 1':uu i &&"' - &ll'' mm $ mm / 1> $ sDa#&!mm!"'> end end $ sDa#&!ll!mm'> end
unction ## $ medianot%ree&!ll!uu' G 2om#ute median o &ll'!&mm'!&uu'R G 8ote: In #ractice! %ould be #assed bH reerence G Middle element &avoiding overoD' mm $ ll / oor&&uu + ll' < *'> G 2om#ute median o &ll'!&mm'!&uu'R i &&ll' -$ &mm'' i &&uu' $ &mm'' ## $ mm> elsei &&uu' $ &ll'' ## $ uu> else ## $ ll> end else i &&uu' $ &ll'' ## $ ll> elsei &&uu' $ &mm'' ## $ uu> else ## $ mm> end end end unction $ insertionsorti&!ll!uu' G Sort &ll:uu' via insertion sort G 8ote: In #ractice! %ould be #assed bH reerence G Insertion sort or " $ &ll / 1':uu #ivot $ &"'> i $ "> D%ile &&i ll' TT &&i + 1' #ivot'' &i' $ &i + 1'> i $ i + 1> end &i' $ #ivot> end end unction $ sDa#&!i!"' G SDa# &i' and &"' G 8ote: In #ractice! %ould be #assed bH reerence val $ &i'> &i' $ &"'> &"' $ val> end
&emplo 1:
Script:
A $ [? B * 1 C @> rig%tInde $ lengt%&A'> 4 $ QuickSort&A!1!rig%tInde'> QuickSort:
unction [#vt! $ QuickSort&A!let!rig%t' i let - rig%t [! #vt $ 6artn6ivot1&A! let! rig%t'> Gc%osen #ivot QuickSort&! let! #vt+1'> QuickSort&! #vt/1! rig%t'> end Partition:
unction [sortedSubArraH! #ivot $ 6artn6ivot1&subArraH!letInde!rig%tInde' GG Initiali7ations S $ subArraH> let $ letInde> rig%t $ rig%tInde> 6 $ S&let'> G#ivot i $ let/1> GG 6artition or " $ i:rig%t i S&"' - 6 tem#1 $ S&"'> G tem#* $ S&i'> G sDa# S&i' Dit% S&"' S&"' $ tem#*> G S&i' $ tem#1> G i $ i/1> Gincrement i onlH D%en sDa# occurs end end sDa#1 $ S&let'> G sDa#* $ S&i+1'> G ,nal sDa# S&let' $ sDa#*> G S&i+1' $ sDa#1> G sortedSubArraH $ S> #ivot $ 6>
&emplo 0:
unction [H$)uicksort&' G Uses )uicksort to sort an arraH. JDo dimensional arraHs are sorted column+Dise. [n!m$si7e&'> i&m1' H$> or "$1:m H&:!"'$)uicksort&&:!"''> end return> end G J%e trivial cases i&n-$1'>H$>return>end> i&n$$*' i&&1'&*'' $[&*'> &1'> end H$> return> end G J%e non+trivial case G (ind a #ivot! and divide t%e arraH into tDo #arts. G All elements o t%e ,rst #art are less t%an t%e G #ivot! and t%e elements o t%e ot%er #art are greater G t%an or e)ual to t%e #ivot. m$,&n ltIndices$,nd&-#ivot'> G Indices o all elements less t%an #ivot. i&isem#tH<Indices'' G J%is %a##ens D%en #ivot is miniumum o all elements. ind$,nd&#ivot'> G (ind t%e indices o elements greater t%an #ivot. i&isem#tH&ind''>H$ >return>end> G J%is %a##ens D%en all elements are t%e same. #ivot$&ind&1''> G Use neD #ivot. ltIndices$,nd&-#ivot'> end G 8oD ,nd t%e indices o all elements not less t%an #ivot. G Since t%e #ivot is an element o t%e arraH! G geIndices cannot be em#tH. geIndices$,nd&$#ivot'> G 9ecursivelH sort t%e tDo #arts o t%e arraH and concatenate G t%e sorted #arts. H$ [)uicksort&<Indices''>)uicksort&&geIndices''>
e#erencias
'ocumentación: 4l2oritmos de ordenaci-n. 4le:andro 4lcalde. Recuperado de http"elbauldelpro2ramador.comal2oritmosDdeDordenacion 4l2oritmo Quic5sort. avier Vilu2r-n. Recuperado de https":aviervilu2ron2.Zordpress.comal2oritmoDquic5sort 4l2oritmo M1todo Quic5sort. Patricia Correa. Recuperado de http"es.slideshare.netPatriciaCorrea;al2oritmoDmetodoDquic5sort Aos 0 m1todos de ordenamiento más populares. Recuperado de http"2lDepnDpro2ramacionDii.blo2spot.com()*));metodosDdeDordenamiento.html Mis 4l2oritmos. 6rdenamiento Rápido Quic5sort!. Recuperado de http"misDal2oritmos.comordenamientoDrapidoDquic5sort 6rdenamiento de vectores. ,n2eniero B1stor 9&az Fiet $nicauca. ())+. Recuperado de http"artemisa.unicauca.edu.co[nediazE99,cap)0.htm
4ideos: Quic5sort. Recuperado de http"ZZZ.neoteo.comquic5sortDal2oritmoDdeDordenamientoDrapido Quic5Dsort Zith un2arian S\5\ll]menti le21nyes! fol5 dance. Recuperado de https"youtu.beyZ^Gy;+2z? M1todo de 6rdenamiento Quic5sort. Recuperado de https"youtu.be3tG#8tCf5 6rdenamiento Quic5sort. Cristian Var2as. Recuperado de https"youtu.be5qm#8DADAG2 Visualization of Quic5 8ort. Recuperado de https"youtu.bevEBSlcs(3Z Visualization of Quic5 sort 9!. Recuperado de https"youtu.bea##^#z+rF;7
&emplo Matlab: http"ZZZ.mathZor5s.commatlabcentralfileechan2e7+*(+Dsortin2D methodscontent8ortin2_()Methodsquic5sort.m http"stac5overfloZ.comquestions*+)7
View more...
Comments