Algoritmos de Ordenação: Tempo Linear

Documentos relacionados
Ordenação em tempo linear

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear

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

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

Complexidade de Algoritmos

Estruturas de Dados 2

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear

Ordenação em Memória Primária Estrutura de Dados II

Ordenação de Dados (III) HeapSort

Técnicas de projeto de algoritmos: Indução

Memória secundária. Memória secundária

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

Classificação por Intercalação

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Comparando, Distribuindo e Ordenando

Análise de Algoritmos

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

Métodos de Ordenação Parte 3

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

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

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados

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

Algoritimos e Estruturas de Dados III CIC210

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

Métodos de Ordenação

6. Pesquisa e Ordenação

Simulador didático de testes de algoritmos de ordenação

Quicksort Letícia Rodrigues Bueno

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Técnicas de Programação III Análise de Algoritmos (Continuação)

2. Ordenação por Seleção

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Aula 05 Ordenação parcial

Representação de Arranjos

Análise de algoritmos

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Ordenação e Pesquisa

SCC Capítulo 4 Métodos de Ordenação

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

Algoritmos Eficientes de Ordenação

Análise e Projeto de Algoritmos

Complexidade de Algoritmos. Edson Prestes

Análise amortizada CLRS 17. Algoritmos p. 1

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

Aula 21 Ordenação externa

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

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

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Ordenação e Pesquisa de Dados. Aula 07 Insertion Sort e Bubble Sort

Linguagem C vetores multidimensionais

Resolução de sistemas de equações lineares: Método de eliminação de Gauss - estratégias de pivotamento

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

AULA 24. Algoritmos p.856/905

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Estruturas Homogêneas Vetores e Matrizes. Givanaldo Rocha

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

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Banco de Dados. Métodos de Ordenação de Dados. Prof. Walteno Martins Parreira Jr

Pesquisa Linear. Adriano J. Holanda 15/3/2016

Complexidade de algoritmos Notação Big-O

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Algoritmos e Estruturas de Dados II. Ordenação

Processamento de Produtos ( X )

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima

Complexidade de Algoritmos

Estrutura de Dados. ! Listas lineares. ! Como manipulá-las: ! estática. ! dinâmicas. ! pilhas. ! filas

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Presidenta da República Conselho Editorial Ministro da Educação Presidente da CAPES Diretor de Educação a Distância da CAPES

ANÁLISE DE ALGORITMOS: PARTE 3

BCC202 - Estrutura de Dados I

Quantidade de memória necessária

Módulo 7. Complexidade de Algoritmos. Algoritmos e Estruturas de Dados II C++ Rone Ilídio

EXPRESSÕES RELACIONAIS

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

Análise de algoritmos

ESTRUTURA DE DADOS E ALGORITMOS. Hashing (Tabela de Dispersão) Cristina Boeres

Quicksort [1] Quicksort [2]

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO PRÉ AULA PRÉ AULA 02/11/2015

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Radiométricas. Alexandre Xavier Falcão. Instituto de Computação - UNICAMP

Estruturas de Dados 2

Programação II Aula 07

Vença o relógio Redes de Ordenação

Aula 02: Custos de um algoritmo e funções de complexidade

1.1 Etapas na solução de um problema. 1.3 Tipos de erros. 1.4 Aritmética de ponto flutuante.

Tópicos Avançados em Algoritmos

5. Expressões aritméticas

7. Introdução à Complexidade de Algoritmos

Hashing: conceitos. Hashing

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e recodificações em C dos originais:

MAC5770 Exercícios preliminares

Transcrição:

Algoritmos de Ordenação: Tempo Linear ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material baseado em slides dos professores Cid de Souza e Cândida da Silva Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 1 / 11

Algoritmos lineares para ordenação Os seguintes algoritmos de ordenação têm complexidade O(n), onde n é o tamanho do vetor A a ser ordenado: Counting Sort: Elementos são números inteiros pequenos; mais precisamente, inteiros x onde x O(n). Exemplo: Ordenar um conjunto S de n elementos x i (para todo i, 1 i n, x i n). Radix Sort: Elementos são números inteiros de comprimento máximo constante, isto é, independente de n. Exemplo: Ordenar um conjunto S de n elementos x i (para todo i, 1 i n, x i tem no máximo d digitos). Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 2 / 11

Counting Sort Considere o problema de ordenar um arranjo A de n inteiros quando é sabido que todos os inteiros i estão no intervalo entre 0 e k (0 i < k), ou seja, k O(n). Podemos ordenar o vetor simplesmente contando, para cada inteiro i no vetor, quantos elementos do vetor são menores que i. É exatamente o que faz o algoritmo Counting Sort, em tempo O(n + k), isto é O(n). O algoritmo usa dois vetores auxiliares: C de tamanho k que guarda em C[i] o número de ocorrências de elementos i em A. B de tamanho n onde se constrói o vetor ordenado. Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 3 / 11

