Classificação de dados por Troca: QuickSort

Slides:



Advertisements
Apresentações semelhantes
Grafos eulerianos 1.
Advertisements

CC/EC/Mestrado Teoria dos Grafos Grafos Hamiltonianos.
Estruturas de Dados Marcio Gonçalves.
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Linguagem de Programação IX Métodos de Ordenação
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.
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Algoritmos de Ordenação
Classificação de Dados
Profa. Dra. Ana Paula Appel
Análise Projeto de Algoritmos
Árvore Binária de Busca
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.
Geometria Computacional Fecho Convexo
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
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Hashing (Espalhamento)
Classificação e Pesquisa de Dados
WAR STORY Stripping Triangulations Luciana Oliveira e Silva
Classificação (Ordenação) de dados
Árvores Balanceadas (AVL)
Métodos de Pesquisa: Seqüencial e Binária
Algoritmos Escher.
Árvores Binárias de Pesquisa (ABP)
Métodos de Classificação por Seleção: HeapSort
Método de Ordenação: InsertionSort
Classificação de dados por Intercalação: MergeSort
Métodos de Classificação por Seleção
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Ordenação de Dados.
Marco Antonio Montebello Júnior
Algoritmos de Ordenação
Insertion Sort.
Algoritmos de ordenação
Paradigma de Divisão e Conquista
Comparação entre os métodos de ordenação
Geometria da compensação por avanço de fase
Complexidade de algoritmos e Classificação (Ordenação) de dados
Aula 08 Medidas de posição - Prof. Diovani Milhorim
Mergesort Katia Guimarães.
O Problema da Transformação dos Valores em Preços de Produção
Ceça Moraes – Introdução à Programação SI1
Medidas de Tendencia Central Média, Moda e Mediana
Algoritmos de Ordenaçã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.
Aula 8. Classificação Não Supervisonada por Regiões
Medidas de localização
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Estrutura de Dados em C/C /2
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
Geometria Computacional Fecho Convexo
CLASSIFICAÇÃO DE DADOS
Prof. Alessandro Gonçalves
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Classificação Ordenação de Dados
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
Estática Estática Histórico
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
Classificação (Ordenação) de dados
USP – ICMC – SSC SSC0300 2º Semestre 2015
Classificação (Ordenação) de dados. Roteiro Contextualização e definições sobre Classificação Métodos de Classificação de Dados.
Estatística Aplicada à Administração Prof. Alessandro Moura costa UNIVERSIDADE FEDERAL DO PAMPA BACHARELADO EM ADMINISTRAÇÃO DE EMPRESAS.
Transcrição da apresentação:

Classificação de dados por Troca: QuickSort Prof. Alexandre Parra Carneiro da Silva parrasilva@gmail.com

Classificação por Trocas (Relembrando) Caracteriza-se pela comparação aos pares de chaves, trocando-as de posição caso estejam fora de ordem no par.

Padrão de Projeto do QuickSort Baseia-se em um padrão de projeto fundamental para solução de problemas conhecida como Divisão e Conquista (Divide- and-Conquer). O padrão pode ser descrito, de maneira geral, como sendo composto de 3 fases: Divisão: divide-se os dados de entrada em dois ou mais conjuntos disjuntos (separados); Recursão: soluciona-se os problemas associados aos subconjuntos recursivamente; Conquista: obtém-se as soluções dos subproblemas e junta-se as mesmas em uma única solução.

QuickSort (Características Gerais) Inicialmente, o vetor de chaves C é particionado em três segmentos S1, S2 e S3. S2 deverá conter apenas UMA chave denominada pivô. S1 deverá conter todas as chaves cujos valores são MENORES ou IGUAIS ao pivô. Esse segmento está posicionado à esquerda de S2. S3 deverá conter todas as chaves cujos valores são MAIORES do que o pivô. Esse segmento está posicionado à direita de S2.

Exemplo Divisão e Conquista (QuickSort) (b) Fase de Conquista (a) Fase de Divisão

QuickSort (Esquema) Esquema conceitual do particionamento Vetor Inicial : C [ 1 .. n ] 1 n Vetor Particionado 1 n S1 S2 S3 k - 1 k k + 1 onde: C [ i ]  C [ k ] , para i = 1, … , k - 1 C [ i ] > C [ k ] , para i = k + 1 , … , n

