Análise de Algoritmos

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

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

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

Análise amortizada CLRS 17. Algoritmos p. 1

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

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

Estruturas de Dados 2

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

Análise de algoritmos

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

Ordenação de Dados (III) HeapSort

Estruturas de Dados 2

Métodos de Ordenação Parte 3

Complexidade Assintótica de Programas 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

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

2. Ordenação por Seleção

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

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

Análise e Projeto de Algoritmos

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

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

Análise de Algoritmos: Melhor caso, pior caso, caso médio

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

Pesquisa em Memória Primária. Prof. Jonas Potros

Algoritmos Eficientes de Ordenação

Anatomia do motor de um programa de xadrez. Hugo Vinicius M. D. Santana Orientador: José Coelho de Pina

Projeto e Análise de Algoritmos

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

ORDENAÇÃO E BUSCA 1. MÉTODOS DE ORDENAÇÃO

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

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

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

Aula 04 Ordenação parcial

Algoritmos. para concursos. Questões comentadas

Algoritmos de Ordenação

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

Algoritmos de Ordenação Eficiência de Algoritmos

Aula 05 Ordenação parcial

Algoritmos de ordenação Heapsort

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

Árvore Binária de Busca Ótima

Programação II Aula 07

Análise de algoritmos

ST364 Estruturas de Dados Grupo 4 apresenta: Seminário MERGESORT Blog -

Comparando, Distribuindo e Ordenando

AULA 24. Algoritmos p.856/905

Algoritmos e Estruturas de Dados II. Ordenação

Exercícios: Vetores e Matrizes

Quicksort Letícia Rodrigues Bueno

Introdução à Análise de Algoritmos

Árvore Binária de Busca

Resolução de sistemas de equações lineares: Fatorações de matrizes

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

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

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

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

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

Aula 19 Conjuntos disjuntos (Union-find)

Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2

Análise de Dados e Simulação

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

TÉCNICAS DE AMOSTRAGEM

Resolução de sistemas de equações lineares: Fatorações de matrizes

Algoritmos de Classificação de Tabelas - Sorting

Interpolação polinomial: Diferenças divididas de Newton

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Resolução de sistemas de equações lineares: Fatorações de matrizes

2. EXERCÍCIOS PROPOSTOS SOBRE V.A. E DISTRIB.PROBAB.

Estruturas de Dados. Cristina Gomes Fernandes. Estruturas de Dados p. 1

Árvores B. Prof. Flávio Humberto Cabral Nunes

DAINF - Departamento de Informática

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

Linguagem C vetores multidimensionais

Complexidade de Algoritmos

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

INF1010 Lista de Exercícios 2

Lista de Exercícios 6: Soluções Funções

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

7. Introdução à Complexidade de Algoritmos

Algoritmos de Pesquisa e Ordenação em Vectores

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

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

OBI2012 Caderno de soluções

Interpolação polinomial: Polinômio de Lagrange

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar

Problema de escalonamento

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

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

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

Métodos de Pesquisa em Memória Primária

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

Departamento de InformáAca - PUC- Rio. Hélio Lopes Departamento de InformáAca PUC- Rio. A plataforma R

Enunciados dos Exercícios Cap. 2 Russell & Norvig

Análise I Solução da 1ª Lista de Exercícios

Introdução à Teoria dos Grafos (MAC-5770) IME-USP Depto CC Profa. Yoshiko. Capítulo 3

Aula 15 Variáveis Indexadas (vetores)

Transcrição:

Algoritmos p. 1/25 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina.

Algoritmos p. 2/25 Ordenação em tempo linear CLRS cap 8

Algoritmos p. 3/25 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(nlgn).

Algoritmos p. 3/25 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(nlgn). Existe algoritmo assintoticamente melhor?

Algoritmos p. 3/25 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(nlgn). Existe algoritmo assintoticamente melhor? NÃO, se o algoritmo é baseado em comparações. Prova?

Algoritmos p. 3/25 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(nlgn). 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. 4/25 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. 5/25 Limite inferior Considere uma árvore de decisão para A[1..n].

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

Algoritmos p. 5/25 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. 5/25 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. 5/25 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. 5/25 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.

Algoritmos p. 5/25 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.

Algoritmos p. 5/25 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. Número de folhas de árvore de altura h é a soma do número de folhas das subárvores, que têm altura h 1.

Algoritmos p. 5/25 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. Número de folhas de árvore de altura h é a soma do número de folhas das subárvores, que têm altura h 1. Logo, o número de folhas de uma árvore de altura h é 2 2 h 1 = 2 h.

