AED Algoritmos e Estruturas de Dados LEEC /2006. Algoritmos de Ordenação 1ª parte

Tamanho: px
Começar a partir da página:

Download "AED Algoritmos e Estruturas de Dados LEEC /2006. Algoritmos de Ordenação 1ª parte"

Transcrição

1 AED Algoritmos e Estruturas de Dados LEEC /2006 Algoritmos de Ordenação 1ª parte

2 Porquê estudar algoritmos elementares Razões de ordem prática (de ordenação) Fáceis de codificar e por vezes suficientes Rápidos/Eficientes para problemas de dimensão média e por vezes os melhores em certas circunstâncias Razões pedagógicas Bom exemplo para aprender terminologia, compreender contexto dos problemas e bom princípios para desenvolvimento de algoritmos mais sofisticados Alguns são fáceis de generalizar para métodos mais eficientes ou para melhorar o desempenho de outros algoritmos Importante para compreensão das regras de "funcionamento" AED (IST/DEEC) 2

3 Contexto e regras básicas [1] Objectivo Estudar métodos de ordenação de ficheiros de dados em que cada elemento (item) é caracterizado por uma chave ("key") Chaves são usadas para controlar a ordenação objectivo é rearranjar os dados de forma a que as chaves estejam ordenadas de forma pré-definida (numérica ou alfabética, por exemplo) Opções em termos de implementação macros ou subrotinas/funções? compromisso entre desempenho, generalidade e simplicidade utilizaremos uma mistura de ambos AED (IST/DEEC) 3

4 Metodologia Contexto e regras básicas [2] características específicas de cada item ou chave podem ser diferentes mas conceito abstracto é o mais importante começaremos por estudar ordenação em tabelas utilizaremos operações abstractas nos dados: comparação, troca alterar items para outro tipo (ex: vírgula flutuante) é simples typedef int Item; #define key(a) (A) #define less(a, B) (key(a) < key(b)) #define exch(a, B) {Item t = A; A = B; B = t; } #define compexch(a, B) if (less(b,a)) exch(a, B) Tempo de execução usualmente proporcional ao número de comparações número de movimentações/trocas (ou ambos) AED (IST/DEEC) 4

5 Nomenclatura [1] Tipos de Algoritmos de Ordenação não adaptativos: sequência de operações independente da ordenação original dos dados interessantes para implementação em hardware adaptativos: sequência de operações dependente do resultado de comparações (operação "less") a maioria dos que estudaremos Parâmetro de interesse é o desempenho, i.e. tempo de execução algoritmos básicos: N 2 para ordenar N items mas por vezes os melhores para N pequeno algoritmos avançados: N log N para ordenar N items Olharemos também para os recursos de memória necessários ordenação "in-place" ou utilizando memória adicional AED (IST/DEEC) 5

6 Nomenclatura [2] Definição: um algoritmo de ordenação é dito estável se preserva a ordem relativa dos items com chaves repetidas ex: ordenar lista de alunos por ano de graduação quando esta já está ordenada alfabeticamente por nome é usualmente possível estabilizar um algoritmo alterando a sua chave (tem custo adicional) algoritmos básicos são quase todos estáveis, mas poucos algoritmos avançados são estáveis AED (IST/DEEC) 6

7 Nomenclatura [3] Definição: um algoritmo de ordenação é dito interno, se o conjunto de todos os dados a ordenar couber na memória; caso contrário é dito externo ex: ordenar dados lidos de tape ou disco é ordenação externa Distinção muito importante: ordenação interna pode aceder a qualquer dado facilmente ordenação externa tem de aceder a dados de forma sequencial (ou em blocos) Vamos estudar fundamentalmente ordenação interna AED (IST/DEEC) 7

8 Nomenclatura [4] Definição: um algoritmo de ordenação é dito directo se os dados são acedidos directamente nas operações de comparação e troca; caso contrário é dito indirecto Exemplo de algoritmo indirecto: se a chave for pequena e cada dado for "grande (por exemplo o nome completo de um aluno, mais morada, número de BI, etc) nestes casos não convém estar a trocar os elementos é dispendioso basta trocar a informação correspondente aos seus índices tabela de índices/ponteiros em que o primeiro indica o menor elemento, etc AED (IST/DEEC) 8

9 Contexto de utilização Mesmo programa, diferentes drivers para diferentes algoritmos: #include <stdio.h> #include <stdlib.h> main (int argc, char *argv[]){ int i, N = atoi (argv[1]), sw = atoi (argv[2]); int *a = malloc (N * sizeof(int)); } if (sw) for (i = 0; i < N; i++) a[i] = 1000 * (1.0 * rand() / RAND_MAX); else while (scanf( %d, &a[n]) == 1) N++; sort (a, 0, N-1); for (i = 0; i < N; i++) printf( %3d, a[i]); printf( \n ); Para cada algoritmo, "sort" tem nome apropriado AED (IST/DEEC) 9

10 Ordenação por selecção - Selection Sort Um dos mais simples. Algoritmo: procurar menor elemento e trocar com o elemento na 1 a posição procurar 2 o menor elemento e trocar com o elemento na 2 a posição proceder assim até ordenação estar completa void selection (Item a[], int l, int r){ int i, j; } for (i = l; i < r; i++) { int min = i; for (j = i+1; j <= r; j++) if (less(a[j], a[min])) min = j; exch(a[i], a[min]) } Ciclo exterior Ciclo interior AED (IST/DEEC) 10

11 Selection Sort - Exemplo de Aplicação A S O R T I N G E X A M P L E A S O R T I N G E X A M P L E A A O R T I N G E X S M P L E A A E R T I N G O X S M P L E A A E E T I N G O X S M P L R A A E E G I N T O X S M P L R A A E E G I N T O X S M P L R A A E E G I L T O X S M P N R A A E E G I L M O X S T P N R A A E E G I L M N X S T P O R A A E E G I L M N O S T P X R A A E E G I L M N O P T S X R A A E E G I L M N O P R S X T A A E E G A A E E G I I L M N O P R S X T L M N O P R S T X A A E E G I L M N O P R S T X AED (IST/DEEC) 11

