classificação. 2 métodos de classificação os métodos de classificação podem ser dos tipos:...

77
Classificação

Upload: internet

Post on 17-Apr-2015

121 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

Classificação

Page 2: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

2

Métodos de Classificação

Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a

coleção de itens a classificar pode ficar armazenada em um “array” em memória

Classificação externa – quando as coleções de itens são muito grandes para poder permanecer armazenadas em memória

Page 3: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

3

Regiões classificada e não classificada

Os métodos são iterativos e nos “arrays” de registros aparecem duas regiões: a região já classificada e a região de registros ainda não classificados. Em cada iteração vai crescendo a região classificada. O processo se encerra quando a região classificada abrange todo o “array”.

Page 4: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

4

Métodos mais conhecidos

Os métodos mais conhecidos são: Classificação por troca Classificação por seleção Classificação por inserção

Page 5: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

5

Classificação por troca

Na classificação por troca comparam-se dois elementos do “array” verificando se a posição relativa do antecessor e do sucessor obedecem ao critério de classificação especificado. Caso haja obediência ao critério de classificação nada é feito. Em caso contrário trocam-se as posições destes registros. Exemplos: Bubble Sort Shake Sort Quick Sort

Page 6: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

6

Classificação por Inserção

Na classificação por inserção em cada instante toma-se um elemento, o elemento corrente, do trecho ainda não classificado do “array” e faz-se a inserção deste elemento na posição correta do trecho já classificado. Em conseqüência reduz-se o trecho ainda não classificado e amplia-se o trecho já classificado.Exemplos: Inserção Simples Shell Sort

Page 7: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

7

Exemplo de Inserção Simples

Page 8: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

8

Exemplo de Inserção Simples

Page 9: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

9

Exemplo de Inserção Simples

Page 10: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

10

Exemplo de Inserção Simples

Page 11: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

11

Exemplo de Inserção Simples

Page 12: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

12

Exemplo de Inserção Simples

Page 13: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

13

Exemplo de Inserção Simples

Page 14: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

14

Exemplo de Inserção Simples

Page 15: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

15

Exemplo de Inserção Simples

Page 16: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

16

Exemplo de Inserção Simples

Page 17: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

17

Exemplo de Inserção Simples

Page 18: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

18

Exemplo de Inserção Simples

Page 19: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

19

Classificação por Seleção

Na classificação por seleção, em cada instante seleciona-se do trecho ainda não classificado o elemento mais apropriado para ser acrescentado ao trecho já classificado. Em conseqüência reduz-se o trecho ainda não classificado e amplia-se o trecho já classificado.Exemplos: Seleção Direta Heap Sort

Page 20: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

20

Exemplo de Seleção Direta

Page 21: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

21

Exemplo de Seleção Direta

Page 22: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

22

Exemplo de Seleção Direta

Page 23: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

23

Exemplo de Seleção Direta

Page 24: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

24

Exemplo de Seleção Direta

Page 25: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

25

Exemplo de Seleção Direta

Page 26: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

26

Exemplo de Seleção Direta

Page 27: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

27

Exemplo de Seleção Direta

Page 28: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

28

Exemplo de Seleção Direta

Page 29: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

29

Exemplo de Seleção Direta

Page 30: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

30

Exemplo de Seleção Direta

Page 31: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

31

Exemplo de Seleção Direta

Page 32: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

32

Exemplo de Quick Sort (1)

Page 33: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

33

Exemplo de Quick Sort (2)

Ponto de separação ( 90 + 30 ) / 2 = 60 Posição no “array” 0 1 2 3 4 5 6 7 8 9

Posição no novo“array”

0 1 2 3 4

A trocar no novo "array"

90 55 42 71 30

0 4 90 55 42 71 30 1 2 30 55 42 71 90 30 42 55 71 90

Ponto de separação (30+42)/2=36

Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no

novo“array” 0 1

A trocar no novo "array"

30 42

30 42 Ponto de separação ( 55 + 90

)/2=72,5 Posição no “array” 0 1 2 3 4 5 6 7 8 9

Posição no novo“array”

0 1 2

A trocar no novo "array"

55 71 90

55 71 90 Ponto de separação 55

Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no

novo“array” 0

A trocar no novo "array"

55

55 Ponto de separação (71+90)/2=80,5

Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no

novo“array” 0 1

A trocar no novo "array"

71 90

71 90

Resultado obtido "array"classificado 7 8 11 13 20 30 42 55 71 90

Page 34: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

34

Exemplo de “Shell Sort” (1)

Page 35: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

35

