Introduc~o a Algoritmos a

(Vers~o Parcial: 01/03/2001, 10:30h) a Favor n~o distribuir a

Thomas H. Cormen, Charles E. Leiserson, e Ronald L. Rivest

Introduction to Algorithms, MIT Press, c 1990
por Ruy J. Guerra B. de Queiroz

Traduzido do original em ingl^s e

2

Indice
1 Introduc~o a
1.1 Algoritmos : : : : : : : : : : : : : : : : : : : : : 1.2 Analisando algoritmos : : : : : : : : : : : : : : : 1.3 Desenhando algoritmos : : : : : : : : : : : : : : : 1.3.1 A abordagem divis~o-e-conquista : : : : : a 1.3.2 Analisando algoritmos divis~o-e-conquista a 1.4 Resumo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 7 12 12 14 16

3

I Fundamentos Matematicos
2 Crescimento de Func~es o 3 Somatorios
4.1 4.2 4.3 4.4

21
25 43

2.1 Notac~o assintotica : : : : : : : : : : : : : : : : : : : : : : : : : : 25 a 2.2 Notac~es padr~o e func~es usuais : : : : : : : : : : : : : : : : : : 33 o a o

3.1 Formulas e propriedades de somatorios : : : : : : : : : : : : : : : 43 3.2 Delimitando somatorios : : : : : : : : : : : : : : : : : : : : : : : 47 O metodo da substituic~o a O metodo da iterac~o : : a O metodo mestre : : : : : Prova do teorema mestre : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

4 Recorr^ncias e

51

51 51 51 51 53 53 53 53 53

5 Conjuntos, Etc.
5.1 5.2 5.3 5.4 5.5 Conjuntos Relac~es : o Func~es : o Grafos : : Arvores :

53

6 Contagem e Probabilidade
6.1 6.2 6.3 6.4 6.5 6.6

Contagem : : : : : : : : : : : : : : : : : Probabilidade : : : : : : : : : : : : : : : Variaveis aleatorias discretas : : : : : : A distribuic~o geometrica e a binomial : a As caudas da distribuic~o binomial : : : a Analise probabil stica : : : : : : : : : : 3

55

55 55 55 55 55 55

4

INDICE

II Ordenac~o e Estat sticas de Ordem a
7 Heapsort
7.1 7.2 7.3 7.4 7.5
Heaps : : : : : : : : : : : : : : : Mantendo a propriedade de heap Construindo um heap : : : : : : O algoritmo heapsort : : : : : : : Filas de prioridade : : : : : : : :

57
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

: : : : :

: : : : : : : : :

: : : : : : : : : : : : :

: : : : : : : : : : : : :

: : : : : : : : : : : : :

: : : : : : : : : : : : :

61

61 61 61 61 61

8 Quicksort
8.1 8.2 8.3 8.4

Descric~o do quicksort : : : : : : : a Desempenho do quicksort : : : : : Vers~es randomizadas do quicksort o Analise do quicksort : : : : : : : :

63

63 63 63 63

9 Ordenac~o em Tempo Linear a
9.1 9.2 9.3 9.4

Limitantes inferiores para ordenac~o a Ordenac~o por contagem : : : : : : : a Ordenac~o por radix : : : : : : : : : a Ordenac~o por balde : : : : : : : : : a

65

65 65 65 65

10 Medianas e Estat sticas de Ordenac~o a

10.1 M nimo e maximo : : : : : : : : : : : : : : : : : : : : : : : : : : 67 10.2 Selec~o em tempo linear esperado : : : : : : : : : : : : : : : : : : 67 a 10.3 Selec~o em tempo linear no pior-caso : : : : : : : : : : : : : : : : 67 a

67

III Estruturas de Dados
11 Estruturas de Dados Elementares
11.1 11.2 11.3 11.4 Pilhas e las : : : : : : : : : : : : : : : Listas encadeadas : : : : : : : : : : : : Implementando apontadores e objetos Representando arvores com ra zes : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

69
73
73 73 73 73

12 Tabelas de Hash
12.1 12.2 12.3 12.4

Tabelas de endereco-direto : Tabelas de hash : : : : : : : Func~es de hash : : : : : : o Enderecamento aberto : : :

75

75 75 75 75

13 Arvores de Busca Binaria
13.1 13.2 13.3 13.4

O que e uma arvore de busca binaria? : : : : : : : : Consultando uma arvore de busca binaria : : : : : : Inserc~o e remoc~o : : : : : : : : : : : : : : : : : : : a a Arvores de busca binaria constru das aleatoriamente

77

77 77 77 77

INDICE

5 Propriedades de arvores vermelho-preto Rotac~es : : : : : : : : : : : : : : : : : : o Inserc~o : : : : : : : : : : : : : : : : : : a Remoc~o : : : : : : : : : : : : : : : : : : a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

14 Arvores Vermelho-Preto
14.1 14.2 14.3 14.4

79

79 79 79 79

15 Aumentando Estruturas de Dados

15.1 Estat sticas din^micas de ordem : : : : : : : : : : : : : : : : : : 81 a 15.2 Como aumentar uma estrutura de dados : : : : : : : : : : : : : : 81 15.3 Arvores de intervalo : : : : : : : : : : : : : : : : : : : : : : : : : 81

81

IV Tecnicas Avancadas de Desenho e Analise
16 Programac~o Din^mica a a
16.1 16.2 16.3 16.4 Multiplicac~o de cadeia de matrizes a Elementos de programac~o din^mica a a Maiores subsequ^ncias comuns : : : e Triangulac~o otima de pol gono : : : a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

83
87
87 87 87 87

17 Algoritmos Gulosos
17.1 17.2 17.3 17.4 17.5

Um problema de selec~o de atividade : : : : : : a Elementos da estrategia gulosa : : : : : : : : : Codigos de Hu man : : : : : : : : : : : : : : : Fundamentos teoricos para os metodos gulosos Um problema de escalonamento de tarefas : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

89

89 89 89 89 89

18 Analise Amortizada
18.1 18.2 18.3 18.4

O metodo agregado : : : : : O metodo da contabilizac~o a O metodo do potencial : : : Tabelas din^micas : : : : : a

91

91 91 91 91

V Estruturas de Dados Avancadas
19 Arvores B

93
97

19.1 De nic~o de arvores B : : : : : : : : : : : : : : : : : : : : : : : : 97 a 19.2 Operac~es basicas sobre arvores B : : : : : : : : : : : : : : : : : 97 o 19.3 Removendo uma chave de uma arvore B : : : : : : : : : : : : : : 97

20 Heaps Binomiais

20.1 Arvores binomiais e heaps binomiais : : : : : : : : : : : : : : : : 99 20.2 Operac~es sobre heaps binomiais : : : : : : : : : : : : : : : : : : 99 o Estrutura dos heaps de Fibonacci : : : : : : : : : Operac~es sobre heaps intercalaveis : : : : : : : : o Decrementando uma chave e removendo um no : Determinando um limitante para o grau maximo : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

99

21 Heaps de Fibonacci
21.1 21.2 21.3 21.4

101
101 101 101 101

2 22.3 23.2 Os algoritmos de Kruskal e de Prim : : : : : : : : : : : : : : : : 111 Caminhos mais curtos e relaxac~o : : : : : : : : : : : : : : : : : a O algoritmo de Dijkstra : : : : : : : : : : : : : : : : : : : : : : : O algoritmo de Bellman{Ford : : : : : : : : : : : : : : : : : : : : Caminhos mais curtos de uma unica fonte em grafos direcionados ac clicos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25.4 24.3 22.1 25.4 Operac~es sobre conjuntos disjuntos : : : : : : : : : : : : : o Representac~o de conjuntos disjuntos em listas encadeadas : a Florestas de conjuntos disjuntos : : : : : : : : : : : : : : : : Analise da uni~o por posto com compress~o de caminho : : a a : : : : : : : : : : : : 22 Estruturas de Dados para Conjuntos Disjuntos 103 103 103 103 103 VI Algoritmos sobre Grafos 23 Algoritmos Elementares sobre Grafos 23.6 INDICE 22.5 Redes de comparac~o : : : : : : : a O princ pio zero-um : : : : : : : Uma rede de ordenac~o bit^nica a o Uma rede de intercalac~o : : : : a Uma rede de ordenac~o : : : : : a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119 123 123 123 123 123 123 .4 23.3 25.1 23.3 28.1 26.2 26.3 27.2 27.4 28.1 22.1 Fazendo crescer uma arvore geradora m nima : : : : : : : : : : : 111 24.uxo : : : : O algoritmo puxa-para-a-frente : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 111 25 Caminhos Mais Curtos de uma Unica Fonte 113 113 113 113 113 113 26 Caminhos Mais Curtos entre Todos-os-Pares 115 115 115 115 115 27 Fluxo Maximo 27.3 26.2 23.1 27.5 117 117 117 117 117 117 VII Topicos Selecionados 28 Redes de Ordenac~o a 28.1 28.5 Representac~es de grafos : : : : : o Busca em largura : : : : : : : : : Busca em profundidade : : : : : Ordenac~o topologica : : : : : : a Componentes fortemente conexos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 105 109 109 109 109 109 109 24 Arvores Geradoras M nimas 25.4 Caminhos mais curtos e multiplicac~o de matrizes : : : : : : : : a O algoritmo de Floyd{Warshall : : : : : : : : : : : : : : : : : : : O algoritmo de Johnson para grafos esparsos : : : : : : : : : : : Um arcabouco geral para resoluc~o de problemas de caminho em a grafos direcionados : : : : : : : : : : : : : : : : : : : : : : : : : : Redes de uxo : : : : : : : : : O metodo de Ford{Fulkerson : Casamento bipartido maximo : Algoritmos de pre.2 28.2 25.4 27.5 Restric~es de diferenca e caminhos mais curtos : : : : : : : : : : o 26.

2 35.5 O algoritmo ing^nuo de casamento-de-cadeias e O algoritmo de Robin{Karp : : : : : : : : : : Casamento de cadeias com aut^matos nitos o O algoritmo de Knuth{Morris{Pratt : : : : : O algoritmo de Boyer{Moore : : : : : : : : : 135 35 Geometria Computacional 35.8 33.3 35.1 Representac~o de polin^mios : : : : : : : : : : : : : : : : : : : : 131 a o 32.5 31.2 29.2 A TDF e a TRF : : : : : : : : : : : : : : : : : : : : : : : : : : : 131 32.1 33.1 30.1 34.4 33.2 31.3 29.3 30.4 30.4 30.2 30.3 33.5 125 125 125 125 125 30 Algoritmos para Computadores Paralelos Salto de apontador : : : : : : : : : : : : : : : Algoritmos CRCW versus algoritmos EREW O teorema de Brent e e ci^ncia de trabalho : e Computac~o de pre xo paralela e ciente : : : a Quebra simetrica determin stica : : : : : : : : 127 127 127 127 127 127 31 Operac~es sobre Matrizes o 31.6 33.7 33.3 31.2 33.1 31.3 Implementac~o e ciente da TRF : : : : : : : : : : : : : : : : : : 131 a Noc~es elementares da teoria dos numeros o Maximo divisor comum : : : : : : : : : : Aritmetica modular : : : : : : : : : : : : Resolvendo equac~es lineares modulares : o O teorema do resto chin^s : : : : : : : : : e Pot^ncias de um elemento : : : : : : : : : e O criptossistema de chave publica RSA : Testando a propriedade de ser primo : : : Fatorac~o inteira : : : : : : : : : : : : : : a : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 131 33 Algoritmos da Teoria dos Numeros 33.INDICE 7 Circuitos combinacionais : Circuitos de adic~o : : : : a Circuitos de multiplicac~o a Circuitos temporizados : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29 Circuitos Aritmeticos 29.4 31.1 29.6 Propriedades de matrizes : : : : : : : : : : : : : : : : : : : : : : 129 O algoritmo de Strassen para multiplicac~o de matrizes : : : : : 129 a Sistemas numericos algebricos e multiplicac~ode matrizes booleanas129 a Resolvendo sistemas de equac~es lineares : : : : : : : : : : : : : : 129 o Invertendo matrizes : : : : : : : : : : : : : : : : : : : : : : : : : 129 Matrizes positivas-de nitivas simetricas e aproximac~o por m nimos a quadrados : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 129 129 32 Polin^mios e a TRF o 32.4 Propriedades de reta-segmento : : : : : : : : : : : : : : : : : : Determinando se um par qualquer de segmentos tem intersec~o a Encontrando a envoltoria convexa : : : : : : : : : : : : : : : : : Encontrando o par de pontos mais proximos : : : : : : : : : : : 137 .1 35.5 33.9 133 133 133 133 133 133 133 133 133 133 135 135 135 135 135 137 137 137 137 34 Casamento de Cadeias 34.4 34.3 34.2 34.

5 139 139 139 139 139 139 37 Algoritmos de Aproximac~o a 37.1 36.2 37.3 37.4 O problema da cobertura de vertices : O problema do caixeiro viajante : : : O problema da cobertura de conjuntos O problema do subconjunto-soma : : : 141 141 141 141 141 .2 36.1 37.3 36.INDICE i Tempo polinomial : : : : : : : : Veri cac~o em tempo polinomial a NP-completude e redutibilidade : Provas de NP-completude : : : : Problemas NP-completos : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 36 NP-Completude 36.4 36.

ii INDICE .

Tentamos manter as explanac~es num n vel elementar sem o sacri car a profundidade da abordagem ou o rigor matematico.Prefacio Este livro da uma introduc~o abrangente ao estudo moderno de algoritmos para a computadores. e ainda assim torna seu desenho e sua analise acess veis a todos os n veis de leitores. 1 . Ele apresenta diversos algoritmos e os trata com uma razoavel profundidade.

2 INDICE .

um algoritmo e qualquer procedimento computacional bem de nido que toma algum valor. Comecamos com uma discuss~o sobre problemas computacionais em geral e a sobre os algoritmos necessarios para resolv^-los. e Podemos tambem ver um algoritmo como uma ferramenta para resolver um problema computacional bem especi cado. como sa da. com o problema da ordenac~o e a como nosso exemplo de trabalho. a a Informalmente. a a Finalizamos com uma comparac~o entre os dois algoritmos de ordenac~o. ou conjunto de valores. O enunciado do problema especi ca em termos gerais a relac~o entrada/sa da. Introduzimos um \pseudocodigo" que deve ser familiar aos leitores que zeram programac~o de computadores para mostrar a como especi caremos nossos algoritmos.Cap tulo 1 Introduc~o a Este cap tulo devera faz^-lo car familiar com a arcabouco que usaremos em e todo o livro para pensar sobre o desenho e a analise de algoritmos. Aqui esta a forma pela a qual de nimos o problema da ordenac~o: a 3 1. Ordenac~o por inserc~o. introduzindo uma notac~o que focaliza o a a a a \como" aquele tempo cresce com o numero de itens a serem ordenados. Introduzimos tambem a abordagem divis~o-e-conquista ao desenho de algoritmos e a a usamos para desenvolver um algoritmo chamado ordenac~o por intercalac~o. um algoritmo a a simples de ordenac~o. como entrada e produz algum valor. E autocontido. Comecamos nosso estudo de algoritmos com um problema de ordenac~o de a uma sequ^ncia de numeros em ordem n~o-decrescente.1 Algoritmos . Analisamos o tempo de a execuc~o da ordenac~o por inserc~o. O algoritmo descreve um a procedimento computacional espec co para se atingir a relac~o entrada/sa da a desejada. mas inclui varias refer^ncias ao material que sera introduzido na Parte e I. serve como um exemplo inicial. Esse problema surge e a frequentemente na pratica e prov^ um terreno fertil para se introduzir muitas e tecnicas padr~o de desenho e ferramentas de analise. Um algoritmo e portanto uma sequ^ncia de passos computacionais que transforma a entrada na sa da. ou conjunto de valores.

descreveremos tipicamente algoritmos como programas escritos em um pseudocodigo que e muito parecido com C. O que separa pseudocodigo de codigo \real" e que em pseudocodigo empregamos quaisquer metodos expressivos que sejam o mais claro e conciso poss vel para especi car um dado algoritmo. ou ele pode parar com outra sa da diferente da a resposta desejada. : : :. Dizemos que um algoritmo correto resolve um dado problema computacional. ou ate mesmo como um desenho de hardware. Qual algoa e ritmo e melhor para uma dada aplicac~o depende do numero de itens a serem a ordenados. se sua taxa de erro puder ser controlada. entretanto. portanto n~o se surpreenda se voc^ se deparar a e com uma frase em ingl^s ou uma sentenca imersa numa porc~o de codigo \real". a a a Ordenac~o por inserc~o a a Comecamos com a ordenac~o por inserc~o. Neste livro. Dada uma sequ^ncia de entrada tal como h31. O unico requisito e que a especi cac~o deve prover uma descric~o precisa do procedimento computacional a a a ser seguido. voc^ deve ter pouca di culdade e em ler nossos algoritmos. a Da retiramos uma carta da mesa a cada vez e a inserimos na posic~o correta a na m~o esquerda. 58i. : : :. um algoritmo e de ordenac~o retorna como sequ^ncia de sa da a sequ^ncia h26. ou Algol. 41. e manuseio de erros s~o frequentemente a a ignoradas de modo a transmitir a ess^ncia do algoritmo de forma mais concisa. 41. As vezes. e Entrada: Uma sequ^ncia de n numeros ha1. e a a Em geral. como um programa de come putador. ele para com a a sa da correta. a Ordenac~o e uma operac~o fundamental em ci^ncia da computac~o (muitos a a e a programas a usam como um passo intermediario). Pascal. e o tipo a de dispositivo de memoria a ser usado: memoria principal. Um algoritmo incorreto pode ate n~o parar de forma alguma em a algumas inst^ncias de entrada. estaremos nos concentrando apenas em algoritmos corretos. 59i. 58. a0ni da sequ^ncia de ena a e para ordenar um pequeno numero de elementos. Quest~es o o sobre abstrac~o de dados. Para achar a posic~o correta para uma determinada carta. uma inst^ncia de um problema consiste de todas as entradas a (satisfazendo quaisquer que sejam as restric~es que sejam impostas no enunciado o do problema) necessarias para computar uma soluc~o do problema. Um algoritmo e dito correto se. modularidade. ate que ponto os itens ja est~o de certa maneira ordenados. A ordenac~o por inserc~o a a funciona da maneira que muitas pessoas ordenam as cartas num jogo de baralho. Um algoritmo pode ser especi cado em ingl^s. e em vista disso um grande numero de bons algoritmos de ordenac~o t^m sido desenvolvidos. o metodo mais claro e a l ngua natural. 41. 31. ani e Sa da: Uma permutac~o (re-ordenac~o) ha01 . para toda inst^ncia de entrada. ou ta. Comecamos com uma m~o esquerda vazia e as cartas na mesa viradas para baixo. 59. Se voc^ e foi apresentado a qualquer dessas linguagens. a2. e a Uma outra diferenca entre pseudocodigo e codigo real e que pseudocodigo n~o a e tipicamente voltado para quest~es sobre engenharia de software.4 ~ CAP TULO 1. disco. Comumente. 41. a02. a e e Tal sequ^ncia de entrada e chamada de inst^ncia do problema de ordenac~o. algoritmos incorretos podem as vezes ser uteis. Veremos um exemplo disso no Cap tulo 33 quando estudamos algoritmos para encontrar numeros primos grandes. 26. Ao contrario do que se poderia esperar. que e um algoritmo e ciente a a . INTRODUCAO trada tal que a01 a02 : : : a0n.

o numero n de elementos em A e designado por tamanho A]. o 1." indica que o restante da linha e um comentario.2 mostra como esse algoritmo funciona para A = h5. e sen~o t^m a mesma interpretac~o que em Pasa a e a cal. O vetor de entrada A contem a ~ sequ^ncia de sa da ordenada quando Ordena-Insercao e completado. para. O s mbolo \. o corpo do laco para que comeca na linha 1 consiste das linhas 2{8. 3i. 6. e geralmente desaconselhavel usar a paragrafos somente para indicar estruturas em bloco. Nosso estilo via paragrafos aplica-se a tambem a comandos se-ent~o-sen~o.1.1 2. 1 Em linguagens de programac~o propriamente ditas. Um novo paragrafo (deslocamento para a direita) indica uma estrutura de bloco. pois os n veis de paragrafo s~o dif ceis a de determinar quando o codigo e partido em mais de uma pagina. O ndice j indica a \carta atual" sendo inserida na m~o. Convenc~es de pseudocodigo o Usamos as seguintes convenc~es em nosso pseudocodigo. Por exemplo. da direita para a a a esquerda. (No codigo. os elemena a tos s~o sucessivamente deslocados uma posic~o para a direita ate que a posic~o a a a apropriada para A j] seja encontrada (linhas 4{7). ent~o. ALGORITMOS 5 comparamos com cada uma das cartas que ja est~o na m~o. e repita e as construc~es de o o condicionais se. e i j 1 enquanto i > 0 and A i] > chave faca A i + 1] A i] i i 1 A i + 1] chave A Figura 1. . Nosso pseudocodigo para a ordenac~o por inserc~o e apresentado como um a a ~ procedimento chamado Ordena-Insercao. 4. que toma como um par^metro um a vetor A 1::n] contendo uma sequ^ncia de comprimento n que e para ser ordee nada. como ilustrado na Figura 1. ponto no qual ele e inserido (linha 8). Usando paragrafos ao inves de a a indicadores convencionais de estrutura em bloco. o elemento A j] a e retirado do vetor (linha 2). comecando na posic~o j 1. Os elementos do vetor a A 1::j 1] constituem a m~o ja ordenada. tais como comeco e m. O ndice j move da esquerda para a direita atraves do vetor.1.) Os numeros de entrada s~o ordenados no lugar: os numeros s~o rearranjados a a dentro do vetor A. e o corpo do laco enquanto que comeca na linha 5 contem as linhas 6{7 mas n~o a linha 8. As construc~es de laco enquanto. a ou ate melhora. 3. com no maximo um numero constante deles armazenado fora do vetor em qualquer instante de tempo. e os elementos A j + 1::n] correspona dem a pilha de cartas ainda na mesa. A cada iterac~o do laco para mais externo. Ent~o.1. Insere A j] na sequ^ncia ordenada A 1::j 1]. reduz enormemente o excesso de notac~o ao mesmo tempo em preserva. e 1 2 3 4 5 6 7 8 para j 2 ate tamanho A] faca chave A j] . a clareza. 1. 2.