Princípio de Classificação/Ordenação O particionamento é reaplicado aos segmentos S1 e S3 e a todos os segmentos correspondentes daí resultantes com quantidade de chaves MAIOR que 1. Quando não restarem segmentos a serem particionados, o vetor estará ordenado. Perguntas: Qual é o pivô ideal ? Como escolher este pivô ?

QuickSort (Escolha do pivô) O pivô ideal é aquele que produz segmentos S1 e S3 com tamanhos (aproximadamente) iguais: chave de valor mediano. A identificação do pivô ideal requer a varredura de todo o vetor (o benefício não justifica o custo). Deseja-se um critério de escolha simples e rápido. Sem conhecimento prévio sobre a distribuição de valores das chaves, supõe-se que qualquer uma possa ser o pivô e arbitra-se, por exemplo, a primeira chave. Caso o vetor já se encontre parcialmente ordenado, pode-se utilizar o elemento médio.

QuickSort (Procedimentos p/ Ordenação Crescente) 1) Escolha do pivô (p); 2) Processo de comparações: Compara v[1], v[2], ... até encontrar um elemento v[a]>p, onde v é o vetor de chaves. Compara, a partir do final do vetor, os elementos v[n-1],v[n-2], ... Até encontrar v[b]<=p. 3) Neste ponto, troca-se v[a] e v[b], e a busca continua, para cima a partir de v[a+1], e para baixo, a partir de v[b-1]; 4) A busca termina, quando os pontos (a e b) se cruzarem. Neste momento, a posição definitiva de p foi encontrada, e os valores de p e v[b] são trocados; 5) O particionamento é realizado até os segmentos resultantes tiveram comprimento > 1.

QuickSort - Exemplo (1/6) Vetor Original: [ 9 25 10 18 5 7 15 3 ] pivô (p) = 9; a = v[1] = 25; b = v[7] = 3 0 1 2 3 4 5 6 7 9 25 10 18 5 7 15 3 (25 > 9 ok!; 3 <= 9 ok!, troca) 9 3 10 18 5 7 15 25 (10>9 ok!;15<=9 não!,7<=9 ok!, troca) 9 3 7 18 5 10 15 25 (18 > 9 ok!; 5 <= 9 ok!, troca) 9 3 7 5 18 10 15 25 (18 > 9 ok!; 5 <= 9 ok!, cruzaram) 9 3 7 5 18 10 15 25 (troca o pivô com o v[b], b = 4) 5 3 7 9 18 10 15 25 (fim)

QuickSort - Exemplo (2/6) Segmentos resultantes após 1º Particionamento: 0 1 2 3 4 5 6 7 [ 5 3 7 | 9 | 18 10 15 25 ] 0 1 2 3 4 5 6 7 [5 3 7] 9 [18 10 15 25]

QuickSort - Exemplo (3/6) 0 1 2 S1: [ 5 3 7 ] pivô (p) = 5 ; a = v[1] = 3 ; b = v[2] = 7 S1 0 1 2 5 3 7 (3>5 não!, 7>5 ok!; 7<=5 não!, 3 <=5 ok!, cruzaram) 5 3 7 (troca o pivô com o v[b], b = 2) 3 5 7 (fim, 2º nível de particionamento (S1))

QuickSort - Exemplo (4/6) 4 5 6 7 S3: [ 18 10 15 25] pivô (p) = 18 ; a = v[5] = 10 ; b = v[7] = 25 S3 4 5 6 7 18 10 15 25 (10>18 não!,15>18 não!,25>18 ok!;25<=18 não!,15<=18 ok!, cruzaram) 18 10 15 25 (troca o pivô com o v[b], b = 6) 15 10 18 25 (fim, 2º nível de particionamento (S3))

QuickSort - Exemplo (5/6) 4 5 S4: [ 15 10 ] pivô (p) = 15 ; a = v[5] = 10 ; b = v[5] = 10 S4 4 5 15 10 (10>15 não!; 10<=15 ok!, cruzaram) 15 10 (troca o pivô com o v[b], b = 5) 10 15 (fim do 2º nível de particionamento (S4))