12 Selection Sort - Análise Ciclo interno apenas faz comparações troca de elementos é feita fora do ciclo interno cada troca coloca um elemento na sua posição final número de trocas é N-1 (porque não N?) tempo de execução dominado pelo número de comparações! Propriedade: Selection sort usa aproximadamente N 2 /2 comparações e N trocas Demonstração: para cada item i de 1 a N-1 há uma troca e N-i comparações (ver sombreados no exemplos) Logo há N-1 trocas e (N-1)+(N-2) =N(N-1)/2 comparações Factos: desempenho é independente da ordenação inicial dos dados; a única coisa que depende desta ordenação é o número de vezes que min é actualizado (quadrático no pior caso, N log N em média) AED (IST/DEEC) 12

13 Ordenação Síntese da Aula O1 Introdução ao problema da ordenação de dados Simplicidade do problema facilita a compreensão de conceitos chave em algoritmos Problema de grande aplicação Definição das regras base e interface de utilização Macros e operações elementares relevantes Definições e propriedades gerais Ordenação por Seleção Select sort Descrição Exemplo de aplicação Análise de eficiência AED (IST/DEEC) 13

14 Ordenação por inserção - Insertion Sort Ideia: considerar os elementos um a um e inseri-los no seu lugar entre os elementos já tratados (mantendo essa ordenação) ex: ordenar cartas de jogar inserção implica arranjar novo espaço ou seja mover um número elevado de elementos uma posição para a direita inserir os elementos um a um começando pelo da 1 a posição #define less(a, B) (key(a) < key(b)) #define exch(a, B) {Item t = A; A = B; B = t; } #define compexch(a, B) if (less(b,a)) exch(a, B) void insertion(item a[], int l, int r){ int i, j; } for (i = l+1; i <= r; i++) for (j = i; j > l; j--) compexch (a[j-1], a[j]); AED (IST/DEEC) 14

15 Insertion Sort - Comentários Elementos à esquerda do índice corrente estão ordenados mas não necessariamente na sua posição final podem ainda ter de ser deslocados para a direita para dar lugar a elementos menores encontrados posteriormente Implementação da ordenação por inserção na pág. anterior é ineficiente código é simples, claro mas pouco eficiente; pode ser melhorado ilustra bom raciocínio: encontrar solução simples estudar o seu funcionamento melhorar desempenho através de pequenas transformações AED (IST/DEEC) 15

16 Insertion Sort - Melhorar desempenho Demasiadas operações de comparação/troca (compexch) podemos parar se encontramos uma chave que não é maior que a do item a ser inserido (tabela está ordenada à esquerda) podemos sair do ciclo interno se less(a[j-1], a[j]) é verdadeira modificação torna o algoritmo adaptativo aumenta desempenho aproximadamente por um factor de 2 Passa a haver duas condições para sair do ciclo mudar para um ciclo while remover instruções irrelevantes compexch não é o melhor processo de mover vários dados uma posição para a direita AED (IST/DEEC) 16

17 Insertion Sort - Versão adaptativa void insertion(item a[], int l, int r){ int i, j; } for (i = l+1; i <= r; i++) { Item v = a[i]; j = i; while (j > l && less(v, a[j-1])) { a[j] = a[j-1]; j--; } a[j] = v; } AED (IST/DEEC) 17

18 Insertion Sort - Exemplo de Aplicação A S O R T I N G E X A M P L E A S O R T I N G E X A M P L E A O S R T I N G E X A M P L E A O R S T I N G E X A M P L E A O R S T I N G E X A M P L E A I O R S T N G E X A M P L E A I N O R S T G E X A M P L E A G I N O R S T E X A M P L E A E G I N O R S T X A M P L E A E G I N O R S T X A M P L E A A E G I N O R S T X M P L E A A E G I M N O P R S T X L E A A E G I M N O P R S T X L E A A E G I L M N O P R S T X E A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X AED (IST/DEEC) 18

19 Insertion Sort - Análise Propriedade: Insertion sort usa aproximadamente N 2 /4 comparações e N 2 /4 pseudo-trocas (translações ou movimentos) no caso médio e o dobro destes valores no pior caso Demonstração: Fácil de ver graficamente; elementos abaixo da diagonal são contabilizados (todos no pior caso) Para dados aleatórios é expectável que cada elemento seja colocado aproximadamente a meio para trás pelo que apenas metade dos elementos abaixo da diagonal devem ser contabilizados Factos: em certos casos Insertion sort pode ter bom desempenho (a ver...) AED (IST/DEEC) 19

20 Bubble Sort Talvez o algoritmo mais utilizado e o que muitas pessoas aprendem Ideia: fazer múltiplas passagens pelos dados trocando de cada vez dois elementos adjacentes que estejam fora de ordem, até não haver mais trocas supostamente muito fácil de implementar usualmente mais lento que os dois métodos elementares estudados void bubble(item a[], int l, int r){ int i, j; for (i = l; i < r; i++) for (j = r; j > i; j--) compexch(a[j-1], a[j]); } AED (IST/DEEC) 20

21 Bubble Sort - Comentários [1] Movendo da direita para a esquerda no ficheiro de dados quando o elemento mais pequeno é encontrado na primeira passagem é sucessivamente trocado com todos à sua esquerda acaba por ficar na primeira posição na segunda passagem o 2 o elemento mais pequeno é colocado na sua posição e por diante N passagens pelos dados são suficientes! É semelhante ao método de selecção tem mais trabalho para colocar cada elemento na sua posição final todas as trocas sucessivas até chegar à posição certa AED (IST/DEEC) 21