normala mente cara claro a partir do contexto qual interpretac~o e pretendida. A notac~o \::" e usada para indicar a faixa de variac~o dos a a valores dentro de um vetor. j. a . A i] indica o i-esimo elemento do vetor A. como tambem f y] = 3. 59. a a Quando objetos s~o passados. o apontador para os dados representando o a objeto e copiado. Elementos de vetores s~o acessados especi cando o nome do vetor seguido a do ndice em colchetes. entretanto. Por exemplo. a mudanca n~o e vista pela rotina que o chamou. Para todos os campos f de um objeto x. 8. Uma atribuic~o multipla da forma i j e atribui a ambas as variaveis a i e j o valor da express~o e. Em outras palavras. a Exerc cios 1. Dados compostos s~o tipicamente organizados em objetos. a A atribuic~o f x] 3. se x e a a um par^metro de um procedimento chamado. Um campo espec co e acessado usando o nome do campo seguido do nome de seu objeto em colchetes. 5. Por exemplo. A 1::j] indica a subvetor de A consistindo dos elementos A 1]. a e lhe damos o valor especial nil.1-1 1. ~ Reescreva o procedimento Ordena-Insercao para ordenar em ordem n~oa crescente ao inves de ordem n~o-decrescente. 26. a atribuic~o x y dentro a a do procedimento chamado n~o e vis vel ao procedimento que o chamou. INTRODUCAO 4. Par^metros s~o passados a um procedimento por valor: o procedimento a a chamado recebe sua propria copia dos par^metros. mas os campos do objeto n~o o s~o. Por conseguinte. tratamos um vetor como um objeto com o atributo tamanho indicando quantos elementos ele contem.6 ~ CAP TULO 1. e se ele atribui um a valor a um par^metro. Nesse caso. a a As vezes um apontador n~o fara refer^ncia a objeto algum. Variaveis (tais como i. Embora usemos colchetes tanto para indexac~o de vetor quanto para atributos de objetos. :: :. 58i. se agora zermos f x] 3. Alem do mais. 41. e vis vel. ilustre a operac~o de Ordena-Insercao a sobre o vetor A = h31. A 2]. A j]. N~o a a usaremos variaveis globais sem indicac~o expl cita. ent~o depois disso temos n~o apenas a a f x] = 3. Para especi car o numero de elementos em um vetor A.1-2 ~ Usando a Figura 1. x e y apontam para (\s~o") o mesmo objeto apos a atribuic~o y x. escrevemos tamanho A]. a 6. deve ser tratado como equivalente a atribuic~o a a j e seguida pelo comando i j. 7. 41. fazendo y x acarreta em f y] = f x].2 como um modelo. Por exemplo. que s~o cona a stitu dos de atributos ou campos. e chave) s~o locais ao procedimento dado. a Uma variavel representando um vetor ou objeto e tratada como um apontador para os dados representando o vetor ou o objeto.

teremos ocasi~o de investigar a modelos para computadores paralelos e hardware digital. a2. porem muito frea a a quentemente e o tempo computacional que desejamos medir. Considere o problema de adicionar dois inteiros binarios de n-bits.1-3 Considere o problema de busca: Entrada: Uma sequ^ncia de n numeros A = ha1.1. ou portas logicas s~o de principal import^ncia. Tal analise pode indicar mais que um candidato viavel. ao analisar varios algoritmos candidatos a resolver um problema. Devido ao fato de que o comportamento de um algoritmo pode ser diferente para cada entrada poss vel.2. recursos tais como memoria. e Sa da: Um ndice i tal que v = A i] ou o valor especial nil se v n~o aparece a em A. entretanto. Enuncie o problema formalmente e escreva o pseudocodigo para adic~o dos dois inteiros.1-4 1. Para a maior parte deste livro. que mostre a as caracter sticas importantes dos requisitos de recurso de um algoritmo. Em cap tulos mais adiante. armazenados em dois vetores de n-elementos A e B. As ferramentas matematicas necessarias podem incluir combinatoria discreta. mas varios algoritmos inferiores s~o usualmente descartaa dos no processo. incluindo um modelo para os recursos a daquela tecnologia e seus custos. : : :. Um objetivo imediato e encontrar um meio de express~o que seja simples de escrever e de manusear. ani e um valor v. precisamos de meios de resumir aquele comportamento em formulas simples e facilmente compreens veis. ANALISANDO ALGORITMOS 7 1. assumiremos um modelo de computac~o generico de um-processador. Muito embora selecionamos tipicamente apenas um modelo de maquina para analisar um dado algoritmo. destreza algebrica.2 Analisando algoritmos Analisar um algoritmo tem sido interpretado como prever os recursos que o algoritmo requer. Escreva um pseudocodigo para busca linear. um algoritmo o mais e ciente pode ser facilmente identi cado. a 1. e a habilidade de identi car os termos mais signi cativos numa formula. Analisar ate mesmo um algoritmo simples pode ser um desa o. . sem operac~es cono a o correntes. instruc~es s~o executadas uma apos outras. No a modelo RAM. Antes que possamos analisar um algoritmo. e que omita detalhes entediantes. Geralmente. velocidade de comunicac~o. teoria elementar da probabilidade. maquina de acesso a rand^mico (RAM). Ocasionalmente. como nossa tecnologia de implementac~o e entenderemos o a que nossos algoritmos ser~o implementados como programas de computador. A soma dos dois inteiros deve ser armazenada em forma binaria em um vetor C de (n + 1)-elementos. que varre a sequ^ncia procurando e por v. devemos ter um modelo da tecnologia de implementac~o que sera usada. ainda assim nos deparamos com muitas escolhas para decidir como expressar nossa analise.

