Projeto e Análise de Algoritmos
|
|
|
- Aurélia Flores Mota
- 8 Há anos
- Visualizações:
Transcrição
1 Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima <[email protected]>
2 Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens permutados em uma ordem a k1, a k2,..., a kn, tal que, dada uma função de ordenação f, tem-se a seguinte relação: f(a k1 ) < f(a k2 ) <... < f(a kn ). Ordenar consiste no processo de rearranjar um conjunto de objetos em uma ordem crescente ou descendente. O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado.
3 Ordenação Qualquer tipo de campo chave, sobre o qual exista uma relação de ordem total <, para uma dada função de ordenação, pode ser utilizado. A relação < deve satisfazer as condições: Apenas uma das seguintes expressões pode ser verdadeira: a < b, a = b, a > b; Se a < b e b < c então a < c; Um método de ordenação é dito estável se a ordem relativa dos itens com chaves iguais mantém-se inalterada pelo processo de ordenação.
4 Ordenação
5 Ordenação Os métodos de ordenação são classificados em dois grandes grupos: Ordenação Interna: São os métodos que não necessitam de uma memória secundária para o processo, a ordenação é feita na memória principal do computador; Qualquer registro pode ser acessado em tempo O(1); Ordenação Externa: Quando o arquivo a ser ordenado não cabe na memória principal e, por isso, tem de ser armazenado em disco. Registros são acessados sequencialmente ou em grandes blocos;
6 Ordenação Métodos de Ordenação: Bubble Sort; Selection Sort; Insertion Sort; Merge Sort; Quick Sort; Limite assintótico mínimo para algoritmos de ordenação baseados em comparações: O(n log n)
7 Bubble Sort Algoritmo: Quando dois elementos estão fora de ordem, troque-os de posição até que o i-ésimo elemento de maior valor do vetor seja levado para as posições finais do vetor; Continue o processo até que todo o vetor esteja ordenado;
8 Bubble Sort
9 Bubble Sort
10 Bubble Sort - Implementação Iterativa (I) void bubblesort(int n, int* v) { int fim, i, temp; for (fim = n-1; fim > 0; fim--) { for (i=0; i<fim; i++) { if (v[i]>v[i+1]) { temp = v[i]; v[i] = v[i+1]; v[i+1] = temp; } } } }
11 Bubble Sort - Implementação Iterativa (II) void bubblesort(int n, int* v) { } int i, fim, troca, temp; for (fim = n-1; fim > 0; fim--){ } troca = 0; for (i=0; i<fim; i++){ } if (v[i]>v[i+1]){ } temp = v[i]; v[i] = v[i+1]; v[i+1] = temp; troca = 1; if (troca == 0) return; Implementação mais otimizada: para a busca quando ocorre uma passada sem trocas.
12 Bubble Sort - Complexidade Esforço computacional número de comparações número máximo de trocas primeira passada: n-1 comparações segunda passada: n-2 comparações terceira passada: n-3 comparações Tempo total gasto pelo algoritmo: T(n) = (n-1) + (n-2) T(n) = n2 n 2 Algoritmo de ordem quadrática: O(n 2 )
13 Bubble Sort Complexidade: O(n 2 ) Vantagens: Fácil Implementação; É estável; Desvantagens: O fato do vetor já estar ordenado não ajuda em nada; Ordem de complexidade quadrática;
14 Selection Sort Algoritmo: Em cada etapa, em selecionar o maior (ou o menor) elemento e alocá-lo em sua posição correta dentro da futura lista ordenada.
15 Selection Sort
16 Selection Sort - Implementação void selectsort(int arr[], int n) { int pos_min, temp, i, j; for (i=0; i < n-1; i++){ pos_min = i; for (j=i+1; j < n; j++){ if (arr[j] < arr[pos_min]) pos_min=j; } if (pos_min!= i){ temp = arr[i]; arr[i] = arr[pos_min]; arr[pos_min] = temp; } } }
17 Selection Sort Complexidade Esforço computacional número de comparações número máximo de trocas Tempo total gasto pelo algoritmo: T(n) = (n-1) + (n-2) T(n) = n2 n 2 Algoritmo de ordem quadrática: O(n 2 )
18 Selection Sort Complexidade: O(n 2 ) Vantagens: Fácil Implementação; Pequeno número de movimentações; Interessante para arquivos pequenos; Desvantagens: O fato de o arquivo já estar ordenado não influencia em nada; Ordem de complexidade quadrática; Algoritmo não estável;
19 Insertion Sort Algoritmo: Em cada passo, a partir de i=2, o i-ésimo item da sequência fonte é apanhado e transferido para a sequência destino, sendo colocado na posição correta. A inserção do elemento no lugar de destino é efetuado movendo-se os itens com chave maiores para a direita e então inserindo-o na posição que ficou vazia.
20 Insertion Sort
21 Insertion Sort
22 Insertion Sort Implementação void insertion_sort(int arr[], int length) { int j, i, temp; for (i = 1; i < length; i++) { j = i; while (j > 0 && arr[j] < arr[j-1]) { temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; j--; } } }
23 Insertion Sort Complexidade Esforço computacional número de comparações número máximo de trocas Tempo total gasto pelo algoritmo: T(n) = (n-1) + (n-2) T(n) = n2 n 2 Algoritmo de ordem quadrática: O(n 2 )
24 Insertion Sort Complexidade: O(n 2 ) Vantagens: Fácil Implementação; Algoritmo estável; O vetor já ordenado favorece a ordenação: O(n); Desvantagens: Ordem de complexidade quadrática; Ineficiente quando o vetor está ordenado inversamente (algo natural em um problema de ordenação);
25 Merge Sort Algoritmo: Criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, divide-se a sequência original em pares de dados, ordena-as; depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes. É um algoritmo de ordenação do tipo dividir para conquistar: Dividir: Dividir os dados em subsequências pequenas; Conquistar: Classificar as duas metades recursivamente aplicando o merge sort; Combinar: Juntar as duas metades em um único conjunto já classificado.
26 Merge Sort
27 Merge Sort Implementação void mergesort_ordena(int *v, int esq, int dir) { if (esq == dir) return; } int meio = (esq+dir) / 2; mergesort_ordena(v, esq, meio); mergesort_ordena(v, meio+1, dir); mergesort_intercala(v, esq, meio, dir);
28 Merge Sort Implementação void mergesort_intercala(int* v, int esq, int meio, int dir) { int i, j, k; int a_tam = meio esq + 1; int b_tam = dir - meio; int *a = (int*)malloc(sizeof(int) * a_tam); int *b = (int*)malloc(sizeof(int) * b_tam); for(i = 0; i < a_tam; i++) { a[i] = v[i+esq]; } for(i = 0;i < b_tam; i++) { b[i] = v[i+meio+1]; } [continua ]
29 Merge Sort Implementação }... for(i = 0, j = 0, k = esq; k <= dir; k++) { if(i == a_tam) v[k] = b[j++]; else if (j == b_tam) v[k] = a[i++]; else if (a[i] < b[j]) v[k] = a[i++]; else v[k] = b[j++]; } free(a); free(b); [ continuação]
30 Merge Sort Complexidade Tempo gasto para dividir: O(log n) Repetição Tamanho do Problema 1 n 2 n/2 3 n/4 log n 1
31 Merge Sort Complexidade Tempo gasto para combinar: O(n)
32 Merge Sort Complexidade Tempo total gasto pelo algoritmo: O(n log n)
33 Merge Sort Complexidade: O(n log n) Vantagens: Complexidade O(n log n); É estável; Desvantagens: Tradicionalmente baseia-se em chamadas recursivas, mas é possível implementa-lo sem utilizar recursão; Utiliza memória auxiliar;
34 Quick Sort Algoritmo: 1. Escolha um elemento arbitrário x, o pivô; 2. Particione o vetor de tal forma que x fique na posição correta v[i]: x deve ocupar a posição i do vetor sse: todos os elementos v[0], v[i-1] são menores que x; todos os elementos v[i+1],, v[n-1] são maiores que x; 3. Chame recursivamente o algoritmo para ordenar os subvetores v[0], v[i-1] e v[i+1],, v[n-1] (vetor da esquerda e vetor da direita) continue até que os vetores que devem ser ordenados tenham 0 ou 1 elemento
35 Quick Sort quicksort do vetor de tamanho n se n > 1 então PARTIÇÃO com pivô x quicksort do subvetor à esquerda de x quicksort do subvetor à direita de x
36 Quick Sort Processo de partição: 1. Caminhe com o índice a do início para o final, comparando x com v[1], v[2], até encontrar v[a] > x 2. Caminhe com o índice b do final para o início, comparando x com v[n-1], v[n-2], até encontrar v[b] <= x 3. Troque v[a] e v[b] 4. Continue para o final a partir de v[a+1] e para o início a partir de v[b-1] 5. Termine quando os índices de busca (a e b) se encontram (b < a) A posição correta de x=v[0] é a posição b, então v[0] e v[b] são trocados
37 Quick Sort Processo de Partição: Exemplo: x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
38 do{ while (a < n && v[a] <= x) a++; x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
39 do{ while (a < n && v[a] <= x) a++; x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
40 do{ while (a < n && v[a] <= x) a++; x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
41 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
42 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
43 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
44 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
45 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
46 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
47 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
48 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
49 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
50 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] a b
51 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] b a
52 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); troca(&v[x], &v[b]); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] b a
53 do{ while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) troca(&v[a], &v[b]); } while (a <= b); troca(&v[x], &v[b]); x (pivô) [0] [1] [2] [3] [4] [5] [6] [7] [8] b a
54 Quick Sort Resultado da Partição: [0] [1] [2] [3] [4] [5] [6] [7] [8] o pivô ocupa a sua posição final na ordenação
55 Quick Sort Chamada recursiva aos subvetores: subvetor da esquerda subvetor da direita [0] [1] [2] [3] [4] [5] [6] [7] [8] o pivô ocupa a sua posição final na ordenação
56 void quicksort(int n, int* v){ int x, a, b, temp; if (n > 1) { x = v[0]; a = 1; b = n-1; do { while (a < n && v[a] <= x) a++; while (v[b] > x) b--; if (a < b) { temp = v[a]; v[a] = v[b]; v[b] = temp; a++; b--; } } while (a <= b); v[0] = v[b]; v[b] = x; quicksort(b,v); quicksort(n-a,&v[a]); } } Caminha com o índice a Caminha com o índice b Faz a troca de a e b Faz a troca do pivô e b Chamada recursiva para o subvetor da esquerda e da direita
57 Quick Sort (1) Vetor para ser ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
58 Quick Sort (2) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
59 Quick Sort (3) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
60 Quick Sort (4) Chame recursivamente o quick sort para o subvetor da esquerda: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
61 Quick Sort (5) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
62 Quick Sort (6) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
63 Quick Sort (7) Chame recursivamente o quick sort para o subvetor da esquerda: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
64 Quick Sort (8) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
65 Quick Sort (9) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
66 Quick Sort (10) Chame recursivamente o quick sort para o subvetor da esquerda. O tamanho do vetor da esquerda é zero. A recursão retorna [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
67 Quick Sort (11) Chame recursivamente o quick sort para o subvetor da direita. Só existe um elemento, então ele já está ordenado e a recursão retorna [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
68 Quick Sort (12) A recursão retorna. Não tem nada mais para ser feito nesse subvetor: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
69 Quick Sort (13) A recursão retorna. Não tem nada mais para ser feito nesse subvetor: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
70 Quick Sort (14) Chame recursivamente o quick sort para o subvetor da direita: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
71 Quick Sort (15) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
72 Quick Sort (16) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
73 Quick Sort (17) Chame recursivamente o quick sort para o subvetor da esquerda: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
74 Quick Sort (18) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
75 Quick Sort (19) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
76 Quick Sort (20) Chame recursivamente o quick sort para o subvetor da esquerda. O tamanho do vetor da esquerda é zero. A recursão retorna [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
77 Quick Sort (21) Chame recursivamente o quick sort para o subvetor da direita. Só existe um elemento, então ele já está ordenado e a recursão retorna [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
78 Quick Sort (22) A recursão retorna. Não tem nada mais para ser feito nesse subvetor [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
79 Quick Sort (23) A recursão retorna. Não tem nada mais para ser feito nesse subvetor [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
80 Quick Sort (24) Chame recursivamente o quick sort para o subvetor da direita: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
81 Quick Sort (25) Selecione o pivô: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
82 Quick Sort (26) Particione o vetor. Todos os elementos maiores que o pivô ficaram na direita e todos os elementos menores na esquerda. O pivô já está ordenado: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
83 Quick Sort (27) Chame recursivamente o quick sort para o subvetor da esquerda. Só existe um elemento, então ele já está ordenado e a recursão retorna: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
84 Quick Sort (28) Chame recursivamente o quick sort para o subvetor da direita. Só existe um elemento, então ele já está ordenado e a recursão retorna: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
85 Quick Sort (29) A recursão retorna. Não tem nada mais para ser feito nesse subvetor [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
86 Quick Sort (30) A recursão retorna. Não tem nada mais para ser feito nesse subvetor [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
87 Quick Sort (31) A recursão retorna para a primeira chamada do quick sort com o vetor completamente ordenado [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
88 Quick Sort - Complexidade Melhor caso: Pivô representa o valor mediano do conjunto dos elementos do vetor; Após mover o pivô para sua posição, restarão dois sub-vetores para serem ordenados, ambos com o número de elementos reduzido à metade, em relação ao vetor original; Complexidade: T(n) = 2T(n/2)+n = n log n n + 1 = O(n log n)
89 Quick Sort - Complexidade Caso médio: De acordo com Sedgewick e Flajolet (1996, p. 17), o número de comparações é aproximadamente: T(n) n log n Complexidade: T(n) = O(n log n)
90 Quick Sort - Complexidade Pior caso: Pivô é o maior elemento e algoritmo recai em ordenação bolha; Complexidade: T(n) = O(n 2 )
91 Quick Sort Melhorias: Eliminação da recursão; Melhor seleção do pivô: mediana de 3 partições evita pior caso em conjuntos de dados ordenados; Utilizar Insertion Sort conjuntos de dados pequenos; Combinadas, essas melhorias fornecem um ganho de performance de aproximadamente 20-25%. O Quick Sort é considerado o melhor método para ordenação interna de grandes conjuntos de dados (n ).
92 Quick Sort Complexidade O(n log n) Vantagens: Complexidade O(n log n) Desvantagens: Tradicionalmente baseia-se em chamadas recursivas, mas é possível implementa-lo sem utilizar recursão; Não é estável;
93 Exercícios Lista de Exercícios 10 Algoritmos de Ordenação
94 Leitura Complementar Cormen, T., Leiserson, C., Rivest, R., e Stein, C. Algoritmos Teoria e Prática (tradução da 2ª. Edição americana), Editora Campus, Capítulo 4: Recorrências Capítulo 7: Quick Sort
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]
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
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
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
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
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
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
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
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
CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI
CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI O QUE SÃO ALGORITMOS DE ORDENAÇÃO? São algoritmos que organizam
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: 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
Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática
Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha
Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2
Profa. Dra. Laura Rodríguez E-mail: [email protected] Universidade da Madeira 1. Recursão 2. Ordenação 3. Busca Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2 1 1. Recursão 2. Ordenação 3.
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
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são
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 de ordenação Ordenação rápida ( Quicksort )
Ordenação rápida ( Quicksort ) Baseia-se num princípio muito simples que, quando aplicado recursivamente, acaba por ordenar o vector. Este princípio é composto por 2 passos essenciais: 1. Escolher um elemento
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
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)
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 14: Ordenação: QuickSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected]
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
Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa
Ordenação Externa Ordenação Externa Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:
Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo
Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária Túlio Toffolo www.decom.ufop.br/toffolo Pesquisa em Memória Primária n Introdução - Conceitos Básicos n Pesquisa Sequencial n Pesquisa Binária n Árvores
Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza
Método BubbleSort Estrutura de Dados II Prof Jairo Francisco de Souza Introdução Ordenar corresponde ao processo de reorganizar um conjunto de objetos em uma ordem ascendente ou descendente Consiste em
Algoritmos de Ordenação: HeapSort
Algoritmos de Ordenação: HeapSort 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
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
Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados
Algoritmos de Ordenação e Pesquisa Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados Bibliografia Básica l Cormen, Leiserson, Rivest. Introduction to Algorithms. 2nd edition. MIT Press,
QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1
QuickSort Algoritmos e Estruturas de Dados Verão 2012 1 QuickSort Algoritmo do tipo dividir para conquistar Ideia do algoritmo: efectuar partição dos dados e ordenar as várias partes independentemente
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
Complexidade de Algoritmos
Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também
Projeto e Análise de Algoritmos
Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais [email protected] 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter
Memória secundária. Memória secundária
introdução ordenação interna ordenação externa ordenar processo de rearranjar um conjunto de itens em uma ordem ascendente ou descendente visa facilitar a recuperação posterior de itens do conjunto ordenado
ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão
UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da
Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009
Vectores: Algoritmos de Ordenação Algoritmos e Estruturas de Dados 2008/2009 Ordenação Problema (ordenação de vector) rearranjar os n elementos de um vector (v) por ordem crescente, ou melhor, por ordem
Basicamente, os tipos de algoritmos de ordenação podem ser resumidos a: Por seleção: seleciona o menor elemento, o segundo menor e assim por diante
/ Ordenação de dados / 1 Ordenação de dados Frequentemente, é necessário que os dados devam ser armazenados obedecendo uma determinada ordem. A ordenação de dados é uma atividade relevante e fundamental
Quicksort [1] Quicksort [2]
Quicksort [1] Provavelmente o algoritmo mais usado inventado nos anos 60 muito estudado e analisado desempenho bem conhecido popular devido à facilidade de implementação e eficiência complexidade N log
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]
Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Árvores Dados organizados de maneira hierárquica Exemplos: arquivos em diretórios, subdivisão de espaço 2D em um
Recursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Quicksort Letícia Rodrigues Bueno
Quicksort Letícia Rodrigues Bueno UFABC Quicksort Legenda: pivô; 1 a partição: ; 2 a partição: Quicksort Legenda: pivô; 1 a partição: ; 2 a partição: Quicksort Legenda: pivô; 1 a partição: ; 2 a partição:
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. 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
AULA 13. Algoritmos p.526/582
AULA 13 Algoritmos p.526/582 Ordenação em tempo linear CLRS 8.2 8.3 Algoritmos p.527/582 Ordenação por contagem Recebe vetores A[1.. n] e B[1.. n] e devolve no vetor B[1.. n] os elementos de A[1.. n] em
Existem duas categorias de algoritmos de ordenação: Os algoritmos de ordenação são avaliados de acordo com os seguintes critérios:
MÉTODOS DE ORDENAÇÃO E PESQUISA ORDENAÇÃO: consiste em arranjar um conjunto de informações semelhantes numa ordem crescente ou decrescente; PESQUISA: consiste em executar uma pesquisa sobre a estrutura
Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort
Mergesort Aula 0 Divisão e Conquista- MergeSort Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Mergesort é um algoritmo de ordenação recursivo Ele recursivamente ordena as duas
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:
Pesquisa Linear. Adriano J. Holanda 15/3/2016
Pesquisa Linear Adriano J. Holanda 15/3/2016 Busca Linear em memória principal Introdução O dados estarão sempre armazenados na memória principal (DRAM 1 ): não há necessidade de acesso à memória secundária
SCC Capítulo 4 Métodos de Ordenação
Outros SCC-501 - 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
QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral
QuickSort 1 Quicksort A[p q] A[q+1 r] Ordena um vetor A[p r] Divisão Particiona um vetor A em 2 subvetores A[p..q] e A[q+1..r], de tal modo que cada elemento de A[p..q] seja menor ou igual a cada elemento
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 03 Técnicas de Projeto de Algoritmos (Divisão e Conquista) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)
METODOS DE ORDENAÇÃO: A IMPORTÂNCIA DA ESCOLHA DO MÉTODO CORRETO
METODOS DE ORDENAÇÃO: A IMPORTÂNCIA DA ESCOLHA DO MÉTODO CORRETO Sorting Methods: the Importance of Choosing the Correct Method Cristino Divino de Freitas Júnior, Felipe Alencar, Walteno Martins Parreira
Análise de complexidade
Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura
Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Medida do Tempo de Execução de um Programa Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo estudo
Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo
Radix Sorting Os registros a serem ordenados podem ter chaves bastante complexas, como por exemplo sequências de caracteres (lista telefônica) o Ordenação via comparação de chaves Várias aplicações têm
Técnicas de projeto de algoritmos: Indução
Técnicas de projeto de algoritmos: Indução 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] 08/2008
Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então
Análise de Algoritmos
Análise de Algoritmos Parte 1 Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 04 Algoritmos e Estruturas de Dados I Qual a diferença entre um algoritmo e um programa? Como escolher o algoritmo
ORDENAÇÃO E BUSCA 1. MÉTODOS DE ORDENAÇÃO
ORDENAÇÃO E BUSCA Em computação, freqüentemente, armazenamos dados que, mais tarde, precisam ser recuperados. Como veremos, a eficiência na busca de informações depende, essencialmente, da ordem em que
Método de ordenação - objetivos:
Método de ordenação - objetivos: Corresponde ao processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. Facilitar a recuperação posterior de itens do conjunto ordenado. São
Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Aula 15: Pesquisa em Memória Primária Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa Binária Árvores de
2. Ordenação por Seleção
1 Algoritmos de Ordenação Simples (SelectionSort, InsertionSort, BubbleSort) 1. Introdução Objetivo: Determinar a seqüência ordenada dos elementos de um vetor numérico. Algumas considerações: O espaço
Complexidade Assintótica de Programas Letícia Rodrigues Bueno
Complexidade Assintótica de Programas Letícia Rodrigues Bueno Análise de Algoritmos 1. Introdução; Análise de Algoritmos 1. Introdução; 2. Conceitos básicos; Análise de Algoritmos 1. Introdução; 2. Conceitos
Algoritmos e Estrutura de Dados
Algoritmos e Estrutura de Dados Ricardo Terra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Algoritmos e Estrutura de Dados Outubro, 2013 1 / 136 CV Nome: Ricardo Terra Email: rterrabh
QuickSort. Estrutura de Dados II Jairo Francisco de Souza
QuickSort Estrutura de Dados II Jairo Francisco de Souza Particionamento Mecanismo principal dentro do algoritmo do QuickSort Para particionar um determinado conjunto de dados, separamos de um lado todos
Introdução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello
Introdução à Ciência da Computação II Recursão Prof. Ricardo J. G. B. Campello Agradecimentos Parte dos slides a seguir são adaptações dos originais em Pascal gentilmente cedidos pelo Prof. Rudinei Goularte
Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches
CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma
6. Pesquisa e Ordenação
6. Pesquisa e Ordenação Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 6. Pesquisa e Ordenação Estruturas de Dados 1 / 30 Pesquisa de Informação A pesquisa eficiente de informação
Algoritmos e Estruturas de Dados II. Ordenação
Algoritmos e Estruturas de Dados II Ordenação Antonio Alfredo Ferreira Loureiro [email protected] http://www.dcc.ufmg.br/~loureiro UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II 1 Sumário Introdução:
Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr
5COP096 Teoria da Computação Aula 4 Prof. Dr. Sylvio Barbon Junior 1 Sumário 1) Técnicas de Análise de Algoritmos 2) Paradigmas de Projeto de Algoritmos 1) Indução 2) Recursão 3) Algoritmos Tentativa e
TCC 00308: Programação de Computadores I Introdução
TCC 00308: Programação de Computadores I 2017.1 Introdução Processo de resolução de problemas Definição dos requisitos do problema (fazer o programa certo) Entradas Cálculos Casos especiais Saídas Desenvolvimento
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar
Ordenação e Pesquisa
Ordenação e Pesquisa Luís Lopes DCC-FCUP Estruturas de Dados Pesquisa de Informação A pesquisa eficiente de informação é extremamente relevante, seja: num catálogo indexado por uma relação de ordem, e.g.
Quicksort. Algoritmos e Estruturas de Dados II
Quicksort Algoritmos e Estruturas de Dados II História Proposto por Hoare em 960 e publicado em 962 É o algoritmo de ordeação itera mais rápido que se cohece para uma ampla variedade de situações Provavelmete
Árvore Binária de Busca. Prof. César Melo
Árvore Binária de Busca Prof. César Melo Introdução O algoritmo de busca binária em vetores tem bom desempenho e deve ser usado quando temos os dados já ordenados. No entanto, se precisarmos inserir e
Programação de Computadores II. Cap. 17 Busca
Programação de Computadores II Cap. 17 Busca Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
I. Correção de Algoritmos Não-Recursivos
I. Correção de Algoritmos Não-Recursivos Nos exercícios a seguir, você deverá demonstrar a correção dos algoritmos por meio dos conceitos vistos nos slides da Aula 03. 1) Prove que o seguinte algoritmo
Árvores Binárias de Busca (ABB) 18/11
Árvores Binárias de Busca (ABB) 18/11 Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguintes propriedade: Para todo nó da árvore, se seu valor é X, então:
Simulador didático de testes de algoritmos de ordenação
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA Simulador didático de testes de algoritmos de ordenação Nomes: Bruno Silva Guedes (159033) Matheus de Carvalho Proença (160184) Turma:
