Projeto de Algoritmos com implementações em Java e C++

Page 1

Mestre em Ciência da Computação, Universidade Federal de Minas Gerais, 2004. Atualmente é aluno de doutorado do Departamento de Ciência da Computação da Universidade Federal de Minas Gerais, onde trabalha com funções hash perfeitas mínimas para representar eficientemente um dicionário. Desenvolvedor e mantenedor de uma biblioteca de software livre intitulada CMPH, que contém todos os algoritmos desenvolvidos durante o seu doutorado. Especialista em desenvolvimento de software orientado a objetos nas linguagens Java e C++.

com implementações em Java e C++ Algoritmos e estruturas de dados formam o núcleo da ciência da computação, sendo os componentes básicos de qualquer software. Aprender como programar computadores está intimamente ligado a algoritmos, já que programas são formulações concretas de algoritmos. Aprendê-los é crucial para qualquer pessoa que deseja desenvolver softwares de qualidade.

Projeto de Algoritmos com implementações em Java e C++

Esta obra apresenta os principais algoritmos e estruturas de dados conhecidos. As técnicas de projeto de algoritmos são ensinadas de forma simples, seguindo o paradigma de orientação a objetos, por meio de refinamentos sucessivos até o nível de uma implementação na linguagem Java, e todo programa Java tem um programa C++ correspondente nos apêndices. Destaques: § O livro cobre estruturas de dados básicas, contendo listas lineares, pilhas e filas; algoritmos de ordenação e de pesquisa em memórias primária e secundária; algoritmos em grafos e processamento de cadeias de caracteres; técnicas de análise de algoritmos; paradigmas de projeto de algoritmos; e estudo da complexidade computacional de algoritmos. § Ênfase em tipos abstratos de dados, programação modular, programação orientada a objetos, encapsulamento e independência de implementação de tipos abstratos de dados com reaproveitamento de código. § Informação sobre o comportamento teórico e prático dos algoritmos, fornecendo uma base de comparação entre os algoritmos. § Mais de 156 exercícios propostos dos quais 58 com soluções; 195 programas em Java e 195 programas em C++; 164 figuras ilustrativas. § Material de apoio para professores na forma de transparências e os códigos em Java e C++ podem ser obtidos no site www.dcc.ufmg.br/algoritmos-java.

Aplicações Livro-texto para cursos de Ciência da Computação, Matemática Computacional, Sistemas de Informação, Engenharias de Computação, de Controle e Automação, Elétrica, Eletrônica e Mecânica, entre outros. Pelo fato de apresentar muitas implementações de algoritmos práticos, o texto é igualmente útil para profissionais engajados no desenvolvimento de software nas linguagens Java e C++.

Algoritmos e Lógica de Programação Marco Antonio Furlan de Souza, Marcelo Marques Gomes, Marcio Vieira Soares e Ricardo Concilio Compiladores: Princípios e Práticas Kenneth C. Louden Estrutura de Dados e Algoritmos em C++ Adam Drozdek

Introdução aos Fundamentos da Computação Newton José Vieira Modelos Clássicos de Computação Flávio Soares Corrêa da Silva e Ana Cristina Vieira de Melo Projeto de Algoritmos: Com Implementações em Pascal e C – a 2 Edição Revista e Ampliada Nivio Ziviani

Nivio Ziviani Para suas soluções de curso e aprendizado, visite www.cengage.com.br

Outras Obras

Introdução à Ciência da Computação Ricardo Daniel Fedeli, Enrico Giulio Franco Polloni e Fernando Eduardo Peres

Projeto de Algoritmos

Fabiano Cupertino Botelho

Projeto de Algoritmos

com implementações em Java e C++

Ph.D. em Ciência da Computação, University of Waterloo, 1982. Professor Emérito da UFMG, Professor Titular do Departamento de Ciência da Computação da UFMG, onde coordena o Laboratório para Tratamento da Informação (LATIN). Cofundador de duas empresas especializadas em tecnologia de busca na Web, a Miner Technology Group, vendida para o UOL / Grupo Folha de São Paulo em 1999, e a Akwan Information Technologies, vendida para a Google Inc. em 2005. Autor de três livros na área de algoritmos e coautor de mais de cem artigos técnicos nas áreas de algoritmos, recuperação de informação, compressão de textos e áreas correlatas. Co-criador da conferência SPIRE (String Processing and Information Retrieval) e Coordenador Geral da conferência ACM SIGIR 2005, a mais importante do mundo na área de recuperação de informação. Membro da ACM (Association for Computing Machinery), EATCS (European Association for Theoretical Computer Science), IEEE Computer Society e SBC (Sociedade Brasileira de Computação).