precisamos de nir mais cuidadosamente os termos \tempo de execuc~o" e \tamanho da entrada"." o que. Esse ponto de vista esta de acordo com o modelo RAM. E conveniente de nir o a noc~o de passo de modo que ela seja t~o independente de maquina quanto a a poss vel. onde n = tamanho A].2 Na discuss~o que se segue. Alem do mais. como veremos. note que um comando que chama uma subrotina leva tempo constante. Uma linha pode levar uma quantidade de tempo diferente do que leva uma outra linha. : : :. nossa express~o para o tempo de execuc~o de a a a ~ Ordena-Insercao evoluira de uma formula complicada que usa todos os custos ci de cada comando para uma notac~o muito mais simples que e mais concisa a e mais facilmente manuseada. portanto e costume se descrever o tempo de execuc~o de um programa como uma func~o do tamanho a a de sua entrada. a medida mais natural e o numero de itens na entrada |por exemplo. Por ora.|do processo de executar a subrotina. mas assumiremos que cada execuc~o da i-esima linha leva o tempo ci . se a entrada de um algoritmo e um grafo. Em geral. o tamanho da entrada pode ser descrito pelos numeros de vertices e de arestas no grafo. mais adiante neste livro podemos dizer \ordene os pontos pela coordenada x. uma vez invocada. e tambem re ete como o pseudocodigo seria implementado na maioria dos computadores reais. ~ Comecamos apresentando o procedimento Ordena-Insercao com o \custo" de tempo de cada comando e o numero de vezes que cada comando e executado. 3. etc. a a e portanto n~o tomam tempo. Indicaremos que medida do tamanho da entrada esta sendo usada com cada problema que estudaremos.8 ~ CAP TULO 1. Passos computacionais que especi camos em ingl^s s~o free a quentemente variantes de um procedimento que requer mais que apenas uma quantidade constante de tempo. onde ci e uma a constante. Assumimos que os comentarios n~o s~o comandos executaveis. Para cada j = 2. pode levar mais. Para fazer isso. e ~ Ordena-Insercao pode levar quantidades diferentes de tempo para ordenar duas sequ^ncias de entrada do mesmo tamanho dependendo de o qu~o proximo e a de uma sequ^ncia ordenada elas ja se encontram. As vezes. leva mais que uma quantidade constante de tempo. Para muitos problemas. tais como ordenac~o ou computac~o de transa a formadas discretas de Fourier. separamos o processo de chamar a subrotina|passando-lhe os par^metros. Isto e. o tamanho n do vetor a ser ordenado. Uma quantidade constante de a tempo e necessaria para executar cada linha de nosso pseudocodigo. a melhor medida do a tamanho da entrada e o numero total de bits necessarios para representar a entrada em notac~o binaria usual. a Analise da ordenac~o por inserc~o a a . Tambem. a 2 Ha algumas sutilezas aqui. INTRODUCAO ~ O tempo que leva o procedimento Ordena-Insercao depende da entrada: ordenar mil numeros leva mais tempo que ordenar tr^s numeros. tal como multiplicac~o de dois inteiros. embora a subrotina. o tempo tomado e por um algoritmo cresce com o tamanho da entrada. O tempo de execuc~o de um algoritmo sobre uma entrada espec ca e o a numero de operac~es primitivas ou \passos" executados. Essa notac~o mais simples tambem tornara mais a facil a tarefa de determinar se um algoritmo e mais e ciente que um outro. n. e mais apropriado descrever o a tamanho da entrada com dois numeros ao inves de um. a A melhor noc~o para tamanho da entrada depende do problema sendo esa tudado. Para muitos outros problemas. usamos tj para representar o numero de vezes que o teste do laco enquanto na linha 5 e executado para aquele valor de j. Por exemplo. vamos adotar a seguinte vis~o. Por exemplo.

ordenada A 1::j 1]: 0 n 1 4 i j 1 c4 n n1 P t 5 enquanto i > 0 and A i] > chave c5 Pj =2 j n (t 1) 6 faca A i + 1] A i] c6 Pj =2 j n (t 1) 7 i i 1 c7 j =2 j 8 A i + 1] chave c8 n 1 O tempo de execuc~o do algoritmo e a soma dos tempos de execuc~o para a a cada comando executado. um comando que leva ci passos para executar e e executado n vezes contribuira ci n ao tempo total de execuc~o. n.1. Insira A j] na sequ^ncia e . Para cada j = 2. o melhor caso ocorre se o vetor ja esta ordenado. somamos os produtos das a colunas custo e numero de vezes. n. . 3. ANALISANDO ALGORITMOS ~ Ordena-Insercao 9 custo numero de vezes 1 para j 2 ate tamanho A] c1 n 2 faca chave A j] c2 n 1 3 . e portanto tj = j para j = 2. o tempo de execuc~o de Ordena-Insercao. o tempo de execuc~o de um a algoritmo pode depender de qual entrada daquele tamanho e dada.2. Por exemplo. ~ em Ordena-Insercao. tj = 1 para j = 2. n. encontramos ent~o que A i] chave na linha 5 quando i a tem seu valor inicial de j 1. e o tempo de execuc~o do melhor caso e a T(n) = c1n + c2(n 1) + c4(n 1) + c5(n 1) + c8(n 1) = (c1 + c2 + c4 + c5 + c8 )n (c2 + c4 + c5 + c8 ): Esse tempo de execuc~o pode ser expresso como an + b para a e b constantes a que dependem dos custos ci 's dos comandos.3 Para calcular a ~ T(n). : : :. trata-se portanto de uma func~o a linear de n. Se o vetor estiver ordenado na direc~o inversa|ou seja. em ordem decrescente| a o pior caso se estabelece. obtendo T(n) = c1n + c2(n 1) + c4(n 1) + c5 +c7 n X j =2 n X j =2 tj + c6 n X j =2 (tj 1) (tj 1) + c8 (n 1): Mesmo para entradas de um dado tamanho. Observando que n X j =2 j = n(n2+ 1) 1 e que n X j =2 (j 1) = n(n2 1) 3 Essa caracter stica n~o necessariamente se veri ca para um recurso como memoria. 3. Temos que comparar cada elemento A j] com cada elemento em todo o subvetor ordenado A 1::j 1]. : : :. Por conseguinte. Um a comando que faz refer^ncia a m palavras de memoria e e executado n vezes n~o necessariae a mente consome mn palavras de memoria no total. : : :. 3.

o tempo de execuc~o de Ordena-Insercao e a T(n) = c1 n + c2 (n 1) + c4 (n 1) + c5 n(n2+ 1) 1 +c6 n(n2 1) + c7 n(n2 1) + c8 (n 1) = c25 + c26 + c27 n2 + c1 + c2 + c4 + c25 c26 c27 + c8 n (c2 + c4 + c5 + c8): Esse tempo de execuc~o do pior caso pode ser expresso como an2 + bn + c para a a. a a no qual o vetor de entrada ja estava ordenado. o pior caso ocorre com uma razoavel frequ^ncia. e o a O tempo de execuc~o no pior caso de um algoritmo e um limitante superior a para o tempo de execuc~o para qualquer entrada. b e c constantes que novamente dependem dos custos ci 's. portanto tj = j=2. a . o pior caso do algoritmo de busca frequentemente a ocorrera quando a informac~o n~o estiver presente no banco de dados. no qual o vetor de entrada estava ordenado na direc~o inversa. normalmente nos concentraremos em buscar apenas o tempo de execuc~o no pior caso. as consultas por informac~o ausente podem o a ser frequentes. Analise do pior-caso e do caso-medio Em nossa analise da ordenac~o por inserc~o. a a Em media. olhamos tanto para o melhor caso. Se calcularmos o tempo de execuc~o resultante no a caso medio. Para o restante deste a livro. Suponha a que escolhamos aleatoriamente n numeros e apliquemos a ordenac~o por a inserc~o. e Por exemplo. encontramos que no pior a ~ caso. o tempo mais longo de execuc~o para uma a a entrada qualquer de tamanho n. O \caso medio" e frequentemente t~o ruim quanto o pior caso. todavia. metade dos elementos em A 1::j 1] s~o menores que A j]. e metade dos elementos s~o maiores. Para alguns algoritmos. N~o precisamos fazer advinhac~es ensaiadas sobre o tempo de execuc~o e a o a esperamos com isso que ele nunca chegue a ser muito pior. embora em cap tulos subsequentes veremos alguns algoritmos \randomizados" interessantes cujo comportamento pode variar mesmo para uma dada entrada. trata-se portanto de uma func~o quadratica de n. ao fazer uma busca num banco de dados por uma porc~o a espec ca de informac~o. a Tipicamente. Em a a algumas aplicac~es de busca. isto e. Conhecendo-o nos da a uma garantia de que o algoritmo nunca levara um tempo mais longo. quanto para o pior caso. INTRODUCAO (faremos uma revis~o de somatorios no Cap tulo 3). o tempo de execuc~o de a a a um algoritmo e xo para uma dada entrada. ele vai acabar sendo uma func~o quadratica do tamanho da a entrada.10 ~ CAP TULO 1. Damos tr^s raz~es para essa orientac~o. tal qual o tempo de execuc~o no pior caso. Quanto tempo leva para determinar onde no subvetor A 1::j 1] a devemos inserir o elemento A j]? Em media. temos que veri car metade do subvetor A 1::j 1]. assim como na ordenac~o por inserc~o. entretanto.

Considere a busca linear novamente (veja Exerc cio 1. Consideraremos. Usualmente consideramos um algoritmo como sendo mais e ciente que um outro se seu tempo de execuc~o no pior caso tem uma ordem de crescimento a menor. portanto. escrevemos que a ordenac~o por inserc~o. tem um tempo a a de execuc~o no pior caso de (n2 ) (pronuncia-se \teta de n ao quadrado"). Da a encontre o segundo menor elemento de A e coloque-o na segunda posic~o de B. mas tambem os custos abstratos ci . Quantos elementos da sequ^ncia de entrada precisam ser veri cados em media. assumiremos que todas as entradas de um dado tamanho s~o igualmente a provaveis.2-1 Considere ordenar n numeros armazenados no vetor A primeiro achando o menor elemento de A e colocando-o na primeira posic~o de um outro vetor B. que e conhecido como ordenac~o por selec~o. e que pode n~o estar claro o a que constitui uma entrada \media" para um problema espec co. Escreva o pseudocodigo para esse algoritmo. Vamos agora fazer mais uma abstrac~o simpli cadora. ANALISANDO ALGORITMOS 11 no caso medio ou esperado de um algoritmo. an2 ). ignoramos o custo real de cada comando. Primeiro. mas para a entradas su cientemente grandes um algoritmo (n2 ). estaremos interessados no tempo de execuc~o a har com uma analise do caso medio. ela sera de nida precisamente a no Cap tulo 2. Tambem ignoramos o coe ciente constante do termo de maior grau. Ordem de crescimento Temos usado algumas abstrac~es simpli cadoras para facilitar nossa analise do o ~ procedimento Ordena-Insercao. por exemplo. E a taxa de crescia mento. entretanto. Um problema com trabal- Em alguns casos espec cos. ou ordem de crescimento que realmente nos interessa.1-3).2. n~o apenas a os reais custos dos comandos. essa suposic~o pode ser violada. Na pratica. observamos que mesmo essas constantes nos d~o mais detalhes do que realmente precisamos: a o tempo de execuc~o no pior caso e an2 + bn + c para algumas constantes a. pois fatores constantes s~o menos signi cativos que a taxa de crescimento quando a se quer determinar a e ci^ncia computacional para entradas grandes. b e a c que dependem dos custos ci dos comandos. Ignoramos. mas um algoritmo rana domizado pode as vezes forcar que ela se veri que. a Continue dessa maneira para os n elementos de A. Usa aremos a notac~o informalmente neste cap tulo. por exemplo. usando as constantes ci para representar tais custos. assumindo que o e elemento sendo procurado e igualmente provavel de ser um elemento qualquer 1. executara mais rapidamente no pior caso que um algoritmo (n3 ).. Essa avaliac~o pode estar errada para entradas pequenas. Frequentemente. Por cone seguinte.2-2 . apenas o termo de mais alto grau de uma formula (e. D^ os tempos a a e de execuc~o no pior caso e no melhor caso da ordenac~o por selec~o em notac~o a a a a . pois os termos de mais baixa ordem s~o relativamente insigni cantes para n a grande.1.g. Da . portanto. Exerc cios 1.

an 1 e um numero real x. onde lg n representa log2 n. Descreva um algoritmo (n ) simples para esse problema. a a Como podemos modi car praticamente qualquer algoritmo de forma que ele tenha um bom tempo de execuc~o no melhor caso? a 1. o Dados n coe cientes a0 .2-3 Considere o problema de determinar se uma sequ^ncia arbitraria hx1 .1 A abordagem divis~o-e-conquista a .12 ~ CAP TULO 1." Usaremos divis~o-e-conquista para a a desenhar um algoritmo de ordenac~o cujo tempo de execuc~o no pior caso e a a muito menor que o da ordenac~o por inserc~o. INTRODUCAO no vetor? E no pior caso? Quais s~o os tempos de execuc~o da busca linear no a a caso medio e no pior caso em notac~o ? Justi que suas respostas. examinamos uma abordagem alternativa de desenho de algorita mos. Descreva um algoritmo (n)-tempo que usa o seguinte metodo (chamado de regra de Horner) para reescrever o polin^mio o n 1 X i=0 1. a Muitos algoritmos uteis s~o recursivos na sua estrutura: para resolver um a dado problema. inserimos o elemento A j] no seu lugar apropriado. resultando no subvetor ordenado A 1::j]. x2.3 Desenhando algoritmos Ha varias maneiras de se desenhar algoritmos.3. xni e de n numeros contem ocorr^ncias repetidas de algum numero. : : :. Mostre que isso e pode ser feito em tempo (n lg n). e a ent~o combinam a essas soluc~es para criar uma soluc~o para o problema original. resolvem os subproblemas recursivamente. A ordenac~o por inserc~o usa a a uma abordagem incremental: tendo ordenado o subvetor A 1::j 1].2-4 ai xi = ( (an 1x + an 2)x + + a1)x + a0: 1. : : :.2-6 Expresse a func~o n3 =1000 100n2 100n + 3 em termos da notac~o . o a O paradigma divis~o-e-conquista envolve tr^s passos a cada n vel da recurs~o: a e a 1. Nesta sec~o.2-5 1. desejamos calcular Pn 1 i 2 i=0 ai x . Considere o problema de calcular o valor de um polin^mio em um ponto. eles chamam a si poprios recursivamente uma ou mais vezes para lidar com subproblemas intimamente relacionados. a 1. Uma vantagem dos algoritmos a a divis~o-e-conquista e que seus tempos de execuc~o s~o facilmente determinados a a a usando-se tecnicas que ser~o introduzidas no Cap tulo 4. Esses algoritmos tipicamente seguem uma abordagem divis~o-e-conquista: eles quebram o problema em a varios subproblemas que s~o semelhantes ao problema original porem menores a em tamanho. conhecida como \divis~o-e-conquista. a1.

3-2).1. Intuitivamente. onde A e um vetor e p. O proa cedimento assume que os subvetor A p::q] e A q +1::r] est~o na ordem desejada. caso em que n~o ha e a trabalho a ser feito. e colocando essa carta virada para baixo na pilha de sa da." Para realizar a intercalac~o.3. Essas notac~es s~o de nidas no Cap tulo 2. contendo dn=2e elementos. e A q + 1::r]. Combine as soluc~es para os subproblemas na soluc~o para o problema origio a nal. Repetimos esse passo ate que uma pilha de entrada esteja vazia. Embora deixemos o pseudocodigo como um exerc cio (veja Exerc cio 1. p. r) a a ordena os elementos no subvetor A p::r]. Podemos agora usar o procedimento Intercala como uma subrotina no al~ goritmo de ordenac~o por intercalac~o. q. a Ele os intercala para formar um unico subvetor ordenada que substitui o vetor corrente A p::r]. Se p r. pois toda sequ^ncia de comprimento 1 ja esta na ordem. e bxc denota o maior inteiro a menor ou igual a x. e Conquista: Ordena as duas subsequ^ncias recursivamente usando a ordenac~o e a por intercalac~o. pois estamos checando apenas duas cartas topo-de-pilha. ele opera da seguinte a maneira. suponha que tenhamos duas pilhas de cartas viradas para cima sobre uma mesa. a Combinac~o: Intercala as duas subsequ^ncias ordenadas para produzir a rea e sposta ordenada. intercalar leva um tempo (n). contendo bn=2c elementos.4 4 A express~o dxe denota o menor inteiro maior ou igual a x. r). cada passo basico leva tempo constante. removendo-a da pilha (o que exp~e uma nova o carta topo-de-pilha). e r s~o ndices numerando elementos do vetor tais que p q < r. o subvetor tem no maximo um elemento e esta portanto ja ordenado. Conquiste os subproblemas resolvendo-os recursivamente. e A operac~o chave do algoritmo de ordenac~o por intercalac~o e a intercalac~o a a a a de duas sequ^ncias ordenadas no passo \combinar. Chamamos a atenc~o para o fato de que a recurs~o \sai de baixo para cima" a a quando a sequ^ncia a ser ordenada tem comprimento 1. p. o passo de dividir simplesmente calcula um ndice q que particiona A p::r] em dois subvetores: A p::q]. DESENHANDO ALGORITMOS 13 Divida o problema em uma certa quantidade de subproblemas. Como executamos no maximo n passos basicos. Nosso passo basico consiste de escolher a menor das duas cartas no topo das pilhas. Se os tamanhos do subproblema s~o pequenos o su ciente. Divis~o: Divide a sequ^ncia de n elementos a ser ordenada em duas suba e sequ^ncias de n=2 elementos cada. quando ent~o a simplesmente tomamos a pilha de entrada e a colocamos virada para baixo na pilha de sa da. merge sort ) segue a a e de perto o paradigma divis~o-e-conquista. e facil imaginar um procedimento Intercala que leva (n). q. onde n = r p+1 e o numero de elementos sendo intercalados. Do contrario. e a usamos um procedimento auxiliar Intercala(A. O procedimento Ordena-Intercalac ao(A. O algoritmo de ordenac~o por intercalac~o (do ingl^s. simplesmente resolva os subproba lemas de maneira direta. Retornando ao nosso exemplo de jogo de cartas. Computacionalmente. o a .

No Cap tulo 4. e assim por diante.2 Analisando algoritmos divis~o-e-conquista a Analise da ordenac~o por intercalac~o a a ~ Embora o pseudocodigo para Ordena-Intercalacao funcione corretamente quando o numero de elementos n~o e par. obtemos a o a recorr^ncia e (n) se n c. supomos que T(n) seja o tempo de execuc~o sobre um problema a de tamanho n. Como ja foi dito e anteriormente. nossa analise baseada em recorr^ncia a e ca simpli cada se assumimos que o tamanho do problema original e uma pot^ncia de dois. q.3 ilustra e esse processo. Se o tamanho do problema e su cientemente pequeno. Cada passo de dividir produz ent~o duas subsequ^ncias de e a e tamanho exatamente n=2. : ::. 1. Suponha que dividimos o problema em a subproblemas. que descreve o tempo total de execuc~o soe e a bre um problema de tamanho n em termos do tempo de execuc~o sobre ena tradas menores. r) Se olharmos a operac~o do procedimento de-baixo-para-cima quando n e uma a pot^ncia de dois. q + 1. que a escrevemos (1). Podemos ent~o usar ferramentas matematicas para resolver a a recorr^ncia e estabelecer limitantes sobre o desempenho do algoritmo. seu tempo de execuc~o pode frequentemente ser descrito por uma equac~o de a a recorr^ncia ou recorr^ncia. Se levamos um tempo D(n) para dividir o problema em subproblemas e um tempo C(n) para combinar as soluc~es para os subproblemas na soluc~o para o problema original. A 2]. p. p. q) ~ Ordena-Intercalacao(A. a soluc~o imediata leva tempo constante. INTRODUCAO 1 2 3 4 5 se p < r ent~o q b(p + r)=2c a ~ Ordena-Intercalacao(A. T(n) = aT (n=b) + D(n) + C(n) caso contrario: No Cap tulo 4. digamos n c para alguma constante c.14 ~ Ordena-Intercalacao(A. A Figura 1. p. cada um dos quais 1=b do tamanho do problema original. e Uma recorr^ncia para o tempo de execuc~o de um algoritmo divis~o-ee a a conquista e baseada em tr^s passos do paradigma basico. onde novamente tamanho A] = n.3. Para ordenar toda a sequ^ncia A = hA 1]. e ~ Ordena-Intercalacao(A. veremos que essa suposic~o n~o afeta a a a ordem de crescimento da soluc~o da recorr^ncia. o algoritmo consiste de intercalar de pares de sequ^ncias de e e 1-item para formar sequ^ncias ordenadas de comprimento 2. veremos como resolver recorr^ncias dessa forma. A n]i. r) Intercala(A. fazemos uma chamada e 1. intercalar pares de e sequ^ncias de comprimento 2 para formar sequ^ncias ordenadas de comprimento e e 4. ate que sequ^ncias de comprimento n=2 sejam intercaladas e para formar a sequ^ncia ordenada nal de comprimento n. tamanho A]). Quando um algoritmo contem uma chamada recursiva para si proprio. a e . r) ~ CAP TULO 1.

