Ordenação em tempo linear

Documentos relacionados
Análise de Algoritmos

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Ordenação em Tempo Linear

Análise de algoritmos

Estruturas de Dados 2

Projeto e Análise de Algoritmos

Algoritmos de Ordenação: Tempo Linear

AULA 13. Algoritmos p.526/582

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

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

Ordenação em Tempo Linear

Análise de Algoritmos Algoritmos de Ordenação

Análise de Algoritmos

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

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

Análise de Algoritmos

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

Projeto e Análise de Algoritmos

Algoritmos de Ordenação

Aula 19: Métodos eficientes de ordenação

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

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

Melhores momentos AULA 3. Algoritmos p.148/188

Melhores momentos AULA 1. Algoritmos p.38/86

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

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

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

Ordenação por Intercalação Métodos de Ordenação Parte 4

Métodos de Ordenação Parte 4

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1

ANÁLISE DE ALGORITMOS

Algoritmos de ordenação Quicksort

Análise de algoritmos

Algoritmos de Ordenação

Ordenação. Prof. Jonas Potros

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

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

Análise de Algoritmos

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

ANÁLISE DE ALGORITMOS

Análise e Síntese de Algoritmos

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

Análise de Algoritmos

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos

AULA 20. Algoritmos p.725/759

Algoritmos de Ordenação: QuickSort

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

Projeto e Análise de Algoritmos

Estruturas de Dados Algoritmos de Ordenação

Análise amortizada CLRS 17. Algoritmos p. 1

Análise e Complexidade de Algoritmos

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

Algoritmos gulosos (greedy)

Pedro Ribeiro 2014/2015

a) Procurar um elemento em um vetor ordenado ou em um vetor não ordenado;

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

Ordenação de Dados. Ordenação de Dados

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Projeto e Análise de Algoritmos

I. Correção de Algoritmos Não-Recursivos

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

Estruturas de Dados 2

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

Algoritmos e Estrutura de Dados

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Análise de algoritmos

Análise de Algoritmos

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Algoritmos de Ordenação: Cota Inferior

ALGORITMOS DE ORDENAÇÃO

Comparando, Distribuindo e Ordenando

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Lista 2 - PMR2300/3200

Extra- Algoritmos de Ordenação

Ordenação de Dados (IV) MergeSort

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

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

LISTA DE EXERCÍCIOS 1

Ordenação. Última alteração: 31 de Agosto de Transparências elaboradas por Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Aula 1. Teoria da Computação III

Métodos de Ordenação Parte I

- Métodos simples de busca - Métodos ingênuos de ordenação (introdução)

Ordenação de Dados (III) HeapSort

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Teoria da Computação Aula 9 Noções de Complexidade

5. Algoritmos de Ordenação

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

LISTA DE EXERCÍCIOS 1

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

1 a Lista de Exercícios

SCC Algoritmos e Estruturas de Dados II. 6ª lista de exercícios

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

Transcrição:

Ordenação em tempo linear CLRS cap 8 Algoritmos p. 1

Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n lg n). Algoritmos p. 2

Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n lg n). Existe algoritmo assintoticamente melhor? Algoritmos p. 2

Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n lg n). Existe algoritmo assintoticamente melhor? NÃO, se o algoritmo é baseado em comparações. Prova? Algoritmos p. 2

Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n lg n). Existe algoritmo assintoticamente melhor? NÃO, se o algoritmo é baseado em comparações. Prova? Qualquer algoritmo baseado em comparações é uma árvore de decisão. Algoritmos p. 2

