A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.

Apresentações semelhantes


Apresentação em tema: "QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual."— Transcrição da apresentação:

1 QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual a cada elemento de A[q+1…r]. (O índice q é determinado aqui). Conquistar: dois subvetores são armazendos pelas chamadas recursivas ao procedimento quicksort. Combinar: nenhum trabalho é necessário, uma vez que os subvetores já estão ordenados “in place”. UFES Berilhes B. Garcia

2 Quicksort (A, p, r) 1. if p < r 2. then q  Partition(A, p, r)
Quicksort(A, p, q) Quicksort(A, q+1, r) * In place, instável UFES Berilhes B. Garcia

3 Partition(A, p, r) 1. x  A[p] 2. i  p - 1 3. j  r + 1 4. while TRUE
do repeat j  j - 1 until A[j]  x repeat i  i + 1 until A[i]  x if i < j then troque A[i]  A[j] else return j UFES Berilhes B. Garcia

4 Exemplo: Particionamento do Vetor
UFES Berilhes B. Garcia

5 Análise do Algoritmo O tempo de execução do quicksort depende se o particionamento está balanceado ou não. Desempenho no Pior Caso (desbalanceado): T(n) = T(n-1) + (n)  particionamento requer (n) = k = 1 à n(k)  T(1) requer (1) =  (  k = 1 à n k ) = (n2) * Isto ocorre quando a entrada está completamente ordenada. UFES Berilhes B. Garcia

6 Particionamente Pior Caso
UFES Berilhes B. Garcia

7 Particionamento Melhor Caso
UFES Berilhes B. Garcia

8 Análise Para o Melhor Caso
Quando o procedimento de particionamento produz duas regiões de tamanho n/2, nós obtemos uma partição balanceada com o desempenho do melhor caso: T(n) = 2T(n/2) + (n) Logo, T(n) = (n log n) UFES Berilhes B. Garcia

9 Comportamento no Caso Médio
Por exemplo, quando o algoritmo de particionamento sempre produz uma divisão proporcional de 7 para 3: T(n) = T(7n/10) + T(3n/10) + n Resolvendo esta recorrência por meio de uma árvore de recursão, cada nível tem um custo de n com uma altura de lg n. Logo, nós obtemos T(n) = (n log n) quando a divisão tem uma constante de proporcionalidade. Para uma divisão de proporcionalidade , onde 0    1/2, a profundidade mínima da árvore é - lg n / lg  e a profundidade máxima é - lg n / lg (1- ). UFES Berilhes B. Garcia

10 Divisão Caso Médio A combinação de boas e más divisões resultaria em T(n) = (n log n), mas com constantes ligeiramente maiores ocultas pela notação O. (Uma análise rigorosa do caso médio será feita mais tarde) UFES Berilhes B. Garcia

11 Quicksort Aleatório Um algoritmo é aleatório se seu comportamento é determinado não apenas pela entrada, mas também pelo valores produzidos por gerador de números aleatórios. Nenhuma entrada particular garante o comportamento do pior caso. Duas versões possíveis do quicksort: Impõe uma distribuição sobre as entradas de modo a assegurar que toda a permutação é igualmente provável. Este não melhora o tempo de execução no pior caso, mas torna o tempo de execução independente do ordenamento de entrada. Troca A[p] com um elemento escolhido aleatoriamente de A[p…r] na Partition. Isto assegura que o elemento pivô é igualmente provável para todos os elementos existentes na entrada. UFES Berilhes B. Garcia

12 Randomized-Partition(A, p, r)
1. i  Random (p, r) 2. troque A[p]  A[i] 3. return Partition(A, p, r) UFES Berilhes B. Garcia

13 Randomized-Quicksort (A, p, r)
1. if p < r then q  Randomized-Partition(A, p, r) Randomized-Quicksort(A, p, q) Randomized-Quicksort(A, q+1, r) UFES Berilhes B. Garcia

14 T(n)  cn2 - 2c(n - 1) + (n)  cn2
Análise do Pior Caso T(n) = max (T(q) + T(n - q)) + (n) 1  q  n-1 Método da Substituição: Advinhação T(n)  cn2 T(n)  max (cq2 + c(n - q)2) + (n) = c · max (q2 + (n - q)2) + (n) Derive para obter o máximo em q = 1, n-1: T(n)  cn2 - 2c(n - 1) + (n)  cn2 Portanto, o tempo do pior caso é (n2) UFES Berilhes B. Garcia

15 Análise do Caso Médio Particionamento depende somento do rank de x =A[p]. Quando rank(x) = 1, índice i para em i = p e j para j = p. q = p é retornado. Logo, a probabilidade do lado baixo ter um elemento é 1/n. Quando rank(x)  2, há pelo menos um elemento menor que x =A[p]. Quando a “Partition” termina, cada um dos rank(x)-1 elemenos no lado baixo da partição é menor que x. Para cada i = 1, … , n-1, a probabilidade é 1/n que o lado baixo tenha i elementos UFES Berilhes B. Garcia

16 Recurrência para o Caso Médio
Combinando os dois casos, o tamanho q - p + 1 do lado baixo da partição é 1 com probabilidade 2/n, e o tamanho é i com probabilidade de 1/n for i = 2,…,n-1. Portanto, T(n) = 1/n(T(1) +T(n-1) +q=1 to n-1(T(q)+T(n - q)))+(n) = 1/n ((1) +O(n2) +q=1 to n-1T(q)+T(n - q)) + (n) = 1/n (q=1 to n-1T(q)+T(n - q)) + (n) = 2/n (k=1 to n-1T(k)) + (n) UFES Berilhes B. Garcia

17 Resolvendo a Recorrência
Método da Substituição: Adivinhação T(n)  a n lg n + b T(n) = 2/n (k=1 to n-1T(k)) + (n)  2/n (k=1 to n-1 a k lg k + b) + (n) = (2a/n k=1 to n-1 k lg k) + 2b(n -1)/n + (n)  2a/n(n2 lg n/ 2 - n2/8) + 2b(n -1)/n + (n)  a n lg n + b + ((n) + b - an/4)  a n lg n + b  se nós escolhemos a suficientemente grande UFES Berilhes B. Garcia


Carregar ppt "QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual."

Apresentações semelhantes


Anúncios Google