Clssificção e Pesquis de Ddos Auls 06 Clssificção de ddos por Troc: QuickSort Exercício Supoh que se desej clssificr o seguite vetor: O R D E N A Assum que chve prticiodor está posição iicil do vetor e simule s iterções ecessáris pr clssificção, segudo o lgoritmo presetdo UFRGS INF04 Procedimeto Prtição Procedimeto Proc prtição ( c, i, f, k ); /* k = posição ocupd pel chve prticiodor */ egi i i; f f; cp c [ i ]; esq true; while i < f do if esq the /* esquerd vg */ if cp c [ f ] the egi /* trsfere pr s */ c [ i ] c [ f ]; i i + ; esq flse ed else f f - else /* direit vg */ if cp < c [ i ] the egi /* trsfere pr s 3 */ c [ f ] c [ i ]; f f - ; esq true ed else i i + ; k i; c [ k ] cp /* ou k := f, já que este poto i = f */ ed 3 Proc quicksort ( c, i, f ) /* i: posição icil do segmeto; f: posição fil do segmeto */ egi if f > i /* test se segmeto ão é uitário */ the egi prtição ( c, i, f, k ) ; /* prticio */ quicksort ( c, i, k - ) ; /* orde segmeto d esquerd */ quicksort ( c, k +, f ) /* orde segmeto d direit */ ed ed 4
Aálise de Desempeho Melhor cso: sudivisão produz segmetos com mesmo tmho Aálise de Desempeho Melhor cso (Cot) Nível recursão Segmetos Comprções (-)/ (-)/ 0 3 = ((( - ) / ) - ) * 4 7 = ((( - 3) / 4) - ) * 4 3 8 5 = ((( - 7) / 8) - ) * 8 (-3)/4 (-3)/4 (-3)/4 (-3)/4 (-7)/8 (-7)/8 (-7)/8 (-7)/8 (-7)/8 (-7)/8 (-7)/8 (-7)/8 Totl: ( - ) + ( - 3) + ( - 7) + ( - 5) + vezes Totl = i i ( ( ) = ( ) = + i 5 6 Aálise de Desempeho Melhor cso (Cot) i Totl = + Som dos termos de um PG = i 0 + = ( k= 0 x k + x = x ) = ( ) Totl = + ( ) = O( ) Aálise de Desempeho Pior cso: qudo o pivô é meor (ou mior) de tods s chves e est situção se repete pr todos os íveis de sudivisão - - - 3 Número de Comprções: T() = ( - ) + ( - ) + ( - 3) + + T() = ( - ) / 7 8
Aálise de Desempeho Pior cso (Cot) Ocorrerá sempre que o vetor já estiver ordedo e escolhermos meor (ou mior) chve como prticiodor!!! Pr estes csos, o lgoritmo por iserção diret preset melhor desempeho ssitótico Prátic Apesr do seu desempeho o pior cso ser Θ( )*, costum ser, prátic, melhor escolh: N médi, su performce é excelete O tempo de execução esperdo é Θ( ), sedo que s costte ssocid o termo mis sigifictivo é em peque Reliz clssificção locl Execut eficietemete mesmo em mietes com memóri virtul * Refere-se pes à complexidde do pior cso, ão à do lgoritmo Refere-se à complexidde médi, ão à do lgoritmo 0 Aálise de Desempeho Tempo de Execução do Cso Médio Muito mis próximo do melhor cso do que do pior cso Aálise de Desempeho Prticiometo Deslcedo ( pr ) Por exemplo, supoh que o prticiometo em todos os íveis ocorr proporção pr (ie, ão lcedo) 0 0 T() = T(/0) + T(/0) + Tempo pr order tod seqüêci Tempo pr order S Tempo pr order S 3 Tempo pr prticior Fução Recorrete: defiid em termos d própri fução plicd à etrds meores ( ) 0/ 0 00 00 00 8 000 8 00 7 000 Θ ( )
Aálise de Desempeho Prticiometo Deslcedo ( pr ) Note que Logo ( ) 0 = Θ = = ( ) = k ( ) = Θ Aálise de Desempeho Prticiometo Deslcedo (Cot) Qulquer sudivisão com proporciolidde costte produz um árvore de recursão com profudidde Θ( ) Por exemplo, mesmo com um sudivisão de pr, o tempo de execução do é O( ) (desde que seqüêci já ão se ecotre orded) No cso médio, pode-se esperr um mistur de sudivisões os (S e S 3 ão vzios) e más (S ou S 3 vzio) Neste cso, T() = Θ( ) 3 4 Rdomizdo xrdomized Ates de iicir o procedimeto de ordeção, permut lgus elemetos rdomicmete Tet grtir que tods s permutções são igulmete prováveis A ocorrêci do pior cso ão é elimid, ms pes ocorre se houver coicidêci do gerdor de úmeros letórios produzir um tl permutção Um ltertiv é permutr pes o primeiro elemeto d seqüêci com outro, cuj posição é escolhid letorimete Pergut: Qul desvtgem dest ordgem em relção terior cim? 5 Proc quicksort ( c, i, f ) /* i: icio do segmeto; f:fil do segmeto */ egi if f > i the egi prtição ( c, i, f, k ); quicksort ( c, i, k - ); quicksort ( c, k +, f ) ed ed Rdomized Proc quicksort_rdomizdo ( c, i, f ) /* i: icio do segmeto; f:fil do segmeto */ egi if f > i the egi prtição_rdomizd ( c, i, f, k ); quicksort ( c, i, k - ); quicksort ( c, k +, f ); ed ed Proc prtição_rdomizd ( c, i, f, k ) egi r rdom(i+,f); exchge (c[i], c[r]); retur prtição ( c, i, f, k ); ed 6
7