Exemplo ORDENA-POR-INSERÇÃO (A[1.. 3]): SIM A[1] A[2]? NÃO A[2] A[3]? A[1] A[3]? SIM NÃO SIM NÃO A[1] A[2] A[3] A[1] A[3]? A[2]<A[1] A[3] A[2] A[3]? SIM NÃO SIM NÃO A[1] A[3]<A[2] A[3]<A[1] A[2] A[2] A[3] A[1] A[3]<A[2]<A[1 Algoritmos p. 3

Limite inferior Considere uma árvore de decisão para A[1..n]. Algoritmos p. 4

Limite inferior Considere uma árvore de decisão para A[1..n]. Número de comparações, no pior caso? Algoritmos p. 4

Limite inferior Considere uma árvore de decisão para A[1..n]. Número de comparações, no pior caso? Resposta: altura, h, da árvore de decisão. Algoritmos p. 4

Limite inferior Considere uma árvore de decisão para A[1..n]. Número de comparações, no pior caso? Resposta: altura, h, da árvore de decisão. Todas as n! permutações de 1,...,n devem ser folhas. Algoritmos p. 4

Limite inferior Considere uma árvore de decisão para A[1..n]. Número de comparações, no pior caso? Resposta: altura, h, da árvore de decisão. Todas as n! permutações de 1,...,n devem ser folhas. Toda árvore binária de altura h tem no máximo 2 h folhas. Algoritmos p. 4

Limite inferior Considere uma árvore de decisão para A[1..n]. Número de comparações, no pior caso? Resposta: altura, h, da árvore de decisão. Todas as n! permutações de 1,...,n devem ser folhas. Toda árvore binária de altura h tem no máximo 2 h folhas. Prova: Por indução em h. A afirmação vale para h = 0. Suponha que a afirmação vale para toda árvore binária de altura menor que h, para h 1. O número de folhas de uma árvore de altura h é a soma do número de folhas de suas sub-árvores, que têm altura h 1. Logo, o número de folhas de uma árvore de altura h é não superior a 2 2 h 1 = 2 h. Algoritmos p. 4

Limite inferior Assim, devemos ter 2 h n!, donde h lg(n!). (n!) 2 = n 1 (n i)(i+1) n n = n n i=0 i=1 Portanto, h lg(n!) 1 2 n lg n. Alternativamente, a fórmula de Stirling diz que n! = 2π n ( n) n(1 1 + Θ( e n )). Disso, temos que h lg(n!) lg ( n e ) n = n(lg n lg e). Algoritmos p. 5

Conclusão Todo algoritmo de ordenação baseado em comparações faz Ω(n lg n) comparações no pior caso Algoritmos p. 6

Counting Sort Recebe inteiros n e k, e um vetor A[1..n] onde cada elemento é um inteiro entre 1 e k. Algoritmos p. 7

Counting Sort Recebe inteiros n e k, e um vetor A[1..n] onde cada elemento é um inteiro entre 1 e k. Devolve um vetor B[1..n] com os elementos de A[1..n] em ordem crescente. Algoritmos p. 7

Counting Sort Recebe inteiros n e k, e um vetor A[1..n] onde cada elemento é um inteiro entre 1 e k. Devolve um vetor B[1..n] com os elementos de A[1..n] em ordem crescente. COUNTINGSORT(A, n) 1 para i 1 até k faça 2 C[i] 0 3 para j 1 até n faça 4 C[A[j]] C[A[j]] + 1 5 para i 2 até k faça 6 C[i] C[i] + C[i 1] 7 para j n decrescendo até 1 faça 8 B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 10 devolva B Algoritmos p. 7

Consumo de tempo linha consumo na linha 1 Θ(k) 2 O(k) 3 Θ(n) 4 O(n) 5 Θ(k) 6 O(k) 7 Θ(n) 8 O(n) 9 O(n) 10 Θ(1) total???? Algoritmos p. 8

Consumo de tempo linha consumo na linha 1 Θ(k) 2 O(k) 3 Θ(n) 4 O(n) 5 Θ(k) 6 O(k) 7 Θ(n) 8 O(n) 9 O(n) 10 Θ(1) total Θ(k + n) Algoritmos p. 8

Counting Sort COUNTINGSORT(A, n) 1 para i 1 até k faça 2 C[i] 0 3 para j 1 até n faça 4 C[A[j]] C[A[j]] + 1 5 para i 2 até k faça 6 C[i] C[i] + C[i 1] 7 para j n decrescendo até 1 faça 8 B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 10 devolva B Consumo de tempo: Θ(k + n) Se k = O(n), o consumo de tempo é Θ(n). Algoritmos p. 9

Radix Sort Algoritmo usado para ordenar inteiros não-negativos com d dígitos cartões perfurados registros cuja chave tem vários campos Algoritmos p. 10

Radix Sort Algoritmo usado para ordenar inteiros não-negativos com d dígitos cartões perfurados registros cuja chave tem vários campos dígito 1: menos significativo dígito d: mais significativo Algoritmos p. 10

Radix Sort Algoritmo usado para ordenar inteiros não-negativos com d dígitos cartões perfurados registros cuja chave tem vários campos dígito 1: menos significativo dígito d: mais significativo RADIXSORT(A, n, d) 1 para i 1 até d faça 2 ORDENE(A, n, i) Algoritmos p. 10

Radix Sort Algoritmo usado para ordenar inteiros não-negativos com d dígitos cartões perfurados registros cuja chave tem vários campos dígito 1: menos significativo dígito d: mais significativo RADIXSORT(A, n, d) 1 para i 1 até d faça 2 ORDENE(A, n, i) ORDENE(A,n,i): ordena A[1..n] pelo i-ésimo dígito dos números em A por meio de um algoritmo estável. Algoritmos p. 10

Consumo de tempo Depende do algoritmo ORDENE. Algoritmos p. 11

Consumo de tempo Depende do algoritmo ORDENE. Se cada dígito é um inteiro de 1 a k, então podemos usar o COUNTINGSORT. Algoritmos p. 11

Consumo de tempo Depende do algoritmo ORDENE. Se cada dígito é um inteiro de 1 a k, então podemos usar o COUNTINGSORT. Neste caso, o consumo de tempo é Θ(d(k + n)). Algoritmos p. 11

Consumo de tempo Depende do algoritmo ORDENE. Se cada dígito é um inteiro de 1 a k, então podemos usar o COUNTINGSORT. Neste caso, o consumo de tempo é Θ(d(k + n)). Se d é limitado por uma constante (ou seja, se d = O(1)) e k = O(n), então o consumo de tempo é Θ(n). Algoritmos p. 11

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

Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0, 1). Devolve um vetor C[1..n] com os elementos de A[1..n] em ordem crescente. Algoritmos p. 12

Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0, 1). Devolve um vetor C[1..n] com os elementos de A[1..n] em ordem crescente. BUCKETSORT(A, n) 1 para i 0 até n 1 faça 2 B[i] NIL 3 para i 1 até n faça 4 INSIRA(B[ n A[i] ], A[i]) 5 para i 0 até n 1 faça 6 ORDENELISTA(B[i]) 7 C CONCATENE(B, n) 8 devolva C Algoritmos p. 12

