Entendendo Algoritmos – 2ª Edição

Um guia ilustrado para programadores e outros curiosos

Entendendo Algoritmos – 2ª Edição
× Entendendo Algoritmos – 2ª Edição

Entendendo Algoritmos – 2ª Edição

Compartilhar

Autor: Aditya Y. Bhargava

ISBN impresso: 978-85-7522-929-3
ISBN ebook: 978-85-7522-930-9
Ano: 2026
Páginas: 328
Preço: R$ 96,00

Opine sobre este livro

Descrição do livro

Os algoritmos mais utilizados já foram descobertos, testados e comprovados. O livro Entendendo Algoritmos, Segunda Edição torna o aprendizado deles algo extremamente simples. Com explicações didáticas, mais de 400 ilustrações divertidas e exemplos relevantes, esta é a maneira perfeita de dominar o poder dos algoritmos — sem exigir conhecimentos avançados de matemática!

Entendendo Algoritmos, Segunda Edição ensina os algoritmos mais importantes para acelerar seus programas, simplificar seu código e resolver problemas comuns de programação. Comece com tarefas como ordenação e busca e, em seguida, desenvolva suas habilidades para enfrentar problemas avançados, como compressão de dados e IA. Você aprenderá a analisar os trade-offs de desempenho entre diferentes algoritmos. Esta nova edição aborda árvores, problemas NP-completos e códigos atualizados para Python 3.

O que este livro inclui:

• Algoritmos de busca, ordenação e em grafos

• Estruturas de dados como arrays, listas, tabelas hash, árvores e grafos

• Problemas NP-completos e algoritmos gananciosos

• Exercícios e exemplos de código

Não são necessários conhecimentos avançados de matemática nem de programação.

Aditya Bhargava é engenheiro de software com formação em Ciência da Computação e em Belas Artes. Ele escreve sobre programação no blog adit.io.

O editor técnico deste livro foi David Eisenstat.

“Resume um semestre inteiro de Algoritmos e Estruturas de Dados em explicações e diagramas fáceis de digerir, sem exigir conhecimento profundo dos conceitos matemáticos subjacentes.” – Katie Sylor-Miller, Etsy

“Uma combinação rara de instrução eficaz com leitura prazerosa. Não existe recurso melhor do que este livro.” – Ben Vinegar, Syntax.fm

“Uma jornada lúcida e lindamente ilustrada pelo mundo dos algoritmos e estruturas de dados.” – Stephen Diehl, Zerolink

“O livro número um que recomendo a todos os novos engenheiros e também aos seniores que desejam aprimorar suas habilidades. Ele se destaca por permitir que você realmente entenda os algoritmos, em vez de apenas memorizar o código.” – Alexander Manning, BlockVer menos ▲