1. a Combinac~o: Ja observamos que o procedimento Intercala sobre um suba vetor de n elementos leva tempo (n). Para entradas su cientemente grandes. T(n) = 2 2T(n=2) + n se n = 2k . da C(n) = (n). Portanto. quebramos o tempo de execuc~o da a seguinte maneira. a Usando a Figura 1. 52.3-1 1. onde lg n representa log2 n. DESENHANDO ALGORITMOS 15 Raciocinamos da seguinte maneira de modo a arranjar a recorr^ncia para e T(n). 41. p. no pior caso.3 como um modelo. De modo a ordenar A 1::n].3-4 A ordenac~o por inserc~o pode ser expressa como um procedimento recursivo a a da seguinte maneira.3-3 1. a Exerc cios 1. T(n) = 2T(n=2) + (n) se n > 1: No Cap tulo 4. cada um de tamanho n=2. ou seja. ilustre a operac~o da ordenac~o por a a intercalac~o sobre o vetor A = h3. com seu a a tempo de execuc~o (n lg n).49i. r). (n).3.57. 26. Adicionando-a ao a termo 2T (n=2) do passo \conquistar" resulta na recorr^ncia para o pior caso da e ordenac~o por intercalac~o: a a (1) se n = 1. Essa soma e uma func~o linear de n. que leva a tempo constante. a ordenac~o por intercalac~o. Quando temos n > 1 elementos. k > 1 e T(n) = n lg n. que contribui 2T (n=2) para o tempo de execuc~o. Conquista: Resolvemos recursivamente dois subproblemas. D(n) = (1). mostraremos que T(n) e (n lg n). Divis~o: O passo de dividir simplesmente calcula o meio do subvetor.9. Escreva uma a recorr^ncia para o tempo de execuc~o dessa vers~o recursiva da ordenac~o por e a a a inserc~o. supera em desempenho a ordenac~o por inserc~o. Use induc~o matematica para mostrar que a soluc~o da recorr^ncia a a e se n = 2. 1. estamos adicionando uma func~o que e (n) e uma func~o que e a a a (1). Quando adicionamos as func~es D(n) e C(n) a analise da ordenac~o por o a intercalac~o.3-2 Escreva o pseudocodigo para Intercala(A. ordenamos recursivamente A 1::n 1] e ent~o inserimos A n] no vetor ordenado A 1::n 1]. A ordenac~o por intercalac~o sobre apenas um elemento leva tempo a a constante. a . o tempo de execuc~o no pior caso da ordenac~o por intercalac~o sobre n a a a numeros.38. q. a a a cujo tempo de execuc~o e (n2 ).

suponha o que o melhor programador do mundo escreve o codigo da ordenac~o por inserc~o a a em linguagem de maquina para o supercomputador. o supercomputador a leva 2 (106)2 instruc~es = 20:000 segundos 5. Suponha que o supercomputador executa 100 milh~es de instruc~es a o o por segundo. por outro lado. 1. com codigo resultante levando 50n lg n instruc~es do o computador pessoal. e programada para o computador a a pessoal por um programador medio usando uma linguagem de alto n vel com um compilador ine ciente. determina se existem ou n~o dois a elementos em S cuja soma seja exatamente x. Como exemplo. A oro denac~o por intercalac~o. vamos confrontar um supercomputador rodando ordenac~o por a inserc~o contra um pequeno computador pessoal rodando ordenac~o por intera a calac~o. enquanto que o computador pessoal executa apenas um milh~o de a instruc~es por segundo. dado um conjunto S de n numeros reais e um outro numero real x.3-5) para melhorar o tempo de execuc~o total no-pior-caso da ordenac~o por inserc~o para a a a (n lg n).16 ~ CAP TULO 1. Escreva um pseudocodigo. Para ordenar um milh~o de numeros. mas e despendera consideravelmente mais esforco que o necessario.3-7 ? Descreva um algoritmo de tempo (n lg n) que. e o resultado n~o a deve ser esteticamente agradavel. Usando o algoritmo errado para resolver um problema e como tentar cortar um pedaco de carne com uma chave de fenda: voc^ pode ate conseguir um resultado diger vel. INTRODUCAO Voltando ao problema da busca (veja o Exerc cio 1. podemos checar o ponto medio da sequ^ncia contra e e v e eliminar metade da sequ^ncia de considerac~es posteriores. o 108 instruc~es/segundo o . Essas diferencas podem ser muito mais signi cae tivas que a diferenca entre um computador pessoal e um supercomputador. Algoritmos concebidos para resolver o mesmo problema frequentemente diferem dramaticamente em e ci^ncia. Argumente que o tempo de execuc~o a da busca binaria no pior caso e (lg n). 1.4 Resumo Um bom algoritmo e como uma faca amolada|ele faz exatamente o que deve fazer com uma quantidade m nima de esforco aplicado. dividindo pela metade o tamanho da porc~o remanescente da sequ^ncia a cada vez. ~ Observe que o laco enquanto das linhas 5{7 do procedimento Ordena-Insercao na Sec~o 1. Busca binaria e o e um algoritmo que repete esse procedimento. Podemos usar a busca binaria (veja Exerc cio 1. Para tornar a diferenca ainda mais dramatica. 56 horas.3-5 1. ita e erativo ou recursivo. e que o codigo resultante requeira 2n2 instruc~es de supercomputador para ordenar n numeros.1 usa busca linear para varrer (de-tras-para-frente) o subvetor ora denado A 1::j 1].3-6 1. para busca binaria. observe que se a sequ^ncia A esta ordenada.1-3).

mesmo com um compilador pobre. O desempenho total de um sistema depende de se escolher algoritmos e cientes tanto quanto de se escolher hardware rapido.1. a ordenac~o por inserc~o roda em 8n2 passos. Assim como avancos rapidos est~o sendo feitos em outras tecnologias de computadores. s~o a tecnologia. eles a est~o sendo feitos em algoritmos tambem. assumindo que o algoritmo para resolver o problema leva f(n) microssegundos. RESUMO enquanto que o computador pessoal leva 17 50 106 lg 106 instruc~es 1:000 segundos 16. enquanto que a ordenac~o por a a a intercalac~o roda em 64n lg n passos. 1 1 1 1 1 1 1 segundo minuto hora dia m^s ano seculo e lg n pn n n lg n n2 n3 2n n! .4-2 Problemas 1-1 Comparac~o de tempos de execuc~o a a Para cada func~o f(n) e tempo t na tabela seguinte. 67 minutos: o 106 instruc~es/segundo o Usando um algoritmo cujo tempo de execuc~o tem uma ordem mais baixa de a crescimento.4-1 Suponha que estejamos comparando implementac~es da ordenac~o por inserc~o o a a e da ordenac~o por interacalac~o na mesma maquina.4. o computador pessoal roda 20 vezes mais rapido que o supercomputador! Esse exemplo mostra que algoritmos. a Exerc cios 1. Para quais valores de n a ordenac~o a a por inserc~o bate a ordenac~o por intercalac~o? Como se poderia reescrever a a a o pseudocodigo da ordenac~o por intercalac~o de modo a torna-la ainda mais a a rapida para entradas pequenas? Qual e o menor valor de n tal que um algoritmo cujo tempo de execuc~o e a 100n2 rode mais rapido que um algoritmo cujo tempo de execuc~o e 2n na a mesma maquina? 1. determine o maior tamanho a n de um problema que pode ser resolvido em tempo t. tal qual hardware de computador. Para entradas de tamanho a a n.

INTRODUCAO 1-2 Ordenac~o por inserc~o para vetores pequenos na ordenac~o a a a por intercalac~o a Embora a ordenac~o intercalac~o rode em (n lg n) de tempo no-pior-caso e a a a ordenac~o por inserc~o rode em (n2 ) de tempo no-pior-caso. Dado que o algoritmo modi cado roda em (nk + n lg(n=k)) de tempo nopior-caso. Baase 14]. 1i. Sedgewick 175]. ng tem o maximo de invers~es? Quantas? o c. 145. D^ um algoritmo que determina o numero de invers~es em qualquer pere o mutac~o sobre n elementos em (n lg n) de tempo no-pior-caso. 25] e Gonnet 90].18 ~ CAP TULO 1. 123]. e Wilf 201]. cada uma de comprimento k. 2.) a a a 1-3 Invers~es o Notas do cap tulo Existem muitos textos excelentes sobre o topico geral de algoritmos. Liste as cinco invers~es do vetor h2. 146]. Purdom e Brown 164]. Brassard e Bratley 33]. Reingold. podem ser ordenadas pela ordenac~o por inserc~o em (nk) de tempo no-pior-caso. Nievergelt. Que vetor com elementos do conjunto f1. a a b. 122. faz sentido usar a ordenac~o por inserc~o dentro da ordenac~o por a a a intercalac~o quando os subproblemas se tornam su cientemente pequenos. Em 1968. Se i < j e A i] > A j]. Knuth 121. o d. Cona sidere uma modi cac~o da ordenac~o por intercalac~o na qual n=k sublistas de a a a comprimento k s~o ordenadas usando a ordenac~o por inserc~o e ent~o intera a a a caladas usando o mecanismo padr~o de intercalac~o. 5]. (Suga est~o : Modi que a ordenac~o por intercalac~o. Mostre que as n=k sublistas. a. : : :. ent~o o a par (i. os fatores a a constantes na ordenac~o por inserc~o a tornam mais rapida para n pequeno. a a Portanto. 123]. Alguns dos aspectos mais praticos do desenho de algoritmos s~o a discutidos por Bentley 24. Mehlhorn 144. incluindo os de Aho. 3. Horowitz e Sahni 105]. onde k e um valor a ser a a determinado. O primeiro volume a . Manber 142]. e Deo 167]. Mostre que as sublistas podem ser intercaladas em (n lg(n=k)) de tempo no-pior-caso. o b. e Ullman 4. a a. c. 8. qual e o maior valor assintotico (notac ao ) de k como uma func~o de n para o qual o algoritmo modi cado tem o mesmo tempo de a execuc~o assintotico que a ordenac~o por intercalac~o padr~o? a a a a d. Como k deve ser escolhido na pratica? Seja A 1::n] um vetor de n numeros distintos. 6. 122. Qual e a relac~o entre o tempo de execuc~o da ordenac~o por inserc~o e o a a a a numero de invers~es no vetor de entrada? Justi que sua resposta. Knuth publicou o primeiro de tr^s volumes com o t tulo geral e A Arte de Programac~o de Computadores 121. j) e chamado de uma invers~o de A. Hopcroft.

