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

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

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

Transcrição

1 Capítulo 2 - Algoritmos elementares de ordenação ISEL/LEIC /2008 2º ano, 1º Semestre * Estes acetatos foram parcialmente adaptados dos acetatos de AED da LEEC do Instituto Superior Técnico Prof. Rui Gustavo Crespo Nuno Leite AED: Algoritmos e Estruturas de Dados Semestre de Inverno 2007/08

2 Algoritmos elementares de ordenação Começaremos o nosso estudo com algoritmos elementares de ordenação: Selection sort, Insertion sort, Bubble sort e Shell sort Porquê estudar algoritmos elementares de ordenação? Razões de ordem prática 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ípio para desenvolvimento de algoritmos mais sofisticados Alguns são fáceis de generalizar para métodos mais eficientes Importante para compreensão das regras de "funcionamento" LEIC AED Inverno 2007/08 Algoritmos de ordenação 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) Metodologia características específicas de cada item ou chave podem ser diferentes mas conceito abstracto é o mais importante utilizaremos operações abstractas nos dados: comparação, troca LEIC AED Inverno 2007/08 Algoritmos de ordenação 3

4 Contexto e regras básicas (2) Metodologia começaremos por estudar ordenação em arrays consideraremos primeiro ordenação de sequências de inteiros apresentaremos posteriormente uma implementação genérica Tempo de execução usualmente proporcional ao número de comparações número de movimentações/trocas (ou ambos) LEIC AED Inverno 2007/08 Algoritmos de ordenação 4