Counting Sort Algoritmo CountingSort(A, k) Entrada Vetor A de tamanho n e um inteiro k, o valor do maior inteiro em A. Saída Os elementos do Vetor A ordenados em ordem crescente. 1. para i = 0 até k-1 faça C[i] = 0; 2. para j = 0 até n-1 faça C[A[j]] = C[A[j]] + 1; 3. para i = 1 até k-1 faça C[i] = C[i] + C[i-1]; 4. para j = n-1 até 0 faça 5. B[C[A[j]] - 1] = A[j]; 6. C[A[j]] = C[A[j]] - 1; 7. retorne(b) Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 4 / 11

Counting Sort Complexidade Qual a complexidade do algoritmo Counting Sort? O algoritmo não faz comparações entre elementos de A. Sua complexidade deve ser medida em função do número das outras operações, aritméticas, atribuições, etc. Claramente, o número de tais operações é uma função em O(n + k), já que temos dois laços simples com n iterações e dois com k iterações. Assim, quando k O(n), este algoritmo tem complexidade O(n). Algo de errado com o limite inferior de Ω(n log n) para ordenação? Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 5 / 11

Algoritmos in-place e estáveis Algoritmos de ordenação podem ser ou não in-place ou estáveis. Um algoritmo de ordenação é in-place se a memória adicional requerida é independente do tamanho do vetor que está sendo ordenado. Exemplos: o QuickSort e o HeapSort são métodos de ordenação in-place, já o MergeSort e o Counting Sort não. Um método de ordenação é estável se elementos iguais ocorrem no vetor ordenado na mesma ordem em que são passados na entrada. Exemplos: o Counting Sort e o QuickSort são exemplos de métodos estáveis (desde que certos cuidados sejam tomados na implementação). O HeapSort não é. Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 6 / 11

Radix Sort Considere agora o problema de ordenar um vetor A de n inteiros quando é sabido que todos os inteiros podem ser representados com apenas d dígitos, onde d é uma constante. Por exemplo, os elementos de A podem ser CEPs, ou seja, inteiros de 8 dígitos. Poderíamos ordenar os elementos do vetor dígito a dígito começando pelo dígito mais significativo. É isso que faz o algoritmo Radix Sort. Para que o algoritmo Radix Sort funcione corretamente é necessário utilizar um método estável de ordenação para a ordenação de cada dígito. Para isso podemos usar, por exemplo, o Counting Sort. Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 7 / 11

Radix Sort Suponha que os elementos do vetor A a ser ordenados sejam números inteiros de até d dígitos. O Radix Sort é simplesmente: RadixSort(A, d) Entrada Vetor A e um inteiro d, o número máximo de dígitos dos elementos em A. Saída Os elementos do Vetor A ordenados em ordem crescente. 1. para i = 1 até d faça 2. ordene os elementos de A pelo i-ésimo dígito usando um método estável Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 8 / 11

Radix Sort Exemplo 329 720 720 329 457 355 329 355 657 436 436 436 839 457 839 457 436 657 355 657 720 329 457 720 355 839 657 839 Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 9 / 11

Radix Sort Complexidade Depende da complexidade do algoritmo estável usado para ordenar cada dígito dos elementos. Se essa complexidade estiver em Θ(f (n)), obtemos uma complexidade total de Θ(d f (n)) para o Radix Sort. Como supomos d constante, a complexidade reduz-se para Θ(f (n)). Se o algoritmo estável for, por exemplo, o Counting Sort, obtemos a complexidade Θ(n + k). Supondo k O(n), resulta numa complexidade linear em n. E o limite inferior de Ω(n log n) para ordenação? Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 10 / 11

Radix Sort Complexidade O nome Radix Sort vem da base (em inglês radix) em que interpretamos os dígitos. Veja que se o uso de memória auxiliar for muito limitado, então o melhor é usar um algoritmo de ordenação de comparação in-place Note que é possível usar o Radix Sort para ordenar outros tipos de elementos, como datas, palavras em ordem lexicográfica e qualquer outro tipo que possa ser vista como uma d-upla ordenada de itens comparáveis. Discussão: Suponha que desejemos ordenar um conjunto de 2 20 números de 64 bits. Qual seria o melhor algoritmo? MergeSort ou Radix Sort? Delano M. Beder (EACH - USP) Ordenação Tempo Linear ACH2002 11 / 11