introduzido por D. parece ter escrito um programa para ordenac~o por e a a intercalac~o no computador EDVAC em 1945.4. J. RESUMO 19 introduziu o estudo moderno de algoritmos de computadores com um foco sobre a analise do tempo de execuc~o. e a serie completa permanece como uma a refer^ncia envolvente e valorosa para muitos dos topicos apresentados aqui. a . L." um a matematico persa do seculo nono. A discuss~o de Knuth da ordenac~o por inserc~o engloba a a a a a diversas variac~es do algoritmo. A mais importante delas e o algoritmo de o Shell. um dos pioneiros da ci^ncia da computac~o. como aquela realizada aqui para a ordenac~o por inserc~o. Shell. a palavra \algoritmo" e derivada do nome \al-Khow^rizm^. e Ullman 4] advogaram a analise assintotica de algoritmos como um meio de comparar desempenho relativo. Aho. von Neumann. que usa a ordenac~o por inserc~o sobre suba a sequ^ncias periodicas da entrada para produzir um algoritmo de ordenac~o mais e a rapido. Hopcroft. Eles tambem popularizaram o uso de relac~es de recorr^ncia para descrever os tempos de execuc~o de algoo e a ritmos recursivos.1. Ele relembra que a a um intercalador mec^nico capaz de intercalar duas pilhas de cart~es perfurados a o em uma unica leitura foi inventado em 1938. Knuth 123] prov^ um tratamento enciclopedico de muitos algoritmos de e ordenac~o. See gundo Knuth. Sua comparac~o de algoritmos de ordenac~o (pagina 381) inclui a a a analises exatas de contagem-de-passos. Ordenac~o por intercalac~o tambem e descrita por Knuth.

INTRODUCAO .20 ~ CAP TULO 1.

Parte I Fundamentos Matematicos 21 .

.

e arvores. Esta organizada sobretudo para servir de refer^ncia. A maioria dos algoritmos o neste livro n~o requer probabilidade para sua analise. embora que essa prova possa ser deixada para depois sem preju zo. O restante do Cap tulo a e 2 e sobretudo uma apresentac~o de notac~o matematica. Muitas das formulas neste cap tulo podem ser encontradas em qualquer texto de calculo. O restante do cap tulo contem o o e de nic~es e propriedades de probabilidade basica. que usamos para analisar a ordenac~o e a por intercalac~o no Cap tulo 1 e que veremos muitas vezes novamente. O Cap tulo 2 de ne precisamente varias notac~es matematicas.Introduc~o a A analise de algoritmos frequentemente nos exige lancar m~o de um corpo de a ferramentas matematicas. combinac~es. s~o dados a a no Cap tulo 4. entretanto. Uma tecnica poderosa e o \metodo mestre. e volte a esta parte sempre que voc^ precisar de um melhor entendimento das e ferramentas utilizadas nas analises matematicas. Muito e a do Cap tulo 4 e dedicado a demonstrar a corretude do metodo mestre. Seu proposito e mais a a no sentido de assegurar que seu uso da notac~o combine com aquele usado neste a livro do que ensina-lo(a) novos conceitos matematicos. Nesse ponto. tais como resoluc~o de recorr^ncias. Esse material e essencial para um entendimento deste texto mas pode ser seguramente saltado se voc^ ja fez um e curso de matematica discreta. Esta parte do livro e um comp^ndio dos metodos e e e ferramentas que usaremos para analisar algoritmos. com um sabor tutorial para alguns topicos. A medida que voc^ vai lendo aqueles cap tulos. de modo a adquirir um conhecimento fundamental rme nas tecnicas matematicas. voc^ vai e querer estudar cada um desses cap tulo na sua totalidade. e portanto voc^ pode facila e mente omitir as ultimas sec~es do cap tulo numa primeira leitura. mas voc^ vai achar conveniente ter esses metodos compilados em um so lugar. o o o func~es. e a D^ uma olhada rapida nos cap tulos desta parte para ver qual material eles e cont^m. O Cap tulo 6 comeca com os princ pios elementares de contagem: permutac~es. O Cap tulo 3 oferece metodos para calcular e encontrar limitantes para somatorios. Esse cap tulo tambem da algumas propriedades o basicas de tais objetos matematicos. e Metodos para resolver recorr^ncias. e coisas do g^nero. Voc^ pode ent~o passar diretamente aos cap tulos que se concentram e e a em algoritmos. grafos. que ocorrem frequentemente na analise de algoritmos. ate mesmo o 23 . relac~es. O Cap tulo 5 contem de nic~es basicas e notac~es para conjuntos. mas outras. um exemplo o da qual e a notac~o que voc^ encontrou no Cap tulo 1. contudo." que pode ser usado para resolver recorr^ncias que surgem de algoritmos divis~o-e-conquista. a e podem ser novas para voc^. e Sugerimos que voc^ n~o tente digerir toda essa matematica de uma so vez. Algumas dessas ferramentas s~o t~o simples quanto a a algebra de curso secundario.

Mais tarde. voc^ vai achar o Cap tulo 6 e bem organizado para servir de refer^ncia. e .24 nem sequer passar uma vista nelas. quando voc^ encontrar uma e analise probabil stica que deseja entender melhor.

a medida que a entrada cresce sem fronteiras. que e usualmente a a 25 . a precis~o exa a a tra usualmente n~o vale o esforco de calcula-la.1 Notac~o assintotica a As notac~es que usamos para descrever o tempo de execuc~o assintotico de um o a algoritmo s~o de nidas em termos de func~es cujos dom nios s~o o conjunto a o a dos numeros naturais N = f0. Quando olhamos para tamanhos de entrada su cientemente grandes a ponto de fazer com que somente a ordem de crescimento do tempo de execuc~o seja a relevante. Usualmente. : ::g. cujo tempo de execuc~o no-pior-caso e de (n2 ). a tal qual zemos para a ordenac~o por inserc~o no Cap tulo 1. 2. Isto e. Este cap tulo estuda varios metodos padr~o para simpli car a analise assintotica a de algoritmos. e nalmente rea a a visamos o comportamento de func~es que comumente surgem na analise de o algoritmos. estamos estudando a e ci^ncia assintotica de algoritmos. a ordenac~o a por intercalac~o. 2. ese tamos preocupados com o quanto o tempo de execuc~o de um algoritmo cresce a com o tamanho da entrada no limite . 1. as constantes multiplicativas e os termos de baixa ordem de um tempo de execuc~o exato s~o dominados pelos efeitos do tamanho da entrada propriaa a mente dito. Tais notac~es s~o convenientes para o a descrever a func~o de tempo de execuc~o no-pior-caso T(n).Cap tulo 2 Crescimento de Func~es o A ordem de crescimento do tempo de execuc~o de um algoritmo. A proxima sec~o comeca de nindo diversos tipos de \notac~o a a assintotica. Uma vez que o tamanho da entrada n chega a ser su cientemente grande. Emba a a ora possamos as vezes determinar o tempo de execuc~o exato de um algoritmo. bate a a a ordenac~o por inserc~o. Para entradas su cientemente a grandes. com seu tempo de execuc~o no-pior-caso de (n lg n)." das quais ja vimos um exemplo em notac~o . Varias convenc~es a o de notac~o usadas em todo este livro s~o ent~o apresentadas. da uma caracterizac~o simples da e ci^ncia do algoritmo e tambem a e nos permite comparar o desempenho relativo de algoritmos alternativos. um algoritmo que e assintoticamente mais e ciente sera a melhor escolha para todos os casos exceto para entradas muito pequenas. de nida no a Cap tulo 1.

achamos que o tempo de execuc~o no-pior-caso da ordenac~o a a por inserc~o e T (n) = (n2 ). que f(n) seja n~o-negativo sempre que n for a a su cientemente grande. A Figura 2. e n0 tais que c1 n2 1 n2 3n c2 n2 2 para todo n n0. Embora (g(n)) seja um conjunto. E as vezes conveniente. A de nic~o de (g(n)) requer que todo membro de (g(n)) seja assintotia camente n~o-negativo. Certamente. Em outras palavras. para todo n n0. o No Cap tulo 1. CRESCIMENTO DE FUNCOES de nida apenas sobre tamanhos de entrada inteiros. mas veremos mais adiante nesta sec~o que ele tem suas vantaa gens. no entanto. abusar de notac~o assintotica de uma variedade de maneiras. entender o signi cado exato da notac~o de tal forma que a quando ela for abusada. Vamos justi car brevemente essa intuic~o usando a de nic~o fora a mal para mostrar que 1 n2 3n = (n2 ). c2. a inequac~o da esquerda pode ser satisfeita a para qualquer valor de n 7 escolhendo c1 1=14. Da . e n0 tal que 0 c1g(n) f(n) c2 g(n) para todo n n0g: Uma func~o f(n) pertence ao conjunto (g(n)) se existem constantes positia vas c1 e c2 tal que f(n) pode ser \imprensada" entre c1 g(n) e c2g(n). Essa suposic~o se veri ca tambem para a a as outras notac~es assintoticas de nidas neste cap tulo. escolhendo c1 = 1=14. Vamos de nir o que essa notac~o signi ca. a func~o f(n) e igual a g(n) dentro de um fator constante. onde a o f(n) = (g(n)). podemos veri car que 2 n2 3n = (n2 ). Dividindo por n2 da 1 3 c1 2 n c2. entretanto. Consequentemente. e n0 = 7. ou seja. Por a exemplo. a notac~o e facilmente estendida para o dom nio dos numeros reais a ou. introduzimos uma noc~o informal da notac~o que implia a cava em jogar fora termos de baixa ordem e ignorar os coe cientes do termo de alta ordem. ela n~o seja mal usada . temos que determinar 2 constantes positivas c1 . a Dizemos que g(n) e um limitante assintoticamente justo para f(n). 1 c2 = 1=2. a func~o g(n) propriamente dita a deve ser assintoticamente n~o-negativa. No Cap tulo 1. Esta sec~o introduz alguns a a abusos comuns. Notac~o a . restrita a um subconjunto dos numeros naturais. alternativamente. Para todos os valores de n a direita de n0. o valor de f(n) e igual ou maior que c1 g(n) e igual ou maior que c2 g(n). para n su cientemente grande.26 ~ CAP TULO 2. A inequac~o da direita pode ser satisfeita para qualquer valor de n 1 esa colhendo c2 1=2. ou \f(n) 2 (g(n)).1(a) da uma ilustrac~o intuitiva de func~es f(n) e g(n). escrevemos \f(n) = (g(n))" para indicar que f(n) e um membro de (g(n)). Para a a uma dada func~o g(n). Para fazer isso." Esse abuso da igualdade para designar pertin^ncia a conjunto pode a princ pio e parecer confuso. c2. designamos por (g(n)) o conjunto de func~es a o (g(n)) = ff(n) : existem constantes positivas c1 . E importante. Igualmente.