Nivio Ziviani

Nivio Ziviani

Consultoria em Java e C++ de

Fabiano Cupertino Botelho




Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Ziviani, Nivio Projeto de algoritmos : com implementaçþes em Java e C++ / Nivio Ziviani ; consultoria em Java e C++ de Fabiano Cupertino Botelho - SĂŁo Paulo: Cengage Learning, 2011. 1. reimpr. da 1. ed. de 2007. BibliograďŹ a. ISBN 1. Algoritmos de computadores 2. C++ (Linguagem de programação para computadores) 3. Dados - Estruturas (CiĂŞncia da computação) 4. Java (Linguagem de programação para computadores) I. Botelho, Fabiano Cupertino. II. TĂ­tulo. 06-7021

CDD-005.1

�ndice para catålogo sistemåtico: 1. Algoritmos: Programação de computadores: Implementação em Java e C++: Processamento de dados 005.1


Projeto de Algoritmos – Com implementaçþes em Java e C++ Nivio Ziviani

Gerente Editorial: Patricia La Rosa

Š

Cengage Learning Ediçþes Ltda.

Todos os direitos reservados. Nenhuma parte deste livro poderå ser reproduzida, sejam quais forem os meios empregados, sem a permissão, por escrito, da Editora. Aos infratores aplicam-se as sançþes previstas nos artigos , , 6e da Lei no .6 , de de fevereiro de 8.

Editora de Desenvolvimento: Ligia Cosmo Cantarelli Supervisor de Produção Editorial: Fåbio Gonçalves

Para informaçþes sobre nossos produtos, entre em contato pelo telefone

Supervisora de Produção Gråfica: Fabiana Alencar Albuquerque

Para permissĂŁo de uso de material desta obra, envie seu pedido para direitosautorais@cengage.com

Produtora Editorial: Renata Siqueira Campos Copidesque: MĂ´nica Cavalcante Di Giacomo RevisĂŁo: AndrĂŠa Vidal

Š

Cengage Learning. Todos os direitos reservados.

Composição: Nivio Ziviani e Fabiano Cupertino Botelho

ISBN- :

Capa: F.Z.DĂĄblio Design Studio Cengage Learning CondomĂ­nio E-Business Park Rua Werner Siemens, – PrĂŠdio – Espaço Lapa de Baixo – CEP – SĂŁo Paulo – SP Tel.: ( ) 66 – Fax: ( ) 66 SAC: 8 Para suas soluçþes de curso e aprendizado, visite www.cengage.com.br

Impresso no Brasil. Printed in Brazil. 1 2 3 4 10 09 08 07


! "#$ %



+,-./ &'()(*

3 # 1 0 ! 01 % 2 3 3 2 4 3 4 3 5 7 8 4 9 6

: 4 2 < 4 3 ; ! 3 9 4 5 < > ! = 3 3 3 3

4 8 3 3 3 5 ? >

8 < 3 3 5

0 8 = 5 0 5 4 3 6 5 3 4 3 5 A

@ 3 0 0 3 3 < 5

B 3 3 < 4 3 < 2 4 M 5 F G P F G P 1 K K K Q K Q K K K K CD

E HIJEHI MNO I M OI J R E E HIOI J R MNO I C C CD < CL <T C C C C C JEHIC S4 CL 4 4 4 8 S T = 5 3

U 4 8 <

4 8 T

V 3 3

T < 4 3 5