Bucket Sort BUCKETSORT(A, n) 1 para i 0 até n 1 faça 2 B[i] NIL 3 para i 1 até n faça 4 INSIRA(B[ n A[i] ], A[i]) 5 para i 0 até n 1 faça 6 ORDENELISTA(B[i]) 7 C CONCATENE(B, n) 8 devolva C Algoritmos p. 13

Bucket Sort BUCKETSORT(A, n) 1 para i 0 até n 1 faça 2 B[i] NIL 3 para i 1 até n faça 4 INSIRA(B[ n A[i] ], A[i]) 5 para i 0 até n 1 faça 6 ORDENELISTA(B[i]) 7 C CONCATENE(B, n) 8 devolva C INSIRA(p,x): insere x na lista apontada por p ORDENELISTA(p): ordena a lista apontada por p CONCATENE(B, n): devolve a lista obtida da concatenação das listas apontadas por B[0],...,B[n 1]. Algoritmos p. 13

Bucket Sort BUCKETSORT(A, n) 1 para i 0 até n 1 faça 2 B[i] NIL 3 para i 1 até n faça 4 INSIRA(B[ n A[i] ], A[i]) 5 para i 0 até n 1 faça 6 ORDENELISTA(B[i]) 7 C CONCATENE(B, n) 8 devolva C Se os números em A[1..n] forem uniformemente distribuídos no intervalo [0, 1), então o consumo de tempo esperado é linear em n. Algoritmos p. 13

Bucket Sort Se os números em A[1..n] forem uniformemente distribuídos no intervalo [0, 1), então o número esperado de elementos de A[1..n] em cada lista B[i] é Θ(1). Algoritmos p. 14

Bucket Sort Se os números em A[1..n] forem uniformemente distribuídos no intervalo [0, 1), então o número esperado de elementos de A[1..n] em cada lista B[i] é Θ(1). Logo, o consumo de tempo esperado para ordenar cada uma das listas B[i] é linear Θ(1). Assim, o consumo de tempo esperado do algoritmo BUCKETSORT neste caso é Θ(n). Algoritmos p. 14

Bucket Sort Se os números em A[1..n] forem uniformemente distribuídos no intervalo [0, 1), então o número esperado de elementos de A[1..n] em cada lista B[i] é Θ(1). Logo, o consumo de tempo esperado para ordenar cada uma das listas B[i] é linear Θ(1). Assim, o consumo de tempo esperado do algoritmo BUCKETSORT neste caso é Θ(n). Algoritmos p. 14

Exercícios Exercício 10.A Desenhe a árvore de decisão para o SELECTIONSORT aplicado a A[1.. 3] com todos os elementos distintos. Exercício 10.B [CLRS 8.1-1] Qual o menor profundidade (= menor nível) que uma folha pode ter em uma árvore de decisão que descreve um algoritmo de ordenação baseado em comparações? Exercício 10.C [CLRS 8.1-2] Mostre que lg(n!) = Ω(nlg n) sem usar a fórmula de Stirling. Sugestão: Calcule P n k=n/2 lg k. Use as técnicas de CLRS A.2. Algoritmos p. 15

Exercícios Exercício 10.D [CLRS 8.2-1] Simule a execução do COUNTINGSORT usando como entrada o vetor A[1.. 11] = 7,1, 3,1,2,4, 5,7,2,4,3. Exercício 10.E [CLRS 8.2-2] Mostre que o COUNTINGSORT é estável. Exercício 10.F [CLRS 8.2-3] Suponha que o para da linha 7 do COUNTINGSORT é substituído por 7 para j 1 até n faça Mostre que o ainda funciona. O algoritmo resultante continua estável? Algoritmos p. 16