22 Bubble Sort - Comentários [2] Algoritmo pode ser melhorado, tal como o algoritmo de inserção código é muito semelhantes mas não igual ciclo interno de Insertion Sort percorre a parte esquerda(ordenada) da tabela ciclo interno de Bubble Sort percorre a parte direita(não ordenada) da tabela no final de cada passagem podemos testar se houve mudanças AED (IST/DEEC) 22

23 Bubble Sort - Exemplo de Aplicação A S O R T I N G E X A M P L E A A S O R T I N G E X E M P L A A E S O R T I N G E X L M P A A E E S O R T I N G L X M P A A E E G S O R T I N L M X P A A E E G I S O R T L N M P X A A E E G I L S O R T M N P X A A E E G I L M S O R T N P X A A E E G I L M N S O R T P X A A E E G I L M N O S P R T X A A E E G I L M N O P S R T X A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X AED (IST/DEEC) 23

24 Bubble Sort - Análise Propriedade: Bubble sort usa aproximadamente N 2 /2 comparações e N 2 /2 trocas no caso médio e no pior caso Demonstração: A i-ésima passagem de Bubble Sort requer N-i operações de comparação/troca, logo a demonstração é semelhante a Selection sort Factos: Algoritmo pode depender criticamente dos dados se for modificado para terminar quando não houver mais trocas se o ficheiro estiver ordenado, apenas um passo é necessário se estiver em ordenação inversa então na i-ésima passagem são precisas N-1 comparações e trocas caso médio é semelhante (análise mais complexa) AED (IST/DEEC) 24

25 Comparação dos algoritmos elementares de ordenação [1] Tempos de execução quadráticos Selection Insertion Bubble Comparações N 2 /2 N 2 /4 N 2 /2 Trocas N N 2 /4 N 2 /2 AED (IST/DEEC) 25

26 Comparação dos algoritmos elementares de ordenação [2] Ficheiros com elementos grandes e pequenas chaves Selection Sort é linear no número de dados N dados com tamanho M (palavras/words) comparação - 1 unidade; troca - M unidades N 2 /2 comparações e NM custo de trocas termonm domina custo proporcional ao tempo necessário para mover os dados Ficheiros quase ordenados Insertion sort e Bubble sort são quase lineares os melhores algoritmos de ordenação podem ser quadráticos neste caso! AED (IST/DEEC) 26

27 Comparação dos algoritmos elementares de ordenação [3] AED (IST/DEEC) 27

28 Ordenação Síntese da Aula O2 Ordenação por inserção Insertion sort Versão elementar Versão adaptativa Exemplo de aplicação Análise de Eficiência Bubble sort Breve referência Descrição do algoritmo e análise funcionamento Exemplo de aplicação Análise de eficiência Comparação dos três primeiros algoritmos elementares Em número de comparações e trocas Na evolução da tabela durante a execução exemplo gráfico AED (IST/DEEC) 28

29 Shellsort - Melhorar a eficiência [1] Insertion sort é lento: apenas envolve trocas entre items adjacentes se o menor item está no final da tabela, serão precisos N passos para o colocar na posição correcta Shellsort: acelerar o algoritmo permitindo trocas entre elementos que estão afastados como? AED (IST/DEEC) 29

30 Shellsort - Melhorar a eficiência [2] Ideia: rearranjar os dados de forma a que tenham a propriedade que olhando para cada h-ésimo elemento estão ordenados dados dizem-se h-ordenados é equivalente a h sequências ordenadas entreligadas (entrelaçadas) Usando valores de h grandes é possível mover elementos na tabela grandes distâncias o que torna mais fácil h-ordenar mais tarde com h pequenos usando este procedimento para qualquer sequência de h's que termine em 1 vao produzir um ficheiro ordenado cada passo torna o próximo mais simples AED (IST/DEEC) 30

31 Shellsort - Melhorar a eficiência [3] Outra forma de ver o algoritmo: a tabela é dividida em partições, cada uma contendo os objectos de índice % h exemplo: para uma tabela de 15 posições e h=4 índices resto 0, i%4=0, são: 0, 4, 8, 12 índices resto 1, i%4=1, são: 1, 5, 9, 13 índices resto 2, i%4=2, são: 2, 6, 10, 14 índices resto 3, i%4=3, são: 3, 7, 11, 15 dentro de cada partição é feita uma ordenação por inserção Exemplo permite visualizar bem o algoritmo... AED (IST/DEEC) 31

32 h-ordenação - Exemplo: h=4 A S O R T I N G E X A M P L E A S O R E I N G T X A M P L E A S O R E I N G P X A M T L E A I O R E S N G P X A M T L E A I O R E S N G P X A M T L E A I O R E L N G P S A M T X E A I N R E L O G P S A M T X E A I A R E L N G P S O M T X E A I A R E L E G P S N M T X O A I A G E L E R P S N M T X O A I A G E L E M P S N R T X O i%4=0 0,4,8,12 i%4=1 1,5,9,13 i%4=2 2,6,10,14 i%4=3 3,7,11 A I A G E L E M P S N R T X O AED (IST/DEEC) 32

33 Implementação de Shellsort [1] Possível fazer melhor: sub-ficheiros são independentes quando h-ordenamos os dados inserimos qualquer elemento entre os do seu (h) sub-ficheiro movendo elementos maiores para a direita basta usar insertion code com incrementos/decrementos de h em vez de 1 implementação de Shellsort usa um passo de Insertion sort pelo ficheiro para cada incremento Tabela não fica completamente ordenada depois da 1 a ordenação das várias partições é necessário repetir com uma série de partições isto é, não basta escolher/usar um só h! AED (IST/DEEC) 33