5 Programa de teste de algoritmos de ordenação public class IntArraySort { private static boolean less(int x, int y) { return x < y; } private static void exch(int[] a, int i, int j) { int aux = a[i]; a[i] = a[j]; a[j] = aux; } private static void lessexch(int[] a, int i, int j) { if (less(a[i], a[j])) exch (a, i, j); } // Selection Sort private static void selectionsort(int[] a, int l, int r) {... } // Insertion Sort private static void insertionsort(int[] a, int l, int r) {... } // Bubble Sort private static void bubblesort(int[] a, int l, int r) {... }... LEIC AED Inverno 2007/08 Algoritmos de ordenação 5

6 Programa de teste de algoritmos de ordenação... public static void sort(int[] a, int l, int r) { selectionsort(a, l, r); } public static void main(string[] args) { int n = 50; int a[] = new int[n]; for (int i = 0; i < n; ++i) { // random gera números no intervalo [0.0; 1.0[ a[i] = (int) (Math.random()*100); } sort(a, 0, n-1); // Ordenar array for (int i = 0; i < n; ++i) // Imprimir array System.out.print(a[i] + " "); } } // classe IntArraySort LEIC AED Inverno 2007/08 Algoritmos de ordenação 6

7 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 itens mas por vezes os melhores para N pequeno algoritmos avançados: N log N para ordenar N itens p.ex., Quicksort, Mergesort, Heapsort LEIC AED Inverno 2007/08 Algoritmos de ordenação 7

8 Nomenclatura (2) Olharemos também para os recursos de memória necessários ordenação "in-place" ou utilizando memória adicional Definição: um algoritmo de ordenação é dito estável se preserva a ordem relativa dos itens 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 8

9 Exemplo: Algoritmo estável vs não estável Ordenado pela 1ª chave (nome) Afonso 1 Beatriz 2 Bruno 4 João 2 José 4 Mariana 2 Mário 3 Matilde 3 Sílvia 1 Tânia 4 Após ordenação pela segunda chave (número) algoritmo não estável Afonso 1 Sílvia 1 Mariana 2 João 2 Beatriz 2 Matilde 3 Mário 3 Tânia 4 Bruno 4 José 4 Após ordenação pela segunda chave (número) algoritmo estável Afonso 1 Sílvia 1 Beatriz 2 João 2 Mariana 2 Mário 3 Matilde 3 Bruno 4 José 4 Tânia 4 LEIC AED Inverno 2007/08 Algoritmos de ordenação 9

10 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 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 10

11 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 array de índices/ponteiros em que o primeiro indica o menor elemento, etc. LEIC AED Inverno 2007/08 Algoritmos de ordenação 11

12 Exemplo: Ordenação indirecta Em Java, a ordenação de elementos de tipo básico é feita de forma directa, e a ordenação de objectos é realizada de forma indirecta, dado que estes são manipulados por referência A figura ao lado ilustra o conteúdo dum array a ser ordenado, contendo referências para objectos com chaves E X A M P L E, nesta ordem. Após a ordenação das referências, o array passa a referir os objectos na ordem A E E L M P X LEIC AED Inverno 2007/08 Algoritmos de ordenação 12

13 Ordenação por selecção - Selection Sort Algoritmo: procurar menor elemento e trocar com o elemento situado na 1.ª posição procurar 2.º menor elemento e trocar com o elemento situado na 2.ª posição proceder assim até ordenação estar completa a sombreado, indicam-se os elementos já ordenados LEIC AED Inverno 2007/08 Algoritmos de ordenação 13

14 Implementação private static void selectionsort(int[] a, int l, int r) { int min; for (int i = l; i < r; ++i) { min = i; for (int j = i+1; j <= r; ++j) if (less(a[j], a[min])) min = j; exch(a, i, min); } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 14

15 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 trocas e N 2 /2 comparações Demonstração: para cada item i de 1 a N-1 há uma troca e N-i comparações (ver sombreados no exemplo) Logo há N-1 trocas e (N-1) + (N-2) = N(N-1)/2 comparações LEIC AED Inverno 2007/08 Algoritmos de ordenação 15

16 Selection Sort -Análise 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 (dados ordenados de forma inversa) N log N em média (dados ordenados aleatoriamente) Algoritmo não adaptativo Ordenar um ficheiro já ordenado demora tanto tempo como ordenar um ficheiro ordenado aleatoriamente! LEIC AED Inverno 2007/08 Algoritmos de ordenação 16

17 Ordenação Síntese da Aula 1 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 operações elementares relevantes Definições e propriedades gerais Ordenação por Selecção Selection sort Descrição Exemplo de aplicação Análise de eficiência LEIC AED Inverno 2007/08 Algoritmos de ordenação 17

18 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ª posição LEIC AED Inverno 2007/08 Algoritmos de ordenação 18

19 Insertion Sort - Funcionamento Durante a primeira passagem de Insertion sort, o S na segunda posição é maior que A, não sendo necessário mover-se. Na segunda passagem, quando é encontrado o O na terceira posição, este é trocado com o S colocando A O S em ordem, e assim por diante. Elementos não sombreados e não assinalados com um círculo, são aqueles que são movidos uma posição para a direita LEIC AED Inverno 2007/08 Algoritmos de ordenação 19

20 Implementação private static void insertionsort1(int[] a, int l, int r) { for (int i = l+1; i <= r; ++i) { for (int j = i; j > l; --j) lessexch(a, j, j-1); } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 20

21 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 21

22 Insertion Sort - Melhorar desempenho Demasiadas operações de comparação/troca (lessexch) podemos parar se encontramos uma chave que não é maior que a do item a ser inserido (array está ordenado à 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 lessexch não é o melhor processo de mover vários dados uma posição para a direita LEIC AED Inverno 2007/08 Algoritmos de ordenação 22

23 Insertion Sort - Versão adaptativa private static void insertionsort2(int[] a, int l, int r) { for (int i = l+1; i <= r; ++i) { int v = a[i]; int j = i; while (j >= l+1 && less(v, a[j-1])) { a[j] = a[j-1]; --j; } a[j] = v; } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 23

24 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: Quando a sequência a ordenar se encontra parcialmente ordenada, o Insertion sort tem um desempenho aproximadamente linear. LEIC AED Inverno 2007/08 Algoritmos de ordenação 24

25 Bubble Sort Talvez o algoritmo mais utilizado e o que muitas pessoas aprendem primeiro 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 25

26 Implementação private static void bubblesort(int[] a, int l, int r) { for (int i = l; i < r; ++i) { for (int j = r; j > i; --j) { lessexch(a, j, j-1); } } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 26

27 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.º 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 27

28 Bubble Sort - Comentários (2) Algoritmo pode ser melhorado, tal como o algoritmo de inserção código é muito semelhante mas não igual ciclo interno de Insertion Sort percorre a parte esquerda (ordenada) do array ciclo interno de Bubble Sort percorre a parte direita (não ordenada) do array no final de cada passagem podemos testar se houve mudanças se o array estiver ordenado, pára LEIC AED Inverno 2007/08 Algoritmos de ordenação 28

29 Bubble Sort -Análise Propriedade: Bubble sort usa aproximadamente N 2 /2 comparações e N 2 /2 trocas no pior caso; N 2 /4 trocas no caso médio 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-i comparações e trocas caso médio é semelhante (análise mais complexa) LEIC AED Inverno 2007/08 Algoritmos de ordenação 29

30 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 30

31 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) considerando dados manipulados por valor tem-se: comparação -1 unidade; troca - M unidades N 2 /2 comparações e NM custo de trocas termo NM 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! LEIC AED Inverno 2007/08 Algoritmos de ordenação 31

32 Comparação dos algoritmos elementares de ordenação (3) int items Integer keys String keys N S I* I B S I B S I B Legenda: S Selection sort I* Insertion sort, exchange-based I Insertion sort B Bubble sort LEIC AED Inverno 2007/08 Algoritmos de ordenação 32

33 Ordenação Síntese da Aula 2 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 33

34 Shell sort (1) Shell sort (proposto por Donald Shell em 1959) é um algoritmo que requer no pior caso menos de O(n 2 ) comparações e trocas embora seja simples perceber intuitivamente o seu funcionamento, é extremamente difícil analisar o seu desempenho estimam-se desempenhos de ordem entre O(n 3/2 ) e O(n log 2 n) (melhor alcançado actualmente), dependendo dos detalhes de implementação Shell sort éuma generalização de Insertion sort que tem em conta duas observações: Insertion sort é eficiente se a entrada estiver ordenada ou quase ordenada Insertion sort é ineficiente, em média, porque apenas move os elementos de uma posição de cada vez LEIC AED Inverno 2007/08 Algoritmos de ordenação 34

35 Shell sort (2) Insertion sort: se o menor item está no final da tabela, serão precisos N passos para o colocar na posição correcta Shell sort: acelerar o algoritmo permitindo trocas entre elementos que estão afastados como? O Shell sort compara os elementos separados de uma distância (gap) de várias posições (p.ex. gap=5) são realizadas múltiplas passagens com passos sucessivamente menores, terminando com gap=1, que não é mais do que realizar Insertion sort mas nesta altura, os dados já estão praticamente ordenados Insertion sort éeficiente! LEIC AED Inverno 2007/08 Algoritmos de ordenação 35

36 Shell sort Exemplo (1) Suponha que se pretende ordenar o array 66, 95, 93, 82, 54, 40, 35, 19, 75, 24, 32, 43, 16, 68 Ordenar os elementos separados de uma distância h éo mesmo que particionar o array em linhas de h colunas e aplicar Insertion sort ao longo das colunas Execução de Shell sort com h=5: Sequência original h=5 Sequência ordenada por colunas usando Insertion sort LEIC AED Inverno 2007/08 Algoritmos de ordenação 36

37 Shell sort Exemplo (2) Execução de Shell sort com h=3: Sequência original h=3 Sequência ordenada por colunas usando Insertion sort LEIC AED Inverno 2007/08 Algoritmos de ordenação 37

38 Shell sort Exemplo (3) Execução de Shell sort com h=1 (Insertion sort): Sequência original (coluna única) h= Sequência ordenada usando Insertion sort LEIC AED Inverno 2007/08 Algoritmos de ordenação 38

39 Shell sort Exemplo (4) Em termos de implementação, a ordenação das colunas com Insertion sort não é realizada sequencialmente, ordenar 1ª col., 2ª col., mas sim de forma entrelaçada como ilustrado neste exemplo Sequência original h= k= l+h+k k= l+h+k LEIC AED Inverno 2007/08 Algoritmos de ordenação 39

40 Shell sort Implementação para o exemplo dado private static void shellsorttest(int[] a, int l, int r) { int incs[] = { 5, 3, 1 }; for (int k = 0; k < incs.length; ++k) { int h = incs[k]; // Insertion sort com passo (gap) h for (int i = l+h; i <= r; ++i) { int v = a[i], j = i; while (j >= l+h && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; } a[j] = v; } } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 40

41 Sequência de Ordenação (1) Difícil de escolher propriedades de muitas sequências foram já estudadas possível provar que umas são melhores que outras ex: 1, 4, 13, 40, 121, 364, 1093, 3280,... (Knuth, h=3*h ant +1) melhor que 1, 2, 4, 8, 16, 32, 64, 128, 256, 512,... (Shell, h=2 i ) -> O(n 2 ) Porquê? mas pior (20%) que 1, 8, 23, 77, 281, 1073, 4193, (Sedgewick, 4 i (2 i ) + 1 ) na prática utilizam-se sequências que decrescem geometricamente para que o número de incrementos seja logarítmico LEIC AED Inverno 2007/08 Algoritmos de ordenação 41

42 Sequência de Ordenação (2) 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 LEIC AED Inverno 2007/08 Algoritmos de ordenação 42

43 Shell sort Implementação genérica private static void shellsort(int[] a, int l, int r) { int h, length = r-l+1; for (h = 1; h < length; h = 3*h+1); // empty body for (h /= 3; h > 0; h /= 3) { // Insertion sort com passo (gap) h for (int i = l+h; i <= r; ++i) { int v = a[i], j = i; while (j >= l+h && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; } a[j] = v; } } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 43

44 Análise de Shell sort Propriedades: o resultado de h-ordenar um ficheiro que está k-ordenado é um ficheiro que está simultaneamente h- e k-ordenado Propriedade muito importante: indica a ordenação actual não estraga a ordenação realizada anteriormente Shell sort faz menos do que O(N 3/2 ) comparações para os incrementos (Knuth) 1, 4, 13, 40, 121, 364, 1093,... Shell sort faz menos do que O(N 4/3 ) comparações para os incrementos (Sedgewick) 1, 8, 23, 77, 281, 1073, 4193, 16577,... Nota: sequências até agora usam incrementos que são primos entre si Shell sort faz menos do que O(N lg 2 N) comparações para os incrementos (Pratt) 1, 2, 3, 4, 6, 8, 9, 12, 16,..., 2 p 3 q,... LEIC AED Inverno 2007/08 Algoritmos de ordenação 44

45 Vantagens de Shell sort 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 difícil de compreender! LEIC AED Inverno 2007/08 Algoritmos de ordenação 45

46 Implementação genérica de algoritmos de ordenação (1) public class StaticGenericArraySort { private static boolean less(object x, Object y, Comparator cmp) { if (cmp == null) return ((Comparable)x).compareTo(y) < 0; else return cmp.compare(x, y) < 0; } private static void exch(object[] a, int i, int j) { Object aux = a[i]; a[i] = a[j]; a[j] = aux; } private static void lessexch(object[] a, int i, int j, Comparator cmp) { if (less(a[i], a[j], cmp)) exch (a, i, j); } private static void selectionsort(object[] a, int l, int r, Comparator cmp) { for (int i = l; i < r; ++i) { int min = i; for (int j = i+1; j <= r; ++j) if (less(a[j], a[min], cmp)) min = j; exch(a, i, min); } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 46

47 Implementação genérica de algoritmos de ordenação (2) } // Métodos públicos public static void sort(object[] a, int l, int r, Comparator cmp) { selectionsort(a, l, r, cmp); } public static void main(string[] args) { Student[] students = {new Student("Nuno", 30), new Student("Luis", 10), new Student("Afonso", 40), new Student("Ana", 20) }; // Ordem natural, neste caso por nome de forma ascendente // (definido pelo método compareto) sort(students, 0, students.length-1, null); // ordenação por nome de forma descendente sort(students, 0, students.length-1, Student.BY_NAME); // ordenação por número de forma ascendente sort(students, 0, students.length-1, Student.BY_NUMBER); } LEIC AED Inverno 2007/08 Algoritmos de ordenação 47

48 Ordenar por diferentes critérios class Student implements Comparable<Student> { private String name; private int number; private static class ByName implements Comparator<Student> { public int compare(student a, Student b) { return -a.name.compareto(b.name); } // ordem inversa } private static class ByNumber implements Comparator<Student> { public int compare(student a, Student b) { return a.number - b.number; } } public static final Comparator<Student> BY_NAME = new ByName(); public static final Comparator<Student> BY_NUMBER = new ByNumber(); public int compareto(student s) { return this.name.compareto(s.name); } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 48

49 Ordenação Síntese da Aula 3 Shell sort 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 Vantagens relativamente a outros algoritmos Implementação genérica de algoritmos de ordenação Ordenação por diferentes critérios LEIC AED Inverno 2007/08 Algoritmos de ordenação 49

50 Capítulo 2 - Algoritmos avançados de ordenação - Quicksort e Mergesort ISEL/LEIC /2008 2º ano, 1º Semestre * Estes acetatos foram parcialmente adaptados dos acetatos de AED da LEEC do Instituto Superior Técnico Prof. Rui Gustavo Crespo Nuno Leite AED: Algoritmos e Estruturas de Dados Semestre de Inverno 2007/08

51 Algoritmos avançados - Quicksort Provavelmente o algoritmo mais usado inventado em 1960 por Charles Hoare muito estudado e analisado desempenho bem conhecido popular devido à facilidade de implementação e eficiência complexidade N log 2 N, em média, para ordenar N objectos ciclo interno muito simples e conciso LEIC AED Inverno 2007/08 Algoritmos de ordenação 51

52 Quicksort Quicksort realiza 39% mais comparações do que o Mergesort Contudo, é mais rápido que o Mergesort na prática devido ao menor custo de outras instruções de alta frequência Mas: não é estável quadrático (N 2 ) no pior caso! frágil : qualquer pequeno erro de implementação pode não ser detectado mas levar a ineficiência LEIC AED Inverno 2007/08 Algoritmos de ordenação 52

53 Quicksort Algoritmo do tipo dividir para conquistar Algoritmo Quicksort: (Opcional): Baralhar (Shuffle) o array Particionar (Partition) o array da seguinte forma: elemento a[i] fica na sua posição final para um determinado i não existem elementos maiores do que a[i] à esquerda de i não existem elementos menores do que a[i] à direita de i Ordenar cada partição recorrentemente LEIC AED Inverno 2007/08 Algoritmos de ordenação 53

54 Quicksort -Partição LEIC AED Inverno 2007/08 Algoritmos de ordenação 54

55 Quicksort -Exemplo LEIC AED Inverno 2007/08 Algoritmos de ordenação 55

56 Estratégia para a partição Escolher a[r] para ser o elemento de partição o que é colocado na posição final Percorrer o array a partir da esquerda até encontrar um elemento maior que ou igual ao elemento de partição (a[r]) Percorrer o array a partir da direita até encontrar um elemento menor que ou igual ao elemento de partição (a[r]) estes dois elementos estão deslocados; trocamos as suas posições! Procedimento continua até nenhum elemento à esquerda de a[r] ser maior que ele, e nenhum elemento à direita de a[r] ser menor que ele termina quando os índices se cruzam completa-se trocando a[r] com o elemento referenciado pelo índice i (que varre da esquerda para a direita) LEIC AED Inverno 2007/08 Algoritmos de ordenação 56

57 Quicksort - Implementação public class IntArraySort { public static void quicksort(int[] a, int l, int r) { shuffle(a, l, r); // Opcional qsort(a, 0, a.length - 1); } private static void qsort(int[] a, int l, int r) { if (r <= l) return; int m = partition(a, l, r); qsort(a, l, m-1); qsort(a, m+1, r); } LEIC AED Inverno 2007/08 Algoritmos de ordenação 57

58 Quicksort - Implementação private static int partition(int[] a, int l, int r) { int i = l-1, j = r; int v = a[r]; for (;;) { // Encontra índice de elemento >= pivot à esquerda while (less(a[++i], v)) ; // Encontra índice elemento<=pivot à direita while (less(v, a[--j])) if (j == l) break; if (i >= j) break; exch(a, i, j); } exch(a, i, r); // Troca com pivot de partição return i; // Retorna índice do pivot } LEIC AED Inverno 2007/08 Algoritmos de ordenação 58

59 Quicksort -Partição Eficiência do processo de ordenação depende de quão bem a partição divide os dados depende por seu turno do elemento de partição será tanto mais equilibrada quanto mais perto este elemento estiver do meio da tabela na sua posição final Processo de partição não é estável qualquer chave pode ser movida para trás de várias outras chaves iguais a si (que ainda não foram examinadas) não é conhecida nenhuma forma simples de implementar uma versão estável de Quicksort baseada em arrays LEIC AED Inverno 2007/08 Algoritmos de ordenação 59

60 Quicksort Características de desempenho Se não se usar o shuffling, o Quicksort pode ser muito ineficiente em casos patológicos Propriedade: Quicksort usa cerca de N 2 /2 comparações no pior caso No pior caso, o número de comparações usadas por Quicksort satisfaz a recorrência de dividir para conquistar C(n) = C(n-1) + O(n) 1º termo cobre o custo de ordenar um sub-ficheiro (partição degenerada) 2º termo refere-se a examinar cada elemento C(n) = O(n 2 ) LEIC AED Inverno 2007/08 Algoritmos de ordenação 60

61 Quicksort Análise do pior caso Se o ficheiro já estiver ordenado, todas as partições degeneram e o programa chama-se a si próprio N vezes; o número de comparações é de N + (N-1) + (N-2) = (N + 1)N / 2 (mesma situação se o ficheiro estiver ordenado por ordem inversa) Não apenas o tempo necessário para a execução do algoritmo cresce quadraticamente como o espaço necessário para o processo recorrente é de cerca de N o que é inaceitável para ficheiros grandes LEIC AED Inverno 2007/08 Algoritmos de ordenação 61

62 Quicksort Características de desempenho Melhor caso: quando cada partição divide o ficheiro de entrada exactamente em metade número de comparações usadas por Quicksort satisfaz a recorrência de dividir para conquistar C(n) = 2C(n/2) + O(n) 1º termo cobre o custo de ordenar os dois sub-ficheiros 2º termo refere-se a examinar cada elemento solução é C(n) = O(n log 2 n) (vimos numa aula anterior) Espaço usado nas chamadas recorrentes é log 2 (n) Demonstração... LEIC AED Inverno 2007/08 Algoritmos de ordenação 62

63 Quicksort Características de desempenho Propriedade: Quicksort usa cerca de O(2N log 2 N) comparações em média Demonstração: A fórmula de recorrência exacta para o número de comparações utilizado por Quicksort para ordenar N números distintos aleatoriamente posicionados é C(n) = n n n k= 1 (C(k 1) + C(n k)) n 2,C(0) = C(1) = termo n+1 cobre o custo de comparar o elemento de partição com os restantes (2 comparações extra: ponteiros cruzam-se) resto vem do facto de que cada elemento tem probabilidade 1/n de ser o elemento de partição após o que ficamos com dois sub-arrays de tamanhos k-1 e n-k 0 LEIC AED Inverno 2007/08 Algoritmos de ordenação 63

64 Quicksort Características de desempenho Demonstração (cont.) C(n) = n n n k= 1 (C(k 1) + C(n k)) = n n n k= 1 C(k 1) Multiplicar ambos os lados da equação por n e subtrair a mesma fórmula por n-1 nc(n) -(n -1)C(n -1) = n(n + 1) -(n -1)n + Simplificar para: 2C(n -1) nc(n) = (n + 1)C(n 1) + 2n LEIC AED Inverno 2007/08 Algoritmos de ordenação 64

65 Quicksort Características de desempenho Dividir ambos os lados da equação por n(n-1) de forma a obter a soma: C(n) = n + 1 = = = = C(n -1) 2 + n n + 1 C(n - 2) n -1 n n + 1 C(n - 3) n - 2 n -1 n M C(2) 3 + n k= 3 2 k+ 1 2 n + 1 Aproximar a resposta exacta por um integral: C(n) = n + 1 k= 1 2 n 2 = n k k= 1 k 2ln Finalmente, obtém-se a solução: n C(n) = 2(n + 1) ln n 1.39n log2 n. LEIC AED Inverno 2007/08 Algoritmos de ordenação 65

66 Quicksort Características de desempenho Análise assume que os dados estão aleatoriamente ordenados e têm chaves diferentes pode ser lento em situações em que as chaves não são distintas ou que os dados não estão aleatoriamente ordenados (como vimos) Algoritmo pode ser melhorado para reduzir a probabilidade que estes casos sucedam! necessário em ficheiros de grandes dimensões ou se o algoritmo for usado como função genérica numa biblioteca LEIC AED Inverno 2007/08 Algoritmos de ordenação 66

67 Ordenação Síntese da Aula 4 Algoritmo Quicksort Ideia chave + Motivação Algoritmo que recorre à divisão em instâncias menores divide and conquer Código Exemplo de aplicação Descrição detalhada do mecanismo de partição Análise de eficiência Pior caso Melhor caso Caso médio LEIC AED Inverno 2007/08 Algoritmos de ordenação 67

68 Quicksort Questões mais relevantes Possível redução de desempenho devido ao uso de recorrência Tempo de execução dependente dos dados de entrada Tempo de execução quadrático no pior caso um problema Espaço/memória necessário no pior caso é linear um problema sério (para ficheiros de grandes dimensões) Problema do espaço está associado ao uso de recorrência: recorrência implica chamada a função e logo a carregar dados na pilha/stack do computador no pior caso todas as partições degeneram e há O(N) níveis de recorrência (em vez de O(log 2 (N)) no melhor caso) pilha cresce até ordem N LEIC AED Inverno 2007/08 Algoritmos de ordenação 68

69 Quicksort - Espaço necessário (1) Para resolver este problema usamos uma pilha (stack) explícita pilha contém trabalho a ser processado, na forma de sub-arrays a ordenar quando precisamos de um sub-array para processar tiramo-lo da pilha (i.e. fazemos um pop() do stack) por cada partição criamos dois sub-arrays e metemos ambos na pilha (i.e. fazemos dois push() para o stack) substitui a pilha do computador que é usada na implementação recorrente LEIC AED Inverno 2007/08 Algoritmos de ordenação 69

70 Quicksort - Espaço necessário (2) Conduz a uma versão não recorrente de Quicksort verifica os tamanhos dos dois subarrays e põe o maior deles primeiro na pilha (e o menor depois; logo o menor é retirado e tratado primeiro) ordem de processamento dos subarrays não afecta a correcta operação da função ou o tempo de processamento mas afecta o tamanho da pilha No pior caso espaço extra para a ordenação é logarítmico em N garante que dimensão máxima do stack é O(log 2 N) LEIC AED Inverno 2007/08 Algoritmos de ordenação 70

71 Quicksort - Versão não-recursiva (1) static void nonrecursivequicksort(int[] a, int l, int r) { shuffle(a, l, r); // Shuffle IntStack s = new IntStackArray(50); s.push(l); s.push(r); while (!s.isempty()) { r = s.pop(); l = s.pop(); if (r <= l) continue; int i = partition(a, l, r); if (i-l > r-i) { s.push(l); s.push(i-1); } s.push(i+1); s.push(r); if (r-i >= i-l) { s.push(l); s.push(i-1); } } } LEIC AED Inverno 2007/08 Algoritmos de ordenação 71

72 Quicksort - Versão não-recursiva (2) Política de colocar o maior dos subarrays primeiro na pilha garante que cada entrada na pilha não é maior do que metade da que estiver antes dela na pilha pilha apenas ocupa log 2 N no pior caso que ocorre agora quando a partição ocorre sempre no meio da tabela em ficheiros aleatórios o tamanho máximo da pilha é bastante menor Propriedade: se o menor dos dois subarrays é ordenado primeiro a pilha nunca necessita mais do que log 2 N entradas quando Quicksort é usado para ordenar N elementos LEIC AED Inverno 2007/08 Algoritmos de ordenação 72

73 Quicksort - Versão não-recursiva (3) Demonstração: no pior caso o tamanho da pilha é inferior a T(n) em que T(n) satisfaz a recorrência T(n) = T n/2 = + 1 com T(0) = T(1) 0 que foi já estudada anteriormente LEIC AED Inverno 2007/08 Algoritmos de ordenação 73

74 Quicksort - Melhoramentos (1) Algoritmo pode ainda ser melhorado com alterações triviais porquê colocar ambos os subarrays na pilha se um deles é de imediato retirado? Teste para r <= l é feito assim que os subarrays saem da pilha seria melhor nunca os lá ter colocado! ordenação de ficheiros/subarrays de pequenas dimensões pode ser efectuada de forma mais eficiente como escolher correctamente o elemento de partição? Como melhorar o desempenho se os dados tiverem um grande número de chaves repetidas? LEIC AED Inverno 2007/08 Algoritmos de ordenação 74

75 Quicksort - Melhoramentos (2) Pequenos ficheiros/sub-arrays Até mesmo o QuickSort apresenta um overhead excessivo quando é usado com ficheiros de pequena dimensão conveniente utilizar o melhor método possível quando encontra tais ficheiros forma óbvia de obter este comportamento é mudar o teste no início da função recorrente para uma chamada a Insertion sort if (r-l <= M) insertionsort(a, l, r) em que M é um parâmetro a definir na implementação LEIC AED Inverno 2007/08 Algoritmos de ordenação 75

76 Quicksort - Melhoramentos (3) Pequenos ficheiros/subarrays outra solução é a de simplesmente ignorar ficheiros pequenos (tamanho menor que M) durante a partição: if (r-l <= M) return; neste caso no final teremos um ficheiro que está praticamente todo ordenado Boa solução neste caso é usar insertion sort algoritmo híbrido: bom método em geral! LEIC AED Inverno 2007/08 Algoritmos de ordenação 76

77 Quicksort - Melhoramentos (4) 1º Método: Utilizar um elemento de partição que com alta probabilidade divida o ficheiro pela metade pode usar-se um elemento aleatoriamente escolhido evita o pior caso (i.e. pior caso tem baixa probabilidade de acontecer) é um exemplo de um algoritmo probabilístico um que usa aleatoriedade para obter bom desempenho com alta probabilidade independentemente dos dados de entrada pode ser demasiado pesado incluir gerador aleatório no algoritmo; existem outros métodos igualmente simples LEIC AED Inverno 2007/08 Algoritmos de ordenação 77

78 Quicksort - Melhoramentos (5) 2º Método: pode escolher-se alguns (ex: três) elementos do ficheiro e usar a mediana dos três como elemento de partição escolhendo os três elementos da esquerda, meio e direita da tabela podemos incorporar sentinelas na ordenação ordenamos os três elementos, depois trocamos o do meio com a[r-1] e executamos o algoritmo de partição em a[l+1] a[r-1] Este melhoramento chama-se o método da mediana de três median - of - three LEIC AED Inverno 2007/08 Algoritmos de ordenação 78

79 Mediana de três - Implementação private final static int M = 10; static void quicksort(int[] a, int l, int r) { if (r-l <= M) return; exch(a, (l+r)/2, r-1); lessexch(a, r-1, l); lessexch(a, r, l); lessexch(a, r, r-1); int i = partition(a, l+1, r-1); quicksort(a, l, i-1); quicksort(a, i+1, r); } static void hybridsort(int a[], int l, int r) { quicksort(a, l, r); insertionsort(a, l, r); } LEIC AED Inverno 2007/08 Algoritmos de ordenação 79

80 Quicksort - Melhoramentos (6) Método da mediana de três melhora Quicksort por duas razões o pior caso é mais improvável de acontecer na prática dois dos três elementos teriam de ser dos maiores ou menores do ficheiro e isto teria de acontecer constantemente a todos os níveis de partição reduz o tempo médio de execução do algoritmo embora apenas por cerca de 5% junto com o método de tratar de pequenos ficheiros pode resultar em ganhos de 20 a 25% É possível pensar em outros melhoramentos mas o acréscimo de eficiência é marginal (ex: porque não fazer a mediana de cinco?) LEIC AED Inverno 2007/08 Algoritmos de ordenação 80

81 Quicksort - Chaves duplicadas (1) Ficheiros com um grande número de chaves duplicadas são frequentes na prática ex: ordenar população por idade; remover duplicados de uma lista desempenho de Quicksort pode ser substancialmente melhorado se todas as chaves forem iguais Quicksort mesmo assim faz O(N log 2 N) comparações LEIC AED Inverno 2007/08 Algoritmos de ordenação 81

82 Quicksort - Chaves duplicadas (2) Uma possibilidade é dividir o ficheiro em três partes cada uma para chaves menores, iguais e maiores que o elemento de partição não é trivial de implementar, sobretudo se se impuser que a ordenação deverá ser feita com apenas uma passagem pelos dados Solução simples para este problema é fazer uma partição em três partes manter chaves iguais ao elemento de partição que são encontradas no sub-ficheiro da esquerda do lado esquerdo do ficheiro manter chaves iguais ao elemento de partição que são encontradas no sub-ficheiro da direita do lado direito do ficheiro LEIC AED Inverno 2007/08 Algoritmos de ordenação 82

83 Quicksort - Chaves duplicadas (3) Quando os ponteiros/índices de pesquisa se cruzam sabemos onde estão os elementos iguais ao de partição e é fácil colocá-los em posição não faz exactamente tudo num só passo mas quase... trabalho extra para chaves duplicadas é proporcional ao número de chaves duplicadas: funciona bem se não houver chaves duplicadas linear quando há um número constante de chaves!! LEIC AED Inverno 2007/08 Algoritmos de ordenação 83

84 Quicksort - Partição em três static void quicksort(int a[], int l, int r) { if (r <= l) return; int v = a[r], i = l, j = r-1, p = l-1, q = r, k; for (;;) { while (less(a[i], v)) ++i; while (j >= l && less(v, a[j])) ++j; if (i >= j) break; exch(a, i, j); if (equal(a[i], v)) { p++; exch(a, p, i); } if (equal(v, a[j])) { q--; exch(a, q, j); } } exch(a, i, r); j = i-1; i = i+1; for (k = l ; k <= p; k++,j--) exch(a, k, j); for (k = r-1; k >= q; k--,i++) exch(a, k, i); quicksort(a, l, j); quicksort(a, i, r); } LEIC AED Inverno 2007/08 Algoritmos de ordenação 84

85 Junção versus partição Quicksort é baseado na operação de selecção do elemento de partição (pivot) a partição divide um ficheiro em duas partes quando as duas metades do ficheiro estão ordenadas, o ficheiro está ordenado Operação complementar é de junção (merge) dividir o ficheiro em duas partes para serem ordenados e depois combinar as partes de forma a que o ficheiro total fique ordenado Mergesort Mergesort tem uma propriedade muito interessante: ordenação de um ficheiro de N elementos é feito em tempo proporcional a N log N, independentemente dos dados! Outros algoritmos, p.ex. HeapSort, também têm desempenho desta ordem LEIC AED Inverno 2007/08 Algoritmos de ordenação 85

86 Ordenação Síntese da Aula 5 Análise do algoritmo Quicksort Discussão relativa à memória utilizada na versão recorrente Alternativa de implementação por pilha e suas vantagens na perspectiva da memória utilizada Código para Quicksort em versão não recorrente Melhoramentos na versão não recorrente Mecanismos de partição alternativos Aleatórios Mediana de três Estratégia de melhoramento em presença de chaves duplicadas Ideia base Código LEIC AED Inverno 2007/08 Algoritmos de ordenação 86

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

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

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

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

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

Leia mais

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

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

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

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

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

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

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

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

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

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

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

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

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

Estruturas de Dados Algoritmos de Ordenação

Estruturas de Dados Algoritmos de Ordenação Estruturas de Dados Prof. Eduardo Alchieri (introdução) Considere uma sequência arbitrária S = {s1, s2, s3,...sn} composta por n 0 elementos retirados do conjunto universo U O objetivo da ordenação é arrumar

Leia mais

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6

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

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

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

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

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec Universidade Federal do ABC Avaliação: Prova 02 Disciplina: BC1424 - Algoritmos e Estruturas de Dados I Turma: Noturno Professor: Jesús P. Mena-Chalco Data: 03/05/2016 Nome completo: RA: Instruções para

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

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013 Filas de prioridade Marcelo K. Albertini de Dezembro 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

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

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

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

Ordenação. Insertion Sort

Ordenação. Insertion Sort Sumário por trocas de vizinhos. Análise. Limites teóricos Insertion sort. Shellsort recursiva: Mergesort. Análise. Com heap binário: Heapsort. Análise. Divisão e conquista: Quicksort. Análise. Limites

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

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande ALGORITMOS VISTOS ANTERIORMENTE

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

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

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

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6

Leia mais

Algoritmos de ordenação Quicksort

Algoritmos de ordenação Quicksort Algoritmos de ordenação Quicksort Sumário Introdução Descrição do quicksort Desempenho do quicksort Pior caso Melhor caso Particionamento balanceado Versão aleatória do quicksort Análise do quicksort Pior

Leia mais

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10 Análise e Síntese de Algoritmos Revisão CLRS, Cap. 7-10 Contexto Revisão Algoritmos e complexidade Notação Fundamentos: somatórios, recorrências, etc. Exemplos de algoritmos Ordenação Procura Selecção

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

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

Estruturas de Dados 2

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

Leia mais

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 3 Conceitos Básicos de Algoritmos Prof. Tiago A. E. Ferreira Definição de Algoritmo Informalmente... Um Algoritmo é qualquer procedimento computacional bem definido

Leia mais

Algoritmos de Ordenação: QuickSort

Algoritmos de Ordenação: QuickSort Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

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

Pedro Ribeiro 2014/2015

Pedro Ribeiro 2014/2015 Ordenação Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Ordenação 2014/2015 1 / 35 Ordenação A ordenação é um passo inicial para muitos outros algoritmos Ex: encontrar a mediana Quando nã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

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

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

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

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

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

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: carlos.batista@facape.br carlos36_batista@yahoo.com.br Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e

Leia mais

Métodos de ordenação. Bubble sort:

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

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 de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação Leandro Tonietto Unisinos ltonietto@unisinos.br http://professor.unisinos.br/ltonietto Atualizado em 7-Jun-12 http://professor.unisinos.br/ltonietto/inf/lb2/sort.pdf ! Objetivos!

Leia mais

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim Algoritmos de Ordenação e Busca e sua Análise de Complexidade Alneu de Andrade Lopes Rosane Minghim Introdução Busca seqüencial Busca binária Notação O(f(n)) Hierarquia de funções Selection sort Insertion

Leia mais

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos 1 Técnicas de Concepção de Algoritmos (1ª parte): divisão e conquista R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro de 2011 2 Divisão e Conquista (divide and

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

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 Introdução à Ciência da Computação Prof. Edison Ishikawa Objetivo Apresentar diferentes algoritmos de ordenação de dados Mostrar como analisar os algoritmos em termos de tempo de

Leia mais

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia Centro de Informá-ca Universidade Federal de Pernambuco Vinicius Cardoso Garcia vcg@cin.ufpe.br Problema Dados N números, arranjá los em ordem crescente ou decrescente (Sor-ng) Ordenar é dispor os elementos

Leia mais

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

Leia mais

5. Algoritmos de Ordenação

5. Algoritmos de Ordenação Introdução à Computação II 5952011 5. Algoritmos de Ordenação Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 5.1. Ordenação por Inserção 5.2. Ordenação por Seleção

Leia mais

O mais leve e o mais pesado Algoritmos de Ordenação

O mais leve e o mais pesado Algoritmos de Ordenação Atividade 7 O mais leve e o mais pesado Algoritmos de Ordenação Sumário Os computadores são muitas vezes utilizados para colocar listas em algum tipo de ordem, por exemplo, nomes em ordem alfabética, compromissos

Leia mais

Extra- Algoritmos de Ordenação

Extra- Algoritmos de Ordenação Extra- Algoritmos de Ordenação 1 Introdução 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 do

Leia mais

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Ordenação: HeapSort. Prof. Túlio Toffolo   BCC202 Aula 17 Algoritmos e Estruturas de Dados I 2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br

Leia mais

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 032/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

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

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

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M. Quick Sort Considerações Sobre Algoritmos de Ordenação Professor: Claudio F. M. Toledo 26 de Outubro de 2016 Professor: Claudio Quick F. M. Sort Toledo 26 de Outubro de 2016 1 / 14 Quicksort: Escolha do

Leia mais

Análise de Complexidade de Algoritmos

Análise de Complexidade de Algoritmos Análise de Complexidade de Algoritmos Algoritmos e Estruturas de Dados 2009/2010 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Análise de algoritmos:

Leia mais

Aula 1. Teoria da Computação III

Aula 1. Teoria da Computação III Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável

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

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

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

Leia mais

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados BUSCA EM ARRAYS Prof. André Backes Definição 2 Ato de procurar por um elemento em um conjunto de dados Recuperação de dados armazenados em um repositório ou base de dados A operação de busca visa responder

Leia mais

Recursividade. Objetivos do módulo. O que é recursividade

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

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

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais } Pq arquivos sequenciais? Relembrando } Relembrando: uma tabela ou arquivo é um conjunto de registros que possuem a

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 E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação   IECE - ITA 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 MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método

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

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS 1/18 ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS Algoritmos 2/18 Algoritmos Algoritmo - sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador)

Leia mais

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

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 luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 3.1 - Definição 3.2 - Dividir para conquistar 3.3 - Problema da

Leia mais

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: Filas de Prioridade e Heaps 9.1 Filas de Prioridade Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: inserir um elemento na fila; remover o elemento

Leia mais

Divisão e conquista. Eficiência de divisão e conquista

Divisão e conquista. Eficiência de divisão e conquista Divisão e conquista Divisão: resolver recursivamente problemas mais pequenos (até caso base) Conquista: solução do problema original é formada com as soluções dos subproblemas á divisão quando o algoritmo

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

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome

Leia mais

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

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

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

Leia mais

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Algoritmos de ordenação: Bucketsort, Radixsort e Seleção Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/

Leia mais

Métodos de Ordenação Parte 2

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

Leia mais

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO EM TEMPO LINEAR

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO EM TEMPO LINEAR ESTRUTURAS DE DADOS E ALGORITMOS 1 ALGORITMOS DE ORDENAÇÃO EM TEMPO LINEAR Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande COMPARAÇÃO DOS ALGORITMOS DE ORDENAÇÃO

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

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

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Bucketsort. CLRS sec 8.4. Algoritmos p. 1 Bucketsort CLRS sec 8.4 Algoritmos p. 1 Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0, 1). Algoritmos p. 2 Bucket Sort Recebe um inteiro n e um vetor

Leia mais