WXX YZ[\]^[_]`ab[ZX^c[d

T 4 8 3 4 4 4 3 T 0 T 3 = S e U 5

4 S 5

0 < A T 4 e

S < 5 4

3 < U

<

4 f 4

4 4 T 3 A

S

3 4 A 0 g 4 e

5 3 A ! T 8 T e = 9 ! A

5

9

0

A A 48 3 3 3 5 9 0 5 3 < > 3 48 <

U0 h 3 3 3 5

$ < ++ 0 5e 4 8 i ! < 0 5 T < <

3 j i 2 0k l mHn oGKFEnpEqEDrIHPEsttu vCCMJIREKCFHM CnwNOCMGCnxyFGHPEsttz


}'~/ {|

3 4 V 3 V !h ! h 3 A 5 h ! 5e ! h$ V ! !3 VV 3 5 S S 48 V V 3 $ V $ < 5 ++ i 4 3 A T VV V 6

5 j V V 6 j g j V V V

@ V ! 3 h VV i

V ¡ V ¢ 3 5 ¢¢ V VV !! 3 ! 3 3 A ¢ i 4 A T ¢


£ YZ[\]^[_]`ab[ZX^c[d ¤ ¥ ¦ § ¨ ? ? ! 8 6 5 ? V 6 5

j < ? !

0 V ! 8 © V V 6 5 © V V 6 5 j < © !

0 © 6 5 ! 8 © V 6 5 j ! <

0 i 4 T 3 A ª « S 5 6 ¬ 5 V S 5 5 6 5 ¢ S ¬ @ ­ V ® V 5 ¢ S 5 V S 5 A V 5 i ¯ V 6 ¬ 5 ¬ 4 5 V V 6 5 V 5 e V 6 5 < V @ ­ A V Ti 4 3 A ± ² ³ ° ¬ ´ ¢V V i ¢ µ i i ¢ µ i i ¢ V µ

h 3 ©© V · GK ¸ © h < ¶ CN Mm © 5 5e h < 5 ©¢


¹ºc»ZX[ £X V ? 4 © ! ©© · NGK 5 < V Mm C i 4 T 3 VV A ± ² ½ ¼ ³ ° 5 ¬ VV ¯ VV © V 6 5 ¬ 3 5 ´ 6 A VV V V ! ¬ V ¢ ! V ¾ ? µ i V µµ i V µ i VV V ! 5e V © i 4 T 3 VV VV A ¿ ³ ¢¢ 5e 4i ¼³ V ¢ ! V V < V Sh 8 ¢¢ V 6 5 2 ! ¢ = V 8 = V V 6 5 ! ? g V¢ j <

!

0 ¢ V 6 5 ? ! 8 = g ¢ 8 ! VV © ¢ e = V 6 5 3 < h h V ¢ i¢ 5 ! V ¢ V h ¯ < ! T V ¢ ¢¢ i 3 V ? 5 h 3 V©V ¢¢ ¢ S ¢ V © µ T ¢ S 4 µ T VV©© ¢ ! 3 ¢¢ ¢¢ V ! 3 1 ­ 3 ! ¢¢

4 ® ! 3 < © Sh ¢ A T i 4 3 ¢ ¤ ¨ À À V ?

?


£X YZ[\]^[_]`ab[ZX^c[d A V ! A V V V V V @ g V V h® AÁ ? 3 3

VV g ® Á g vÂJEN 5 V

i 4 A h T 3 ¢ A ¢ Ä N P ÅÀ Æ Æ Ã ¤³³ ¢ © © 4 ! 3 N P 0 0 V ! N P 0 <T © N P 0 ® © T ! 3 ! A © V © VV V !® 3 T A g h © 4 © © V ! 3 ! A N P 0 4 0 ©© NP T i 4 3 A ª À++ À ÆÇ ª ³ § À++ À ÆÇ ª¤¤ À À++ À ÆÇ ¤ ªªÃ ¦ À++ À ÆÇ ª ¥ À++ À ÆÇ ª¼ È À++ À ÆÇ ¼ ªÃ¤ ¿ À++ À ÆÇ ³ É Ê À++ À ÆÇ ¨ ¤ À++ À ÆÇ Ã Ë À++ ÆÌ Í ÍÎ Æ Æ ¥ Ç ½ ¼ À ½À ó Î Ì § Ä Ï ÃÃ Ð Î Ñ ¼ÉÃ


Ò '(Ó}Ô~/

5 3 ! 0 8 3 A 5 53 e

A

0 T < 3 3

0 A 94 3 2 S < e 9 5 3 A 3 5 8 3 3 5 8 ! 3 3

3 5 48 $ T $ 5 3 3 3 3 h ++ 4 = T A ÕIHÖEJHPE×FmHIKJDHNRHDØDOFEDEMJCÙÚEN E Õ 3 3 F D CNRC E o ÛÜÝÞßàáÜ 2 5 0 S 4 3 5

3 T T 3 <

N P0

3 9 US 3 4 0 A 5 3 0

$ 3 3 3


£XW YZ[\]^[_]`ab[ZX^c[d 3 U 5 ¸ 4 3 V 3 8

3 5 ¡ 3 3 3 A

4 U 5

­ 5 U 5 5 5 4 ­ A U 5 5 < 4 G U

´ GK G GK CN Mm CN Mm < i U ´ A 0 4 4 ¢ ! 3 3 < U 5

<

0 3 5T 3 <

3 < 3 U 4 A A e A 3 3 4 N P 0 T U © N P 0 N P 0 < < 0 ­ 3 A 0 4 T 5 A 0 8 3 A Ð Å < 3 A A 4 2 Ñ 6 4 e ! < 5 3

4 3 < 5e âãÝäåæäßÝç áßèéÜäéæêæëìÜ 3 3 3 ! 3 5

5 2 $ $ 3 3

++ 4

2 A 4 8 3 4 g e 4 S 8 5

4 e 5 5

< A 5 4 $ ! 3 ++ 3 48 3 5 ! 3 5

48 48 8 3

4

< 5e


YZ]í»îX[ £W 3 4 3 4 j 48 3 3 5 4 < 5 = 5 0

3 A 8 3 5 5 3 0

3

3 ï 3 5 3 3 <

A 0 S

4 2 3 < 5 3 < ðÜèéÜñßççÜé

A 2 0 S 3 5 03 5 A < 5 3 8 ! 3

ò ¸ = 5 ¶ A 3 3

T 3 $

2 5 5 ++

<

e 2 g 0 ¯ 4 U 6 i 0 ! 3 = 5 = <

¬ 5 6 < 5 3 5 3 B ¡ !

5 !

0 3 $ 3 3 5 4 3 3 5 ï 0

5

66 i 0 ! 3 = 5 =

< ¬ 5 6 < 5 3 5 3 B ¡ !

5 3

U 5 3 5 U 5

­ ï 3 ´ A 5

0

4 5

U

4 0

4 ¶GCNGK Mm¸ < 5 U 5 A

U A ´ i 3 666 i 0 ! = < = 5 ❑


ยฃWX YZ[\]^[_]`ab[ZX^c[d 3 ย ย 6 < ยฌ 5 5 4 8

3 3

3 U 8 3 3 4 N P 0 T 3 A 0 3 < 3 8 ! = !

5 3 ย ย

U 3 4 3 3 8 3

3 3 < 0

NP T 3 A 0 3 3 0 4 S

< S 3

3 8 8 3 2

4 T V 3

5 <

8 5 ยก 3 T T A T ! = 1 ! T 4 !3 A T A 4 e T e 4

A S 4 2

3 4 A T ! A

2

4 5 2 3 4 T

h = T < S

48 4 4 4 = 5 3 < 3 4 4 3

< = 3 T A 8 = 8 3 A

< <

= < 3 A 0

4 5 = 8 = 38 ! 0

l รณ K = < ร HNJ 0 RI O J ร p

ยธ r

3 ยถ IHรดNEI lRIKOJ

ร pรณ ! = รต

ร HNJ 4 NKJE 5 >>> < 3 4 3 0 8 โ


YZ]รญยปรฎX[ ยฃWX รฐร รถรงร รฅรกรฆร ร ร 3 8

S h 3 4 3 3

T < 3 0 4 e T 5 5 < 3 ! 8 48 3 < 3 3 5 < 2

T = < 3 <

3 < 8 ! 3

8 3 5 3 รฏ 5

0

= 3 3 4 A 5

4 3 8 !

0 T

A 3

2 ! 3 A รฐร รจรฉร รทรงรงรฃร ร รฆรธ 4 A 8 3

2 e < 5 3

3 ! 3 3 e 4 5 3 5

A 4

5e A 3 e 3 3 S 3 5 $ 5 ++ 4 $ A S 3 ++ รป รบ N$KJE A 5 P r F K ร 5 รดรดรด RR y m I m HI J HN รฝ รผ รน รน D รน C D C C

8 = 3 ++ A รฐรครฉรฆรกร รพรฃรชร ร ร ร รง 3 e

T

3 9 3 ย ย 4 8 !3 5 T 0


£WXX YZ[\]^[_]`ab[ZX^c[d ? ! B ! < ! 4 ® Â’ i j 4 $ Â’

0 ?

4 j ÿ ? i 4 ® $ 3 S

Â’ $ 2 T

$ 3 4

4 µ !4 4 ? ¬ ? h !

!

2

?

i i T B ¬ ! j 3 ?i

2 3 3 ?

2 ¬ ® Â’ 4 j ! S Â’ j 4 ¬ i 3 j 4 0 ¬ 2 j ¡ 3 Â’ j h ¯ 3 ! 3 Â’ Â’ ! f 3 $ f 3 h = 4 4 i 8 Â’

2 0 S $ 3 < 2 !

4 4 ­ 3 Â’ 5 5

@ 5 3 4 5 5

4 A A A T i 2 0k 3 5 3 T 4 0 j ! 8 3 i ! 5 j 4 ¬ 3 3 3 A ¯ g B i 3 3 e 4 3 3 3 $ ++ 3 3 5 ­ 4 0 < B

! ? 2Â’ Â’ h 6 ? 4 e ! A < 2 4 = 5 A

5 g Â’ 0 S 3 5 0

4 T 3 3 3 5 ! 3

3 66 !3 i 3

8 666 ! ! 3 5

! ¬ i

j ¬ 4 !

B ¯ ¬ ih Â’

4 i j 4 ® T 6 Â’

¬ 2

j j 4 j j 0

µ ¬ Â’ 3 !

¬ 3

3

?

h j 4 ! 3 A 5

5 0 i4 3 !

4 i !

! Â’ 2

3 j 4 h A A

¬ Â’ A

¬ 2 4 ! 98 0 ? 3 ! 2 ¬ j f i ¬ g

3 0

3

U !

S

5 ?h 7 3 < 5


YZ]í»îX[ £X£ 5 4 $ GCNGKMm < A 3 5 A 3

++ 0 3 5 $ j ¬ 5 3 4 ® 5 5 A ? A T h j 4 e 3 3 0 5 ! $ T ! ¬ !

i $9 4 ® f i ? 4 4 ! 3 !

3 6 ! @ ­

$ 0 5 ® ! 8 ¯ h 1= S 1

? j !

? $ B

2 2 ! !

¯ 4 i ? j i ! ¬ 2 4 0

¯ 3 e ! A < T S ¬ ?9 ¬ S j 3 ¬ 3 5 4 " 0 8

3

T h 38 " " = j

õ õ U 6 h0 S V ¢õ V0 i 0 6 < 5 5 4 j f f f

"! 5 6 < 5

V © õ© 0 4 2

h h < 5 A

< 3 ÿ vEFHFG·HIPKqHMJE xy H Esttz


££ YZ[\]^[_]`ab[ZX^c[d èéßñ þãÜáÜÛÜÝçåøÞÜé æ æß Û++ 3 3 3 5 8 A 4 9 < ! 3 ! A 3

8 3

3 < < 5 2 ÿ 4 S4 3

< $ 0 4 5e 3

< 5 3 < 2 e 3 0 5 3 5 < 5 5 < 4 8 5e 3 < 3 $ $++ < < 4 3 S T 2

A

length T A $ ++ $ ! T 3 3 ¬ 5e <

4 = 3 < 3 $ T++ ´= A 3 <

$ 3 ++ 5 < 3 4 T 3 ï <

3 2 5 4 3 3 ï

$ 4 T

4 3 3 T < ¯ h ! ! 3 2

$ i = < 5

3

?

ÿ 3

5 < 4 i vEFHFG·HIPKqHMJE xy H Esttz


+'/ { -./ *

" #! "$ !

3 < 2 e ! 5 0 0 S e 5

3 g 3

3 A 4 e ´= 5 A

5

5 ¸ 4 ­ ¢ 8 ¬ 3 ¶

©

A 8 5

5e ! A 5 a + b 4 8 5 < 2

a b ¥ 3 3 3

0 3 5 4 4 5 8 3 5

! 3 < 0

5 0 Æ ! 5 < 4 e 5 2

4 9 5 < 54 4 $ 5 5

T3 3 5

5 2

3 94 < T 5 5 3 T 5 T3

f 3 4 ¸ 3 ¢ e ¶ © Æ < 5 3 %

%

'' &


YZ[\]^[_]`ab[ZX^c[d 4 5e T 4 3 2 3 3

2 3 3 3 3

4 0 ´= 5e 4 <

3 3 ­ 8 < 3

< ¬ 3

3 3 3 5 5 3 ¶ ©¢ ¸ T 3 T 0

T A 5 A 5 3 (

)

, + + * ! " #! "* ! " #!

3 3 3 5 AÆ 0

e e T < 5

2 8 A

3 < 5 ¶f ©¢ 0 ¸ T $ 4r F h KMJ n r HH FE CM n RGC I HC 3 A J

< HH E C M

3 5

S $ 3 3 < ! < 3 3 3 ¬ 5 Ä

Æ g 5 4 e 8 0

S 4 e 5 5

¶ 5 < ¸ 44 5!

®4 < A

2 g © 8 A 5 3 3 3 5 3 3 T A 3 3 < 4 4 3 3 5 2 !

2 5e 4 3 h e 5 < 3 e 2 5

4 5 5 5

4

3 5 5e 4 2

9 5 3 -


^Z[_º [ 5 2 A 4 4 T 3 5e ? U < 5 2 V 4 2 4 0 A 5 e T 8 5 5 g ! 3

5

?

4 3 3 0 3 5 5 ¬ A 5 ï 0 4 3 4 4 8 e < 5 0

4 8 e < 5

g < 2 5 < 5e 2 4 ./01234

8

56

! ! 9 "! * " ! " <= ! " + $ :";

7

0 8 3 < 4 S e 8 2

3

2

0 8 e 5 3

5e A 5 5 3 T

0 4 4 2 5 3 <

4 4 3 A 0

¸ 1 < ¶ ©¢ U Æ ¶ ¸3

@ ; 4 T T 3 < 20 0 3 9 2 3 A

3 4 @ 3 ¸ ¶

; T T T <

4 48 3 3 8 T 6 3


YZ[\]^[_]`ab[ZX^c[d A 3 ï A

e T 9 T 5 < e 9T 5 M

3 T

0 4 @ 5

4 ! 3 T

3 3 ² 3 5e A 4 ¬

< 3 4 T 0 3 2 5 S A 5 A 5 3 g

4 < ! 8 3 2 4

¸ 48 e ! 5 U ¶ ¸ e <

5 ¸ GC IP3 2 0 3 ô IE ¶ C

0k ¶ ©© ¢¸ 3 < !

4 i 2 e 3

A A

5

4 3 A 5 3 2 ! 0

e 5

5 A 5 3 4 2 5 3 g <

8 0 ¸ A 67 1 ¶

2 © S e A

5

A 5 5 5 3

e3 5e 3 S 8 3 8 5 e 9 5 3 5e

4 e T 5 5 A 3 < 5 A 5

Æ 0 f f (n) 4 A

3 ¬ 3

n 4 ! ¶ ©¢¢¸ f (n) ¬

0 A

3 n

f < 5 Æ Æ 3 ¬

f (n) 3 3 0 Æ A

Æ f < 5 n >


^Z[_º [ A 0 8 = A T f < 5 ! <

A 2 ò < 9 5 A

3 3 v [0..n8 − 1], n < 5 A ≥ 1 $ < 3 ¬

f f (n) 9 5e v v n ? 3

./01234

56

?

@

¯ 3 3 ² f (n) = n − 1, para n > 0.

A [XZOL UVNP EGHGIJKLMNOP BCDBEF LQRMRLSOTM LP LWTXPYLZ \]^_]`a bcdef \ghij^ ^i]kk l cmn \ghij^ ko]oj^ jpo q cm rjpo stu v jpo wx n t u jpo q z s cmy f xj{ rq {|} rjpo ~ yef ~ wf ~ cm st~ ux q cmyst~ uf o q }a g}p cmf

3 e 8 U

@ n n ≥ 1 < 2 n − 1 5 Ñ U e en − 1 5 3 ? 3 n − 1 5 2 e 9 5 <

2 2 S

max Max ! A 5 3 3 A 5 < 5

3 3 A 5 < 5

max 4 3

< 3

4 8 n $ 3 5 U 3

4

¡ ¡ ¢£ ¤ ¢ ¡¥ £¦ § ¨ ©ª «­ ¬¬


YZ[\]^[_]`ab[ZX^c[d = U 4 T 3

h Â?  Â†Â€Â„—š† A 5 S ™ n S …†€„—š† Æ A 5 4 n ÂŹ f < 5 A 4 f (n) 3 ÂŒÂ…Â†Âś ¸ ĂŻ A 0 „—š†™ S ÂŒ 4 n 5 Œ…š‹ € Â…Ă„ Â? Â…ÂŽ Â? † ÂŒ Ă†Â€Â† Ă„ —Ä…Â?Â…ÂŒ 8 —  Âš

n 4 4 5 2 4 4 T 3 < 4 4 4 5 òT 3

2 3 4 … š‹€†š € ˜

3 „ —Ñ 9 4 2

3

2 3 3

S Â… Â… Â? š—š °  ÂŠÂ„— 3 A < 2 Ơš°Â? A 8

3 3

8 f < 5 A f (n) 9 3 ÂŹ 9 2

3 S U ÂŽ

%

ÂŻ

%

°

melhor caso : f (n) = 1 pior caso : f (n) = n caso m´edio : f (n) = (n + 1)/2

S S 3 3 9

2 n 5e 4 4 A

3 ÂŹ

p < 0 8 3 0 3 i0 5 e

i

i

i

4 4 f (n) 4 4 5

p ÂŹ 4 4 3 U p = 1/n, 0 ≤ i < n f (n) = 1 Ă— p1 + 2 Ă— p2 + 3 Ă— p3 + ¡ ¡ ¡ + n Ă— pn .

i

i

1 1 f (n) = (1 + 2 + 3 + ¡ ¡ ¡ + n) = n n

n(n + 1) 2

=

n+1 ¡ 2


^Z[_Âş [ 5 ! A A 3 4 Â’ 3 v [0..n−1], n ≼ 1 g 3 3 Â? Â? < 4 Â? V 3 S maxMin e • Â? 5 2 maxMin1 v ÂŹ 8 f < 5 A f (n) 9 5e v v n ? 3

./01234

56

Âą

f (n) = 2(n − 1), para n > 0,

A UVNP ÂśZNP EGH²³P BCDBEF QJTP TZOR´¾LWNMTORQRMRLSOTMLP LTLP L \]^_]`a bcdef ~we n \ghij^ ^i]kk l cml j j j h i o o ~we rjpo stu v jpo wx n \g ^ k ] ^ po tu q cml t u v t jpo q z s q ~ w s cmy y zuf xn {|} rjpo ~ yef ~ wf ~€ € x t uf j{ rst~u ¡q q s ~ cm cmy j{ rst~u q ~wx q ~wyst~ uf  jpo q ~wtu yp a¸jpotšuf cml t u z q ~ w q ~wteu yq ~wf l cm cml y cmf q ~wf }aog}pq cml  Â

4 3 Â? V < i 0 S 5 v [i] < < min

5 Â? ‘ 3 3 g v [i] > max 5 U melhor caso : f (n) = n − 1 pior caso : f (n) = 2(n − 1) caso m´edio : f (n) = 3n/2 − 3/2

S v S v [i] max v 2 ? 3

f (n) = n − 1 +

n−1 3n 3 = − , para n > 0. 2 2 2


º

YZ[\]^[_]`ab[ZX^c[d

A UVNP ¶ZNP EGH»³P BCDBEF QJTP TZOR´µLP TJ¼LMRWRQRMRLSOTMLP LTLP L \]^_]`a bcdef ~w¹ n \ghij^ ^i]kk l cml ~w¹ rjpo stu v jpo wx n \ghij^ ko]oj^ jpo tu q cml jpo q ~wystzuf cmystzu v q xn {|} rjpo ~ yef ~ wf ~ j{ rst~u ·q cmx q cmyst~ uf ~wx q ~wyst~ u f aika j{ rst~u q jpo q ~wtu yp a¸jpot¹uf cml q ~wtzu yq ~wteu yq ~wf cml cmf q cml ~wf }aog}pq cml

e 4 9 5 A 2

; 4 3 4 ! 3 3 U v 0 4 8 ¸

5

4 8

3

<

e

dn/2e 5 4 8 V¸ S A 4

dn/2e − 1 5e ¸ S T 4 4 8 e

dn/2e − 1 5 ½

e e

Contém o máximo

e e e Contém o mínimo ··· ¾¿DÀBEGGÁRMON´µLWT TPWLNÂÂXSYLZ [XZOL H à v e

e

···

e

5 3 0 ! 3 ÄÅÆ¢ ©ª ¤ Æ¢ ©ª ÈÉ Ê Ë¢ Ë¢ £ª d e Ç ¡ x Ç ¢¡ ¡ dxe ¡ £ ¡ ¢ ¢ x ¬ Ì ¡ ¡ Æ ¡ Æ¢ ©ª b c Ç ¤ ¡ Æ¢ ©ª ÈÉ £ ¡ ¢ ¢ x ¬ ¨ e = 2, 71828 . . . £ª bxc ¡ dee = 3 bec = 2 d−ee = −2 b−ec = −3 ¬


Mestre em Ciência da Computação, Universidade Federal de Minas Gerais, 2004. Atualmente é aluno de doutorado do Departamento de Ciência da Computação da Universidade Federal de Minas Gerais, onde trabalha com funções hash perfeitas mínimas para representar eficientemente um dicionário. Desenvolvedor e mantenedor de uma biblioteca de software livre intitulada CMPH, que contém todos os algoritmos desenvolvidos durante o seu doutorado. Especialista em desenvolvimento de software orientado a objetos nas linguagens Java e C++.

com implementações em Java e C++ Algoritmos e estruturas de dados formam o núcleo da ciência da computação, sendo os componentes básicos de qualquer software. Aprender como programar computadores está intimamente ligado a algoritmos, já que programas são formulações concretas de algoritmos. Aprendê-los é crucial para qualquer pessoa que deseja desenvolver softwares de qualidade.

Projeto de Algoritmos com implementações em Java e C++

Esta obra apresenta os principais algoritmos e estruturas de dados conhecidos. As técnicas de projeto de algoritmos são ensinadas de forma simples, seguindo o paradigma de orientação a objetos, por meio de refinamentos sucessivos até o nível de uma implementação na linguagem Java, e todo programa Java tem um programa C++ correspondente nos apêndices. Destaques: § O livro cobre estruturas de dados básicas, contendo listas lineares, pilhas e filas; algoritmos de ordenação e de pesquisa em memórias primária e secundária; algoritmos em grafos e processamento de cadeias de caracteres; técnicas de análise de algoritmos; paradigmas de projeto de algoritmos; e estudo da complexidade computacional de algoritmos. § Ênfase em tipos abstratos de dados, programação modular, programação orientada a objetos, encapsulamento e independência de implementação de tipos abstratos de dados com reaproveitamento de código. § Informação sobre o comportamento teórico e prático dos algoritmos, fornecendo uma base de comparação entre os algoritmos. § Mais de 156 exercícios propostos dos quais 58 com soluções; 195 programas em Java e 195 programas em C++; 164 figuras ilustrativas. § Material de apoio para professores na forma de transparências e os códigos em Java e C++ podem ser obtidos no site www.dcc.ufmg.br/algoritmos-java.

Aplicações Livro-texto para cursos de Ciência da Computação, Matemática Computacional, Sistemas de Informação, Engenharias de Computação, de Controle e Automação, Elétrica, Eletrônica e Mecânica, entre outros. Pelo fato de apresentar muitas implementações de algoritmos práticos, o texto é igualmente útil para profissionais engajados no desenvolvimento de software nas linguagens Java e C++.

Algoritmos e Lógica de Programação Marco Antonio Furlan de Souza, Marcelo Marques Gomes, Marcio Vieira Soares e Ricardo Concilio Compiladores: Princípios e Práticas Kenneth C. Louden Estrutura de Dados e Algoritmos em C++ Adam Drozdek

Introdução aos Fundamentos da Computação Newton José Vieira Modelos Clássicos de Computação Flávio Soares Corrêa da Silva e Ana Cristina Vieira de Melo Projeto de Algoritmos: Com Implementações em Pascal e C – a 2 Edição Revista e Ampliada Nivio Ziviani

Nivio Ziviani Para suas soluções de curso e aprendizado, visite www.cengage.com.br

Outras Obras

Introdução à Ciência da Computação Ricardo Daniel Fedeli, Enrico Giulio Franco Polloni e Fernando Eduardo Peres

Projeto de Algoritmos

Fabiano Cupertino Botelho

Projeto de Algoritmos

com implementações em Java e C++

Ph.D. em Ciência da Computação, University of Waterloo, 1982. Professor Emérito da UFMG, Professor Titular do Departamento de Ciência da Computação da UFMG, onde coordena o Laboratório para Tratamento da Informação (LATIN). Cofundador de duas empresas especializadas em tecnologia de busca na Web, a Miner Technology Group, vendida para o UOL / Grupo Folha de São Paulo em 1999, e a Akwan Information Technologies, vendida para a Google Inc. em 2005. Autor de três livros na área de algoritmos e coautor de mais de cem artigos técnicos nas áreas de algoritmos, recuperação de informação, compressão de textos e áreas correlatas. Co-criador da conferência SPIRE (String Processing and Information Retrieval) e Coordenador Geral da conferência ACM SIGIR 2005, a mais importante do mundo na área de recuperação de informação. Membro da ACM (Association for Computing Machinery), EATCS (European Association for Theoretical Computer Science), IEEE Computer Society e SBC (Sociedade Brasileira de Computação).

Nivio Ziviani

Nivio Ziviani

Consultoria em Java e C++ de

Fabiano Cupertino Botelho


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.