30
Nivio Ziviani com implementações em Java e C++ Projeto de Algoritmos Projeto de Algoritmos Consultoria em Java e C++ de Fabiano Cupertino Botelho

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

Embed Size (px)

DESCRIPTION

Autor: Nivio Ziviani

Citation preview

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

Nivio Ziviani

com implementações em Java e C++

Projeto deAlgoritmosProjeto deAlgoritmos

Algoritmos e estruturas de dados formam o núcleo da ciência da computação, sendo os componentesbásicos de qualquer software. Aprender como programar computadores está intimamente ligado aalgoritmos, já que programas são formulações concretas de algoritmos. Aprendê-los é crucial paraqualquer pessoa que deseja desenvolver softwares de qualidade.

Esta obra apresenta os principais algoritmos e estruturas de dados conhecidos. As técnicas de projetode algoritmos são ensinadas de forma simples, seguindo o paradigma de orientação a objetos, pormeio de refinamentos sucessivos até o nível de uma implementação na linguagem Java, e todoprograma 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 deordenação e de pesquisa em memórias primária e secundária; algoritmos em grafos e processamentode cadeias de caracteres; técnicas de análise de algoritmos; paradigmas de projeto de algoritmos; eestudo 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 reaproveita-mento de código.

Informação sobre o comportamento teórico e prático dos algoritmos, fornecendo uma base decomparação entre os algoritmos.

Mais de 156 exercícios propostos dos quais 58 com soluções; 195 programas em Java e 195programas 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 .

Livro-texto para cursos de Ciência da Computação, Matemática Computacional, Sistemas de Infor-maçã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 é igual-mente útil para profissionais engajados no desenvolvimento de software nas linguagens Java e C++.

www.dcc.ufmg.br/algoritmos-java

Aplicações

Outras Obras

Algoritmos e Lógica de Programação

Compiladores: Princípios e Práticas

Estrutura de Dados e

Algoritmos em C++

Introdução à Ciência da Computação

Introdução aos Fundamentos da

Computação

Modelos Clássicos de Computação

Projeto de Algoritmos: Com

Implementações em Pascal e C –

2 Edição Revista e Ampliada

Marco Antonio Furlan de Souza,Marcelo Marques Gomes,Marcio Vieira Soares eRicardo Concilio

Kenneth C. Louden

Adam Drozdek

Ricardo Daniel Fedeli,Enrico Giulio Franco Polloni eFernando Eduardo Peres

Newton José Vieira

Flávio Soares Corrêa da Silva eAna Cristina Vieira de Melo

Nivio Ziviani

a

Nivio Ziviani

Fabiano Cupertino Botelho

Ph.D. em Ciência da Computação, Univer-sity of Waterloo, 1982. Professor Eméritoda UFMG, Professor Titular do Departa-mento de Ciência da Computação daUFMG, onde coordena o Laboratório paraTratamento da Informação (LATIN). Co-fundador de duas empresas especializadasem tecnologia de busca na Web, a MinerTechnology Group, vendida para o UOL /Grupo Folha de São Paulo em 1999, e aAkwan Information Technologies,vendida para a Google Inc. em 2005.Autorde três livros na área de algoritmos e co-autor de mais de cem artigos técnicos nasáreas de algoritmos, recuperação de infor-mação, compressão de textos e áreas corre-latas. Co-criador da conferência SPIRE(String Processing and InformationRetrieval) e Coordenador Geral da confe-rênciaACM SIGIR 2005, a mais importan-te do mundo na área de recuperação de in-formação. Membro da ACM (Associationfor Computing Machinery), EATCS(European Association for TheoreticalComputer Science), IEEE ComputerSociety e SBC (Sociedade Brasileira deComputação).

Mestre em Ciência da Computação,Universidade Federal de Minas Gerais,2004.

Atualmente é aluno de doutorado do De-partamento de Ciência da Computação daUniversidade Federal de Minas Gerais,onde trabalha com funções hash perfeitasmínimas para representar eficientementeum dicionário. Desenvolvedor e mantene-dor de uma biblioteca de software livreintitulada CMPH, que contém todos osalgoritmos desenvolvidos durante o seudoutorado. Especialista em desenvolvi-mento de software orientado a objetos naslinguagens Java e C++.

Niv

ioZ

ivia

ni

Consultoria em Java e C++ de

Fabiano Cupertino Botelho

com

imp

lemen

tações

emJava

eC

++

Pro

jeto

de

Alg

orit

mo

sP

ro

jeto

de

Alg

orit

mo

s

com implementações em Java e C++

Projeto deAlgoritmosProjeto deAlgoritmos

Para suas soluções de curso e aprendizado,

visite www.cengage.com.br

Page 2: Projeto de Algoritmos com implementações em Java e C++
Page 3: Projeto de Algoritmos com implementações em Java e C++
Page 4: Projeto de Algoritmos com implementações em Java e C++

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 Pau lo: Cengage Learning, 2011.

1. reimpr. da 1. ed. de 2007.

Bibliografia.ISBN 978-85-221-0821-3

1. Algoritmos de computadores 2. C++ (Linguagem de programação para computadores) 3. Dados - Estruturas (Ciência da computação) 4. Java (Linguagem de progra-mação para computadores) I. Botelho, Fabiano Cuperti-no. 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

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

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

Nivio Ziviani

Gerente Editorial: Patricia La Rosa

Editora de Desenvolvimento: Ligia Cosmo

Cantarelli

Supervisor de Produção Editorial: Fábio Gonçalves

Supervisora de Produção Gráfica: Fabiana Alencar

Albuquerque

Produtora Editorial: Renata Siqueira Campos

Copidesque: Mônica Cavalcante Di Giacomo

Revisão: Andréa Vidal

Composição: Nivio Ziviani e Fabiano Cupertino

Botelho

Capa: F.Z.Dáblio Design Studio

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

© Cengage Learning Edições Ltda.

Todos os direitos reservados. Nenhuma parte deste livro po-derá 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

, , 6 e da Lei no .6 , de de fevereiro de 8.

© Cengage Learning. Todos os direitos reservados.

