1/18/2014EDA - Prof. Paulemir Campos1 Classificação de Dados UPE – Caruaru – Sistemas de...
Transcript of 1/18/2014EDA - Prof. Paulemir Campos1 Classificação de Dados UPE – Caruaru – Sistemas de...
04/11/23 EDA - Prof. Paulemir Campos 1
Classificação de Dados
UPE – Caruaru – Sistemas de InformaçãoDisciplina: Estrutura de Dados e ArquivoProf.: Paulemir G. Campos
04/11/23 EDA - Prof. Paulemir Campos 2
Conteúdo
Classificação de Dados: Bubble-sort Quick-sort Heap-sort Merge-sort
Aplicações
04/11/23 EDA - Prof. Paulemir Campos 3
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: Interna: Todos os registros estão na
memória principal; Externa: Alguns registros podem estar em
dispositivos auxiliares de armazenamento.
04/11/23 EDA - Prof. Paulemir Campos 4
Classificação de Dados: Introdução Veremos quatro algoritmos de
classificação interna de dados: Classificação por Troca
Algoritmo Bubble-sort Algoritmo Quick-sort
Classificação por Seleção Algoritmo Heap-sort
Classificação por Intercalação Algoritmo Merge-sort
04/11/23 EDA - Prof. Paulemir Campos 5
Classificação por Troca
Método Bubble-Sort 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.
04/11/23 EDA - Prof. Paulemir Campos 6
Classificação por Troca Método Bubble-Sort (Algoritmo)BubbleSort(inteiro V[N], N){ /* FALSE -> 0 e TRUE -> 1 */
inteiro ordenado, j, temp ordenado = FALSEenquanto NÃO(ordenado) {
ordenado = TRUEpara 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}
}}
}
04/11/23 EDA - Prof. Paulemir Campos 7
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
04/11/23 EDA - Prof. Paulemir Campos 8
Classificação por Troca
Método Bubble-Sort (Observações) 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).
04/11/23 EDA - Prof. Paulemir Campos 9
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 x2Exemplo. 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}
04/11/23 EDA - Prof. Paulemir Campos 10
Classificação por Troca
Método Quick-Sort2) classificar x1 e x23) 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.
04/11/23 EDA - Prof. Paulemir Campos 11
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-sefim
04/11/23 EDA - Prof. Paulemir Campos 12
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çadown += 1; // sobe no vetor
fim-enquantoenquanto (x[up] > pivot) faça
up -=1; // desce no vetorfim-enquanto
04/11/23 EDA - Prof. Paulemir Campos 13
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-sefim-enquantox[min]=x[up];x[up]=pivot;j = up; retorne j;
fim
04/11/23 EDA - Prof. Paulemir Campos 14
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
04/11/23 EDA - Prof. Paulemir Campos 15
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
Caso Médio: O(n . log n); Pior Caso (muito raro): O(n2).
04/11/23 EDA - Prof. Paulemir Campos 16
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: 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.
04/11/23 EDA - Prof. Paulemir Campos 17
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.
04/11/23 EDA - Prof. Paulemir Campos 18
Classificação por Seleção Método Heap-Sort
Exemplo de uma Árvore Binária Heap
25
23
1219
17
15 8
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 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.
15
12
2319
17
25 8
1
2
4 5 6
3
7
15
23
1219
25
17 8
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 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.
1. Obter a árvore binária heap equivalente ao vetor V. (Continuação)
25
23
1219
15
17 8
1
2
4 5 6
3
7
25
23
1219
17
15 8
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 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
25
23
1219
17
15 8
1
2
4 5 6
3
7
23
19
2512
17
15 8
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 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)
19
12
2523
17
15 8
1
2
4 5 6
3
7
17
12
2523
15
8 19
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 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)
15
12
2523
8
17 19
1
2
4 5 6
3
7
12
15
2523
8
17 19
1
2
4 5 6
3
7
04/11/23 EDA - Prof. Paulemir Campos 24
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)
8
15
2523
12
17 19
1
2
4 5 6
3
7
V = {8, 12, 15, 17, 19, 23, 25}
04/11/23 EDA - Prof. Paulemir Campos 25
Classificação por Seleção
Método Heap-Sort (Observações) É 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.
04/11/23 EDA - Prof. Paulemir Campos 26
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.
04/11/23 EDA - Prof. Paulemir Campos 27
Classificação por Intercalação
Método Merge-Sort (Exemplo)
04/11/23 EDA - Prof. Paulemir Campos 28
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
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.
04/11/23 EDA - Prof. Paulemir Campos 29
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.
04/11/23 EDA - Prof. Paulemir Campos 30
Veloso, P. et al. Estrutura de Dados. Rio de Janeiro: Editora Campus, 1996.
Referências
04/11/23 EDA - Prof. Paulemir Campos 31
Links Interessantes Bubble-Sort:
http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/networks/sortieren.htm#section3
Quick-Sort: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.ht
m
Heap-Sort: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.ht
m
Merge-Sort: http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/merge/mergen.h
tm