UPE – Caruaru – Sistemas de Informação Disciplina: Estrutura de Dados e Arquivo Prof.: Paulemir G. Campos Classificação de Dados 5/31/2017 EDA - Prof. Paulemir Campos 1 Conteúdo Classificação de Dados: Bubble-sort Quick-sort Heap-sort Merge-sort Aplicações 5/31/2017 EDA - Prof. Paulemir Campos 2 Classificação de Dados: Introdução Conjunto Ordenado: Elementos dispostos sob uma determinada ordem. Objetivos da Classificação: Facilitar a recuperação; Tornar mais eficiente o acesso aos dados. Tipos de Classificação: 5/31/2017 Interna: Todos os registros estão na memória principal; Externa: Alguns registros podem estar em dispositivos auxiliares de armazenamento. EDA - Prof. Paulemir Campos 3 Classificação de Dados: Introdução Veremos quatro algoritmos de classificação interna de dados: Classificação por Troca Classificação por Seleção Algoritmo Heap-sort Classificação por Intercalação 5/31/2017 Algoritmo Bubble-sort Algoritmo Quick-sort Algoritmo Merge-sort EDA - Prof. Paulemir Campos 4 Classificação por Troca Método Bubble-Sort 5/31/2017 A cada passo, cada elemento de um vetor C (vetor de chaves) é comparado com o seu sucessor, sendo os dois trocados de posição caso estejam fora de ordem; São executados passos sucessivos, até que não ocorram trocas, estando assim o vetor classificado. EDA - Prof. Paulemir Campos 5 Classificação por Troca Método Bubble-Sort (Algoritmo) BubbleSort(inteiro V[N], N){ /* FALSE -> 0 e TRUE -> 1 */ inteiro ordenado, j, temp ordenado = FALSE enquanto NÃO(ordenado) { ordenado = TRUE para j = 1 até (N-1) incremento 1 { se V[j] > V[j+1] { temp = V[j] V[j] = V[j+1] V[j+1] = temp ordenado = FALSE} } } } 5/31/2017 EDA - Prof. Paulemir Campos 6 Classificação por Troca Método Bubble-Sort (Exemplo) Seja o conjunto X={14,21,30,7,56,28,24,33,47,50,32}. Ordená-lo segundo o método Bubble-Sort. Etapa 14 21 30 7 56 28 24 33 47 50 32 1 14 21 7 30 28 24 33 47 50 32 56 2 14 7 21 28 24 30 33 47 32 50 56 3 7 14 21 24 28 30 33 32 47 50 56 4 7 14 21 24 28 30 32 33 47 50 56 5 7 14 21 24 28 30 32 33 47 50 56 5/31/2017 EDA - Prof. Paulemir Campos 7 Classificação por Troca Método Bubble-Sort (Observações) 5/31/2017 O seu princípio básico de funcionamento é conduzir os maiores elementos para o fim do vetor; É um algoritmo de ordenação bastante simples; Complexidade de Tempo: O(n2). EDA - Prof. Paulemir Campos 8 Classificação por Troca Método Quick-Sort Sejam X um conjunto com n elementos e p um elemento qualquer de X, denominado pivot. O método consiste em: 1) particionar x em dois subconjuntos X1 e X2 de modo que: • todo elemento de X1 seja menor ou igual a p • todo elemento de X2 seja maior que p Obs. p particiona o conjunto x de tal modo que todos os elementos de x1 são menores que qualquer elemento de x2 Exemplo. x={14,21,30,7,56,28,24,33,47,50,32} para p = 30 x1={14, 21, 7, 28, 24, 30} e x2={56, 33, 47, 50, 32} para p = 21 x1={14, 7, 21} e x2={30, 28, 24,56, 33, 47, 50, 32} 5/31/2017 EDA - Prof. Paulemir Campos 9 Classificação por Troca Método Quick-Sort 2) classificar x1 e x2 3) realizar a união de x1 e x2, nessa ordem Obs.: O passo 2 sugere que este método pode ser definido de modo recursivo. Na prática, os subconjuntos x1 e x2 podem permanecer fisicamente dentro de x. Assim, após a classificação recursiva desses, o conjunto x estará classificado. Neste caso a união dos subconjuntos não é necessária. 5/31/2017 EDA - Prof. Paulemir Campos 10 Classificação por Troca Método Quick-Sort (Algoritmo) QuickSort(inteiro x[N], min, max) início /* particionar o conjunto x da posição min até max sendo que */ /* o pivot ficará na posição j, min j max */ se (min max) então j = Particionar(x[N], min, max); QuickSort(x[N], min, j-1); QuickSort(x[N], j+1, max); fim-se fim 5/31/2017 EDA - Prof. Paulemir Campos 11 Classificação por Troca Método Quick-Sort (Função Particionar) inteiro Particionar(inteiro x[N], min, max) início inteiro pivot, down, up, temp; pivot = x[min]; down = min; up = max; enquanto (down < up) faça enquanto ((x[down] <= pivot) E (down<up)) faça down += 1; // sobe no vetor fim-enquanto enquanto (x[up] > pivot) faça up -=1; // desce no vetor fim-enquanto 5/31/2017 EDA - Prof. Paulemir Campos 12 Classificação por Troca Método Quick-Sort (Função Particionar) se (down < up) então // troca elementos do vetor x[N] temp = x[down]; x[down] = x[up]; x[up] = temp; fim-se fim-enquanto x[min]=x[up]; x[up]=pivot; j = up; retorne j; fim 5/31/2017 EDA - Prof. Paulemir Campos 13 Classificação por Troca Método Quick-Sort (Exemplo) Seja x={14,21,30,7,56,28,24,33,47,50,32}. Classificá-lo usando o método Quick-Sort. Pivot 14 21 30 7 56 28 24 33 47 50 32 30 14 21 7 28 24 30 56 33 47 50 32 21 e 47 14 7 21 28 24 30 33 32 47 56 50 7, 24, 32 e 50 7 14 21 24 28 30 32 33 47 50 56 14, 28 e 33 7 14 21 24 28 30 32 33 47 50 56 5/31/2017 EDA - Prof. Paulemir Campos 14 Classificação por Troca Método Quick-Sort (Observações) É o mais rápido e simples algoritmo de ordenação; Usa o princípio de divide-e-conquista; Complexidades de Tempo 5/31/2017 Caso Médio: O(n . log n); Pior Caso (muito raro): O(n2). EDA - Prof. Paulemir Campos 15 Classificação por Seleção Método Heap-Sort Utiliza a seleção em árvore binária para a obtenção dos elementos do vetor C na ordem desejada. Possui duas fases distintas: 5/31/2017 Construção da árvore binária heap com os elementos do vetor C; Usa-se este heap construído para a seleção dos elementos na ordem desejada. EDA - Prof. Paulemir Campos 16 Classificação por Seleção Método Heap-Sort Árvore Binária heap é um tipo de árvore binária em que todos os descendentes de cada nó são menores que seus nós ascendentes. 5/31/2017 EDA - Prof. Paulemir Campos 17 Classificação por Seleção Método Heap-Sort Exemplo de uma Árvore Binária Heap 1 2 17 5/31/2017 23 3 15 4 25 8 5 19 12 6 EDA - Prof. Paulemir Campos 7 18 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 1. Obter a árvore binária heap equivalente ao vetor V. 1 2 1 17 12 3 25 4 15 8 5 5/31/2017 19 6 25 2 23 8 4 EDA - Prof. Paulemir Campos 23 3 17 7 15 5 19 12 7 6 19 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 1. Obter a árvore binária heap equivalente ao vetor V. (Continuação) 1 2 1 15 23 3 17 4 25 8 5 5/31/2017 19 6 17 2 12 8 4 EDA - Prof. Paulemir Campos 23 3 15 7 25 5 19 12 7 6 20 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no passo 1 1 2 1 17 23 3 15 4 25 8 5 5/31/2017 19 6 17 2 12 8 4 EDA - Prof. Paulemir Campos 19 3 15 7 23 5 12 25 7 6 21 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no passo 1 (continuação do passo 2) 1 2 1 17 12 3 15 4 19 8 5 5/31/2017 23 6 15 2 25 19 4 EDA - Prof. Paulemir Campos 12 3 8 7 17 5 23 25 7 6 22 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no passo 1 (continuação do passo 2) 1 2 1 8 12 3 17 4 15 19 5 5/31/2017 23 6 8 2 25 19 4 EDA - Prof. Paulemir Campos 15 3 17 7 12 5 23 25 7 6 23 Classificação por Seleção Método Heap-Sort (Exemplo) Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap esses elementos em ordem crescente. 2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no passo 1 (continuação do passo 2) 1 8 12 2 3 17 19 4 5 5/31/2017 V = {8, 12, 15, 17, 19, 23, 25} 15 23 25 6 7 EDA - Prof. Paulemir Campos 24 Classificação por Seleção Método Heap-Sort (Observações) 5/31/2017 É um algoritmo ótimo; Complexidade de Tempo: O(n . log n); Não requer espaço extra de memória; Na prática é um pouco mais lento do que o Quick-Sort. EDA - Prof. Paulemir Campos 25 Classificação por Intercalação Método Merge-Sort O princípio de funcionamento deste algoritmo é o seguinte: - dividir o vetor original em n sub-partes de tamanho 1; - intercalar os pares de sub-partes adjacentes, da esquerda para a direita em ordem crescente; - repetir o passo anterior até obter um único vetor de tamanho n, que evidentemente estará ordenado. 5/31/2017 EDA - Prof. Paulemir Campos 26 Classificação por Intercalação 5/31/2017 Método Merge-Sort (Exemplo) EDA - Prof. Paulemir Campos 27 Classificação por Intercalação Método Merge-Sort (Observações) Usa o princípio de divide-e-conquista; É um algoritmo ótimo; Complexidades de Tempo: O(n . log n); Desvantagem 5/31/2017 Requer espaço extra de memória do tamanho do vetor original para uso temporário. Na prática é um pouco mais lento do que o Quick-Sort. EDA - Prof. Paulemir Campos 28 Classificação de Dados: Aplicações Os métodos de classificação interna vistos nesta aula podem ser aplicados para se obter uma ordenação de um vetor de chave de uma determinada tabela, desde de que essas chaves sejam números inteiros. 5/31/2017 EDA - Prof. Paulemir Campos 29 Referências Veloso, P. et al. Estrutura de Dados. Rio de Janeiro: Editora Campus, 1996. 5/31/2017 EDA - Prof. Paulemir Campos 30 Links Interessantes Bubble-Sort: Quick-Sort: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.htm Heap-Sort: http://www.iti.fhflensburg.de/lang/algorithmen/sortieren/networks/sortieren.htm#section3 http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.htm Merge-Sort: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/merge/mergen.htm 5/31/2017 EDA - Prof. Paulemir Campos 31