Exemplo de “Shell Sort” (2)

Page 36: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

36

Exemplo de “Shell Sort” (3)

Page 37: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

37

Critérios de Opção

Sugestão

Uma regra simples, que deve ser reavaliada em casos mais sensíveis, consiste em se utilizar: Inserção simples para “arrays” com até 30

registros; “Quick Sort” para “arrays” com mais de 30

registros.

Page 38: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

38

Hierarquia de classes para a classificação interna

Page 39: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

39

Interface Sorter

// pgm15_01.java

public interface Sorter

{

void sort (Comparable[]array);

}

Page 40: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

40

A Classe Abstrata AbstractSorter (1)

// pgm15_02.javapublic abstract class AbstractSorter implements Sorter{ protected Comparable[] array; protected int n;

protected abstract void sort();

Page 41: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

41

A Classe Abstrata AbstractSorter (2)

public final void sort (Comparable[] array) {

n = array.length; this.array = array; if(n > 0)

sort(); this.array = null;

}

protected final void swap(int i, int j) {

Comparable tmp = array[i]; array[i] = array[j]; array[j] = tmp;

}}

Page 42: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

42

Insertion Sorting

Page 43: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

43

A Classe StraightInsertionSorter

// pgm15_03.javapublic class StraightInsertionSorter extends AbstractSorter{ protected void sort() {

for(int i = 1; i < n; ++i)for(int j = i; j > 0 && array[j -

1].isGT (array [j]); --j)

{swap(j, j - 1);

} }}

Page 44: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

44

A Classe BinaryInsertionSorter (1)

// pgm15_04.javapublic class BinaryInsertionSorter extends AbstractSorter{ protected void sort() {

for(int i = 1; i < n; ++i) {

Comparable tmp = array[i]; int left = 0; int right = i;

Page 45: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

45

A Classe BinaryInsertionSorter (2)

while(left < right) {

int middle = (left + right) / 2; if(tmp.isGE(array[middle])) left = middle + 1; else right = middle;

} for(int j = i; j > left; --j)

swap (j - 1, j); }

}}

Page 46: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

46

Bublesort

Page 47: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

47

A Classe BubbleSorter

// pgm15_05.javapublic class BubbleSorter extends AbstractSorter{ protected void sort() {

for(int i = n; i > 1; --i) for(int j = 0; j < i - 1; ++j)

if(array[j].isGT(array[j + 1])) swap(j, j + 1);

}}

Page 48: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

48

QuickSort

Page 49: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

49

A Classe Abstrata AbstractQuickSorter (1)

// pgm15_06.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected static final int cutOff = 2; // minimum cut-off

protected abstract int selectPivot(int left, int right); // ...}

Page 50: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

50

A Classe Abstrata AbstractQuickSorter (2)

// pgm15_07.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected void sort(int left, int right) {

if(right - left + 1 > cutOff) {

int p = selectPivot(left, right); swap(p, right); Comparable pivot = array[right]; int i = left; int j = right - 1;

Page 51: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

51

A Classe Abstrata AbstractQuickSorter (3)

for(;;) {

while(i < j && array[i].isLT(pivot)) ++i; while(i < j && array[j].isGT(pivot)) --j; if(i >= j) break;

swap(i++, j--); } if(array[i].isGT(pivot))

swap(i, right); if(left < i)

sort(left, i - 1); if(right > i)

sort(i + 1, right); }

} // ...}

Page 52: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

52

A Classe Abstrata AbstractQuickSorter (4)

// pgm15_08.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected void sort() {

sort(0, n - 1); Sorter sorter = new

StraightInsertionSorter(); sorter.sort(array);

} // ...}

Page 53: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

53

A Classe MedianOfThreeQuickSorter

// pgm15_09.javapublic class MedianOfThreeQuickSorter extends AbstractQuickSorter{ protected int selectPivot(int left, int right) {

int middle = (left + right) / 2; if (array[left].isGT(array[middle]))

swap(left, middle); if(array[left].isGT(array[right]))

swap(left, right); if(array[middle].isGT(array[right]))

swap(middle, right); return middle;

}}

Page 54: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

54

StraightSelectionSort

Page 55: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

55

A Classe StraightSelectionSorter

// pgm15_10.javapublic class StraightSelectionSorter extends AbstractSorter{ protected void sort() {

for(int i = n; i > 1; --i) {

int max = 0; for(int j = 1; j < i; ++j)

if(array[j].isGT(array[max])) max = j;

swap(i - 1, max); }

}}

Page 56: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

56

HeapSort

