SCC Capítulo 4 Métodos de Ordenação
|
|
|
- Felipe Ribeiro Nunes
- 9 Há anos
- Visualizações:
Transcrição
1 Outros SCC Capítulo 4 Métodos de Ordenação João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 1/91
2 Sumário Ordenação Outros 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 2/91
3 Sumário Ordenação Outros Importância da Ordenação Terminologia básica Eficiência 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 3/91
4 Outros Importância da Ordenação Importância da Ordenação Terminologia básica Eficiência Ordenação (ou Classificação): Tornar mais simples, rápida e viável a recuperação de uma determinada informação, num conjunto grande de informações. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 4/91
5 Sumário Ordenação Outros Importância da Ordenação Terminologia básica Eficiência 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 5/91
6 Outros Terminologia básica Importância da Ordenação Terminologia básica Eficiência arquivo de tamanho n é uma sequência de n itens: r[0], r[1], r[2],..., r[n-1] cada item no arquivo é chamado de registro. uma chave k[i], é associada a cada registro r[i] a chave geralmente é um campo do registro ordenação pela chave é quando os registros são classificados por um campo chave. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 6/91
7 Outros Terminologia básica Importância da Ordenação Terminologia básica Eficiência ordenação interna: dados estão na memória principal; ordenação externa: os dados estão em um meio auxiliar; ordenação estável: se, para os registros i e j, k[i] igual a k[j]; se r[i] precede r[j] no arquivo original, r[i] precederá r[j] no arquivo classificado. Um algoritmo de ordenação é dito estável, se ele preserva a ordem relativa original dos registros com mesmo valor de chave. a ordenação ocorre sobre os próprios registros ou sobre uma tabela auxiliar de ponteiros: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 7/91
8 Outros Terminologia básica Importância da Ordenação Terminologia básica Eficiência Figuras [2]: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 8/91
9 Outros Terminologia básica Importância da Ordenação Terminologia básica Eficiência ATENÇÃO Não existe um método de ordenação considerado universalmente superior a todos os outros. É necessário analisar o problema e, com base nas características dos dados, decidir qual o método que melhor se aplica à ele. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 9/91
10 Sumário Ordenação Outros Importância da Ordenação Terminologia básica Eficiência 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 10/91
11 Outros Importância da Ordenação Terminologia básica Eficiência Considerações sobre a Eficiência Alguns aspectos de medida de eficiência: tempo para codificação do programa de ordenação; tempo de máquina para a execução do programa; espaço de memória necessário. Normalmente o tempo gasto é medido pelo número de operações críticas, ao problema, que são efetuadas. Nesse caso as operações críticas são: comparações de chaves; movimentação de registros ou de ponteiros; troca entre dois registros. A medida é tomada pela análise do melhor caso, do pior caso e do caso médio. O resultado é uma fórmula em função de n (número de registros do arquivo). João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 11/91
12 Outros Importância da Ordenação Terminologia básica Eficiência Considerações sobre a Eficiência Na realidade o tempo gasto não depende exclusivamente do tamanho do arquivo, mas também de outros aspectos, por exemplo: se existe uma pré ordenação no arquivo ou não. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 12/91
13 Outros Ordenação por Seleção Ordenação por Inserção Ordenação: por Troca por Seleção por Inserção de Shell por Cálculo de Endereço por Intercalação por Contagem de Menores por Contagem de Tipos de Raízes João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 13/91
14 Sumário Ordenação Outros Ordenação por Seleção Ordenação por Inserção 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 14/91
15 Outros Ordenação por Seleção Ordenação por Inserção 2 tipos: Bolha (bubble sort) Quicksort Bolha Característica do método: algoritmo fácil pouco eficiente Idéia básica é percorrer o arquivo sequencialmente várias vezes. Cada passagem consiste em comparar cada elemento no arquivo e seu sucessor (x[i] com x[i+1]) e trocar os dois elementos se não estiverem na ordem certa. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 15/91
16 Outros : Bolha Ordenação por Seleção Ordenação por Inserção Exemplo: seja o seguinte arquivo x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] Primeira passagem: x[0] com x[1] (25 com 57): nenhuma troca x[1] com x[2] (57 com 48): troca x[2] com x[3] (57 com 37): troca x[3] com x[4] (57 com 12): troca x[4] com x[5] (57 com 92): nenhuma troca x[5] com x[6] (92 com 86): troca x[6] com x[7] (92 com 33): troca João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 16/91
17 Outros : Bolha Ordenação por Seleção Ordenação por Inserção Depois da primeira passagem: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] é o maior elemento do conjunto Próxima passada não compara mais com esse elemento pois já está na posição correta. E assim por diante. x é um vetor com números inteiros a ordenar n é o número de elementos do vetor João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 17/91
18 Outros : Bolha Ordenação por Seleção Ordenação por Inserção O conjunto completo de iterações: iteração x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 18/91
19 Outros Ordenação por Bolha - Versão 1 Ordenação por Seleção Ordenação por Inserção bolha(int v[], int T) { int i, aux, troca = 1; while (troca) // 6 vezes para o exemplo anterior { troca = 0; for (i = 0; i < T-1; i++) // 42 vezes if (v[i] > v[i+1]) { aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; troca = 1; } } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 19/91
20 Outros Ordenação por Bolha - Versão 2 Ordenação por Seleção Ordenação por Inserção bolha(int v[], int T) { int i, j, aux, troca = 1; for (i = 0; i < T-1 && troca; i++) // 6 vezes { troca = 0; for (j = 0; j < T-i-1; j++)// 27 vezes { if (v[j] > v[j+1]) { troca = 1; aux = v[j]; v[j] = v[j+1]; v[j+1] = aux; } } } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 20/91
21 Outros Ordenação por Bolha Ordenação por Seleção Ordenação por Inserção Observação: Os algoritmos apresentados trazem dois aperfeiçoamentos que tornaram o método melhor: teste de parada quando já ordenada (versões 1 e 2); não efetuar as comparações até o final do vetor em cada passo, considerando-se que os elementos vão ficando na posição correta em cada passo (apenas versão 2). Eficiência do método da bolha sem considerar as melhorias descritas acima: (n 1) comparações nas (n 1) passagens total de comparações: (n 1) (n 1) = n 2 2n + 1, que é O(n 2 ) o número de trocas não é maior que o número de comparações, mas gasta mais tempo na execução. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 21/91
22 Outros Ordenação por Bolha Ordenação por Seleção Ordenação por Inserção Teste de parada trará vantagem quando se trabalha com arquivo pré-ordenado. Deve-se, porém, considerar o número de vezes que a variável troca é testada e recebe valor! A redução do número de comparações em cada passagem: 1a. Passagem: n 1 comparações 2a. Passagem: n 2 comparações 3a. Passagem: n 3 comparações... (n 1)a. Passagem: 1 comparação soma: (n 1) = (n2 n) 2 portanto: O(n 2 ) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 22/91
23 Outros Ordenação por Seleção Ordenação por Inserção de Partição: quicksort Seja x um vetor a ordenar e n seu número de elementos. Idéia básica: 1 Tome dois ponteiros i e j. Inicie i com 0 e j com n 1; 2 Compare x[i] com x[j], se x[i] x[j] não é necessário trocar, decremente j e continue comparando; 3 Se x[i] > x[j], troque x[i] com x[j], incremente i e continue comparando, até a próxima troca; 4 Após a próxima troca, decremente j. 5 Repita os passos 2 a 4 até i = j. Após essa primeira passagem, o elemento x[i] (que é o mesmo que x[j], pois i = j) está na posição correta. Os elementos à esquerda dele são menores e os da direita são maiores. Aplicar novamente o método para as duas partições. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 23/91
24 Outros Ordenação por Seleção Ordenação por Inserção de Partição: quicksort Tome o seguinte exemplo: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] [25] i [33] j 25 com 33. Não troca:j :[25] i [86] j com 86. Não troca: j :[25] i [92] j com 92. Não troca: j :[25] i [12] j com 12. Troca: i++:12-[57] i [25] j com 25. Troca: j :12-[25] i -48-[37] j com 37. Não troca: j :12-[25] i -[48] j com 48. Não troca: j :12-[25] i,j i = j: Pára. 25 está na posição correta (x[1]). Duas partições: (12) e ( ). João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 24/91
25 Outros Ordenação por Seleção Ordenação por Inserção de Partição: quicksort Classifica-se primeiro a partição da esquerda (12) colocando a partição da direita ( ) numa pilha. Como um arquivo de um elemento já está classificado (12 é x[0]), o processo se repete para a partição da direita: [48] i [33] j. Troca 48 com 33: i++: (33-[37] i [48] j ) Não troca 37 com 48: i++: (33-37-[57] i [48] j ) Troca 57 com 48: j : (33-37-[48] i -92-[86] j -57) Não troca 48 com 86: j : (33-37-[48] i -[92] j ) Não troca 48 com 92: j : (33-37-[48] i,j ) i = j: Pára. 48 está na posição correta (x[4]). Duas partições: (33-37) e ( ). João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 25/91
26 Outros Ordenação por Seleção Ordenação por Inserção de Partição: quicksort Classifica-se a partição da esquerda (33-37) colocando a da direita ( ) na pilha. Não troca 33 com 37: j : ([33] i,j -37) i = j: Pára. 33 está na posição correta (x[2]). Como a partição da esquerda é vazia e a da direita contém um único elemento (37 é x[3]), pega-se a partição da pilha ([92] i -86-[57] j ). Troca 92 com 57: i++: (57-[86] i -[92] j ) Não troca 86 com 92: i++: (57-86-[92] i,j ) i = j: Pára. 92 (x[7]) está na posição correta. Classifica-se a partição da esquerda e coloca-se a partição da direita (vazia) na pilha. Não troca 57 com 86: j : ([57] i,j -86)-92. i = j: Pára. 57 (x[5]) está na posição correta. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 26/91
27 Outros Ordenação por Seleção Ordenação por Inserção de Partição: quicksort Como a partição da esquerda é vazia e a da direita contém um único elemento (86 = x[6]), e a pilha está vazia, vetor classificado: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] O algoritmo quicksort pode ser definido mais adequadamente como um procedimento recursivo, como será visto no próximo capítulo. Por ora, apresenta-se um procedimento iterativo para o quicksort. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 27/91
28 Outros Programa quicksort Ordenação por Seleção Ordenação por Inserção void quicksort(int x[], int n) { struct elemtipo elemento; struct LIFO pilha; int i,j; pilha.top = -1; elemento.inf = 0; elemento.sup = n-1; push(&pilha, &elemento); while (!vazia(&pilha)) // repete enquanto existir algum subvetor não classificado { pop(&pilha,&elemento); while (elemento.inf < elemento.sup) { // processa a subvetor seguinte particao(x, elemento.inf, elemento.sup, &j); // empilha o subvetor maior if (j-elemento.inf > elemento.sup-j) { // empilha o subvetor inferior i = elemento.sup; elemento.sup = j-1; push(&pilha, &elemento); // processa o subvetor superior elemento.inf = j+1; elemento.sup = i; } else { // empilha o subvetor superior i = elemento.inf; elemento.inf = j+1; push(&pilha, &elemento); // processa o subvetor inferior elemento.inf = i; elemento.sup = j-1; } } } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 28/91
29 Outros Programa quicksort Ordenação por Seleção Ordenação por Inserção void particao(int x[], int min, int max, int *p) { int a, i, temp, j, troca; a = x[min]; // a é o elemento cuja posição final é procurada (pivô) j = max; i = min; troca = 0; while (i < j) { if (!troca) while (x[i] <= x[j] && i < j) j- -; else while (x[i] <= x[j] && i < max) i++; if (i < j) { // troca x[i] e x[j] temp = x[i]; x[i] = x[j]; x[j] = temp; troca = 1-troca; } } x[j] = a; *p = j; } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 29/91
30 Outros Eficiência do quicksort Ordenação por Seleção Ordenação por Inserção Suponha que: o tamanho do arquivo de dados n seja uma potência de 2, ou seja, n = 2 m, de modo que m = log 2 n; a posição correta para o pivô termine sempre sendo o meio exato do subvetor. Assim ocorrerão aproximadamente n comparações (na realidade n 1) na primeira passagem, após a qual o arquivo será dividido em dois sub-arquivos com tamanho n/2; para cada um destes arquivos ocorrem n/2 comparações e é formado um total de 4 arquivos, cada qual com o tamanho n/4, e assim por diante; depois de separar os sub-arquivos m vezes, existirão n arquivos de tamanho 1. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 30/91
31 Outros Eficiência do quicksort Ordenação por Seleção Ordenação por Inserção Assim, o número total de comparações para a ordenação inteira será aproximadamente ou n + 2 (n/2) + 4 (n/4) n (n/n) n + n + n n (m termos) comparações. Assim O(n m) ou O(n log n) (lembre-se de que m = log 2 n). Portanto, se as condições descritas anteriormente forem satisfeitas, a ordenação rápida (quick sort) será O(n log n), o que é relativamente eficiente. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 31/91
32 Sumário Ordenação Outros Ordenação por Seleção Ordenação por Inserção 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 32/91
33 Seleção Direta Ordenação Outros Ordenação por Seleção Ordenação por Inserção Idéia Básica: 1 Selecionar o maior elemento do conjunto; 2 Trocá-lo com o último elemento; 3 Repetir os itens (1) e (2) com os N 1 elementos restantes, depois com os N 2 e assim por diante até sobrar o primeiro elemento que será o menor do conjunto. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 33/91
34 Seleção Direta Ordenação Outros Ordenação por Seleção Ordenação por Inserção void selectsort(int x[], int n) { int i, indx, j, maior; for (i = n-1; i > 0; i- -) { maior = x[0]; indx = 0; for (j = 1; j <= i; j++) if (x[j] > maior) { maior = x[j]; indx = j; } x[indx]= x[i]; x[i] = maior; } } Desempenho do método: O(n 2 ) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 34/91
35 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção Baseado no princípio de ordenação por seleção em árvore binária. O método consiste em duas fases distintas: primeiro é feita a montagem da árvore binária (HEAP) contendo todos os elementos do vetor, de tal forma que o valor contido em qualquer nó seja maior do que os valores de seus sucessores e, numa segunda fase, o HEAP é usado para a seleção dos elementos na ordem desejada. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 35/91
36 Heap Ordenação Outros Ordenação por Seleção Ordenação por Inserção João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 36/91
37 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção A árvore binária é construída sobre o próprio vetor de tamanho n, onde: 1 o sucessor à esquerda do elemento de índice i é o elemento de índice 2 (i + 1) 1, se 2 (i + 1) 1 < n, caso contrário não existe; 2 o sucessor à direita do elemento de índice i é o elemento de índice 2 (i + 1), se 2 (i + 1) < n, caso contrário não existe. Dada um vetor k 0, k 1,..., k n 1, os elementos k n/2,..., k n 1 vão formar um heap. Esses elementos formam a linha inferior da árvore binária associada (suas folhas). João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 37/91
38 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção PASSOS: 1 Expandir o heap k n/2,..., k n 1 para k 0, k 1,..., k n 1 fazendo-se as devidas trocas de posição dos elementos. Nesse momento teremos em k 0 o maior elemento do vetor; 2 trocar k 0 com k n 1 ; 3 expandir o heap k 1, k 2,..., k n 2 pela inclusão de k 0 (k n 1 anterior). Após essa inclusão, k 0 será o segundo maior elemento; 4 trocar k 0 com k n 2 e repetir o processo até a ordenação total. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 38/91
39 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção void fazheap(int a[], int n) { int i; // reajusta os elementos em a[0:n-1] para formar um heap for (i = (n-1)/2; i >= 0; i- -) ajuste(a,i,n-1); } void heapsort(int a[], int n) { int t, i; // a[0:n-1] contém n elementos a ser ordenado. // HeapSort rearranja-os em ordem não-decrescente. fazheap(a,n); // transforma o vetor em um heap // troca o novo máximo com o elemento no final do vetor for (i = n-1; i >= 1; i- -) { t = a[i]; a[i] = a[0]; a[0] = t; ajuste(a, 0, i-1); } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 39/91
40 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção void ajuste(int a[], int i, int n) { // Árvores binárias completas com raízes 2(i+1)-1 e 2(i+1) são // combinadas com o nó i para formar um heap com raiz i. // Nenhum nó tem endereço maior que n-1 ou menor que 0. int item, j; j = 2*(i+1)-1; item = a[i]; while (j <= n) { if ((j < n) && (a[j] < a[j+1])) j = j + 1; // compara sucessor da esquerda com o da direita : j é o maior if (item >= a[j]) break; // uma posição para item é encontrada a[(j+1)/2-1] = a[j]; j = 2*(j+1)-1; } a[(j+1)/2-1] = item; } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 40/91
41 Heap Sort Ordenação Outros Ordenação por Seleção Ordenação por Inserção iteração x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] fazheap: i= fazheap: i= fazheap: i= fazheap: i= heapsort: i= heapsort: i= heapsort: i= heapsort: i= heapsort: i= heapsort: i= heapsort: i= João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 41/91
42 Outros Eficiência do Heap Sort Ordenação por Seleção Ordenação por Inserção À primeira vista, parece que o heap sort não apresenta bons resultados. Afinal, deve-se mover os elementos de maior valor para o início antes de serem finalmente colocados em sua posição correta (no final). De fato, o algoritmo não é recomendado para pequenos conjuntos de elementos. Mas para valores grandes de n o seu desempenho melhora muito! João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 42/91
43 Outros Eficiência do Heap Sort Ordenação por Seleção Ordenação por Inserção No pior caso, existem n/2 passos de escorregamento para o início necessários para posicionar elementos através de log(n/2), log(n/2 1),..., log(n 1) posições. Logo, a fase de ordenação usa n 1 passos de escorregamento, como no máximo, log(n 1), log(n 2),..., 1 movimentos respectivamente. Devem ser acrescentados os n 1 movimentos necessários para guardar o elemento recém-escorregado no extremidade direita. Logo, a ordenação pelo heap sort leva cerca de n log n passos, mesmo no pior caso. Desempenho do método: O(n log n) mesmo no pior caso (excelente!) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 43/91
44 Sumário Ordenação Outros Ordenação por Seleção Ordenação por Inserção 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 44/91
45 Inserção Simples Ordenação Outros Ordenação por Seleção Ordenação por Inserção É o método que consiste em inserir informações num conjunto já ordenado. void insersort(int x[], int n) { int i, k, y; for (k = 0; k < n; k++) { y = x[k]; for (i = k-1; i >= 0 && y < x[i]; i- -) x[i+1] = x[i]; x[i+1] = y; } } Desempenho: O(n 2 ) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 45/91
46 Inserção Simples Ordenação Outros Ordenação por Seleção Ordenação por Inserção iteração x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] k= k= k=2 (for i=1) k=3 (for i=2,1) k=4 (for i=3,2,1,0) k= k=6 (for i=5) k=7 (for i=6,5,4,3,2) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 46/91
47 Inserção Simples Ordenação Outros Ordenação por Seleção Ordenação por Inserção Variações do Método: inserção com pesquisa binária: consiste em utilizar o método da busca binária para localizar a posição a ser inserido o elemento: Diminui o número de comparações mas ainda é necessário efetuar o deslocamento dos elementos para a inserção. Isso sendo executado n vezes resulta em O(n 2 ) substituições. De modo geral não ajuda! Inserção em lista ligada: consiste em não mover as informações e sim efetuar as inserções nas ligações: O tempo gasto com comparações continua sendo O(n 2 ), além do uso de um vetor adicional para o link. A melhor variação é a inserção com incrementos decrescentes, também chamado de ordenação de Shell. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 47/91
48 Sumário Ordenação Outros 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 48/91
49 Outros Ordenação de Shell Tem como objetivo aumentar o passo de movimento dos elementos ao invés das posições adjacentes (passo = 1). consiste em classificar sub-arquivos do original; esses sub-arquivos contêm todo k-ésimo elemento do arquivo original; o valor de k é chamado de incremento; por exemplo, se k é 5, o sub-arquivo consistindo dos elementos x[0], x[5], x[10],... é classificado primeiro. Cinco sub-arquivos, cada um contendo um quinto dos elementos do arquivo original, são classificados dessa maneira. São eles: sub-arquivo 1 -> x[0] x[5] x[10]... sub-arquivo 2 -> x[1] x[6] x[11]... sub-arquivo 3 -> x[2] x[7] x[12]... sub-arquivo 4 -> x[3] x[8] x[13]... sub-arquivo 5 -> x[4] x[9] x[14]... João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 49/91
50 Outros Ordenação de Shell Após a ordenação dos sub-arquivos: define-se um novo incremento menor que o anterior; gera-se novos sub-arquivos; e aplica-se novamente o método da inserção nesses novos sub-arquivos. E assim sucessivamente para novos valores de k, até que k seja igual a 1. Sequência de incrementos => definida previamente: h 1, h 2,..., h t, com as condições: h t = 1 e h i+1 < h i. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 50/91
51 Outros Ordenação de Shell void shellsort(int x[], int n, int incrmnts[], int numinc) { int incr, j, k, span, y; for (incr = 0; incr < numinc; incr++) { span = incrmnts[incr]; // span é o tamanho do incremento for(j = span; j < n; j++) { // insere elemento x[j] em sua posição correta dentro de seu sub-arquivo y = x[j]; for (k = j-span; k >= 0 && y < x[k]; k -= span) x[k+span] = x[k]; x[k+span] = y; } } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 51/91
52 Outros Ordenação de Shell incremento x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] 5 (0) (1) (2) (0) (1) (2) (3) (4) (0) (1) (2) (3) (4) (5) (6) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 52/91
53 Outros Eficiência da Ordenação de Shell Um problema com o shell sort ainda não resolvido é a escolha dos incrementos que fornece os melhores resultados. É desejável que ocorra o maior número possível de interações entre as diversas cadeias Se a uma sequência, previamente ordenada, de distância k for em seguida aplicada uma ordenação de distância i, então esta sequência permanece ordenada de distância k. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 53/91
54 Outros Eficiência da Ordenação de Shell Knuth [1] mostra que uma escolha razoável de incrementos é a sequência (escrita em ordem inversa): 1, 4, 13, 40, 121,... onde h k 1 = 3h k + 1, h t = 1 e t = (log 3 n) 1. Ele também recomenda a sequência 1, 3, 7, 15, 31,... onde h k 1 = 2h k + 1, h t = 1 e t = (log 2 n) 1. Para esta última escolha, a análise matemática indica que o esforço computacional necessário à ordenação de n elementos através do shell sort é proporcional a n 1.2 [2]. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 54/91
55 Outros Ordenação por Cálculo de Endereço Também conhecida por espalhamento. Nesse método uma função f é aplicada a cada elemento. O resultado dessa função determina em qual dos diversos sub-arquivos o registro será colocado. A função deverá ter a propriedade de que se x y, f (x) f (y). Essa função é chamada de preservadora da ordem. Cada item é posicionado num sub-arquivo na sequência correta. Depois de todos os itens do arquivo original serem posicionados nos sub-arquivos, os sub-arquivos poderão ser concatenados para gerar o resultado classificado. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 55/91
56 Outros Ordenação por Cálculo de Endereço Considere novamente o arquivo exemplo abaixo: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] Cria-se 10 sub-arquivos, um para cada um dos dez primeiros dígitos (mais significativos) possíveis (0 a 9). Inicialmente, estes sub-arquivos estão vazios. Um vetor de ponteiros f [10] é declarado, onde f [i] aponta para o primeiro elemento no arquivo cujo primeiro dígito (mais significativo) seja i. Depois de rastrear o primeiro elemento (25), ele será posicionado no arquivo encabeçado por f [2]. Cada sub-arquivo será mantido como uma lista ligada classificada dos elementos do vetor original. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 56/91
57 Outros Ordenação por Cálculo de Endereço Depois de processar cada elemento do arquivo original, os sub-arquivos aparecerão como: f (0) = NULL f (1) 12 NULL f (2) 25 NULL f (3) 33 f (4) 48 NULL f (5) 57 NULL f (6) = NULL f (7) = NULL f (8) 86 NULL f (9) 92 NULL 37 NULL João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 57/91
58 Outros Programa Cálculo de Endereço void end(int x[], int n) { PNO f[10], p; int prim, i, j, y; struct tipo_no no[numelts]; for (i = 0; i < n; i++) // Inicia lista ligada vazia no[i].info = 0; for (i = 0; i < n-1; i++) no[i].prox = no[i+1].prox; no[n-1].prox = NULL; for (i = 0; i < 10; i++) f[i] = NULL; for (i = 0; i < n; i++) { y = x[i]; prim = y/10; // encontra o primeiro dígito do número de dois dígitos decimais coloca (&f[prim], y); // coloca insere y na posição correta na lista ligada apontada por f[prim] } i = 0; for (j = 0; j < 10; j++) { p = f[j]; while (p!= NULL) { x[i++] = p -> info; p = p -> prox; } } } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 58/91
59 Outros Eficiência do Cálculo de Endereço As exigências de espaço da ordenação por cálculo de endereço são aproximadamente 2 n (usado pelo vetor no) além de alguns nós de cabeçalho e variáveis temporárias. Para avaliar as exigências de tempo: se os n elementos originais forem uniformemente distribuídos pelos m sub-arquivos e o valor de n/m for aproximadamente 1, o tempo para a ordenação será praticamente O(n). Por outro lado, se n/m for muito maior que 1, ou se o arquivo original não for uniformemente distribuído pelos m sub-arquivos, será necessário um trabalho considerável. Desempenho: O(n 2 ) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 59/91
60 Sumário Ordenação Outros 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 60/91
61 Outros Ordenação por Intercalação A intercalação mergesort é o método que combina dois ou mais arquivos classificados num terceiro arquivo classificado. Pode-se usar essa técnica para classificar um arquivo da seguinte maneira: divida o arquivo em n sub-arquivos de tamanho 1; intercale pares de sub-arquivos adjacentes. Tem-se então, aproximadamente n/2 sub-arquivos de tamanho 2. Repita o processo até restar apenas um arquivo de tamanho n. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 61/91
62 Outros Ordenação por Intercalação Considere mais uma vez o arquivo exemplo abaixo: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] As passagens sucessivas da ordenação por intercalação ficam: [25] [57] [48] [37] [12] [92] [86] [33] [25 57] [37 48] [12 92] [33 86] [ ] [ ] [ ] João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 62/91
63 Outros Ordenação por Contagem de Menores [5] Idéia básica: se soubermos quantos são os elementos menores que um determinado valor, saberemos a posição que o mesmo deve ocupar no arranjo ordenado: Por exemplo, se há 5 valores menores do que o elemento 7, o elemento 7 será inserido na sexta posição do arranjo. Usa-se um arranjo auxiliar para manter a contagem de menores e um outro para montar o arranjo ordenado. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 63/91
64 Outros Ordenação por Contagem de Menores Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 64/91
65 Outros Ordenação por Contagem de Menores 1 o. Passo: criar arranjo auxiliar: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 65/91
66 Outros Ordenação por Contagem de Menores 1 o. Passo: criar arranjo auxiliar: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 66/91
67 Outros Ordenação por Contagem de Menores 2 o. Passo: montar arranjo final ordenado: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 67/91
68 Outros Ordenação por Contagem de Menores 2 o. Passo: montar arranjo final ordenado: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 68/91
69 Outros Ordenação por Contagem de Menores void contagem_de_menores(int A[], int n) { int X[n], B[n], i, j; for (i = 0; i < n; i++) //inicializando arranjo auxiliar X[i] = 0; for (i = 1; i < n; i++) //contando menores for (j = i-1; j >= 0; j-) if (A[i] < A[j]) X[j] += 1; else X[i] += 1; for (i = 0; i < n; i++) //montando arranjo final B[X[i]] = A[i]; for (i = 0; i < n; i++) //copiando arranjo final para original A[i] = B[i]; } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 69/91
70 Outros Ordenação por Contagem de Menores Complexidade de tempo? Complexidade de espaço? João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 70/91
71 Outros Ordenação por Contagem de Menores Complexidade de tempo: O(n 2 ) Complexidade de espaço: O(3n) João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 71/91
72 Sumário Ordenação Outros 1 Ordenação Importância da Ordenação Terminologia básica Eficiência 2 Ordenação por Seleção Ordenação por Inserção 3 Outros João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 72/91
73 Outros Ordenação por Contagem de Tipos Também chamado counting-sort, Idéia básica: conta-se o número de vezes que cada elemento ocorre no arranjo; se há k elementos antes dele, ele será inserido na posição k + 1 do arranjo ordenado: Restrição: os elementos devem estar contidos em um intervalo [min, max] do conjunto de números inteiros positivos. Usa-se um arranjo auxiliar para manter a contagem de tipos e um outro para montar o arranjo ordenado. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 73/91
74 Outros Ordenação por Contagem de Tipos Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 74/91
75 Outros Ordenação por Contagem de Tipos Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 75/91
76 Outros Ordenação por Contagem de Tipos Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 76/91
77 Outros Ordenação por Contagem de Tipos Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 77/91
78 Outros Ordenação por Contagem de Tipos Exemplo: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 78/91
79 Outros Ordenação por Contagem de Tipos void countingsort(int A[], int n) { int B[n], i, j, max; max=a[0]; //determinando max for (i=1; i<n; i++) if (A[i]>max) max=a[i]; int X[max+1]; //inicializando arranjo auxiliar for (i=0; i<max+1; i++) X[i]=0; //contando tipos for (i=0; i<n; i++) X[A[i]]++; //montando arranjo final j=0; for (i=0; i<max+1; i++) while (X[i]!=0) { B[j]=i; j++; X[i]-; } //copiando arranjo final para original for (i=0; i<n; i++) A[i]=B[i]; } João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 79/91
80 Outros Ordenação por Contagem de Tipos Complexidade de tempo? Complexidade de espaço? João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 80/91
81 Outros Ordenação por Contagem de Tipos Complexidade de tempo: O(n), se max n: Por que é tão melhor do que outros métodos? Complexidade de espaço: O(3n), se max n. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 81/91
82 Outros Ordenação de Raízes (Radix sort) [4] Esta ordenação baseia-se nos valores dos dígitos nas representações posicionais dos números sendo ordenados. Executa as seguintes ações começando pelo dígito menos significativo e terminando com o mais significativo Pegue cada número na sequência e posicione-o em uma das dez filas, dependendo do valor do dígito sendo processado. Em seguida, restaure cada fila para a sequência original, começando pela fila de números com um dígito 0 e terminando com a fila de números com o dígito 9. Quando essas ações tiverem sido executadas para cada dígito, a sequência estará ordenada. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 82/91
83 Outros Ordenação de Raízes (Radix sort) Exemplo: Lista original: Filas baseadas no dígito menos significativo início final fila[0] fila[1] fila[2] fila[3] 33 fila[4] fila[5] 25 fila[6] 86 fila[7] fila[8] 48 fila[9] João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 83/91
84 Outros Ordenação de Raízes (Radix sort) Depois da primeira passagem: Filas baseadas no dígito mais significativo início final fila[0] fila[1] 12 fila[2] 25 fila[3] fila[4] 48 fila[5] 57 fila[6] fila[7] fila[8] 86 fila[9] 92 Lista classificada: João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 84/91
85 Outros Radix sort - Algoritmo for (k = dígito menos significativo; k <= dígito mais significativo; k++) { for (i = 0; i < n; i++) { y = x[i]; j = k-ésimo dígito de y; posiciona y no final da fila[j]; } for (qu = 0; qu < 10; qu++) coloca elementos da fila[qu] na próxima posição sequencial; } Obs.: os dados originais são armazenados no array x. João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 85/91
86 Outros Radix sort - Algoritmo Evidentemente, as exigências de tempo para o método de ordenação de raízes dependem da quantidade de dígitos (m) e do número de elementos na lista (n). Como a repetição mais externa é percorrida m vezes e a repetição mais interna é percorrida n vezes. Então, T (n) = O(m n). Se o número de dígitos for menor, T (n) = O(n) Se as chaves forem densas (isto é, se quase todo número que possa ser uma chave for de fato uma chave), m se aproximará de log n. Neste caso, T (n) = O(n log n). João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 86/91
87 Conclusão Geral Ordenação Outros Conclusão Geral: em termos de comparações e atribuições Pequenos arquivos: inserção simples Grandes arquivos: quicksort com elemento central como pivô João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 87/91
88 Apêndice Bibliografia Bibliografia I [1] Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C. Algoritmos - Teoria e Prática. Ed. Campus, Rio de Janeiro, Segunda Edição, [2] Engelbrecht, Angela Estrutura e Recuperação de Informação II. Apostila. Engenharia de Computação. PUC-Campinas, [3] Horowitz, E., Sahni, S. Rajasekaran, S. Computer Algorithms. Computer Science Press, João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 88/91
89 Apêndice Bibliografia Bibliografia II [4] Liang, Zhao Aula 4 - Ordenação 2. Introdução à Ciência da Computação II - SCE0535. Slides. Ciência de Computação. ICMC/USP, [5] Pardo, Thiago A. S. Análise de Algoritmos. SCE-181 Introdução à Ciência da Computação II. Slides. Ciência de Computação. ICMC/USP, [6] Tenenbaum, A. M., Langsam, Y., Augestein, M. J. Estruturas de Dados Usando C. Makron Books, João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 89/91
90 Apêndice Bibliografia Bibliografia III [7] Wirth, N. Algoritmos e Estruturas de Dados. LTC, João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 90/91
91 Apêndice Bibliografia Referências I [1] Knuth, D. E. The Art of Computer Programming. Volume 3. Reading, Mass.: Addison-Wesley, [2] Shell, D. L. A High-Speed Sorting Procedure. Communications of the ACM, Volume 2, Issue 7 (July 1959), pp João Luís G. Rosa c SCC-501: IV. Métodos de Ordenação 91/91
ALGORITMOS DE ORDENAÇÃO
ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens
MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2
MÉTODOS DE ORDENAÇÃO Introdução à Programação SI2 2 Conteúdo Conceitos básicos Classificação por troca Classificação por inserção Classificação por seleção 3 Conceitos Básicos Ordenar: processo de rearranjar
INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática
SCC Capítulo 2 Recursão
SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis
O Problema da Ordenação Métodos de Ordenação Parte 1
Métodos de Ordenação Parte 1 SCC-201 Introdução à Ciência da Computação II Rosane Minghim 2010 Ordenação (ou classificação) é largamente utilizada Listas telefônicas e dicionários Grandes sistemas de BD
Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)
Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Hebert Coelho e Nádia Félix Ordenação É a operação de rearranjar os dados em uma determinada ordem. Problema da ordenação - Definição formal
heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;
heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i0 && x[f]
SCC-501 Introdução à Ciência de Computação II
SCC-501 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis 2011 João
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro [email protected] Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método
Métodos de Classificação
Métodos de Classificação 261 Objetivos e Caracterizações O acesso a um conjunto de dados é facilitado se o mesmo está armazenado conforme uma certa ordem, baseada num critério conhecido. O objetivo básico
Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta
Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Direta Prof. Gustavo Callou [email protected] [email protected] Classificação por Inserção Métodos de Classificação em Memória
Métodos de Ordenação Parte I
Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno [email protected] / [email protected] Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar
Métodos de Ordenação
Métodos de Ordenação Conceitos básicos sobre ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem específica. Objetivo da ordenação: facilitar a recuperação posterior
INF111 Programação II Aulas 11, 12, 13 Ordenação
INF Programação II Aulas,, Ordenação Departamento de Informática UFV Ordenação A ordenação é o processo de organizar um conunto (vetor) de n obetos ou registros segundo uma determinada ordem crescente
Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome
Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula
Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Ordenação por bolha (bubble sort)
Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 032/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua
SCC-201 Introdução à Ciência de Computação II
SCC-201 João Luís Garcia Rosa 1 Ricardo J. G. B. Campello 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br
Algoritmos de Ordenação
Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca
Linguagem C: Ordenação
Instituto de C Linguagem C: Ordenação Luis Martí Instituto de Computação Universidade Federal Fluminense [email protected] - http://lmarti.com Tópicos Principais Introdução Algoritmos de ordenação Ordenação
Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I
2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br
Ordenação: Heapsort. Algoritmos e Estruturas de Dados II
Ordenação: Heapsort Algoritmos e Estruturas de Dados II Introdução Possui o mesmo princípio de funcionamento da ordenação por seleção Selecione o menor item do vetor Troque-o pelo item da primeira posição
Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:
ORDENAÇÃO A atividade de ordenação é o processo de rearranjo de um certo conjunto de objetos de acordo com um critério (ordem) específico. O objetivo da ordenação é facilitar a localização dos membros
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected]
UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior
UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior ALGORITMO DE ORDENAÇÃO HEAPSORT Alyson Pereira Barbosa Erisvaldo
SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira
SCC-60 Introdução à Ciência da Computação II Ordenação e Complexidade Parte 3 Lucas Antiqueira Ordenação: Utiliza uma estrutura de dados chamada heap para ordenar. Um heap é um vetor (array) que representa
Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Aula 13: Ordenação - Heapsort Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar
HeapSort. Estrutura de Dados II Jairo Francisco de Souza
HeapSort Estrutura de Dados II Jairo Francisco de Souza HeapSort Algoritmo criado por John Williams (1964) Complexidade O(NlogN) no pior e médio caso Mesmo tendo a mesma complexidade no caso médio que
1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.
Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica
Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I
Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes
Classificação por Seleção - selection sort
Classificação por Seleção - selection sort Outro método também simples de ordenação é a ordenação por seleção. Princípio de funcionamento: 1. Selecione o menor item do vetor (ou o maior). 2. Troque-o com
Estruturas de Dados 2
Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão
HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
HeapSort Filas de Prioridade Heap David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de
Estruturas de Dados 2
Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico
ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ÁRVORES BINÁRIAS DE BUSCA Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REFERÊNCIA Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Cap. 4 INSTITUTO DE COMPUTAÇÃO
Bubble Sort. Tempo total O(n 2 )
Bubble Sort Considere uma seqüência de n elementos que se deseja ordenar. O método da bolha resolve esse problema através de várias passagens sobre a seqüência Não é um algoritmo eficiente, é estudado
Algoritmos de Ordenação: QuickSort
Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo [email protected] 10/2008 Material
AED2 - Aula 11 Problema da separação e quicksort
AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica
Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 053/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua
Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO
Algoritmos de Ordenação Cota inferior Professora: Fátima L. S. Nunes 1 1 1 Algoritmos de Ordenação Algoritmos de ordenação que já conhecemos: 2 2 2 Algoritmos de Ordenação Algoritmos de ordenação que já
Algoritmos de Ordenação: Tempo Linear
Algoritmos de Ordenação: Tempo Linear ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo [email protected] 10/2008 Material
Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I
Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Algoritmos de busca Basicamente podem ser citadas duas estratégias para procurar (ou buscar) algo em uma coleção de dados: Busca
5. Algoritmos de Ordenação
Introdução à Computação II 5952011 5. Algoritmos de Ordenação Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 5.1. Ordenação por Inserção 5.2. Ordenação por Seleção
Análise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Métodos de Ordenação - seleção e inserção - seleção e troca (bubble sort) - merge e quick sort - radix - hashing Prof. Rodrigo Rocha [email protected] http://www.bolinhabolinha.com
Algoritmos de Ordenação. Profº Carlos Alberto T. Batista
Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: [email protected] [email protected] Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e
Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler
Aula 3 Listas Lineares Sequenciais Ordenadas prof Leticia Winkler 1 Listas Lineares Sequenciais Ordenadas Elementos da lista estão dispostos num vetor (contíguos na memória) e ordenado de acordo com alguma
Ordenação em Memória Primária Estrutura de Dados II
- Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Ordenação em Memória Primária Estrutura de Dados II Estrutura de Dados II COM10078-2017-I Prof. Marcelo Otone Aguiar [email protected]
Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.
Quick Sort Considerações Sobre Algoritmos de Ordenação Estagiário PAE: Jesimar da S. Arantes Professor: Claudio F. M. Toledo 27 de Setembro de 2017 Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick
Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo
Arquivos Sequenciais Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais } Pq arquivos sequenciais? Relembrando } Relembrando: uma tabela ou arquivo é um conjunto de registros que possuem a
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 15: Ordenação: ShellSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected]
Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.
Algoritmos e Estrutura de Dados II Árvore Prof a Karina Oliveira [email protected] Introdução Estruturas de dados lineares (pilha, fila) são estruturas que guardam coleções de elementos que são acessados
Limite assintótico para a ordenação, Ordenação em tempo linear
Algoritmos e Estruturas de Dados I Limite assintótico para a ordenação, Ordenação em tempo linear Prof. Jesús P. Mena-Chalco [email protected] 1Q-2017 1 Ordenação Ordenar corresponde ao processo
Análise de Algoritmos Algoritmos de Ordenação
Análise de Algoritmos Algoritmos de Ordenação Nelson Cruz Sampaio Neto [email protected] Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação 5 de abril de 2016
Introdução Métodos de Busca Parte 1
Introdução Métodos de Busca Parte 1 SCC-201 Introdução à Ciência da Computação II Rosane Minghim 2009 Importância em estudar busca Busca é uma tarefa muito comum em computação? Vários métodos e estruturas
Teoria da Computação Aula 9 Noções de Complexidade
Teoria da Computação Aula 9 Noções de Complexidade Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Análise de um Algoritmo em particular Qual é o custo de usar um dado algoritmo para resolver um
Métodos de ordenação. Bubble sort:
Métodos de ordenação Bubble sort: O método de ordenação por bubble sort ou conhecido como bolha consiste em compara dados armazenados em um vetor de tamanho qualquer, comparando cada elemento de uma posição
Ordenação. Prof. Jonas Potros
Ordenação Prof. Jonas Potros Conceitos Básicos Ordenar: processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação posterior de itens
Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia
Introdução à Análise de Algoritmos Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia Aula de hoje Nesta aula veremos: Sobre a disciplina Exemplo: ordenação Sobre a disciplina
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 10 Métodos de Ordenação de Complexidade Linear Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída:
Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Quicksort David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Quicksort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla
Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional
Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Plano de Ensino e Aprendizagem ( PEA) Algoritmo ShellSort Proposto por
Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura
Árvores B Prof. Márcio Bueno [email protected] / [email protected] Fonte: Material da Prof a Ana Eliza Lopes Moura Situação Problema Memória Principal Volátil e limitada Aplicações Grandes
ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ORDENAÇÃO DE ARQUIVOS Vanessa Braganholo Estruturas de Dados e Seus Algoritmos ORDENAÇÃO Busca binária exige que arquivo esteja ordenado Como ordenar um arquivo? INSTITUTO DE COMPUTAÇÃO - UFF 2 MÉTODOS
PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos
UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE COMPUTAÇÃO BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos ( X ) SEMESTRAL - ( ) ANUAL CÓDIGO: GBC052 PERÍODO:
Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1
Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1 ORDENAÇÃO E BUSCA Ordenação: Bublesort, seleção direta e inserção direta. Busca: linear e binária 1 - ORDENAÇÃO (CLASSIFICAÇÃO) DE DADOS Em diversas