para qualquer polin^mio o P a p(n) = d=0 ai ni . os termos de mais baixa ordem de uma func~o assintota icamente positiva podem ser ignorados ao se determinar limitantes assintoticamente justos porque eles s~o insigni cantes para n grande. pois a notac~o e uma noc~o mais forte que a notac~o O. onde os ai s~o constantes e ad > 0. c2 = 7a=4. b. o que n~o e poss vel acontecer para n a a arbitrariamente grande.1. a Suponha para efeito de contradic~o que c2 e n0 existem tal que 6n3 c2 n2 a para todo n n0. Essa ultima notac~o e um pea a queno abuso.~ 2. Escrita sob o ponto de a a a 1 O problema real e que nossa notac~o usual para func~es n~o distingue func~es de seus a o a o valores. Por conseguinte. e c s~o constantes e a > 0. para a a dentro de um fator constante. Como exemplo. Uma frac~o a a minuscula do termo de mais alta ordem e su ciente para dominar os termos de mais baixa ordem. NOTACAO ASSINTOTICA 27 outras escolhas para as constantes existem. func~o diferente pertencente a (n a Podemos tambem usar a de nic~o formal para veri car que 6n3 6= (n2 ). colocando c1 como um valor que seja um pouco menor que o coe ciente do termo de mais alta ordem e colocando c2 como um valor que seja um pouco maior permite que as desigualdades na de nic~o da notac~o sejam satisfeitas. Jogando fora os termos de a mais baixa ordem e ignorando as constantes da f(n) = (n2 ). mas o que importa e que alguma escolha exista.1 a Frequentemente usaremos a notac~o (1) para indicar uma constante ou uma a func~o constante com respeito a alguma variavel. Em geral. Observe que f(n) = (g(n)) implica que f(n) = O(g(n)). temos p(n) = (nd ) (veja i Problema 2-1). usamos a notac~o O. pois ele apenas modi ca c1 e c2 por um fator constante igual ao coe ciente. ou (1). entretanto. considere uma func~o quadratica qualquer f(n) = an2 + a bn + c. No -calculo. para mostrar a mesma coisa. e n0 tal que 0 f(n) cg(n) para todo n n0g: Usamos notac~o O para dar um limitante superior sobre uma func~o. Mas ent~o n c2 =6. Intuitivamente. o valor de uma func~o a a f(n) esta no grafo de g(n) ou abaixo dele. Adotar uma notac~o rigorosa. A Figura 2. (jcj=a)). onde a. pois c2 e constante. uma a 1 2 ) usualmente pediria constantes diferentes. tomamos as constantes c1 = a=4. e portanto optamos por tolerar o abuso. entretanto. Formalmente. ou mesmo r:r2.1(b) mostra a intuic~o por tras da a notac~o O. O coe ciente do termo de mais alta a a ordem pode igualmente ser ignorado. porque n~o esta claro qual variavel tende ao in nito. a A notac~o limita assintoticamente uma func~o por cima e por baixo. Observe que essas constantes dependem da func~o 2 n2 3n. denotamos por O(g(n)) o conjunto de func~es a o O(g(n)) = ff(n) : existem constantes positivas c. Para indicar que uma func~o f(n) e um membro de O(g(n)). os par^metros para uma func~o s~o claramente especi cados: a func~o a a a a n2 poderia ser escrita n:n2 . Para todos os valores de n a direita de n0. Quando a a temos apenas um limitante assintotico superior. Para a uma dada func~o g(n). podemos expressar o qualquer func~o constante como (n0 ). Como qualquer constante e um polin^mio de grau 0. escrevemos a f(n) = O(g(n)). O leitor pode veri car que 0 c1 n2 an2 + bn + c c2n2 para todo n n0 . p e n0 = 2 max((jbj=a). o Notac~o O a . a complicaria manipulac~es algebricas.

isto e. a a Distinguir limitantes assintoticos superiores de limitantes assintoticamente justos tem se tornado padr~o na literatura sobre algoritmos. a estrutura de laco duplamente aninhado do algoritmo de ordenac~o por inserc~o do Cap tulo 1 imediatamente da um limitante superior a a de O(n2 ) sobre o tempo de execuc~o no-pior-caso: o custo do laco interno e a limitado por cima por O(1) (constante). designamos por (g(n)) o conjunto de func~es a o (g(n)) = ff(n) : existem constantes positivas c. o tempo de execuc~o n~o e bem a a uma func~o de n. e o laco interno e executado no maximo uma vez para cada um dos n2 pares de valores para i e j. o tempo de execuc~o para a aquele conjunto de entradas e O(n2). O a limitante (n2 ) para o tempo de execuc~o da ordenac~o por inserc~o no-piora a a caso. Para uma a a e dada func~o g(n). a ordenac~o por inserc~o roda num a a tempo (n). Por exemplo. entretanto. por exemplo. Por exemplo. Por cona seguinte. podemos frequentemente descrever o tempo de exa ecuc~o de um algoritmo meramente inspecionando a estrutura geral do algoa ritmo. pois para um dado n. O que queremos dizer quando a rmamos que \o tempo de a execuc~o e O(n2 )" e que o tempo de execuc~o no-pior-caso (que e uma func~o a a a de n) e O(n2). a Usando a notac~o O. que e facilmente veri cado tomando-se c = a + jbj e n0 = 1. por implicac~o tambem a a cotamos o tempo de execuc~o do algoritmo para entradas arbitrarias. pertence a a (n2 ) tambem mostra que qualquer func~o quadratica pertence a O(n2 ). o tempo real de execuc~o depende a a da entrada espec ca de tamanho n. os ndices i e j s~o ambos no maximo a n. quando a usamos para coa tar o tempo de execuc~o de um algoritmo no-pior-caso. O a que pode ser mais surpreendente e que qualquer func~o linear an + b pertence a a O(n2). onde a > 0. CRESCIMENTO DE FUNCOES vista de teoria dos conjuntos. Por conseguinte. o que de nimos usando a notac~o . Na literatura.28 ~ CAP TULO 2. a notac~o a O e as vezes usada informalmente para descrever limitantes assintoticamente justos. sem qualquer reivindicac~o sobre o qu~o justo como limitante superior ele e. Alguns leitores que tenham visto antes a notac~o O podem achar estranho a que tenhamos que escrever. a notac~o prov^ um limitante assintotico inferior . ou equivalentemente. estamos meramente reivindicando que algum multiplo constante de g(n) e um limitante assintotico superior para f(n). a quando escrevemos f(n) = O(g(n)). temos (g(n)) O(g(n)). e um abuso dizer que o tempo de execuc~o da ordenac~o a a por inserc~o e O(n2). nossa prova de que qualquer func~o quadratica an2 + bn + c. n~o implica em um limitante (n2 ) para o tempo de execuc~o a a da ordenac~o por inserc~o para toda entrada. n = O(n2). Tecnicamente. Isto e. o limitante O(n2) para o tempo de execuc~o da ordenac~o por inserc~o a a a no-pior-caso tambem se aplicaa seu tempo de execuc~o para toda entrada. Notac~o a Assim como a notac~o O prov^ um limitante assintotico superior para uma a e func~o. vimos no Cap tulo a a 1 que quando a entrada ja esta ordenada. entretanto. Como a notac~o O descreve um limitante superior. Neste livro. e n0 tal que 0 cg(n) f(n) para todo n n0 g: . independentemente da entrada espec ca de tamanho n seja escolhida para cada valor de n.

" Poder amos a tambem escrever 2n2 + 3n + 1 = 2n2 + (n). por implicac~o tambem estabelecemos um limitante para o tempo de exa ecuc~o do algoritmo para entradas arbitrarias. esses limitantes s~o assintoticamente a a t~o justos quanto poss vel: por exemplo. Para todos a a os valores n a direita de n0. quando a notac~o assintotica a aparece em uma formula. normalmente usamos o teorema para provar limitantes assintoticos justos a partir dos limitantes assintoticos superior e inferior. queremos dizer que independentemente de qual entrada espec ca de tamanho n seja escolhida para cada valor de n. escrevemos \n = O(n2 ). a a a O tempo de execuc~o da ordenac~o por inserc~o esta portanto entre (n) a a a e O(n2).1 para obter limitantes assintoticos superior e inferior a partir de limitantes assintoticos justos. onde f(n) a alguma func~o a no conjunto (n). A partir das de nic~es das notac~es assintoticas que vimos ate agora. Nesse caso. onde a > 0.1-5). como zemos para esse exemplo. pois exist a a a uma entrada que faz com que o algoritmo leve um tempo (n2). Por exemplo. o que implica que o a a a tempo de execuc~o da ordenac~o por inserc~o e (n). ao inves de usar o Teorema 2. pois a ordenac~o por inserc~o roda num tempo (n) a a a a quando a entrada ja esta ordenada. Quando dizemos que o tempo de execuc~o (sem adjetivo ou complemento) de um algoritmo a e (g(n)).1 Para quaisquer duas func~es f(n) e g(n). no entanto. Na pratica. Como devemos interpretar tais formulas? Quando a notac~o assintotica esta sozinha no lado direito de uma equac~o. ao introduzir a notac~o O.~ 2. quando a usamos para a estabelecer um limitante para o tempo de execuc~o de um algoritmo no-melhora caso. dizer que o a tempo de execuc~o da ordenac~o por inserc~o no-pior-caso e (n2). Ja vimos como a notac~o assintotica pode ser usada em formulas matematicas. Como exemplo da aplicac~o desse teorema. o tempo de execuc~o da ordenac~o a a a por inserc~o n~o e (n2). o tempo de execuc~o para a aquele conjunto de entradas e no m nimo uma constante vezes g(n). Por exemplo. a a como em n = O(n2 ). Notac~o assintotica em equac~es a o . NOTACAO ASSINTOTICA 29 A intuic~o por tras da notac~o e mostrada na Figura 2. a formula 2n2 + 3n + 1 = o a 2n2 + (n) signi ca que 2n2 + 3n + 1 = 2n2 + f(n). f(n) = (g(n)) se e somente se o f(n) = O(g(n)) e f(n) = (g(n)). a Por exemplo. o tempo de exa ecuc~o da ordenac~o por inserc~o no-melhor-caso e (n). o valor de f(n) esta sobre o grafo de g(n) ou acima. f(n) = 3n + 1. entretanto. Teorema 2. Alem do mais. Em geral.1(c). para n su cientemente grande. que e de fato (n). a interpretamos como representando alguma func~o a an^nima que n~o cuidamos em nomear. e facil o o demonstrar o seguinte teorema importante (veja Exerc cio 2. Como a notac~o descreve um limitante inferior. nossa demonstrac~o de que a a an2 + bn + c = (n2 ) para quaisquer constantes a.1. N~o e contraditorio. ja de nimos que o sinal de igualdade signi ca pertin^ncia e a um conjunto: n 2 O(n2 ). b e c. pois ele se situa em algum lugar entre uma func~o linear de n e uma a func~o quadratica de n. imediatamente implica que an2 + bn + c = (n2 ) e que an2 + bn + c = O(n2).

Em outras palavras. O numero de func~es an^nimas em uma express~o e entendido como sendo o o a igual ao numero de vezes que uma notac~o assintotica aparece. n~o a ha raz~o para especi car exatamente todos os termos de baixa ordem. Por exemplo. que e o que o encadeamento de equac~es intuitivamente o nos da. existe alguma func~o h(n) 2 (n2 ) a tal que 2n2 +g(n) = h(n) para todo n. . Por exemplo. a na express~o a n X i=1 O(i). Note que essa interpretac~o implica que a 2n2 + 3n + 1 = (n2 ). que n~o tem exatamente a a uma interpretac~o limpa. A primeira a equac~o diz que existe alguma func~o f(n) 2 (n) tal que 2n2 + 3n + 1 = a a 2n2 + f(n) para todo n. existe alguma a func~o g(n) 2 (n2 ) tal que 2n2 +f(n) = g(n) para todo n. CRESCIMENTO DE FUNCOES Usando a notac~o assintotica dessa maneira pode ajudar a eliminar detalhes a inessenciais e notac~o desnecessaria em uma equac~o. a Em alguns casos. Interpretamos tais equac~es usando a seguinte regra: Independentemente de o como as func~es an^nimas seja escolhidas no lado esquerdo do sinal de igualo o dade. a o lado direito de uma equac~o prov^ um n vel mais grosseiro de detalhe que o a e lado esquerdo. existe apenas uma unica func~o an^nima (uma func~o de i). ele s~o a a todos entendidos como sendo inclu dos na func~o an^nima denotada pelo termo a o (n). existe uma maneira de escolher as func~es an^nimas do lado direito do o o sinal de igualdade de modo a tornar a equac~o valida . no Cap tulo a a 1 expressamos o tempo de execuc~o da ordenac~o por intercalac~o no-pior-caso a a a como a recorr^ncia e T(n) = 2T(n=2) + (n). Por conseguinte.30 ~ CAP TULO 2. Essa express~o a o a a n~o e portanto a mesma que O(1) +O(2) +: : :+O(n). o signi a cado de nosso exemplo e que para qualquer func~o f(n) 2 (n). a notac~o assintotica aparece no lado esquerdo de uma a equac~o. A segunda equac~o diz que para qualquer func~o a a g(n) 2 (n) (tal qual a f(n) ja mencionada). tal qual em a 2n2 + (n) = (n2 ). Uma boa quantidade de tais relacionamentos podem ser encadeados. Se estamos interessados apenas no comportamento assintotico de T (n). tal como em 2n2 + 3n + 1 = 2n2 + (n) = (n2 ): Podemos interpretar cada equac~o separadamente pela regra acima.

a de nic~o a a a neste livro tambem restringe as func~es an^nimas as assintoticamente n~oo o a negativas. na notac~o o a func~o a a f(n) torna-se insigni cante em relac~o a g(n) a medida que n se aproxima do a in nito. mas o limitante 2n = O(n2) n~o o e.1. porem 2n2 6= o(n2 ). assuma que f(n) e g(n) s~o assino a . Usamos a notac~o o para designar um limitante a a superior que n~o e assintoticamente justo. existe uma constante n0 > 0 tal que 0 f(n) cg(n) para todo n n0g: Por exemplo. Isto e. de nimos !(g(n)) (\pequeno omega de g de n") como sendo o conjunto !(g(n)) = ff(n) : para qualquer constante positiva c > 0. a notac~o ! esta para a notac~o assim como a notac~o o esta a a a para a notac~o O. o limitante 0 f(n) cg(n) se veri ca para alguma constante c > 0. porem em f(n) = o(g(n)). NOTACAO ASSINTOTICA 31 O limitante assintotico superior fornecido pela notac~o O pode ou n~o ser assa a intoticamente justo. Para o que segue. As de nic~es da notac~o O e da notac~o o s~o semelhantes. isto e. O limitante 2n2 = O(n2 ) e assintoticamente justo. n2 =2 = !(n). Usamos a notac~o ! para designar um limitante inferior que a a n~o e assintoticamente justo. Comparac~o de func~es a o Muitas das propriedades relacionais dos numeros reais aplicam-se tambem a comparac~es assintoticas. Intuitivamente. f(n) torna-se arbitrariamente grande em relac~o a a g(n) a medida que n se aproxima de in nito. existe uma constante n0 > 0 tal que 0 cg(n) f(n) para todo n n0 g: Por exemplo. A relac~o f(n) = !(g(n)) a implica que lim f(n) = 1. A principal o a a a diferenca e que em f(n) = O(g(n)). n!1 g(n) Alguns autores usam esse limite como uma de nic~o da notac~o o. Uma maneira de de n -lo e atraves de a f(n) 2 !(g(n)) se e somente se g(n) 2 o(f(n)). porem n2=2 6= !(n2 ). o limitante 0 f(n) cg(n) se veri ca para todas as constantes c > 0. entretanto. Formalmente de nimos o(g(n)) (\pea queno `o' de g de n") como o conjunto o(g(n)) = ff(n) : para qualquer constante positiva c > 0. Notac~o o a Notac~o ! a Por analogia. n!1 g(n) se o limite existe.~ 2. 2n = o(n2 ). Formalmente. lim f(n) = 0.

nem todas as func~es s~o assintoticamente comparaveis. as func~es n e n1+sin n n~o podem ser comparadas usando notac~o o a a assintotica. f(n) = o(g(n)) se e somente se g(n) = !(f(n)): Devido ao fato de que essas propriedades se veri cam para notac~es assintoticas.2) . (n + a)b = (nb ). a Mostre que para quaisquer constantes reais a e b. Isto e.32 toticamente positivas. f(n) = (h(n)). para duas func~es f(n) e o a o g(n). Usando a de nic~o o a a basica da notac~o . f(n) = o(g(n)) a < b. o Embora quaisquer dois numeros reais possam ser comparados. n~o se transporta para a a notac~o assintotica: a Simetria Transposta: Tricotomia: Para dois numeros reais quaisquer a e b. onde b > 0. pois o valor do expoente em n1+sin n oscila entre 0 e 2. no entanto. f(n) = (g(n)) a = b. CRESCIMENTO DE FUNCOES f(n) = (g(n)) f(n) = O(g(n)) f(n) = (g(n)) f(n) = o(g(n)) f(n) = !(g(n)) e e e e e g(n) = (h(n)) g(n) = O(h(n)) g(n) = (h(n)) g(n) = o(h(n)) g(n) = !(h(n)) implica implica implica implica implica f(n) = (h(n)). f(n) = (g(n)) a b. f(n) = !(g(n)) a > b: Uma propriedade dos numeros reais. f(n) = O(h(n)). o pode-se fazer uma analogia entre a comparac~o assintotica de duas func~es f e a o g e a comparac~o de dois numeros reais a e b: a f(n) = O(g(n)) a b. Exerc cios 2.1-1 2. a = b. ~ CAP TULO 2. g(n)) = (f(n) + g(n)). demonstre que max(f(n).1-2 Sejam f(n) e g(n) func~es assintoticamente n~o-negativas. f(n) = !(h(n)): Transitividade: Re exividade: Simetria: f(n) = (f(n)). f(n) = o(h(n)). f(n) = (f(n)): f(n) = (g(n)) se e somente se g(n) = (f(n)): f(n) = O(g(n)) se e somente se g(n) = (f(n)). tomando todos os valores no intervalo. pode ser o caso que nem f(n) = O(g(n)) nem f(n) = (g(n)) se veri que. Por exemplo. ou a > b. (2. exatamente uma das seguintes condic~es deve se veri car: a < b. f(n) = O(f(n)).

a 2n+1 = O(2n)? 22n = O(2n)? 2.1-8 Demonstre que o(g(n)) \ !(g(n)) e o conjunto vazio. ela e monotonicamente decrescente se m n implica f(m) f(n). m).2. Semelhantemente. Ilustra tambem o uso das notac~es assintoticas.1-7 2. m) para todo n n0 e m m0 g: D^ as de nic~es correspondentes para (g(n. m)) = ff(n. Para qualquer numero real x. Podemos estender nossa notac~o para o caso de dois par^metros n e m que a a podem chegar a um valor in nito independentemente e a taxas diferentes. m)) o conjunto de func~es a o O(g(n. o o Uma func~o f(n) e monotonicamente crescente se m n implica f(m) a f(n). m) : existem constantes positivas c. n0. Para todo real x. .~ ~ ~ 2. Uma func~o f(n) e estritamente crescente se m < n a implica f(m) < f(n) e estritamente decrescente se m > n implica f(m) > f(n).1-3 2.1. e o 2.1-5 2. x 1 < bxc x Monotonicidade Pisos e tetos dxe < x + 1. NOTACOES PADRAO E FUNCOES USUAIS 33 2. m) cg(n." n~o tem conteudo. designamos o maior inteiro menor ou igual a x por bxc (leia \o piso de x") e o menor inteiro maior ou igual a x por dxe (leia \o teto de x"). 2.1-4 Explique por que o enunciado \O tempo de execuc~o do algoritmo A e pelo a menos O(n2 ).2 Notac~es padr~o e func~es usuais o a o Esta sec~o rev^ algumas func~es e notac~es matematicas padr~o e explora as a e o o a relac~es entre elas. Para uma dada func~o g(n. designamos por O(g(n. e m0 tais que 0 f(n. m)). Demonstre que o tempo de execuc~o de um algoritmo e (g(n)) se e somente a se seu tempo de execuc~o no-pior-caso e O(g(n)) e seu tempo de execuc~o noa a melhor-caso e (g(n)).1-6 Demonstre o Teorema 2. m)) e (g(n.

a func~o na e monotonicamente decrescente.4) Polin^mios o d X i=0 Dado um inteiro positivo d. temos as seguintes igualdades: a0 = 1. um polin^mio em n de grau d e uma func~o o a p(n) da forma ai ni . Para o qualquer constante real a 0. Para todos os reais a 6= 0. e para qualquer inteiro n e inteiros a 6= 0 e b 6= 0.5) do qual podemos concluir que nb = o(an ). Para um o polin^mio assintoticamente positivo p(n) de grau d. a func~o na e monotonicamente crescente. o a (2. a o que e equivalente a dizer que f(n) = O(nk ) para alguma constante k (veja Exerc cio 2. a o Um polin^mio e assintoticamente positivo se e somente se ad > 0. ad s~o os coe cientes do polin^mio e ad 6= 0. am an = am+n : Para todo n e todo a 1. e n. a func~o an e monotonicamente crescente em n. As taxas de crescimento de polin^mios e exponenciais podem ser relacionadas o pelo seguinte fato. a Quando conveniente. (a (am )n = (an )m . a1. b lim n n!1 an Exponenciais = 0. a1 = a. e para a qualquer constante real a 0. (2. p(n) = onde as constantes a0. ~ CAP TULO 2.34 Para qualquer inteiro n. a Dizemos que uma func~o f(n) e polinomialmente limitada se f(n) = nO(1) . Para todas as constantes reais a e b tais que a > 1.3) (2. m )n = amn . : : :. m. temos p(n) = (nd ). CRESCIMENTO DE FUNCOES dn=2e + bn=2c = n.2-2). . ddn=ae=be = dn=abe bbn=ac=bc = bn=abc As func~es de piso e teto s~o monotonicamente crescentes. a 1 = 1=a. assumiremos que 00 = 1.

a aproximac~o de ex por 1 + x e bastante boa: a ex = 1 + x + (x2 ). de tal forma que lg n + k a signi cara (lg n) + k e n~o lg(n + k). Quando jxj a aproximac~o a 1 + x ex 1 + x + x2 . x n lim 1 + n = ex . lgk n = (lg n)k (exponenciac~o). ln n = loge n (logaritmo natural). o Usando e para designar 2. qualquer func~o exponencial cresce mais rapido que qualquer a polin^mio. a lg lg n = lg(lg n) (composic~o): a Uma convenc~o notacional importante que adotaremos e que func~es logar tmicas a o ser~o aplicadas apenas ao termo seguinte na formula . onde a igualdade se veri ca apenas quando x = 0.9) logc b logb(1=a) = logb a. 1 logb a = log b . (2.8) (Nessa equac~o. a temos que para todo real x. temos a desigualdade 1 ex 1 + x. Para n > 0 e b > 1. b > 0. Quando x ! 0. logb an = n logb a. (2. e n a = blogb a . c > 0. temos (2. NOTACOES PADRAO E FUNCOES USUAIS 35 Por conseguinte. Para todos os reais a > 0. 71828 : : :. n!1 Usaremos as seguintes notac~es: o lg n = log2 n (logaritmo binario). logc (ab) = logc a + logc b.2.~ ~ ~ 2.6) 2! 3! i! i=0 onde \!" denota a func~o fatorial de nida mais adiante nesta sec~o.7) 1. (2. X i 2 3 ex = 1 + x + x + x + : : : = x . a notac~o assintotica e usada para descrever o comportamento a a no limite a medida que x ! 0 ao inves de x ! 1. Para todo a a real x. a base da func~o de logaritmo natural.) Temos que para todo x. logb a = logc a . a alogb n = nlogb a : Logaritmos . a func~o logb n e a a estritamente crescente.

podemos concluir que lgb n = o(na ) para qualquer constante a > 0.36 ~ CAP TULO 2. A aproximac~o de Stirling . Um limitante superior fraco para a func~o fatorial e n! nn. a n p 1 n! = 2 n n 1+ n . resultando em a b b lim lg lgn = nlim lg an = 0: n n!1 2a !1 n Desse limite. (2. a Fatoriais A notac~o n! (leia \n fatorial") e de nida para inteiros n 0 da seguinte forma a n! = 1 (n 1)! se n = 0.11) e onde e e a base do logaritmo natural. n! = !(2n). n se n > 0: Por conseguinte. nos da um limitante superior mais justo. Cientistas da computac~o acham o 2 a a a base mais natural para logaritmos porque muitos algoritmos e estruturas de dados envolvem dividir um problema em duas partes. qualquer func~o polinomial a positiva cresce mais rapido que qualquer func~o polilogar tmica. Por conseguinte.5). Usando a aproximac~o de Stirling. lg(n!) = (n lg n): Os seguintes limitantes tambem se veri cam para todo n: . onde a igualdade se veri ca apenas para x = 0. pois cada um a dos n termos no produto fatorial e no maximo n. Ha uma expans~o simples em serie para ln(1 + x) quando jxj < 1: a 3 4 5 2 ln(1 + x) = x x + x x + x : : : . e tambem um limitante inferior. usaremos frequentemente a notac~o \lg n" quando n~o queremos dar import^ncia a fatores cona a a stantes. n! = 1 2 3 n. Dizemos que uma func~o f(n) e polilogaritmicamente limitada se f(n) = a lgO(1) n. pode-se a demonstrar que n! = o(nn).10) 1 + x ln(1 + x) x. CRESCIMENTO DE FUNCOES Como a mudanca de base de um logaritmo de uma constante para outra apenas muda o valor do logaritmo por um fator constante. como por exemplo na notac~o O. 2 3 4 5 Temos tambem as seguintes desigualdades para x > 1: x (2. Podemos relacionar o crescimento de polin^mios e polilogaritmos subo stituindo n por lg n e a por 2a na equac~o (2.

cada numero de Fibonacci e a soma dos dois numeros anteriores.~ ~ ~ 2. p 1 5 2 0. lg 16 = 3. inde nido se i > 0 e lg(i 1) n 0 ou lg(i 1) n for inde nido: Assegure-se de distinguir lg(i) n (a func~o logaritmo aplicada i vezes em cadeia. 34. ::: . O logaritmo iterado e uma func~o que cresce muito lentamente: a lg 2 = 1. 3. 61803:::. que s~o dados pela seguintes formulas: a = = ^ = = 1+ 5 2 1. A func~o logaritmo iterado e de nida como e a lg n = min i 0 : lg(i) n 1 .8. lg 65336 = 4. Os numeros de Fibonacci est~o relacionados com a raz~o dourada a a seu conjugado ^.13) Fi = Fi 1 + Fi 2 para i 2: Por conseguinte. raramente encontramos um valor de n tal que lg n > 5. resultando na sequ^ncia e 0. n o A func~o logaritmo iterado a Numeros de Fibonacci Os numeros de Fibonacci s~o de nidos pela seguinte recorr^ncia: a e F0 = 0. 1. 2. 1.5.14) . 13. 61803:::: e ao p (2. que e muito menos que 265336. lg (265336) = 5: Como o numero de atomos no universo observavel esta estimado em cerca de 1080. que e de nido como segue. a comecando com o argumento n) de lgi n (o logaritmo de n elevado a i-esima pot^ncia). lg 4 = 2. 55.12) p n n+(1=12n) p n! 2 n n 2 n n e e Usamos a notac~o lg n (leia \log asterisco de n") para designar o logaritmo a iterado. NOTACOES PADRAO E FUNCOES USUAIS 37 (2. Suponha que a func~o lg(i) n seja de nida a recursivamente para inteiros n~o-negativos i da seguinte forma a 8 se i = 0. (2.2. 21. < n lg(i) n = : lg(lg(i 1) n) se i > 0 e lg(i 1) n > 0. F1 = 1.

temos i ^i (2. a 2.15) Fi = p .2-7 Qual das duas e assintoticamente maior: lg(lg n) ou lg (lg n)? Prove por p ao que o i-esimo numero de Fibonacci satisfaz a igualdade Fi = induc~ a ( i ^i )= 5.2-8 Demonstre que para i 0. Como j ^j < 1. Mostre que se f(n) e g(n) s~o func~es monotonicamente crescentes.2-2 2.38 ~ CAP TULO 2. de modo que o i-esimo numero de Fibonacci Fi e p igual a i = 5 arredondado para o inteiro mais proximo. 2. a Use a de nic~o da notac~o O para mostrar que T(n) = nO(1) se e somente se a a existe uma constante k > 0 tal que T (n) = O(nk ). ent~o tambem a o a o s~o as func~es f(n) + g(n) e f(g(n)). CRESCIMENTO DE FUNCOES Especi camente. onde e a raz~o de ouro e ^ seu conjugado. 5 que podep demonstrado por induc~o (Exerc cio 2. Por conseguinte. o (i + 2)-esimo numero de Fibonacci satisfaz Fi+2 i.2-5 ? A func~o dlg ne! e polinomialmente limitada? A func~o dlg lg ne! e polinomiala a 2.2-7).2-1 2. Exerc cios 2. e se f(n) e g(n) s~o alem disso n~oa o a a negativas.9).2-6 ? 2.2-3 Demonstre a equac~o (2. ent~o f(n) g(n) e monotonicamente crescente. temos ser p a que j ^ij= 5 < 1= 5 < 1=2.2-4 Demonstre que lg(n!) = (n lg n) e que n! = o(nn ). os numeros de Fibonacci crescem exponencialmente. Problemas Seja 2-1 Comportamento assintotico de polin^mios o . mente limitada? 2.

lg(lg nn) n!n (lg n)! 2lg n ( 2)lg n n2 2n 3 3 n lg lg(n!) 22 n1= lg n 2 n nlg lg n ln lnn lg n n 2 ln n p 1 n 2lg n (lg n)lg n en 4lg n (n + 1)! lg+1 p n 2n n lg n 22n lg (lg n) 2 2 lg n b. para cada par de express~es (A. B) na tabela abaixo. Particione sua lista em classes de equival^ncia tais que f(n) e g(n) estejam na mesma classe se e somente e se f(n) = (g(n)). Se k = d. Assuma que k 1. isto e. a b. o !. D^ um exemplo de uma unica func~o n~o-negativa f(n) tal que para todas e a a as func~es gi(n) na parte (a). ou de B. : : :. > 0. Se k d. encontre um arranjo g1 . Prove ou d^ um contrao e exemplo para cada uma das seguintes conjecturas.2. g30 das func~es satisfazendo o g1 = (g2 ). f(n) nem seja O(gi(n)) nem (gi (n)). g2. ent~o p(n) = (nk ). a Indique. Estabeleca uma hierarquia entre as seguintes func~es por ordem de crescio mento. o o a. a O o ! A B a. lgk n n b. Sua resposta a deve no formato da tabela com \sim" ou \n~o" escrito em cada quadradinho. um polin^mio em n. onde k seja uma constante. e c > 1 s~o constantes. ent~o p(n) = !(nk ). ent~o p(n) = o(nk ). ent~o p(n) = (nk ). : : :. n mlg n f. Se k d. g2 = (g3 ). Se k < d. o Sejam f(n) e g(n) func~es assintoticamente positivas.~ ~ ~ 2. NOTACOES PADRAO E FUNCOES USUAIS p(n) = d X i=0 ad > 0. ent~o p(n) = O(nk ). 2n 2n=2 lg m e. a d. . pk n cn sin n c. a c. o. se A e O. n n d. p 2-4 Propriedades das notac~es assintoticas o . lg(n!) lg(nn) 2-2 Crescimentos assintoticos relativos 2-3 Ordenando por taxas de crescimento assintotico a. e suponha que o 39 aini . g29 = (g30 ). Se k > d. Use as de nic~es das notac~es assintoticas para provar as seguintes propriedades. a e.

Dizemos que f(n) = O0 (g(n)) se e somente a se jf(n)j = O(g(n)). c. 2-5 Variac~es sobre O e o 2-6 Func~es iteradas o O operador de iterac~o \ " usado na func~o lg pode ser aplicado a func~es a a o monotonicamente crescentes sobre os reais. f(n) = O(g(n)) implica g(n) = O(f(n)). a. f(n) = (f(n=2)). a b. h. b. f(n) = O(g(n)) implica lg(f(n)) = O(lg(g(n))). de nimos a func~o f (i) recursivamente para inteiros n~o-negativos a a por f (i) (n) = f(f (i 1) (n)) se i > 0. a enquanto que isso n~o e verdade se usarmos no lugar de 1 . onde lg(g(n)) > 0 e f(n) 1 para todo n su cientemente grande. g(n))). n se i = 0: . a Alguns autores tambem de nem O de uma maneira um pouco diferente. Alguns autores de nem de uma maneira um pouco diferente da que de nimos. O que acontece com cada uma das direc~es do \se e somente se" no Teorema o 2. g. f(n) = O(g(n)) implica g(n) = (f(n)). Descreva as poss veis vantagens e desvantagens de se usar 1 ao inves de para caracterizar os tempos de execuc~o de programas.1 segundo essa nova de nic~o? a ~ Alguns autores de nem O (leia \oh-suave") para signi car O com fatores logar tmicos ignorados: ~ O(g(n)) = ff(n) : existem constantes positivas c. f(n) + g(n) = (min(f(n). f(n) = O(g(n)) implica 2f (n) = O(2g(n).40 ~ CAP TULO 2. vamos usar 1 (leia \^mega in nito") para essa de nic~o alternativa. d. CRESCIMENTO DE FUNCOES a. d. e n0 tais que 0 f(n) cg(n) lgk n para todo n n0 g. f(n) + o(f(n)) = (f(n)). vamos usar O0 para a de nic~o alternativa. ou f(n) = O(g(n)) ou f(n) = 1 (g(n)) ou ambos.1. De na ~ e ~ . k. f. Demonstre o analogo correspondente do Teorema 2. Dizemos o a que f(n) = 1 (g(n)) se existe uma constante positiva c tal que f(n) cg(n) 0 para um numero in nito de inteiros n. c. Para uma func~o f satisfazendo a f(n) < n. Mostre que para quaisquer duas func~es f(n) e g(n) que sejam assintoticao mente n~o-negativas. f(n) = O((f(n))2 ). e.

Landau em 1909 para sua discuss~o da distribuic~o dos numeros primos.~ ~ ~ 2. o embora as diversas de nic~es est~o de acordo na maioria das situac~es. a a As notac~es e foram advogadas por Knuth 124] para corrigir a pratica o popular. 41 que n~o precisa estar bem de nida em todos os casos. a fc f(n) c a. desde que seus valores absolutos sejam apropriadamente limitados. na literatura de se usar a notac~o a O para ambos os limitantes superior e inferior. n1=3 2 h. a a quantidade fc (n) e o numero de aplicac~es iteradas da func~o f necessarias o a para reduzir seu argumento para c ou menos. e a . Para cada uma das seguintes func~es f(n) e constantes c. Muitas pessoas continuam a usar a notac~o O onde a notac~o e tecnicamente mais precisa. Outras propriedades das func~es matematicas elementares podem ser encono tradas em qualquer refer^ncia matematica boa. NOTACOES PADRAO E FUNCOES USUAIS Para uma dada constante c 2 R. pn 1 g. Nem todos os autores de nem as notac~es assintoticas da mesma maneira. tal como Abramowitz e Stegun e 1] ou Beyer 27]. de nimos a func~o iterada fc por a fc (n) = minfi 0 : f (i) (n) cg. Maiores a a discuss~es sobre a historia e o desenvolvimento das notac~es assintoticas podem o o ser encontradas em Knuth 121. n=2 2 e . Algumas o a o das de nic~es alternativas abrangem func~es que n~o s~o assintoticamente n~oo o a a a negativas. ou num livro de calculo. Bachmann em 1892. A notac~o o foi inventada a por E. como por exemplo Apostol 12] ou Thomas e Finney 192]. n 1 0 c. n=2 1 d. Em outras palavras. Knuth 121] contem uma riqueza de material sobre matematica discreta tal qual utilizada em ci^ncia da computac~o. d^ um limitante o e t~o justo quanto poss vel para fc (n). n= lg n 2 Notas do cap tulo Knuth 121] recupera a origem da notac~o O a partir de um texto em teoria a dos numeros de autoria de P. lg n 1 b. porem tecnicamente desajeitada.124] e Brassard e Bratley 33]. pn 2 f .2.