34 Shellsort - Exemplo de aplicação [1] Partições estão entrelaçadas A S O R T I N G E X A M P L E A I O R T S N G E X A M P L E A I N R T S O G E X A M P L E A I N G T S O R E X A M P L E A I N G E S O R T X A M P L E A I N G E S O R T X A M P L E A I A G E S N R T X O M P L E A I A G E S N M T X O R P L E A I A G E S N M P X O M T L E A I A G E L N M P S O R T X E A I A G E L E M P S N R T X O AED (IST/DEEC) 34

35 Implementação de Shellsort [2] Solução óbvia: para cada h usar Insertion Sort independentemente em cada um dos h sub-ficheiros int h = 4; for (i = l+h; i <= r; i++) { Item v = a[i]; j = i; while (j-h >= l && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; } a[j] = v; } AED (IST/DEEC) 35

36 Difícil de escolher Sequência de Ordenação propriedades de muitas sequências foram já estudadas possível provar que umas melhores que outras ex: 1, 4, 13, 40, 121, 364, 1093, 3280,... (Knuth, 3*h ant +1) melhor que 1, 2, 4, 8, 16, 32, 64, 128, 256, 512,... (Shell, 2 i ) Porquê? mas pior (20%) que 1, 8, 23, 77, 281, 1073, 4193, (4 i i + 1) na prática utilizam-se sequências que decrescem geometricamente para que o número de incrementos seja logarítmico a sequência óptima não foi ainda descoberta (se é que existe) análise do algoritmo é desconhecida ninguém encontrou a fórmula que define a complexidade complexidade depende da sequência AED (IST/DEEC) 36

37 Shellsort void shellsort(item a[], int l, int r) { int i, j, k; int incs[16] = { , , , 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1 }; for ( k = 0; k < 16; k++) { int h = incs[k]; } } for (i = l+h; i <= r; i++) { Item v = a[i]; j = i; while (j-h >= l && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; } a[j] = v; } AED (IST/DEEC) 37

38 Shellsort - Exemplo de aplicação [2] A S O R T I N G E X A M P L E A S O R T I N G E X A M P L E A E O R T I N G E X A M P L S A E O R T I N G E X A M P L S A E O R T I N G E X A M P L S A E N R T I O G E X A M P L S A E N G T I O R E X A M P L S A E N G E I O R T X A M P L S A E N G E I O R T X A M P L S A E A G E I N R T X O M P L S A E A G E I N M T X O R P L S A E A G E I N M P X O R T L S A E A G E I N M P L O R T X S A E A G E I N M P L O R T X S A E A G E I N M P L O R T X S A A E G E I N M P L O R T X S A A E G E I N M P L O R T X S A A E E G I N M P L O R T X S A A E E G I N M P L O R T X S A A E E G I N M P L O R T X S A A E E G I M N P L O R T X S A A E E G I M N P L O R T X S A A E E G I L M N P O R T X S A A E E G I L M N O P R T X S A A E E G I L M N O P R T X S A A E E G I L M N O P R T X S A A E E G I L M N O P R T X S A A E E G I L M N O P R S T X A A E E G I L M N O P R S T X AED (IST/DEEC) 38

39 Propriedades: Análise de Shellsort o resultado de h-ordenar um ficheiro que está k-ordenado é um ficheiro que está simultaneamente h- e k-ordenado Shellsort faz menos do que O(N 3/2 ) comparações para os incrementos 1, 4, 13, 40, 121, 364, 1093,... Shellsort faz menos do que O(N 4/3 ) comparações para os incrementos 1, 8, 23, 77, 281, 1073, 4193, 16577,... Nota: sequências até agora usam incrementos que são primos entre si Shellsort faz menos do que O(N log 2 N) comparações para os incrementos 1, 2, 3, 4, 6, 9, 8, 12, 18, 27, 16, 24, 36, 54, 81 Shellsort é um exemplo de um algoritmo simples cuja análise é complicada: sequência óptima, e análise completa não são conhecidos! Alguém consegue encontrar uma sequência que bata 1, 2, 7, 21, 48, 112, 336,...?? AED (IST/DEEC) 39

40 Shellsort - Exemplo Gráfico Graficamente parece que um elástico, preso nos cantos puxa os pontos para a diagonal AED (IST/DEEC) 40

41 Vantagens de Shellsort rápido/eficiente pouco código melhor método para ficheiros pequenos e médios aceitável para elevados volumes de dados Muito utilizado na prática, embora dificil de compreender! AED (IST/DEEC) 41

42 Ordenação Síntese da Aula O3 Shellsort Apresentado como uma variante de aceleração do Insertion sort Descrição Implementação Sequências de ordenação Exemplo de aplicação Discussão da eficiência do algoritmo Condicionada pela sequência de ordenação utilizada Exemplo gráfico da evolução da tabela Vantagens relativamente a outros algoritmos AED (IST/DEEC) 42

43 Ordenação de outros tipos de dados [1] Algoritmos estudados são independentes do tipo de dados necessário o interface apropriado e a implementação correspondente #include <stdlib.h> main (int argc, char *argv[]) { int N = atoi (argv[1]), sw = atoi (argv[2]); int *a = malloc (N * sizeof(int)); } if (sw) randinit(a, N); else scaninit(a, &N); sort (a, 0, N-1); show (a, 0, N-1); for (i = 0; i < N; i++) a[i] = 1000 * (1.0*rand()/RAND_MAX); while (scanf( %d, &a[n]) == 1) N++; for (i = 0; i < N; i++) printf( %3d, a[i]); printf( \n ); AED (IST/DEEC) 43