Sumário

  • Apresentação
  • Prefácio
  • Agradecimentos
  • Sobre este livro
  • Sobre o autor
  • 1 Introdução a algoritmos
  • O que você aprenderá sobre desempenho
  • O que você aprenderá sobre a solução de problemas
  • Pesquisa binária
    • Uma maneira melhor de buscar
    • Tempo de execução
  • Notação big O
    • Tempo de execução dos algoritmos cresce a taxas diferentes
    • Vendo diferentes tempos de execução big O
    • A notação big O estabelece o tempo de execução para a pior hipótese
    • Alguns exemplos comuns de tempo de execução big O
    • O caixeiro-viajante
  • Recapitulando
  • 2 Ordenação por seleção
  • Como funciona a memória
  • Arrays e listas encadeadas
    • Listas encadeadas
  • Arrays
  • Terminologia
  • Inserindo algo no meio da lista
  • Exclusões
  • Qual é mais usado: arrays ou listas encadeadas?
  • Ordenação por seleção
  • Exemplo de código
  • Recapitulando
  • 3 Recursão
  • Recursão
  • Caso-base e caso recursivo
  • A pilha
    • A pilha de chamada
    • A pilha de chamada com recursão
  • Recapitulando
  • 4 Quicksort
  • Dividir para conquistar
  • Quicksort
  • Notação big O revisada
    • Merge sort versus quicksort
    • Caso médio versus pior caso
  • Recapitulando
  • 5 Tabelas hash
  • Tabelas hash
  • Funções hash
  • Utilização
    • Usando tabelas hash para pesquisas
    • Evitando entradas duplicadas
    • Utilizando tabelas hash como cache
    • Recapitulando
  • Colisões
  • Desempenho
    • Fator de carga
    • Uma boa função hash
  • Recapitulando
    • 6 Pesquisa em largura
    • Introdução a grafos
    • O que é um grafo?
    • Pesquisa em largura
      • Encontrando o caminho mais curto
      • Filas
    • Implementando o grafo
    • Implementando o algoritmo
      • Tempo de execução
    • Recapitulando
    • 7 Árvores
    • Sua primeira árvore
      • Diretórios de arquivos
    • Uma odisseia no espaço: Pesquisa em profundidade
      • Uma definição mais precisa de árvores
    • Árvores binárias
    • Codificação de Huffman
    • Recapitulando
    • 8 Árvores balanceadas
    • Um ato de equilíbrio
      • Melhorando a velocidade de inserção com árvores
    • Árvores menores são mais rápidas
    • Árvores AVL: um tipo de árvore balanceada
      • Rotações
      • Como a árvore AVL sabe quando é hora de rotacionar?
    • Árvores splay
    • Árvores B
      • Qual a vantagem de utilizar árvores B?
    • Recapitulando
    • 9 Algoritmo de Dijkstra
    • Trabalhando com o algoritmo de Dijkstra
    • Terminologia
    • Adquirindo um piano
    • Arestas com pesos negativos
    • Implementação
    • Recapitulando
  • 10 Algoritmos gulosos
  • O problema do cronograma da sala de aula
  • O problema da mochila
  • O problema da cobertura de conjuntos
    • Algoritmos de aproximação
    • Código para o exemplo
    • Calculando a resposta
    • Conjuntos
    • De volta ao código
  • Recapitulando
  • 11 Programação dinâmica
  • O problema da mochila (revisitado)
    • A solução simples
    • Programação dinâmica
  • Perguntas frequentes sobre o problema da mochila
    • O que acontece se você adicionar um item?
    • O que acontece se você alterar a ordem das linhas?
    • É possível preencher a tabela a partir das colunas, em vez das linhas?
    • O que acontece se você adicionar um item menor?
    • Você consegue roubar frações de um item?
    • Otimizando o seu itinerário de viagem
    • Lidando com itens com interdependência
    • É possível que a solução requeira mais de dois subproblemas?
    • É possível que a melhor solução não utilize a capacidade total da mochila?
  • Maior substring comum
    • Criando a tabela
    • Preenchendo a tabela
    • A solução
    • Maior subsequência comum
    • Maior subsequência comum – solução
  • Recapitulando
  • 12 K-vizinhos mais próximos
  • Classificando laranjas versus toranjas
  • Criando um sistema de recomendações
    • Extração de características
  • Regressão
    • Escolhendo boas características
  • Introdução ao aprendizado de máquina
    • OCR
    • Criando um filtro de spam
    • Prevendo a bolsa de valores
    • Recapitulando
    • 13 Próximos passos
    • Regressão linear
    • Índices invertidos
    • A transformada de Fourier
    • Algoritmos paralelos
    • map/reduce
    • Filtro de Bloom e HyperLogLog
      • Filtros de Bloom
      • HyperLogLog
    • HTTPS e troca de chaves de Diffie-Hellman
    • Hashing sensível à localidade
    • Heaps mínimos e fila de prioridade
    • Programação linear
    • Epílogo
    • A Desempenho das árvores AVL
    • B Problemas NP-difícil
    • Problemas de decisão
    • O problema da satisfatibilidade
    • Difícil de resolver, fácil de verificar
    • Reduções
    • NP-difícil
    • NP-completo
    • Recapitulando
    • C Respostas dos exercícios
    • Índice remissivo
Ver sumário completo ▼

Sobre o autor

Aditya Y. Bhargava

Aditya Bhargava é um engenheiro de software com experiência tanto em Ciência da Computação quanto em Artes Plásticas. Ele tem um blog sobre programação em adit.io.… Ver perfil completo ▶