Algoritmos p. 6/25 Limite inferior Assim, devemos ter 2 h n!, donde h lg(n!).

Algoritmos p. 6/25 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

Algoritmos p. 6/25 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 nlgn.

Algoritmos p. 6/25 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 nlgn. Alternativamente, a fórmula de Stirling diz que n! = 2πn ( n) n(1+θ( 1 e n )).

Algoritmos p. 6/25 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 nlgn. 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(lgn lge).

Algoritmos p. 7/25 Conclusão Todo algoritmo de ordenação baseado em comparações faz Ω(nlgn) comparações no pior caso.

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

Algoritmos p. 8/25 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. 8/25 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. 9/25 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. 9/25 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. 10/25 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. 11/25 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. 11/25 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. 11/25 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. 11/25 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. 12/25 Estabilidade Um algoritmo de ordenação é estável se sempre que, inicialmente, A[i] = A[j] para i < j, a cópia A[i] termina em uma posição menor do vetor que a cópia A[j].

Algoritmos p. 12/25 Estabilidade Um algoritmo de ordenação é estável se sempre que, inicialmente, A[i] = A[j] para i < j, a cópia A[i] termina em uma posição menor do vetor que a cópia A[j]. Isso só é relevante quando temos informação satélite.

Algoritmos p. 12/25 Estabilidade Um algoritmo de ordenação é estável se sempre que, inicialmente, A[i] = A[j] para i < j, a cópia A[i] termina em uma posição menor do vetor que a cópia A[j]. Isso só é relevante quando temos informação satélite. Quais dos algoritmos que vimos são estáveis?

Algoritmos p. 12/25 Estabilidade Um algoritmo de ordenação é estável se sempre que, inicialmente, A[i] = A[j] para i < j, a cópia A[i] termina em uma posição menor do vetor que a cópia A[j]. Isso só é relevante quando temos informação satélite. Quais dos algoritmos que vimos são estáveis? inserção direta? seleção direta? bubblesort? mergesort? quicksort? heapsort? countingsort?

Algoritmos p. 13/25 Consumo de tempo do Radixsort Depende do algoritmo ORDENE.

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

Algoritmos p. 13/25 Consumo de tempo do Radixsort 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. 13/25 Consumo de tempo do Radixsort 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. 14/25 Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0,1).

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

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

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

Algoritmos p. 15/25 Exemplo.47.93.82.12.42.03.62.38.77.91

Algoritmos p. 15/25 Exemplo.47.93.82.12.42.03.62.38.77.91 B[0] :.03 B[1] :.12 B[2] : B[3] :.38 B[4] :.47.42 B[5] : B[6] :.62 B[7] :.77 B[8] :.82 B[9] :.93.91

Algoritmos p. 15/25 Exemplo.47.93.82.12.42.03.62.38.77.91 B[0] :.03 B[1] :.12 B[2] : B[3] :.38 B[4] :.42.47 B[5] : B[6] :.62 B[7] :.77 B[8] :.82 B[9] :.91.93

Algoritmos p. 16/25 Exemplo.47.93.82.12.42.03.62.38.77.91 B[0] :.03 B[1] :.12 B[2] : B[3] :.38 B[4] :.42.47 B[5] : B[6] :.62 B[7] :.77 B[8] :.82 B[9] :.91.93.03.12.38.42.47.62.77.82.91.93

Algoritmos p. 17/25 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. 18/25 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. 19/25 Consumo de tempo Suponha que os números em A[1..n] são uniformemente distribuídos no intervalo [0,1). Suponha que o ORDENELISTA seja o INSERTIONSORT.

Algoritmos p. 19/25 Consumo de tempo Suponha que os números em A[1..n] são uniformemente distribuídos no intervalo [0,1). Suponha que o ORDENELISTA seja o INSERTIONSORT. Seja X i o número de elementos na lista B[i].