44 Ordenação de outros tipos de dados [2] Algoritmos estudados são independentes do tipo de dados necessário o interface apropriado e a implementação correspondente #include <stdlib.h> #include Item.h #include Array.h main (int argc, char *argv[]){ int N = atoi (argv[1]), sw = atoi (argv[2]); Item *a = malloc (N * sizeof(item)); } if (sw) randinit(a, N); else scaninit(a, &N); sort (a, 0, N-1); show (a, 0, N-1); AED (IST/DEEC) 44

45 Ordenação de outros tipos de dados [3] Definição do interface o tipo apropriado e as funções para sua manipulação typedef double Item; #define key(a) (A) #define less(a, B) (key(a) < key(b)) #define exch(a, B) {Item t = A; A = B; B = t; } #define compexch(a, B) if (less(b,a)) exch(a, B) Item ITEMrand(void); int ITEMscan(Item *); void ITEMshow(Item); Interface para tipo Item Item.h void randinit (Item [], int); void scaninit (Item [], int *); void show (Item [], int, int); void sort (Item [], int, int); Interface para tipo tabela de Items Array.h AED (IST/DEEC) 45

46 Ordenação de outros tipos de dados [4] Implementação do interface Implementação das funções que operam sobre os dados #include <stdio.h> #include <stdlib.h> #include Item.h double ITEMrand(void){ return 1.0 * rand() / RAND_MAX; } Implementação para tipo Item (double) int ITEMscan(double *x){ return scanf( %lf, x); } void ITEMshow(double x){ printf( %7.5lf, x); } AED (IST/DEEC) 46

47 Ordenação de outros tipos de dados [5] Implementação do interface Implementação das funções que operam sobre os dados #include <stdio.h> #include <stdlib.h> #include Item.h #include Array.h void randinit(item a[], int N){ int i; for (i = 0; i < N; i++) a[i] = ITEMrand(); } void scaninit(item a[], int *N){ int i =0;; for (i = 0; i < *N; i++) if (ITEMscan(&a[i]) == EOF) break; *N = i; } void show(item a[], int l, int r){ int i; for (i = l; i <= r; i++) ITEMshow(a[i]); printf( \n ); } Implementação para tipo tabela de Items AED (IST/DEEC) 47

48 Ordenação de outros tipos de dados [6] Para qualquer tipo de dados apenas alterar o interface reescrever as funções que operam sobre os objectos rand show exch etc, etc algoritmos e rotinas de ordenação (sorting) não necessitam de qualquer alteração AED (IST/DEEC) 48

49 Ordenação por índices [1] Suponha-se que os objectos a ordenar são strings (vectores de caracteres): funções que operam sobre os dados precisam de ter em conta a questão da alocação de memória para strings quem deve ser responsável pela gestão desta memória? e se os objectos são "grandes"? Comparar e mover os objectos pode ser dispendioso! imagine que cada objecto é o nome completo de um aluno (ou que é toda a sua informação: nome, morada, etc) mesmo que haja uma boa abstracção para operar sobre os objectos ainda há a questão do custo Porquê movê-los? porque não alterar apenas referência para a sua posição relativa? AED (IST/DEEC) 49

50 Solução 1: Ordenação por índices [2] dados numa tabela data[0],..., data[n-1] usar uma segunda tabela, a[.], apenas de índices inicializado de forma a que a[i] = i, i = 0,..., N-1 objectivo é rearranjar a tabela de índices de forma a que a[0] aponte para o objecto com a menor chave, etc objectos são apenas acedidos para comparação Rotinas de ordenação apenas acedem aos dados através de funções de interface:, less, exch, etc apenas estas têm de ser reescritas AED (IST/DEEC) 50

51 Ordenação por índices - Exemplo Suponha os seguintes dados: data = [ rui, carlos, luis ] usamos uma tabela, de índices a = [ 0, 1, 2 ] 1 o passo: comparar data[a[1]] com data[a[0]]: carlos < rui pelo que há troca de a[1] com a[0]: a = [ 1, 0, 2 ] 2 o passo: comparar data[a[2]] com data[a[1]]: rui < luis pelo que há troca de a[2] com a[1]: a = [ 1, 2, 0 ] 3 o passo: comparar data[a[1]] com data[a[0]]: carlos < luis pelo que não há troca Os valores ordenados são portanto data[a[0]], data[a[1]] e data[a[2]] ou seja carlos < luis < rui (de forma encapotada usámos uma espécie de Insertion sort) AED (IST/DEEC) 51

52 Ordenação por ponteiros Outra solução é a tabela de índices conter de facto ponteiros para os dados mais geral pois os ponteiros podem apontar para qualquer lado items não precisam de ser membros de uma tabela nem de ter todos o mesmo tamanho depois da ordenação, acesso sequencial à tabela de ponteiros devolve os elementos ordenados um exemplo é a função qsort, do C, que implementa o algoritmo quicksort (estudaremos adiante) AED (IST/DEEC) 52

53 Ordenação por ponteiros ou índices Não-intrusiva em relação aos dados pode ser efectuada se os dados forem apenas de leitura Possível efectuar ordenação em chaves múltiplas ex: listagens de alunos, com nome, número e nota Evita o custo de mover/trocar os items pode ser elevado se estes forem grandes quantidades de informação mais eficiente em problemas com dados grandes e chaves pequenas E se for preciso retornar os dados ordenados? ordenar por índice/ponteiro fazer permutações in-situ (como?) AED (IST/DEEC) 53

54 Ordenação de listas ligadas Semelhante a ordenação de tabelas funções de interface diferentes necessário trabalhar com ponteiros e não apenas com índices Trocas podem não ser possíveis elementos podem ser acedidos por outras estruturas de dados trocam-se apenas os ponteiros inserções são na verdade mais simples não é preciso mover elementos para a direita, apenas ajustar dois ponteiros Algoritmos básicos alterações simples AED (IST/DEEC) 54