ISBN- :

Cengage LearningCondomí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, visitewww.cengage.com.br

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

Para permissão de uso de material desta obra, envie seu pedido para [email protected]

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

���������������� �����������������������������������

�������������������������������������������� �����������������������������������

�������������������������

���������������������������������������������� ��������!������"#$������������%

Page 7: Projeto de Algoritmos com implementações em Java e C++
Page 8: Projeto de Algoritmos com implementações em Java e C++

&'()(*+,-./

!�01����2�� ������������������� ���3�����#���������1��0��2��%� ��������3�������������� ���������������������� ������3�4�����3���������3����������5������������������������������4�������67���8������������������������������4�����������9����2�����:�����4�����������������������������������������4����3������;!�3�������������������<�������9������

��=������������5������������������4�������������<�>���� !��������������������������3���������������������3������3�������8������3���������4���5��������3�����?�3������������3��������������������������������8������������<�>��������������������3�������3����5�������������������������������������08����������������������������=������������5������������������0����������5�����3������� 6�������������������5������3���������������������������4���������3����5���@�����������A����������4��0����������������0������������ ������������������� ��3���������������3������������������������3��<��������5�������������������������B��������3�3��<����������������� �������� ��3����������<����� ����2�����������������4���5������������������������������������4������ �������1����CDEFGHIJEHIKCLKMNOKICPCMCOIQJKRCECDEFGHIOIQJKRCLKMNOKICPCMCJEHIKC�S4�������������������������������������������<���<T�������������������4�������������������������������� S����������=���T������5���4���������������4�����8�������3������U������������8���� <������������������������������4����� ����������������T���V��4������������������3�������8�������3������������������T���������<���������4�����������3���������5���

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