Algoritmos p. 19/25 Consumo de tempo Suponha que os números em A[1..n] são uniformemente distribuídos no intervalo [0,1). Suponha que o ORDENELISTA seja o INSERTIONSORT. Seja X i o número de elementos na lista B[i]. Seja X ij = { 1 se o j-ésimo elemento foi para a lista B[i] 0 se o j-ésimo elemento não foi para a lista B[i].

Algoritmos p. 19/25 Consumo de tempo Suponha que os números em A[1..n] são uniformemente distribuídos no intervalo [0,1). Suponha que o ORDENELISTA seja o INSERTIONSORT. Seja X i o número de elementos na lista B[i]. Seja X ij = { 1 se o j-ésimo elemento foi para a lista B[i] 0 se o j-ésimo elemento não foi para a lista B[i]. Observe que X i = j X ij.

Algoritmos p. 19/25 Consumo de tempo Suponha que os números em A[1..n] são uniformemente distribuídos no intervalo [0,1). Suponha que o ORDENELISTA seja o INSERTIONSORT. Seja X i o número de elementos na lista B[i]. Seja X ij = { 1 se o j-ésimo elemento foi para a lista B[i] 0 se o j-ésimo elemento não foi para a lista B[i]. Observe que X i = j X ij. Y i : número de comparações para ordenar a lista B[i].

Algoritmos p. 20/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i].

Algoritmos p. 20/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X i 2. Logo E[Y i ] E[X i 2 ] = E[( j X ij) 2 ].

Algoritmos p. 20/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X i 2. Logo E[Y i ] E[X i 2 ] = E[( j X ij) 2 ]. E[( j X ij ) 2 ] = E[ j X ij X ik ] = E[ j k X ij 2 + j X ij X ik ] k j

Algoritmos p. 20/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X i 2. Logo E[Y i ] E[X i 2 ] = E[( j X ij) 2 ]. E[( j X ij ) 2 ] = E[ j X ij X ik ] = E[ j k X ij 2 ]+E[ j X ij X ik ] k j

Algoritmos p. 20/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X i 2. Logo E[Y i ] E[X i 2 ] = E[( j X ij) 2 ]. E[( j X ij ) 2 ] = E[ j X ij X ik ] = E[X 2 ij ]+ j j k k j E[X ij X ik ]

Algoritmos p. 21/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X 2 i. Ademais, E[Y i ] E[X 2 ij ]+ E[X ij X ik ]. j j k j

Algoritmos p. 21/25 Consumo de tempo X i : número de elementos na lista B[i] { 1 se o j-ésimo elemento foi para a lista B[i] X ij = 0 se o j-ésimo elemento não foi para a lista B[i]. } Y i : número de comparações para ordenar a lista B[i]. Observe que Y i X i 2. Ademais, E[Y i ] j E[X ij 2 ]+ j E[X ij X ik ]. k j Observe que X ij 2 é uma variável aleatória binária. Vamos calcular sua esperança: E[X ij 2 ] = Pr[X ij 2 = 1] = Pr[X ij = 1] = 1 n.

Algoritmos p. 22/25 Consumo de tempo Para calcular E[X ij X ik ] para j k, primeiro note que X ij e X ik são variáveis aleatórias independentes. Portanto, E[X ij X ik ] = E[X ij ]E[X ik ]. Ademais, E[X ij ] = Pr[X ij = 1] = 1 n.

Consumo de tempo Para calcular E[X ij X ik ] para j k, primeiro note que X ij e X ik são variáveis aleatórias independentes. Portanto, E[X ij X ik ] = E[X ij ]E[X ik ]. Ademais, E[X ij ] = Pr[X ij = 1] = 1 n. Logo, E[Y i ] j 1 n + j k j 1 n 2 = n n +n(n 1) 1 n 2 = 1+(n 1) 1 n = 2 1 n. Algoritmos p. 22/25

Algoritmos p. 23/25 Consumo de tempo Agora, seja Y = i Y i. Note que Y é o número de comparações realizadas pelo BUCKETSORT no total. Assim E[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo do BUCKETSORT. Mas então E[Y] = i E[Y i] 2n 1 = O(n).

Algoritmos p. 23/25 Consumo de tempo Agora, seja Y = i Y i. Note que Y é o número de comparações realizadas pelo BUCKETSORT no total. Assim E[Y] é o número esperado de comparações realizadas pelo algoritmo, e tal número determina o consumo assintótico de tempo do BUCKETSORT. Mas então E[Y] = i E[Y i] 2n 1 = O(n). O consumo de tempo esperado do BUCKETSORT quando os números em A[1..n] são uniformemente distribuídos no intervalo [0,1) é O(n).

Algoritmos p. 24/25 Exercícios Exercício 7.A Desenhe a árvore de decisão para o SELECTIONSORT aplicado a A[1..3] com todos os elementos distintos. Exercício 7.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 7.C [CLRS 8.1-2] Mostre que lg(n!) = Ω(nlgn) sem usar a fórmula de Stirling. Sugestão: Calcule n k=n/2lgk. Use as técnicas de CLRS A.2.

Algoritmos p. 25/25 Exercícios Exercício 7.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 7.E [CLRS 8.2-2] Mostre que o COUNTINGSORT é estável. Exercício 7.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?