55 Exercício - usar Selection Sort para ordenar uma lista ligada Estruturas de Dados: lista de entrada lista de saída: dados colocados na sua posição final ponteiros adicionais Ideia básica procurar maior elemento na lista manter ponteiro para o anterior retirá-lo da lista de entrada introduzi-lo no início da lista de saída Implemente como exemplo! AED (IST/DEEC) 55

56 Ordenação Síntese da Aula O4 Ordenação de outros tipos de dados Implementações estudadas até aqui assumiam ordenação de inteiros Definição da interface apropriada Protótipos de funções elementares Definição dos dados Para evitar mover grandes quantidades de dados Ordenação por índices Ordenação por ponteiros Ordenação em listas ligadas Referência às alterações a introduzir nos algoritmos analisados Ao nível dos dados de entrada Ao nível da interface AED (IST/DEEC) 56

Porquê estudar algoritmos elementares (de ordenação)

Porquê estudar algoritmos elementares (de ordenação) Algoritmos e Estruturas de Dados LEE 2014/2015 Algoritmos de Ordenação Parte I Porquê estudar algoritmos elementares (de ordenação) Razões de ordem prática Fáceis de codificar e por vezes suficientes Rápidos/Eficientes

Leia mais

AED Algoritmos e Estruturas de Dados LEEC /2007. Algoritmos de Ordenação 1ª parte. Porquê estudar algoritmos elementares (de ordenação)

AED Algoritmos e Estruturas de Dados LEEC /2007. Algoritmos de Ordenação 1ª parte. Porquê estudar algoritmos elementares (de ordenação) AED Algoritmos e Estruturas de Dados LEEC - 2006/2007 Algoritmos de Ordenação 1ª parte Porquê estudar algoritmos elementares (de ordenação) Razões de ordem prática Fáceis de codificar e por vezes suficientes

Leia mais

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência Algoritmos e Estruturas de Dados LEE 2013/2014 Algoritmos de Ordenação Parte II Quicksort [1] Provavelmente o algoritmo mais usado inventado nos anos 60 muito estudado e analisado desempenho bem conhecido

Leia mais

AED AlgoritmoseEstruturas de Dados LEEC /2006. Algoritmos de Ordenação 1ª parte. Porquê estudar algoritmos elementares (de ordenação)

AED AlgoritmoseEstruturas de Dados LEEC /2006. Algoritmos de Ordenação 1ª parte. Porquê estudar algoritmos elementares (de ordenação) AED AlgoritmoseEstruturas de Dados LEEC - 2005/2006 Algoritmos de Ordenação 1ª parte Porquê estudar algoritmos elementares (de ordenação) Razõesde ordem prática Fáceis de codificar e por vezes suficientes

Leia mais

Métodos de 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

Leia mais

Quicksort [1] Quicksort [2]

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

Leia mais

Métodos de Ordenação Parte I

Métodos de Ordenação Parte I Estrutura de Dados II Métodos de Ordenação Parte I Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais da Prof a Ana Eliza e Prof. Robson Lins Rearranjar

Leia mais

BCC202 - Estrutura de Dados I

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

Leia mais

QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

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

Leia mais

Capítulo 2 - Algoritmos elementares de ordenação

Capítulo 2 - Algoritmos elementares de ordenação Capítulo 2 - Algoritmos elementares de ordenação ISEL/LEIC - 2007/2008 2º ano, 1º Semestre * Estes acetatos foram parcialmente adaptados dos acetatos de AED da LEEC do Instituto Superior Técnico Prof.

Leia mais

ALGORITMOS DE ORDENAÇÃO

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,

Leia mais

AED2 - Aula 11 Problema da separação e quicksort

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

Leia mais

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010 Vectores: Algoritmos de Ordenação Algoritmos e Estruturas de Dados 2009/2010 Ordenação Problema (ordenação de vector) rearranjar os n elementos de um vector (v) por ordem crescente, ou melhor, por ordem

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 10 Ordenação 2 15-1 7 9 4 6 Existem muitos métodos de ordenar Bolha Inserção Seleção Quicksort etc... Bolha (bubble sort) Percorrer

Leia mais

Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada

Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho   BCC402 Aula 04 Algoritmos e Programação Avançada Ordenação Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho http://www.toffolo.com.br BCC402 Aula 04 Algoritmos e Programação Avançada Aplicações Como testar se todos os elementos de um conjunto

Leia mais

Algoritmos de Ordenação

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

Leia mais

Ordenação. Prof. Jonas Potros

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

Leia mais

BCC202 - Estrutura de Dados I

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: reifortes@iceb.ufop.br

Leia mais

Projeto e Análise de Algoritmos

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

Leia mais

6. Pesquisa e Ordenação

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

Leia mais

Métodos de Classificação

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

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA CAP. 5. TÉCNICAS DE ORDENAÇÃO 5.1. Introdução 5.2. Métodos

Leia mais

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; 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]

Leia mais

Aula 18 Algoritmos básicos de busca e classificação

Aula 18 Algoritmos básicos de busca e classificação Aula 18 Algoritmos básicos de busca e classificação Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas e classificação de tabelas estão entre os mais usados. Considere por exemplo

Leia mais

AED Algoritmos e Estruturas de Dados LEEC/LEE / semestre. Motivação Problema da Conectividade