WXXX YZ[\][_] ab[ZXc[d

���������������������������������T���������������4�����8�������3�������S��=���T����3������4����������4������3��T����������0��������U ������5��������� ������4������ ���e������������������������������������������ S�����5������������������0�������<����������������4�����������S���A���������T�����4��������������������������������������U 3��<��������� ���<��������������������5e��������������������������������������������������������<������4������������������������������������������������������4����f�4�S���T���������4�����4������3�����������A�����������������������������3����������������������������A���������� g���������0�������������4����������������5e������������������4��������������������3����������A������ !�����������������������������������������������������������=9��������T����8������������������ ��������������������� ������ !������� ��A���T��������������������5e������������������9������������������������������������������0��A����A�����������3�3�������3����5��� �������������9���������0�����������5����48����������������3������������������������������<�>���� h������3���������������<�����������������������03�3�������3����5�������������48���������������������������U$��������������������<�����������������++��������������������05e����������!�����������������8�����������i��������������������<������0��������5�������4���<T�������������<�����������������������

������������3�������

j������i��2�0k���lCMJKCmHnoGKFEnpEqEDrIHPEsttuvCIREFHMCnwNOCMGCnxyFGHPEsttz

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

{|}'~/

�������� ����� ���������� ���� !�3��������������� �������3���� � � � � � � � � � � � � ���V h����� ����h���!4������� ��� � � � � � � � � � � � � � V��� ��������h�������A��5��������3���� � � � � � � � � � � ������ �������������!������������5e� � � � � � � � � � � � ������V �������������������!��������� � � � � � � � � � � � ����� h��������!�������!�3������ � � � � � � � � � � � � � � � � � � V���� $��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V������ ���3����5��S���������S48��� � � � � � � � � � � � � � � V�����V �������������������������3������$��� � � � � � V������ �<����5������$�����++ � � � � � � � � � � � � � � � � � �� ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

� ������������������������������� ��V�� 6��5�� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��V�V j���������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��V�V�� ����6����������j���������� � � � � � � � � � � � � � � ��V�V�V @���� ��g��j���������� � � � � � � � � � � � � � � � ��V�� !�3������h������������� � � � � � � � � � � � � � � � � � � � � � � � V�� ������������� � � � � � � � � � � � � � � � � � � � � � � � � � � �VV�� i������������ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��V�� ���3����5�� ��¡����� � � � � � � � � � � � � � � � � � � � � � � � � � V�¢ !�3���������� � � � � � � � � � � � � � � � � � � � � � � � � � � � ¢VV�  !�3������!���A������ � � � � � � � � � � � � � � � � � � � � � � � ¢� ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ¢��A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ¢�

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

£ YZ[\][_] ab[ZXc[d

¤ ¥�����������¦����§������ ���� ?���?������ � � � � � � � � � � � � � � � � � � � � � � � � � � � � �  ������ 6���������5����?������������!����8� � � � � � � �  �����V 6���������5����?������������������!��0j�<���������� � � � � � � � � � � � � � � � � � � � � � �  ���V ����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ©V��V�� 6���������5������������������!����8� � � � � � � � ©���V�V 6���������5������������������������!��0j�<���������� � � � � � � � � � � � � � � � � � � � � � � ©���� ���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � © ����� 6���������5�����������������!����8� � � � � � � � � © ����V 6���������5�����������������������!��0j�<���������� � � � � � � � � � � � � � � � � � � � � � � ��� ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

ª «�������� ������ S�����5��6������ � � � � � � � � � � � � � � � � � � � � � � � � � � � �������� S�����5�����¬���5��� � � � � � � � � � � � � � � � � � � � � �������V S�����5�����6���5�� � � � � � � � � � � � � � � � � � � � � ��¢����� ¬������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� ����� @��­��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �V������ ®������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � �V������ �������5��������������� � � � � � � � � � � � � � � � � �������¢ S�����5��������� � � � � � � � � � � � � � � � � � � � � � � � �����V S�����5���A������ � � � � � � � � � � � � � � � � � � � � � � � � � � ��V��V�� 6��������5��i����������� ����������� � � � � � � � � �����V�V 6���������5�����������¬���5�����¬4����5�� � � � � �����V�� ��������5e��������� � � � � � � � � � � � � � � � � � � � � �� ��V�� 6��������5������<���� � � � � � � � � � � � � � � � � � � � � � �����V�� @��­����A����� � � � � � � � � � � � � � � � � � � � � � � � ��V ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���

� ���°������±��²����������� �³���� �����¬�������� � � � � � � � � � � � � � � � � � � � � � � � � � � � �¢V��V �����i������ � � � � � � � � � � � � � � � � � � � � � � � � � � � � �¢���� µ������������ � � � � � � � � � � � � � � � � � � � � � � � � � � �¢������ µ�����i���������������i������������ � � � � � � �¢�����V µ�����i����������������i������������� � � � � � � ���� ����� �3���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ©����� h��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ©����V �������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �©���� h���<����5���������¶·CNGKMm � � � � � � � � � � � � � � � � � � �©������ ��5e���h���<����5��� � � � � � � � � � � � � � � � � � � �©¢

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

¹ºc»ZX[ £X

����V ?������������ � � � � � � � � � � � � � � � � � � � � � � � �© ����� ������5������!4����� � � � � � � � � � � � � � � � � � � � � �©©����� ·CNGKMm���<���� � � � � � � � � � � � � � � � � � � � � � � � � V�� ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V���A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V��

¼ ���°������±��²���½��������� ��³��� ��������������5�������������¬�������� � � � � � � � � � VV ����� ������� ����� � � � � � � � � � � � � � � � � � � � � � � � � VV©����V 6���������5�����¬���������3���5��� � � � � � � � � V�V��V !���¬��������6���A��� � � � � � � � � � � � � � � � � � � � � � � V����V�� ���¾�������!����?������ � � � � � � � � � � � � � � V�¢��� µ������������ � � � � � � � � � � � � � � � � � � � � � � � � � � V������� µ�����i� � � � � � � � � � � � � � � � � � � � � � � � � � � � V������V µ�����i? � � � � � � � � � � � � � � � � � � � � � � � � � � � V������� !����������������µ�����i? � � � � � � � � � � � � � � V������� ��������5e��������� � � � � � � � � � � � � � � � � � � � � V�© ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V�V�A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V�V

³ ������������¿����� �¼³¢�� ����5e�i���� � � � � � � � � � � � � � � � � � � � � � � � � � � � V� ¢�V Sh���!4������� ������<� � � � � � � � � � � � � � � � � � � � V¢V¢�V�� 6���������5����������������2���!�8��=����� � � � � V¢�¢�V�V 6���������5�����������?�����!�8��=����g����������!��0j�<��������� � � � � � � � � � � � � � � � � V¢�¢�V�� 6���������5�����������?�����!�8��=����g����!����8� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � V¢©¢�V�� ���3����h��������h�=6���������5e� � � � � � � � � V �¢�� i�������<������� � � � � � � � � � � � � � � � � � � � � � � � � V �¢���� �������5����!���� � � � � � � � � � � � � � � � � � � � � V �¢���V h������� ������������<��!�T����� � � � � � � � � � V ¢¢�� i����?��3�� � � � � � � � � � � � � � � � � � � � � � � � � � � � V  ¢�� S�����5��h�����3��� � � � � � � � � � � � � � � � � � � � � � � � � � V©V¢�� ������������������������������ � � � � � � � � � � � � � � � � V©�¢�¢ µ��������������T���� � � � � � � � � � � � � � � � � � � � � � � � V©¢¢�¢�� !�3������������������S4����µ��������������T���� V© ¢�¢�V !�3������������� � � � � � � � � � � � � � � � � � � � � � � ���¢�¢�� !�3��������1�­�� � � � � � � � � � � � � � � � � � � � � � ���¢�  �������������� � � � � � � � � � � � � � � � � � � � � � � � � � ���¢�© Sh���!4������� ���®����3��<� � � � � � � � � � � � � � � � � ��� ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��¢�A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��¢

¨ ���������������À��������À��������� ¤�� �� ���������������� � � � � � � � � � � � � � � � � � � � � � � � � � �V�

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

£XX YZ[\][_] ab[ZXc[d

 ���� ���������A���� � � � � � � � � � � � � � � � � � � � � � � � �V� ���V ��������!���A����� � � � � � � � � � � � � � � � � � � � � ��� �V �������� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��V �V�� ���@�g����������� � � � � � � � � � � � � � � � � � � ��V �V�V ����������h�A����?��3�3�� ����� � � � � � � � � ��� �V�� ����������®Á���g����������� � � � � � � � � � � ��� �V�� �������5����®Á���g����vÂJEN � � � � � � � � � � � � ��� �V�� �������h�A������������� � � � � � � � � � � � � � � � ��  ���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �¢��A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �¢�

à ���Ä�����NPÅÀ��Æ����������������Æ��������� ¤³³©�� ���4����NP0�������� � � � � � � � � � � � � � � � � � � � � � � � �¢ ©���� !�3������ ��0 ����������� � � � � � � � � � � � � � � � � � �©���V !����NP0���������NP0 �<T��� � � � � � � � � � � � � � �

©�V ®��T�����!�3������!���A����� � � � � � � � � � � � � � � � � �©�©�V�� !�3�������A���������g����h������������� � � � � � �©�©�V�V ®��T�����������4����NP0��������� � � � � � � � � � �©�©�V�� !�3������!���A������������4����NP0�������� � � �©�

���i�4���3����� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ����A���T��� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���������������À++

��À�ÆÇ����� ª��§�����������À++

��À�ÆÇ����� ª�³À�����������À++

��À�ÆÇ����¤ ª¤¤¦�����������À++

��À�ÆÇ����ª ªªÃ¥�����������À++

��À�ÆÇ����� ª¼�È�����������À++

��À�ÆÇ����¼ ªÃ¤¿�����������À++

��À�ÆÇ����³ �É�Ê�����������À++

��À�ÆÇ����¨ �¤�� �����������À++

��À�ÆÇ����à ���Ë �����������À++

���ÆÌ�����Í ���ÍÎ��Æ�����Æ���¥����Ç����½����������� �¼�À����������½À�� �óÎ����Ì�����§�Ä������Ï��� �ÃÃÐ�����Î������Ñ� ¼ÉÃ

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

Ò'(Ó}Ô~/

������������������������5������������3�������!������������0���������8�������3������������������������A�����5���������������3������������������������������������������������A���0��5e�����������������������T������������������<�����������3�������������S�����9�������3���������������������������2������������0��A��������������4����3������������������������<����������������������������5e�����3�����������������A����3�������9������������������3�8����������������������������������5��������3������

������5���!������������8�������3����������������3�����������3�����������5����48���������������������������������T�����������������5�������3�3��$����h������3����$����������3�����++�����������������=�������A������4��������������T������������������3�3�������������������ÕIHÖEJHPE×FmHIKJDHNRHDØDOFEDEMJCÙÚENEDÕCNRCFEo�

ÛÜÝÞßàáÜ

S����������������������������������2������������������5�������0��������������3����������������5������������������������������������������3��<������������������������������������4����NP0������������T����� S�����������3��������������T��������������3���������9��U�� ������������3�������������������������4��������������0��������������A��5��������3������������������������0�����������3����������3�3��$����

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

£XW YZ[\][_] ab[ZXc[d

V� ������3�������8�������3������U ���5�����������������3�����������������������������������¶�������������4����������������3����5�����¡�������3������3������3����������A�������� ������������4����U ������������������������ ��������������5�������������������U �������5���������5��������������­������������������5������������������������5�������������������U ���������5��4�������������������5������<��������­����A�������� ������������������������������U�������������������4���������������������GCNGKMm��������GCNGKMm���<������� ������������������������������U �������� ����A������0����i�¢� !�3��������3��<�U ���������5���4�������<��������4�������3���������5��������3���� ����������<������������������� ��0����3��������T�������������������������3��<�� � ������������������������������U 4���A��������A�����������e��������������A�������3�3���������©� ���4����NP0��������U ����NP0���������NP0��<T���� ����<��0��5�������������������������­���3�������A����������������0���������������T�������3����������A�������������4���������A����0���8�������������<�����������������3��������A��������Ð����������Å��Ñ�� 6������������2��������������������A������4��������������������������4������������5e������������������!��������<�������3�����3��������������������4��������������������<����5e��

âãÝäåæäßÝçáßèéÜäéæêæëìÜ!���3�3�������3����5������2���������������5����������������������3������������������$������������3����$����������3�����++�������������� ������������2��A����������������4���������������4����������8�������3�������g������4����������������������������������������������������5e���������4���������� S���8������������������������������5e������5���4���5��<������A�������������4������������!�����3�������$�����++

�������3�����������������������������������3����5�������������48����!���3����5�������������48�������������48������������� ������������������������������4���������������������8���3���������������������������<������������5e��

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

YZ]í»îX[ £W

j�����������3���������3����������4������������4���������������3����5������������3����5�������������48�������<���0���������������������������=����������������5���������4������������������������������������������3�� ����A����������3��������������5�����������������������5��������������8����3�����������0������������������3��������������������������������������������������� ������������������������3�����3��������������5��� S����A���������3��������3��<�����2�����0��������������4������������������������������������3��������<���������������������������5���������������3��<��

ðÜèéÜñßççÜé

S������������������������������������2������������0��A���������3����5�����03����5����A���������<����5�������3����������������!�3��������������� ���� ò����������������������8�������������������3����5��¶��A����=�������������� �������3�3���������T�����������$�����++��������������������������2�5�����������������5�����e���������������������<��������2����������������g������0�������������������������4��U

❑!�3��������������� ���6��������������������i������0�������=�<������=������������5��������������������������¬�������6�<����5����������3���������������5������������!����5�����������������B��������¡�����������3�����������������������������5��� !������������������������03�3�������3����5��������������������$������������������4������������������5��ï����������3����������5��������0�������3������������������������������������

❑!�3��������������� ���66��������������������i������0�������=�<������=������������5��������������������������¬�������6�<����5����������3���������������5������������!����5�����������������B��������¡�����������3�����������������������������5������ ��3����������U ������5��ï����������3�������������5�������������������U ���5�������������5��������������������­���������������3���������A������0����5���������� ����������������������U ��������� 4�����������<����5��������� ¶GCNGKMm� �������������U ��4�������0���������4���������������������������������5���A����������������������������U������������������A������������������i�

❑!�3��������������� ���666��������������������i������0�������=�<������=������������5�������������������������

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

£WX YZ[\][_] ab[ZXc[d

�¬�������6�<����5���������3�����������������������������5��������3����������U ����������4����������8��������������3�������������3�������8�������3���������3��������3��<�����4����NP0������������T�������3����������A���0����������������������������������

❑���8����!�������!�3���������������������������������� �����������=������������5���������3����������������������3����������U �������������������3�������������3�������8�������3���������3��������3��<�����4����NP0������������T�������3����������A��������������������������������0�������3���������������

S���������3�����������������������������������������04�����S�������������������������������������������<����������8��������������3����������������������������3�������8�������3�����������2���������������������������4����� ����������T���V�������������3��� ������5���<��������������������������������8��������5��������¡����������������3�������!��������������T���������T���A���T������!�=�����1���������������������������������������A���T�����������!�3��A���T��������������e����������������������������4�����4���������������������� S����A���T��������������e�������4������ ��������A�3��������������4��������������� ��������������2�������������4��������� !�����A���T���������������������2�������������4���������������������5�����������2�3���h��4�����������������T������������������������������������������������������<��=����������������������T����������� S�48��������5�������3�������<��=����4�4���3������4��������������������������������������������4�4���3������������������������<��=��������3����������������������������������T����A�������8������������=���������������

�����������������<���������������8����3������������A�������������������������<������������������=���������3��������<���0�����������4�5������������������������=�����������������A�������8���������������������������������=���������3���� !����0���=����������<������ÕHNJlRIKOJ�Õpó�������������8�����������0��������������������������3����¶rIHôNEI�����������������������ÕHNJlRIKOJ�����������������Õpó�!�������=������������4�����������������NKJE���������������5�>>>�����<�3�4�õ��3������08����

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

YZ]í»îX[ £WXX

ðÜöçÞåáæÝÞß

S�����������������������3���������������������������8�������3��������������� h������������������3���������������������������3��������������������������������4�������������������������<���������������������������3�����������T�������������������05��������������������������������<����5e��4�����������T�����������������������3�����������������!������������8�������3�����������������<�����������3�����������3�����������5����48����������������������������������������������<�2�����������������<T������������������<���������� !���������3�����=�<������������������������3�������8�������3������� �������� ���������������������������������������5���3������� ��������8��������������3��������������5�������0������������������������������������������������3���A����=���������3����5��������������� ������������ �������������������3�����������������4���4���������������������������������������8�������������!�������������������02����������������������������T�����������������A�3���������

�������������������������������������������� !�3�����������A����������������������������������������������������������������

ðÜèéÜ÷ççãÜÝæø�����A���������4��������2�������������������3����������8�������<������������������������������������ ����������5e�����3����������������3����� !�����������3����������������3������������������������������5e��4������������5����������������3�����A����������������4�������������������������������������������5e�������������A��������������������������������������3���������������������������������S��3���������������������������������������������3�3��$�����++ �������5e������������������������������������5�����A��������A��5���S����3���$�����++ ��������4�����������������NKJE���������������5�ôôôùPRRùyúDmùrIûCFmHIKJDHNüÖCýC���������������$�����++

8��=������������������3������������� ����������A������������������������������

ðäéæáßþãêßÝÞÜç�������3������3�������4T�������������������������e���������������3���9����������� !3����5�����������8���������T��0

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

£WXXX YZ[\][_] ab[ZXc[d

����������������������!�4����®�����������?�������!��B���!�<����?�������i�������j�4����0 ���� ������������������ ������� �����$�����������?����������j��ÿ����������4��®��������������� ��3����S�������� ������������������i��4������2��� �������$�����������������$�� �3�4������µ��4��$����������!�������?��T���¬���������������?����h���������������?�2�������!4��!�4������������?�2i������������������2�i�3��������T���!��B����������?���������¬�������������S�����¬��3�������������������j�3���®�����i�0����4����j�����!�������������������j�4������¬����i�3�����j�4��������������������¬�2��j�¡�3������������j���h������ ��3����!3����������!�������f�3��������$�� �f�3���h���������=��S���4���������2���8��������4������������i�����������������0���������3�������$��������������������<���������2����� !����������3�����������������4�������������5�����5���4��@��­����A���������������5��������5�������5�������3�����4��������������A������4�����������������A���T����!j������i��2�0k��� �3����5��3���������������T����4����0����3�������8�������3����������A������������5������������ g��3������������������ ����i���!3�� �����B��j�4������¬����i�3��������3��e��4������3���������3�3��$�����++� ����<���������������������4����3��������3����5������0����������!��B���?2�����������­h�����������������6����������?�����!���������e����������<���������2��������4������A�������

��������4���5����������0��A���� ���������������=������������5����g����������������� ������������ S���������3����5�����03����5��������4T����3��������������������3����� ��������������������!�3��������������� ���66�!�3��������������� ���666����8����!�������!�3��������3����5����������������i���!3�������B���������¬����i����������j�������������¬����!���������� ��������� �����h�������������������¬�������������4������������i���������4�T���i����������¬�2��®��������������j�4�����6������j����������������������������������� ����j�����������0���¬��������j�4����������������j����3�?�������������¬��3��!3��µ����������h����������j���!������������03����5�������A������������4���5�������4�����3����������������������������!�������������������������i��� ��!4������i��� ���2���������������!����������������������A���¬����������������3�������j�4�����������h��A�������A������������2�¬�������?�3����!�����¬�2�������� �����!��98���������0��������������������¬�������j�����i��4���f���� ���������g��3��0����������������������3�����������U ������S�����!���������������5���������?�h�7���������������3����������<������5��������

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

YZ]í»îX[ £X£

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

?�������i��������$9����� �������4��®������� �����f�����i��������h�����!�4��3�������4������!����������������������������@�������0���������������������5��®�����!��8����� ��3������ 6�����!�­��$��?�!������1=�����S������������1�������?������������ �����j�����?�$����� �2��2������!��B������������������������!��0���i������������������!�������¬�2��������������4���������������4�� ����j����i��3������� ��������e�������������������<������������������!��A������������ �������������T�����S��������¬�����?9�����¬�����S������j����3���¬����������3����5�������������������������4������ ��"������� ��������� ��������0����������T����h������3�����������"����������������������8��������������3�������8���U � ��õ�h06 �Sõ�������"���=�����j��0����5����6�<����5���� ��������������� �����V� ¢õ�V0��i����������"!�4���������j������5����6�<����5����fff�������� ���V��©��õ©�0 �h��4���������h���������������2��� ���������������������<�������������<������5������A�����������������������������������������������3������������������������

����ÿ������vEFH·HIKqHMJExyFGHPEsttz

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

££ YZ[\][_] ab[ZXc[d

èéßñ�þãÜáÜÛÜÝçåøÞÜé�æ�æßÛ++

��������A�������3�������3���3����5������������������8����!�������!�3������� ����� <��������������4�������9����������������A���������������������������������3�������������������������������������������3���������8������ �������������������������������2�������������3�������<�������������<�5������������������������<��� ����ÿ�������������4��������������������� S4��3���� ��������������������� �����������5e�����3���������������������$���������02�����4���5��������3���<���� ����������� ��������� <����������������5e�������������������������������������3��������������0��� ������������3����5����<��������������5��������5��������<��������������4������8��������������5e�����������������������������3����<���������������S����3���$�����++ <������������<��������3���� ���������T���� ����A��������$��������������������4���������length������2���������������������������������������������������������������������� ��������� ������� ��������T��������A������++�������������������������������������������$�����������������¬���������T�����������3��������3�����������$����!��������������5e��������<���������������������������������������

���������������� �������������� �������� ��4�������� �������3����++ ��������������=�����<���������������������������A�����T������������������3���$������������=������������������3����������������������������������������������������<��������������������3����++ ��������������5��<����������������������3���$�����3���������3������� ï�����<��T��������������������� ����4���������������2�5���������4����� ����������3���������3�������ï���������������$���T�������������������������������������������4��������������������h��4��3���������3������������<�������� ��T��!����!�������������������������������2��������������3��������������������$��?�i��3���������������=�����������<����5�������������� ����ÿ�����������������������������3�������������������������<��������������5���

��4������������i������vEFH·HIKqHMJExyFGHPEsttz

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

���� ���*+'/�{-./

��� ������������������� �!"# !��"$���� � �S��3������<�2������������0�0����������!����5e����������������������������5e��������������������������������������������3� �A���������3������� g���3���������� �� ������������=�������5e��A�������������4���5��������5��������������������������4����� ¬�3��� �8­���¶�©¢������������������������������5����������������������������A�����������������8�����������5e�� !��A�������������5��a + b �����4��������������������������������������5���8������2���������������<��������a �b�¥�������������������3�����������������������3���� ��������������������������������������3�������������������������������%����������������3����������������������5��������0���������� ���������������4�����������������������4���5����������������3������������������5��������8����������������0��������5������� !�3������������������<�����������������������!�����%�����Æ��������������������������������������<���0������������5e�����������2����4�������� ��������������5�������5��� �����������9�������4�����������5��������<�������������4������������� �������������5�������5���4������������ $�����������5������T3�����������������3�����������������������������������������2�������������������5�����������������������������5����3������9������������<��������������5������T3������������������������T���4�����������������������5���������T3�������3������4������������������������������3������� ����������f����¶�©¢����&'' �Æ����������<�����5e�������������3������

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

( YZ[\][_] ab[ZXc[d

�4������ 4����� �����������5e� ������� ����T��� ������� �����������������3�������������������������������3����������2��������3��������������������������������������������2���3�����3���������3�3����������� ������������������=����������5e��4������0���<���������������������������4�����������������������3�3���������������<�������������<������3����������������¬�3��� �8­���¶�©¢�������3�3�������3����5������������������5���������3���������������5�������������T��������������A�������������T�����3��T�0���������������A��5����������������3��������������������

��) *�+��!"# !��"*�+���,��� ���!"# !�������3�3�������3����5����������������������������������������A0���e��<�5e�������������������������T������������������Æ����������������������������2������8��������������������������������� ���������������������������� ��A������ ����������3����������<�5��¶f������©¢�����0���h��� ����������� ��3����������� ������T���� ���������4���� KMJn rHHFECMn RGCI�-HCJ��$���� ����A������ ���������� ������rHHFECM�������������������������������<��������������������

S��������������3���� ������������5������������������3��3�������������������<������� !���3�3��$����<�������3�������������������������������������������¬�5������g���Æ��Ä���������������������������������������������������������������5e� ������� �4���������� S���8����� �����0��������������������5e������5���4���5������������5��<������A�������������4������������!���®�����<��g�����¶�© � ����2���A����������������4���������������4����������8�������3�������

�����������������5������3�������������3�3�������3����5������T����A�3��������������3��<����������������������4���������������������������������������������������������3�3�������������!���������5���������������������������������4�����������������2��������������������������h����4������������������ ����������3�������2�5e�����������������������������<��������������������3�������2�5e��������5e������������� �������5��� 4���5������������5��� �����������������������������������������������������3�������������4������������������������������������������� ������������5�������������������5e���������4������������������2���

����9�����5�������3�����

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

./01234Z[_º56[ 7�����A������ ����������������5��������2����������������������T���������������4�����������?���������3���������5e��4�������U�� <�5��������2���V� �4�������������������������������������������2��������������������� ����������������������A�����������5e�����������������������������������0��5������������������� g����T��� ����������5������������4�����������?�������������������������8�� !�3��� ���������5���������4����������������������������������������������3�3�������03����5����������� ¬��A��������������������������������5���������4�������������������5������������ï�����������������������0����������������������3����4�����������������8�����<�������������5e������������40�������������<���������������������8����������5e������4����������������������g��<������2���������������������������������������5���������<����������������5e�����������2����4��

��������

��8 9"!�! !�*"�+�!"�:";�<=�!"��$���� � S���8�������3�������<��������������������������������������0������ ����������4������������������e������8����������2�������3�������������������������������������� ���������������08����������������������5e�����3���������������2�������������������������A��5������5�����������������5e���������������������3��������������������������������������������0���������2�5�����������3��<������T��������4�4������������������ �����������������3��������A����������������4����4����0���������<����������1���¶�©¢�U

¶� ��������������������Æ���������� @�� ����������������3���������������������4��������T���; ���������������T������0������������3�������������������� ������3���� ����������<�20������������9��������2����������������3�������������A��������3��������������������������������������¶�� �������������������������������@������3������������������T������������������4�������������; �������������<��T�������3���������������������4��������T����������3��������48���������������������8����������T���� 6��3������������ ������������

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

> YZ[\][_] ab[ZXc[d

������A���������������������3�����������������ï����� ����A���������T��� ��������9�����T�������������5e��������������������M�9��������������������5e� ������ ���<����������������������T�����@��������3������������������������T��� ��������������04���������������������� �����������������5��� �����������������������������������������������4�����!���������������������3��������3�� ������������T���� �������������� ������ �����3�������²����������������������������������������5e�������A�����������3����������������������

���4����������������������������������� ¬�����������������������������<��������3���������������T����������0������������������������������������4������������S���������2�5�������3���������������������������������

g�����������������A��5�������3��������������������� �������������A��5�������������������� !��������������4��������<������4������������������������8�����������3�������2����!����������48�5e���U ¶� ���������������������������������������<����������3�������5e�������������������� ¶�� ������������������GCIPôCIE�¶��� �����3�����������������������������2�0����������������������������������������!���������������i��2�0k���¶�©©���� ¢ �����������3������<��������4����������������������������3�����5e����������������A������������A�����������3��������������������������������������4�������������������A��5���������������������3�����2�� !���������0��������������������������5e����������������������������������5����������������A�5������3������������g��<�������������������������������2�5�������3������������������������������������4�����������������������02��������A�����������������67����������1���¶�©� �S���8����������5e�������A����������������������������������������������A��5�������������5���������������3�������������3���������5e�������������������������������5e�����3����������S�8��������3��������������5��������������9�������������5e��������������������8����������������3������������5e������������������4�5����������5e���T����������A���������������������A��5�������3�������������������<�5�������������������Æ��������f �����f(n)

�����������������0�����������A��������3��������������4�������������n� ¬�3����¬��������!������ ¶�©¢¢��f(n)�����������������������������0�����������A��������3������������4�������������n� �����f��������<�5�������Æ�������������Æ�����3������� ¬�f(n)

������������������������������������������A��������3����������0�����n������f

��������<�5��������������������������3�������

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

./01234Z[_º56[ ?!���������8�����<��=�����A��T�����f ����������<�5����������A�0��������������������<������ò��������������������������A���������������������������������������������������������9��������2�������������������5�����������������������A�������������������3������������� �����������3��������������������������������������������������v [0..n − 1], n ≥ 1� ��������������$���@����<����������������3�������� ¬�8�f ��<�5����������A����������f(n)

���9�������������5e�����������������v ��v ��������n���������?�3��f(n) = n− 1, para n > 0.

��������������3���������������������3��������²�����

ABCDBEFEGHGIJKLMNOPLQRMRLSOTMLPUVNPLWTXPYLZ[XZOL\]_]abcdef\ghij i]kklcmn\ghij ko]oj jpoqcmrjpostu v jpowx njpoqcmystzuf{|} rjpo ~ yef ~ �wf ~��xj{ rqcm�st~uxqcmyst~uf}aog}pqcmf���������U@�������3���������������������������������������8������n ���������n ≥ 1�<�2��������n− 1 �������5e�����Ñ�U �����������������������������5e�� ���������n − 1��������������������3�������������� ?�3�n − 1 �������5e������������2S�������������������2��� ���9�������������5e�<������2�������������������������������max

������Max�������

!��������������A��5�������3���������������������������������������������������� ��� ��� �����������������������A��5��������3����������<�5��������������������������������������3���3��������������A��5�����<�5��������������������������� ��������������������������� ������������max�����3�����������3��������������������������������<�����4����������4�������������n� $��������3��������������5�������������U ���������������8�����������������������������3������������������4�������������������������������������������������������������� ¡��¡��¢£������������¤�� ������¢�� ¡¥���� �£¦ §���������  ©ª�«¬­¬

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

® YZ[\][_] ab[ZXc[d

h���������������3����=�������U���������������������������S���%�������������������������������A��5���4���������T�������������������n� SÆ��������������������������������A��5���4�����������������������n� ¬� f

���<�5����������A�����4����������������������� ���������������������3��������������������f(n)�S��������¶����������� ����������ï���������������A�0�5�������������������������n� �������������������� ��������Ä�������Æ��Ä�Ä���������4������8���������������������n

������������������4�������4����������4�5����������2���������������������3������������������<T������4���������������������������������ò��������������4�5�������4�4�������������������������T������3������������������������������������������������������������������������������������3����������������������������������������2�����������������������������������������4������������������������������� ������3�������������%�Ñ�9����� �������2�����������������3������������� ���������������������4������������������2�����3����������������������S��3������������������������A�������<�2��Æ��°������°°������� ����3�������A��������3�������������������������������������������3�������������8����������������������������������������������������¬�8�f ��<�5����������A�������� ��f(n)

���9��������3��������������������� ����� ��9��������2��������������������������������������������3�����S���������������U

melhor caso : f(n) = 1pior caso : f(n) = ncaso medio : f(n) = (n + 1)/2

S�����������������������3������������������������������� S���������������������3��������������9���������������������������������������������������������������2��n �������5e��������������������������������������������������������3���������A��������������������������� ¬�pi

<������4�4���0���������i0������3�����8�������������������������������������i0������3��������������i �������5e��������f(n) = 1× p1 + 2× p2 + 3× p3 + · · ·+ n× pn.

�����������f(n)4�����������������4�5�������4�4�������pi� ¬�������3�����������������4�4����������������������������������

pi = 1/n, 0 ≤ i < n� �����U

f(n) =1

n(1 + 2 + 3 + · · ·+ n) =

1

n

(

n(n + 1)

2

)

=n + 1

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

./01234Z[_º56[ ±!��������������������������5�������������������������������A���������A��������������������3����������������������������4�����������������������������������������������������v [0..n−1], n ≥ 1�g���3���������������������������4����������������������3���������������������3�����������<����������������3������V� S�����maxMin

�������������������������maxMin1

�����2��������������������5e��������������������������������v ���������������� ¬�8�f ��<�5����������A����������f(n)��

�9�������������5e�����������������v ��v ��������n ���������?�3��f(n) = 2(n− 1), para n > 0,

���������������������������������

ABCDBEFEGH²³PQJTPTZORµLWNMTORQRMRLSOTMLPUVNPLTLP¶ZNPL\]_]abcdef\ghij i]kklcml~wen\ghij ko]oj jpo tu qcml~werjpostu v jpowx njpoqcmystzuv q~wystzuf{|} rjpo ~ yef ~ �wf ~��xnj{ rst~u ·qcmxqcmyst~ufj{ rst~u �q~wxq~wyst~uf�jpoqcml~wtu ypa jpot¹ufqcml~wtzu yqcmfqcml~wteu yq~wf}aog}pqcml~wf��

S���3������V������<�������������������i����4�����������0����5�� v [i] < min �������������������������������������5��v [i] > max

�<����g���������������3���������������������3������������������������5�������������������Umelhor caso : f(n) = n− 1pior caso : f(n) = 2(n− 1)caso medio : f(n) = 3n/2− 3/2

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

f(n) = n− 1 +n− 1

2=

3n

2− 3

2, para n > 0.

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

º YZ[\][_] ab[ZXc[d

ABCDBEFEGH»³PQJTPTZORµLPTJ¼LMRWRQRMRLSOTMLPUVNPLTLP¶ZNPL\]_]abcdef\ghij i]kklcml~w¹n\ghij ko]oj jpo tu qcml~w¹rjpostu v jpowx njpoqcmystzuv q~wystzuf{|} rjpo ~ yef ~ �wf ~��xnj{ rst~u ·qcmxqcmyst~ufaika j{ rst~u �q~wxq~wyst~uf�jpoqcml~wtu ypa jpot¹ufqcml~wtzu yqcmfqcml~wteu yq~wf}aog}pqcml~wf��

�������������9�������������5e� �����2���� �A�������4����������4������3���������������������������4����; !��������������������3������3������U� ������������������v ���������������0������4���8�������������������������������5����������������������4���8���������������������<���������������3�������������dn/2e½�������5e��V S��A�����4������4���8����������������������������������dn/2e − 1 �������5e��� S�T������4������4���8����������������������������������dn/2e − 1 �������5e��

��

��

Contém o máximo

Contém o mínimo

e e e · · ·

· · ·

e

e e e e

¾¿DÀBEGHGÁRMON µLWTv TPWLNÂÂXSYLZ[XZOLÂÃ!����������5������3������������������������������������������03��������ÄÅÆ¢�©ª� d e Ç�¤�¡����  Æ¢�©ª����ÈÉ �  x Ç¢¡�Ê¡ ��� �� Ë¢��Ë¢ ��  �£ª� dxe���� ����� ��¡ �����£ ���¡�����¢��¢���x¬Ì�¡ �¡�Æ��¡���Æ¢�©ª�b c Ç�¤�¡���� Æ¢�©ª����ÈÉ bxc ���� ����� ��¡������£ ���¡ ����¢��¢���x¬  e = 2, 71828 . . .  �£ª�

dee = 3�bec = 2�d−ee = −2�b−ec = −3¬

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

Nivio Ziviani

com implementações em Java e C++

Projeto deAlgoritmosProjeto deAlgoritmos

Algoritmos e estruturas de dados formam o núcleo da ciência da computação, sendo os componentesbásicos de qualquer software. Aprender como programar computadores está intimamente ligado aalgoritmos, já que programas são formulações concretas de algoritmos. Aprendê-los é crucial paraqualquer pessoa que deseja desenvolver softwares de qualidade.

Esta obra apresenta os principais algoritmos e estruturas de dados conhecidos. As técnicas de projetode algoritmos são ensinadas de forma simples, seguindo o paradigma de orientação a objetos, pormeio de refinamentos sucessivos até o nível de uma implementação na linguagem Java, e todoprograma 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 deordenação e de pesquisa em memórias primária e secundária; algoritmos em grafos e processamentode cadeias de caracteres; técnicas de análise de algoritmos; paradigmas de projeto de algoritmos; eestudo 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 reaproveita-mento de código.

Informação sobre o comportamento teórico e prático dos algoritmos, fornecendo uma base decomparação entre os algoritmos.

Mais de 156 exercícios propostos dos quais 58 com soluções; 195 programas em Java e 195programas 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 .

Livro-texto para cursos de Ciência da Computação, Matemática Computacional, Sistemas de Infor-maçã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 é igual-mente útil para profissionais engajados no desenvolvimento de software nas linguagens Java e C++.

www.dcc.ufmg.br/algoritmos-java

Aplicações

Outras Obras

Algoritmos e Lógica de Programação

Compiladores: Princípios e Práticas

Estrutura de Dados e

Algoritmos em C++

Introdução à Ciência da Computação

Introdução aos Fundamentos da

Computação

Modelos Clássicos de Computação

Projeto de Algoritmos: Com

Implementações em Pascal e C –

2 Edição Revista e Ampliada

Marco Antonio Furlan de Souza,Marcelo Marques Gomes,Marcio Vieira Soares eRicardo Concilio

Kenneth C. Louden

Adam Drozdek

Ricardo Daniel Fedeli,Enrico Giulio Franco Polloni eFernando Eduardo Peres

Newton José Vieira

Flávio Soares Corrêa da Silva eAna Cristina Vieira de Melo

Nivio Ziviani

a

Nivio Ziviani

Fabiano Cupertino Botelho

Ph.D. em Ciência da Computação, Univer-sity of Waterloo, 1982. Professor Eméritoda UFMG, Professor Titular do Departa-mento de Ciência da Computação daUFMG, onde coordena o Laboratório paraTratamento da Informação (LATIN). Co-fundador de duas empresas especializadasem tecnologia de busca na Web, a MinerTechnology Group, vendida para o UOL /Grupo Folha de São Paulo em 1999, e aAkwan Information Technologies,vendida para a Google Inc. em 2005.Autorde três livros na área de algoritmos e co-autor de mais de cem artigos técnicos nasáreas de algoritmos, recuperação de infor-mação, compressão de textos e áreas corre-latas. Co-criador da conferência SPIRE(String Processing and InformationRetrieval) e Coordenador Geral da confe-rênciaACM SIGIR 2005, a mais importan-te do mundo na área de recuperação de in-formação. Membro da ACM (Associationfor Computing Machinery), EATCS(European Association for TheoreticalComputer Science), IEEE ComputerSociety e SBC (Sociedade Brasileira deComputação).

Mestre em Ciência da Computação,Universidade Federal de Minas Gerais,2004.

Atualmente é aluno de doutorado do De-partamento de Ciência da Computação daUniversidade Federal de Minas Gerais,onde trabalha com funções hash perfeitasmínimas para representar eficientementeum dicionário. Desenvolvedor e mantene-dor de uma biblioteca de software livreintitulada CMPH, que contém todos osalgoritmos desenvolvidos durante o seudoutorado. Especialista em desenvolvi-mento de software orientado a objetos naslinguagens Java e C++.

Niv

ioZ

ivia

ni

Consultoria em Java e C++ de

Fabiano Cupertino Botelho

com

imp

lemen

tações

emJava

eC

++

Pro

jeto

de

Alg

orit

mo

sP

ro

jeto

de

Alg

orit

mo

s

com implementações em Java e C++

Projeto deAlgoritmosProjeto deAlgoritmos

Para suas soluções de curso e aprendizado,

visite www.cengage.com.br