Page 57: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

57

Construção de um Heap

Page 58: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

58

Heap Sorting

Page 59: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

59

A classe HeapSorter (1)

// pgm15_11.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;

protected void percolateDown(int i, int length) {

while(2 * i <= length) {

int j = 2 * i; if( j < length &&

array[j + 1 - base].isGT(array[j - base]) )

Page 60: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

60

A classe HeapSorter (2)

j = j + 1; if(array[i - base].isGE(array[j - base]))

break; swap(i - base, j - base); i = j;

} } // ...}

Page 61: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

61

A classe HeapSorter (3)

// pgm15_12.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;

protected void buildHeap() {

for(int i = n / 2; i > 0; --i) percolateDown (i, n);

} // ...}

Page 62: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

62

A classe HeapSorter (4)

// pgm15_13.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;

protected void sort() {

buildHeap(); for(int i = n; i >= 2; --i) { swap(i - base, 1 - base); percolateDown(1, i - 1); }

} // ...}

Page 63: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

63

Two Way Merging

Page 64: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

64

Two Way Merge Sorting

Page 65: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

65

A classe TwoWayMergeSorter (1)

// pgm15_14.java

public class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;

// ...}

Page 66: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

66

A classe TwoWayMergeSorter (2)

// pgm15_15.javapublic class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;

protected void merge(int left, int middle, int right) {

int i = left; int j = left; int k = middle + 1;

Page 67: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

67

A classe TwoWayMergeSorter (3)

while(j <= middle && k <= right) {

if(array[j].isLT(array[k])) tempArray[i++] = array[j++];

else tempArray[i++] = array[k++];

} while(j <= middle)

tempArray[i++] = array[j++]; for(i = left; i < k; ++i)

array[i] = tempArray[i]; } // ...}

Page 68: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

68

A classe TwoWayMergeSorter (4)

// pgm15_16.javapublic class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;

protected void sort() {

tempArray = new Comparable[n]; sort(0, n - 1); tempArray = null;

}

Page 69: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

69

A classe TwoWayMergeSorter (5)

protected void sort (int left, int right) {

if(left < right) {

int middle = (left + right) / 2; sort(left, middle); sort(middle + 1, right); merge(left, middle, right);

} } // ...}

Page 70: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

70

Bucket Sorting

Page 71: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

71

A classe BucketSorter (1)

// pgm15_17.javapublic class BucketSorter extends AbstractSorter{ protected int m; protected int[] count;

public BucketSorter(int m) {

this.m = m; count = new int [m];

} protected void sort()

{ sort((Int[]) array); } // ...}

Page 72: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

72

A classe BucketSorter (2)// pgm15_18.javapublic class BucketSorter extends AbstractSorter{ protected int m; protected int[] count;

protected void sort(Int[] array) {

for(int i = 0; i < m; ++i) count[i] = 0;

for(int j = 0; j < n; ++j) ++count[array[j].intValue()];

for(int i = 0, j = 0; i < m; ++i) for( ; count[i] > 0; --count[i])

array[j++] = new Int(i); } // ...}

Page 73: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

73

Radix Sorting

Page 74: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

74

A classe RadixSorter (1)

// pgm15_19.javapublic class RadixSorter extends AbstractSorter{ protected static final int r = 8; // bits da raiz protected static final int R = 1 << r; // Raiz protected static final int p = (32 + r - 1) / r; // Int com 32 bits // p número de passagens para varrer um Int protected int[] count = new int [R];

protected void sort() { sort ((Int[]) array); }

// ...}

Page 75: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

75

A classe RadixSorter (2)

// pgm15_20.java

public class RadixSorter

extends AbstractSorter

{

protected void sort (Int[] array)

{

Int[] tempArray = new Int[n];

Page 76: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

76

A classe RadixSorter (3)

for(int i = 0; i < p; ++i) {

for(int j = 0; j < R; ++j) count[j] = 0;for(int k = 0; k < n; ++k){

// r * i é o número de dígitos argumento do right shift // R – 1 é a máscara para R = 10000, R - 1 = 1111 ++count[( array[k].intValue() >>> (r*i) ) & (R-1)];

tempArray[k] = array[k]; } int pos = 0; for(int j = 0; j < R; ++j) { int tmp = pos; pos += count[j]; count[j] = tmp; }

Page 77: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar

77

A classe RadixSorter (4)

for(int k = 0; k < n; ++k) {

int j = ( tempArray[k].intValue() >>>

(r*i) ) & (R-1); array[count[j]++] = tempArray[k];

} }

} // ...}