AED Algoritmos e Estruturas de Dados LEEC/LEE / semestre. Motivação Problema da Conectividade AED Algoritmos e Estruturas de Dados LEEC/LEE - 2005/2006 2 semestre Motivação Problema da Conectividade Algoritmos e Estruturas de Dados Algoritmos: métodos para a resolução de problemas [passíveis de

Leia mais

Métodos de Ordenação Parte 3

Métodos de Ordenação Parte 3 Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária

Leia mais

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

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

Leia mais

Classificação por Seleção - selection sort

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

Leia mais

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de dados Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores

Leia mais

Ponteiros e Tabelas. K&R: Capítulo 5

Ponteiros e Tabelas. K&R: Capítulo 5 Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

Introdução a Algoritmos Parte 09

Introdução a Algoritmos Parte 09 Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 09 (Baseado no Material do Prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br

Leia mais

Algoritmos de ordenação: Inserção e Shellsort

Algoritmos de ordenação: Inserção e Shellsort CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Algoritmos de ordenação: Inserção e Shellsort Algoritmos e Estruturas de Dados I Slides adaptados dos slides do livro texto (Ziviani) e dos slides

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68 INE5231 Computação Científica I Prof. A. G. Silva 25 de abril de 2017 Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de 2017 1 / 68 Conteúdo programático O computador - [3 horas-aula] Representação

Leia mais

Linguagem C: Ordenação

Linguagem C: Ordenação Instituto de C Linguagem C: Ordenação Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Introdução Algoritmos de ordenação Ordenação

Leia mais

AED Algoritmos e Estruturas de Dados LEEC /2007. Tabelas de Dispersão

AED Algoritmos e Estruturas de Dados LEEC /2007. Tabelas de Dispersão AED Algoritmos e Estruturas de Dados LEEC - 2006/2007 Tabelas de Dispersão Tabelas de Dispersão - Introdução (1) As tabelas de dispersão (hash tables) são estruturas de dados adequadas para: Tabelas de

Leia mais

Estruturas de dados compostas

Estruturas de dados compostas 1 Estruturas de dados compostas Vimos estruturas lineares simples : Vetores, listas ligadas, strings Consideramos agora estruturas compostas : Vetores de vetores (em particular, matrizes), vetores de listas

Leia mais

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

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

Leia mais

Linguagem de Programação I. Aula 08 Linguagem C: Arrays

Linguagem de Programação I. Aula 08 Linguagem C: Arrays Linguagem de Programação I Aula 08 Linguagem C: Arrays Da Aula Anterior Tipos de dados básicos em C Modificadores de tipo Declaração de Variáveis Operadores em C Estruturas de Controle Nesta Aula Arrays

Leia mais

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 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

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Ordenação Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC O problema da ordenação Ordenação

Leia mais

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1 Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1 - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) PIP/CA - Programa Interdisciplinar de Pós-Graduação

Leia mais

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

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

Leia mais

Ordenação de Vectores

Ordenação de Vectores 4. Vectores: Algoritmos de Ordenação João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Ordenação de Vectores Problema

Leia mais

Programação de Computadores Ordenação de Arranjos

Programação de Computadores Ordenação de Arranjos Programação de Computadores Ordenação de Arranjos Notação O Alan de Freitas Classes de algoritmos Busca em arranjo Busca sequencial Busca binária On) Olog n) Ordenação de Arranjos Ordenação de Arranjos

Leia mais

INF111 Programação II Aulas 11, 12, 13 Ordenação

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

Leia mais

Métodos de Classificação

Métodos de Classificação 395 Métodos de Classificação 396 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

Leia mais

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

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

Leia mais

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

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

Leia mais

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR UNIVERSIDADE DA BEIRA INTERIOR Programação II 2º Semestre Exame Época Norma (15 val) Resolução 22/06/2018 1 [1,00 val + 1,00 val] - Memória Dinâmica Considere as seguintes declarações de variáveis: int

Leia mais

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional Disciplina: Algoritmos e Estruturas de Dados Professor: Flávio Cardeal Lista de

Leia mais

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ] USP - ICMC - SSC SSC 0300-2o. Semestre 2013 Disciplina de [ Eng. Elétrica / Automação ] Prof. Dr. Fernando Santos Osório / PAE: Rafael Klaser (LRM / ICMC) LRM - Laboratório de Robótica Móvel do ICMC /

Leia mais

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: 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

Leia mais

Recuperação P1 de Estrutura de Dados

Recuperação P1 de Estrutura de Dados Recuperação P1 de Estrutura de Dados Sigla _IED001_ TURMA: A PERÍODO: MAT ( ) NOT ( ) DISCIPLINA:_Estrutura de Dados DATA: / / Argumente com fundamentando as questões da avaliação indicando porque a questão

Leia mais

Análise de complexidade

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

Leia mais

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados Ano Lectivo de 2006/2007 2 o Semestre 2 o Teste A - 2 de Julho de 2007 Duração: 2h - O teste é sem consulta. - Para cada questão

Leia mais

Ordenação - Motivação

Ordenação - Motivação Ordenação - Motivação Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 09 Ordenação de Vetores Edirlei Soares de Lima Ordenação de Vetores Problema: Entrada: vetor com os elementos a serem ordenados; Saída: mesmo vetor com

Leia mais

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1 Listas Lineares Elerson R. S. Santos elerson@dcc.ufmg.br Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1 http://www2.dcc.ufmg.br/livros/algoritmos/ Listas Lineares Uma das formas mais simples

Leia mais

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas Listas Ligadas (Encadeadas) Matrizes são estruturas de dados muito úteis fornecidas nas linguagens de programação. No entanto, elas têm pelo menos duas limitações: 1- Seu tamanho tem que ser conhecido

Leia mais

Programação de Computadores II. Cap. 16 Ordenação

Programação de Computadores II. Cap. 16 Ordenação Programação de Computadores II Cap. 16 Ordenação Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:

Leia mais

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

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

Leia mais

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados Ano Lectivo de 2002/2003 2 o Semestre Repescagem do 2 o Teste (A) 18 de Julho de 2003 Duração: 2h - O teste é sem consulta. - Para cada questão

Leia mais

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 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

Leia mais

Entrada: M ind

Entrada: M ind Ordenação O objetivo deste capítulo é o de estudar algoritmos de ordenação (ou classificação) de uma sequência de números, em ordem crescente, ou decrescente. De um modo geral tal sequência pode ser uma

