Algoritmos em Java Busca, ordenação e análise
Guilherme SilveiraPrefácio
Sobre o autor
Meu nome é Guilherme Silveira, e aprendi a programar aos 9 anos. Meu irmão foi meu professor particular, que me instigou a criar pequenos jogos em Basic. Trabalho com desenvolvimento de software desde meu primeiro estágio em 1996. Apesar de ter trabalhado por um bom tempo com Visual Basic, C e C++, cresci como profissional utilizando a linguagem Java, que até hoje é a minha principal ferramenta. Entretanto, nunca me mantive restrito a ela - apesar do gosto pessoal. Por gostar de ensinar computação desde criança, acabei por fundar junto ao Paulo Silveira a Caelum em 2004. Hoje sou responsável pelos cursos da Alura e escrevo livros para a Casa do Código.
Participei de diversas maratonas de programação, inclusive fazendo parte da equipe da USP ganhadora de medalhas de ouro nas competições sul americanas, e participando nas finais mundiais de programação no Japão e Canadá. Como a capacidade de pensamento lógico aplicada ao desenvolver algoritmos utilizados nas maratonas me ajudaram muito no dia a dia de desenvolvedor, aproveitei a oportunidade para compartilhar um conhecimento base de algoritmos de ordenação e busca para quem está começando na área de desenvolvimento de software, ou gostaria de entender como as coisas funcionam por trás.
Quem nunca jogou baralho, acompanhou os jogos da Copa do Mundo, precisou pesquisar preço para comprar um produto, tentou descobrir quem era o melhor dentro de um grupo de pessoas em uma competição, ou ainda usou uma agenda de contatos em papel ou digital? Todos esses são exemplos reais de ordenação e busca que usamos no dia a dia, sem perceber!
Baseado nas maratonas de programação, trago exemplos reais de uso de ordenação e busca que temos diariamente. Também implemento algoritmos de uma maneira que tenta simular o que nós, seres humanos, já fazemos no nosso cotidiano.
O caminho com algoritmos
Este livro foca em algoritmos de busca e ordenação, que aparecem em nosso dia a dia desde crianças. Se você já jogou buraco, truco ou rouba-monte, já ordenou as cartas na sua mão. Se já torceu para um time de futebol durante a Copa do Mundo, já viu a tabela ordenada dos times por grupo, durante a primeira fase.
Se você já usou uma lista telefônica ou um dicionário em papel, já fez uma busca "binária". Se você não é da geração do papel, ao procurar um contato na sua agenda do celular, você já deve ter feito a mesma busca. Se você já teve, pelo menos, três notas de dinheiro em uma carteira, já as ordenou da maior para a menor, ou da menor para a maior, para ficar mais fácil encontrá-las.
Tudo isso sem perceber, sem piscar, sem pensar. Ordenação e buscas são tão naturais no nosso dia a dia que não percebemos sua presença ubíqua, e como o nosso cotidiano é mais fácil com elas.
Na computação, a realidade é similar: quer resolver problemas complexos de lógica? Muitos deles passam por conceitos básicos de ordenação e busca. O problema é tão famoso que matemáticos (cientistas da computação?) famosos estudaram e criaram maneiras geniais de como fazer tais tarefas consumindo menos tempo - ou menos memória, dependendo do caso.
Neste livro, veremos como funcionam, como implementar e como já usamos diversos desses algoritmos na nossa rotina.
Na prática, raramente um desenvolvedor implementa buscas básicas e ordenação em uma empresa; esse código já está feito para nós. Mas entendê-los e ser capaz de recriá-los nos leva a um conhecimento que é utilizado no dia a dia de todo programador: o pensamento lógico e a quebra de problemas em partes menores que podem ser resolvidas com algoritmos que conhecemos.
Passei 7 anos desenvolvendo algoritmos para os mais diversos problemas na minha equipe de maratona. Este livro é uma introdução para os problemas que atacávamos. Espero que eles sirvam para incentivá-lo a desenvolver seu lado de raciocínio lógico e solucionador de problemas.
Público-alvo e pré-requisitos
Quem está estudando algoritmos de ordenação e busca na faculdade e gostaria de entendê-los de uma forma mais natural, como eles são usados no nosso cotidiano inconscientemente, poderá se beneficiar com o livro. Desenvolvedores que já estão acostumados a usar esses algoritmos, mas que queiram conhecer como eles funcionam por trás, e alunos que querem participar de maratonas de programação poderão tirar proveito do que compartilhamos aqui também.
Professores que ensinam introdução a algoritmos através de ordenação e busca poderão utilizar o livro como material didático para seus alunos, uma vez que cobrimos os principais algoritmos de ordenação, busca linear e binária.
Para acompanhar o conteúdo deste livro, basta conhecer a linguagem Java. Não há necessidade de conhecer Orientação a Objetos a fundo. Quem já domina outras linguagens não terá dificuldades em aprender o pouco que usamos de Java à medida que estuda o livro. Para quem está começando com programação e não conhece Java, será um pouco mais puxado. Dê uma folheada e veja se a maneira como a linguagem é mostrada o deixa confortável em seus estudos.
Sumário
- 1. Já conheço os problemas, mas quem são as soluções? Os algoritmos.
- 2. Como a ordenação pode nos ajudar
- 3. Selecionando e ordenando
- 4. Inserindo e ordenando: o Insertion Sort
- 5. Alguns componentes de um algoritmo
- 6. Comparando algoritmos e a análise assintótica
- 7. Intercalando arrays pré-ordenados
- 8. Intercalando baseado em um único array
- 9. Diversas simulações do intercala()
- 10. O algoritmo Merge Sort
- 11. Encontrando a posição relativa de um elemento
- 12. Colocando um elemento no seu lugar: o pivô
- 13. Pivotando um array por completo
- 14. O quick sort
- 15. A busca linear
- 16. A busca binária
- 17. Análise assintótica das buscas
- 18. Análise assintótica das ordenações
- 19. Conclusão
Dados do produto
- Número de páginas:
- 462
- ISBN:
- 978-85-5519-243-2
- Data publicação:
- 01/2017