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.

Slides:



Advertisements
Apresentações semelhantes
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Advertisements

Python: Recursão Claudio Esperança.
Geometria Computacional Fecho Convexo II
COMPARAÇÃO MÉTODOS DIRETOS E ITERATIVOS
Roberta Geneci Neves Weber Rafael Coninck Teigão
Complexidade de Algoritmos
Katia S. Guimarães QUICKSORT Katia S. Guimarães
ANÁLISE DISCRIMINANTE
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Algoritmos de Ordenação
Profa. Dra. Ana Paula Appel
Análise Projeto de Algoritmos
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Classificação e Pesquisa de Dados
Métodos de Classificação por Seleção: HeapSort
Classificação de dados por Troca: QuickSort
Dividir-e-Conquistar
Análise Léxica Supondo o trecho de programa abaixo:
Crescimento de Funções
Recorrências.
Árvore Geradora Mínima
Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www
Algoritmos de Ordenação 4
Algoritmos de ordenação
Algoritmos de Busca Parte II
Paradigma de Divisão e Conquista
Análise e Síntese de Algoritmos
Pesquisa em memória primária: hashing
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Comparação entre os métodos de ordenação
Árvores binárias de pesquisa com balanceamento
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Mergesort Katia Guimarães.
Estruturas de Dados e Ordenação
Minimização de DFAs.
Busca Combinatorial e Métodos de Heurística
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estrutura de Dados em C/C /2
Disciplina Análise de Algoritmos Bacharelado em CC
Complexidade em Tempo de um Algoritmo
Como analisar um algoritmo
Crescimento de Funções
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
Geometria Computacional Fecho Convexo
Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Analise de Algoritmos e Notação Assintótica
Análise e Síntese de Algoritmos
Árvores Equilibradas Sumário Splay B-tree Vermelho-Preto AA e BB
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Classificação (Ordenação) de dados
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Ordenação: Terminologia
Transcrição da apresentação:

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

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

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

Exemplo: Particionamento do Vetor UFES Berilhes B. Garcia

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

Particionamente Pior Caso UFES Berilhes B. Garcia

Particionamento Melhor Caso UFES Berilhes B. Garcia

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

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

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

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

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

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

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

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

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

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