Leia mais

Algoritmos e Estrutura de Dados

Algoritmos e Estrutura de Dados Algoritmos e Estrutura de Dados Fabrício Olivetti de França 02 de Fevereiro de 2019 Topics 1. Algoritmos de Ordenação Eficientes 1 Algoritmos de Ordenação Eficientes Heap Sort Na primeira aula de ordenação

Leia mais

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012 Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 1º semestre Trabalho nº 5 Funções http://tele1.dee.fct.unl.pt/pm

Leia mais

BCC202 - Estrutura de Dados I

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: reifortes@iceb.ufop.br

Leia mais

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Lista de Exercícios sobre Listas Implementadas por Encadeamento Lista de Exercícios sobre Listas Implementadas por Encadeamento 1) Se você tem de escolher entre uma representação por lista encadeada ou uma representação usando posições contíguas de memória para um

Leia mais

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1 MÉTODOS DE ORDENAÇÃO Introdução à Programação SI1 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

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Métodos de pesquisa e classificação de dados (continuação) Estruturas de Dados 2 Algoritmo de busca Recebe como argumento

Leia mais

Classificação por Particionamento

Classificação por Particionamento Classificação por Particionamento O método de particionamento é um caso de aplicação do princípio da divisão e conquista: classificar dois vetores de tamanho n/2 é mais fácil que classificar um vetor de

Leia mais

Módulo 16 - Ordenação

Módulo 16 - Ordenação Estruturas de Dados Módulo 16 - Ordenação 15/05/2013 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus

Leia mais

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Vectores: Algoritmos de Pesquisa Algoritmos e Estruturas de Dados 2005/2006 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema noção de algoritmo muito

Leia mais

Ordenação e Pesquisa

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.

Leia mais

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

Listas (Parte 1) Túlio Toffolo  BCC202 Aula 09 Algoritmos e Estruturas de Dados I Listas (Parte 1) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 09 Algoritmos e Estruturas de Dados I Ementa do Curso Tipos Abstratos de Dados / Alocação Dinâmica Análise de Algoritmos

Leia mais

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 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

Leia mais

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008 Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 1º semestre Funções e Vectores http://tele1.dee.fct.unl.pt

Leia mais

EPs 1 e 2. EP2: veja. EP1: veja

EPs 1 e 2. EP2: veja.   EP1: veja 1 EPs 1 e 2 EP2: veja http://www.ime.usp.br/~fabricio/ep2/ep2.pdf EP1: veja http://www.ime.usp.br/~yoshi/2006ii/mac122a/eps/ep1/wc.pdf http://www.ime.usp.br/~pf/cweb/ http://www.ime.usp.br/~pf/algoritmos/apend/util.html

Leia mais

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados Ano Lectivo de 2002/2003 2 o Semestre 2 o Teste A 9 de Junho de 2003 Duração: 2h - O teste é sem consulta. - Para cada questão com escolha múltipla

Leia mais

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) 5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Ponteiros & tabelas (cont.) K&R: Capítulo 5 Ponteiros & tabelas (cont.) K&R: Capítulo 5 Sinopse da aula de hoje Pointers in a nutshell & alocação dinâmica de memória Estruturas, funções e apontadores Estruturas auto-referenciadas Exemplo de aplicação:

Leia mais

Existem duas categorias de algoritmos de ordenação: Os algoritmos de ordenação são avaliados de acordo com os seguintes critérios:

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

Leia mais

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa Capítulo Ordenação e pesquisa Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa Bubblesort Identifica os pares de elementos contíguos que não estão na ordem correcta

Leia mais

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort Algoritmos e Estruturas de Dados Décima sexta aula: Quicksort Nesta aula vamos Estudar o quicksort. Considerar algumas variantes: Quicksort geral, parametrizando a função de comparação. Quicksort com partição

Leia mais

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014 Filas de prioridade Marcelo K. Albertini de Novembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

Análise de Algoritmos Estrutura de Dados II

Análise de Algoritmos Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

O Problema da Ordenação Métodos de Ordenação Parte 1

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

Leia mais

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

Tabelas Hash. Prof. Túlio Toffolo  BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Tabelas Hash Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa

Leia mais

Ponteiros. Baseado nos slides do Prof. Mauro.

Ponteiros. Baseado nos slides do Prof. Mauro. Baseado nos slides do Prof. Mauro. A memória do computador é uma sequência de bytes, na qual endereçamos cada um sequencialmente. Como vimos, uma variável é uma região da memória que reservamos para armazenar

Leia mais

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Introdução aos Algoritmos e Estruturas de Dados 2 o Teste - A LEIC Alameda, 2007/2008 Data: 12 de Junho de 2008 2 o Semestre Duração: 2h RESOLUÇÃO I. (2.5+2.5 = 5.0 val.) I.a) Suponha que está a trabalhar

Leia mais

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de 28/03/2010 Estruturas de Dados Aula 6: Cadeias de Caracteres 28/03/2010 Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis

Leia mais

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013 Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

Estruturas de Dados Aula 6: Cadeias de Caracteres

Estruturas de Dados Aula 6: Cadeias de Caracteres Estruturas de Dados Aula 6: Cadeias de Caracteres Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis Códigos

Leia mais

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013 Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

Recursividade. Recursividade

Recursividade. Recursividade A recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema. Esta ferramenta pode ser utilizada sempre que for possível expressar a solução de um problema

Leia mais

Bubble Sort. Tempo total O(n 2 )

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

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Programação Estruturada Prof. Rodrigo Hausen   Agregados de Dados Heterogêneos (structs) Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Agregados de Dados Heterogêneos (structs) 1 AGREGADO HOMOGÊNEO Um agregado homogêneo de dados é um conjunto de dados que são necessariamente

Leia mais