QuickSort - Exemplo (6/6) 0 1 2 3 4 5 6 7 Vetor Original: [ 9 25 10 18 5 7 15 3 ] [ 5 3 7 | 9 | 18 10 15 25 ] [ 5 3 7 ] [ 18 10 15 25 ] [ 3 | 5 | 7 ] [ 15 10 |18| 25 ] [ 15 10] [ 10 15] [ 3 5 7 9 10 15 18 25 ] Quantas operações críticas foram necessárias ?

QuickSort: Análise de Desempenho (1/10) Melhor caso: particionamento produz segmentos com mesmo tamanho. n (n-1)/2 1 (n-3)/4 1 (n-3)/4 (n-3)/4 1 (n-3)/4 (n-7)/8 1 (n-7)/8

QuickSort: Análise de Desempenho (2/10) Melhor caso (Cont…) Nível recursão Segmentos Comparações Trocas 0 1 n – 1 1 1 2 n – 3 = (((n - 1) / 2) - 1) * 2 1 2 4 n – 7 = (((n - 3) / 4) - 1) * 4 1 3 8 n – 15 = (((n - 7) / 8) - 1) * 8 1 … … … log2n vezes Total: (n - 1) + (n - 3) + (n - 7) + (n - 15) + … log2n vezes

QuickSort: Análise de Desempenho (3/10) Melhor caso (Cont…) Soma dos termos de uma PG

QuickSort: Análise de Desempenho (4/10) Pior caso: quando o pivô é a menor (ou a maior) de todas as chaves e esta situação se repete para todos os níveis de particionamento. n 1 n - 1 Número de Comparações: T(n) = (n - 1) + (n - 2) + (n - 3) + … + 1 T(n) = (n2 - n) / 2 1 n - 2 1 n - 3 . 2 1 1

QuickSort: Análise de Desempenho (5/10) Pior caso (Cont…) Ocorrerá sempre que o vetor já estiver ordenado ou em ordem inversa e escolhermos a menor (ou maior) chave como particionadora.

QuickSort: Análise de Desempenho (6/10) Apesar do seu desempenho no pior caso ser O(n2)*, Quicksort costuma ser, na prática, a melhor escolha: Na média, sua performance é excelente; O tempo de execução esperado é O(nlog2n)†; Executa eficientemente mesmo em ambientes com memória virtual. * Refere-se apenas à complexidade do pior caso, não à do algoritmo † Refere-se à complexidade média, não à do algoritmo

QuickSort: Análise de Desempenho (7/10) Tempo de Execução do Caso Médio Muito mais próximo do melhor caso do que do pior caso. Por exemplo, suponha que o particionamento em todos os níveis ocorra na proporção 1 para 9 (i.e., não balanceado). T(n) = T(n/10) + T(9n/10) + n Tempo para ordenar S1 Tempo para ordenar S3 Tempo para particionar Tempo para ordenar toda a seqüência Função Recorrente: definida em termos da própria função aplicada à entradas menores

QuickSort: Análise de Desempenho (8/10) Particionamento Desbalanceado (1 para 9) . .

QuickSort: Análise de Desempenho (9/10) Particionamento Desbalanceado (1 para 9) Note que: Logo:

Quicksort: Análise de Desempenho (10/10) Particionamento Desbalanceado (Cont…) Qualquer subdivisão com proporcionalidade constante produz uma árvore de recursão com profundidade O(log2n) Por exemplo, mesmo com uma subdivisão de 1 para 99, o tempo de execução do Quicksort é O(nlog2n) (desde que a seqüência já não se encontre ordenada) No caso médio, pode-se esperar uma mistura de subdivisões boas (S1 e S3 não vazios) e más (S1 ou S3 vazio). Neste caso, T(n) = O(nlog2n)

Exercício Considerando o seguinte vetor: Realize a ordenação (ordem decrescente) do vetor utilizando o método QuickSort. Quantas operações críticas (comparações + trocas) foram necessárias ? 2) Quantas partições são necessárias para o vetor ser classificado ? Classifique o algoritmo QuickSort quanto a estabilidade, ou seja, se é estável ou não-estável e quanto a localidade, ou seja, se é local ou não-local ? Justifique as suas respostas. 4) Informe a complexidade do algoritmo QuickSort nos casos: Melhor, Pior e Caso Médio.