42 ~ CAP TULO 2. CRESCIMENTO DE FUNCOES .

Se n = 0. Por exemplo.Cap tulo 3 Somatorios Quando um algoritmo contem instruc~es iterativas de controle tais como um o laco while ou for.) e A Sec~o 3.2 a a oferece tecnicas uteis para se encontrar limitantes para somatorios. obtivemos a o somatorio (ou serie) n X j =2 j. o valor do somatorio e de nido como sendo 0. O calculo esse somatorio resultou num limitante de (n2 ) sobre o tempo de execuc~o no-pior-caso do algoritmo.1 s~o dadas sem demonstrac~o. A Sec~o 3. embora demonstrac~es para algumas a a a o delas sejam apresentadas na Sec~o 3. encontramos a na Sec~o 1. assumimos que o valor inicial a 43 . 3. somatorios tambem aparecem quando usamos certos metodos de resolver recorr^ncias. Da mesma forma. a a A maior parte das outras demonstrac~es podem ser encontradas em qualquer o texto de calculo.2 que a j-esima iterac~o da ordenac~o por inserc~o levou tempo proa a a a porcional a j no pior caso.1 Formulas e propriedades de somatorios Dada uma sequ^ncia a1 . (Como veremos no cap tulo 4. As formulas na Sec~o 3. a soma nita a1 +a2 + +an pode e ser escrita n X k=1 ak . assumimos que o limite superior e bnc. seu tempo de execuc~o pode ser expresso como a soma dos a tempos gastos em cada execuc~o do corpo do laco. onde x n~o e um inteiro. Esse exemplo indica a import^ncia geral a a de entender como manipular e encontrar limitantes para somatorios. se a soma comeca com k = x. Se n n~o e um ina teiro.1 lista varias formulas basicas envolvendo somatorios. Somando o tempo gasto em cada iterac~o.2 para ilustrar os metodos daquela sec~o. a2. : : : de numeros.

ela converge. an e e b1. : : :. isto e. entretanto. (Geralmente. aplica-se a n. a serie diverge. porem a a no lado direito. n X k=1 (cak + bk ) = c n X k=1 ak + n X k=1 bk .44 CAP TULO 3. Linearidade Para qualquer numero real c e quaisquer sequ^ncias nitas a1. Se o limite n~o existe. a2 . e uma serie ara a . Podemos. uma serie P1 ak para a qual a serie P1 jak j k=1 k=1 tambem converge. k=1 f(k) : Series aritmeticas O somatorio n X k=1 k = 1+2+ + n. Dada uma sequ^ncia a1 . itmetica e tem o valor que apareceu quando analisamos a ordenac~o por inserc~o. colocaremos pisos e tetos explicitamente. A propriedade da linearidade tambem e obedecida por series in nitas convergentes.) O valor de uma serie nita e sempre bem de nido. do contrario. rearrumar os termos de uma serie absolutamente convergente. A propriedade da linearidade pode ser explorada na manipulac~o de soa matorios que incorporam notac~o assintotica. a serie in nita a1 +a2 + pode e ser escrita 1 X k=1 ak . n X k=1 que e interpretada de modo a signi car lim n!1 ak . : : : de numeros. Tais manipulac~es podem tambem ser aplicadas o a series in nitas convergentes. b2. SOMATORIOS para o somatorio e bxc. Por exemplo. : : :. e seus termos podem ser adicionados em qualquer ordem. a2. Os tera mos de uma serie convergente nem sempre podem ser adicionados em qualquer ordem. bn. a n X k=1 (f(k)) = n X ! Nessa equac~o. a notac~o no lado esquerdo aplica-se a variavel k.

. an 1 e adicionado exatamente uma vez e subtra do exatamente uma vez. an. o n-esimo numero harm^nico e o 1 1 1 1 Hn = 1 + 2 + 3 + 4 + + n n X1 = k=1 k = ln n + O(1): (3:5) Series integraveis e series diferenciaveis 1 X Formulas adicionais podem ser obtidas por integrac~o ou por derivac~o das a a formulas acima.3) k=0 Quando o somatorio e in nito e jxj < 1. (3.7) pois cada um dos termos a1. FORMULAS E PROPRIEDADES DE SOMATORIOS n X 45 (3:1) (3:2) 1 k = 2 n(n + 1) k=1 = (n2): Para um numero real x 6= 1. : : :. e n X k=1 Series telescopicas (ak ak 1) = an a0 . a2. temos a serie geometrica in nita decrescente 1 X k=0 xk = 1 1 x . o somatorio n X k=0 n X Series geometricas xk = 1 + x + x2 + n+1 + xn e uma serie geometrica ou exponencial e tem o valor xk = x x 1 1 : (3. obtemos kxk = (1 x x)2 : k=0 (3. : : :.6) Para qualquer sequ^ncia a0. a1. (3.1.4) e multiplicando por x. derivando ambos os lados da serie geometrica in nita (3. Dizemos que a soma e telescopica.4) Serie harm^nica o Para inteiros positivos n. Por exemplo.3. Da mesma maneira.

Se n = 0.1-1 P Encontre uma formula simples para n=1(2k 1). k 3.1-3 ? 3.1-4 ? P o Mostre que n=1 1=(2k 1) = ln(pn) + O(1) manipulando a serie harm^nica. Podemos converter uma formula com um produtorio para uma formula com um somatorio usando a seguinte identidade lg n X k=1 ! ak = n X k=1 lg ak . obtemos n 1 X n 1 1 X 1 = k=1 k(k + 1) k=1 k 1 = 1 n: 1 k+1 Produtorios O produto nito a1a2 n Y k=1 an pode ser escrito da forma ak .46 n 1 X k=0 CAP TULO 3. Exerc cios 3. o valor do produto e de nido como sendo 1. k=1 . considere a serie n 1 X 1 k(k + 1) . SOMATORIOS (ak ak+1 ) = a0 an . k=0 P Calcule o somatorio 1 (2k + 1)x2k.1-2 ? 3. k P Mostre que 1 (k 1)=2k = 0. Como um exemplo de uma soma telescopica. k=1 Dado que podemos reescrever cada termo para 1 1 1 k(k + 1) = k k + 1 .

Assumindo que o limitante se veri ca para n. portanto podemos 2 fazer a suposic~o indutiva de que se veri ca para n + 1. O metodo mais basica de se calcular uma serie e usar a induc~o matematica. 3k = n+1 X n X k=1 k + (n + 1) 3=2. vamos demonstrar que a seriengeometrica n=1 3k k P e O(3n).1-8 ? Q Calcule o produtorio n=2 (1 1=k2). k 3. vamos demonstrar que k=1 3k c3n para alP guma constante c. DELIMITANDO SOMATORIOS 47 P Use anpropriedade da linearidade dos somatorios para demonstrar que n=1 O(fk (n)) = k P O( k=1 fk (n)). Mais especi camente. k=1 k=1 3.1-7 Q Calcule o produtorio n=1 2 4k . como quer amos demonstrar. Aqui est~o algumas dos metodos mais frequentea a mente utilizados. Temos a n+1 X k=1 Induc~o matematica a k = n X 1 = 2 n(n + 1) + (n + 1) 1 = 2 (n + 1)(n + 2): N~o e preciso adivinhar o valor exato de um somatorio de modo a usar a a induc~o matematica. 3. Temos 3k + 3n+1 k=0 n+1 k=0 c3n + 3 1 = 3 + 1 c3n+1 c c3n+1 desde que (1=3 + 1=c) 1 ou. equivalentemente.2 Delimitando somatorios Existem varias tecnicas para delimitar os somatorios que descrevem os tempos de execuc~o de algoritmos. Como exemplo. vamos demonstrar que a serie aritmetica m=1 k resulta em k 1 n(n + 1). vamos demonstrar que ele se veri ca para n + 1. Para a condic~o inicial n = 0.1-6 P P Demonstre que 1 (f(k)) = ( 1 f(k)).3. temos que 0 =0 3k = 1 c 1 a k desde que c 1. . P a Como exemplo. c Pn k n k=0 3 = O(3 ).1-5 3.2. Podemos facilmente veri car isso para n = 1. Por conseguinte. k 3. A induc~o pode ser usada tambem para estabelecer um a a P limitante.

um limitante superior rapido para a serie aritmetica (3. N~o mostramos que a mesma cona a stante funciona para todo n. k=1 k agora o demonstramos para n + 1: k = k + (n + 1) k=1 k=1 = O(n) + (n + 1) ( errado! = O(n + 1): O furo no argumento e que a \constante" escondida pelo \O-grande" cresce com n e por conseguinte n~o e constante. k onde r > 1 e uma constante. e por conseguinte n X k=0 ak 1 X rk = a0 1 1 r : PP Podemos aplicar esse metodo para delimitar o somatorio k=1(k=3k ). Considere a seguinte demonstrac~o falaciosa de que a a P P k = O(n). e frequentemente basta usar o maior termo para delimitar os outros. para uma serie n=1 ak . Por exemplo. n+1 X n X Delimitando os termos Algumas vezes. O primeiro termo e 1=3. SOMATORIOS Temos que ser cuidadosos quando usamos notac~o assintotica para estabelea cernlimitantes por induc~o. Assumindo o limitante para n. 1 =1 k = O(1). cada termo e delimitado por cima por = a0 k=0 k=01 a0 r k X .1) e n X n X = n: P Em geral.48 CAP TULO 3. um bom limitante superior para uma serie pode ser obtido delimitando-se cada termo da serie. suponha que ak+1=ak r para todo k 0. se zermos amax = max1 k n ak . e a proporc~o entre termos consecutivos e a (k + 1)=3k+1 = 1 k + 1 3 k k=3k 2 3 para todo k 1. pois ak a0 rk . ent~o a k ak namax : k=1 k n X k=1 2 n k=1 A tecnica de delimitar cada termo em uma serie pelo maior termo e um metodo fraco quando a serie pode na verdade ser delimitado por uma serie P geometrica. Dada a serie n=0 ak . A soma pode ser delimitada por uma serie geometrica decrescente in nita. Certamente. Por conseguinte.

que e uma constante . Na serie harm^nica. Para delimitar a uma serie por uma serie geometrica. isto e.3.2. deve haver um r 1. que diverge o pois k 3k k=1 n X1 = nlim k !1k=1 k=1 k = nlim (lg n) !1 = 1: A raz~o entre o (k+1)-esimo e o k-esimo termos nessa serie e k=(k+1) < 1. Um exemplo e a serie harm^nica in nita. DELIMITANDO SOMATORIOS (1=3)(2=3)k . o nenhum r como esse existe porque a raz~o ca arbitrariamente proxima de 1. a 1 X1 1 X1 Partindo somatorios . tal que a raz~o entre a todos os pares de termos consecutivos nunca passa de r. mas a a serie n~o e delimitada por uma serie geometrica decrescente. deve-se mostrar que a raz~o e bem distante a de 1. de modo que 1 X 49 2 k k=1 3 3 = 1 1 12=3 3 = 1: Um furo comum na aplicac~o desse metodo e mostrar que a proporc~o entre a a termos consecutivos e menor que 1 e ent~o assumir que o somatorio e delimitado a por uma serie geometrica.