diogodev_
Conteúdo

Resumo do livro Entendendo Algoritmos

"Entendendo Algoritmos" (Grokking Algorithms), de Aditya Bhargava, é um dos melhores livros para quem está começando a estudar algoritmos e estruturas de dados. Com uma linguagem simples e muitos exemplos visuais, o livro apresenta conceitos fundamentais da computação de forma prática e acessível.

Por que estudar algoritmos?

Independentemente da linguagem utilizada, entender algoritmos ajuda a:

  • Resolver problemas de forma mais eficiente;
  • Escrever código mais performático;
  • Entender estruturas de dados;
  • Se preparar para entrevistas técnicas;
  • Evoluir como desenvolvedor.

O livro aborda esses conceitos de forma gradual, tornando o aprendizado mais simples.

Busca Binária

Um dos primeiros algoritmos apresentados é a busca binária.

Ao invés de percorrer todos os elementos de uma lista, ela divide continuamente o espaço de busca pela metade.

Imagine a lista:

1 3 5 7 9 11 13

Queremos encontrar o número 7.

Fluxo:

7

Comparar com o meio

Eliminar metade da lista

Encontrar resultado

Complexidade:

O(log n)

Exemplo em Python:

def binary_search(numbers, target):

low = 0
high = len(numbers) - 1

while low <= high:

middle = (low + high) // 2
guess = numbers[middle]

if guess == target:
return middle

if guess > target:
high = middle - 1
else:
low = middle + 1

return None

Big O

Big O é uma notação utilizada para medir a eficiência dos algoritmos.

Algumas complexidades comuns:

ComplexidadeExemploO(1)Hash TableO(log n)Busca BináriaO(n)Percorrer listaO(n log n)QuicksortO(n²)Bubble SortO(n!)Problemas combinatórios

Entender Big O é importante para escolher a melhor solução para cada problema.

Recursão

Recursão ocorre quando uma função chama a si mesma.

Exemplo clássico: fatorial.

def factorial(number):

if number == 1:
return 1

return number * factorial(number - 1)

Fluxo:

5!

5 × 4!

4 × 3!

3 × 2!

2 × 1

Embora elegante, recursão deve ser utilizada com cuidado para evitar estouro de pilha.

Quicksort

Quicksort é um dos algoritmos de ordenação mais eficientes.

A ideia é:

  1. Escolher um pivô;
  2. Separar elementos menores;
  3. Separar elementos maiores;
  4. Repetir o processo recursivamente.

Exemplo:

5 1 7 3 8

Pivô = 5

1 3 | 5 | 7 8

Complexidade média:

O(n log n)

Tabelas Hash

Hash Tables permitem acesso extremamente rápido aos dados.

Exemplos:

  • Dictionary em Python;
  • Map em JavaScript;
  • Dictionary em C#.

Exemplo:

prices = {
"banana": 4,
"apple": 2,
"orange": 3
}

Consultar um item possui complexidade:

O(1)

Hash Tables estão presentes em praticamente toda aplicação moderna.

Pesquisa em Largura (BFS)

Breadth-First Search é utilizada em grafos para encontrar caminhos.

Exemplo:

Você

Amigo A

Amigo B

Amigo C

A BFS explora primeiro os nós mais próximos.

Aplicações:

  • Redes sociais;
  • GPS;
  • Jogos;
  • Sistemas de recomendação.

Algoritmo de Dijkstra

Dijkstra é utilizado para encontrar o caminho de menor custo entre dois pontos.

Exemplo:

Casa

Mercado

Trabalho

Aplicações:

  • GPS;
  • Roteamento de redes;
  • Sistemas de navegação.

A ideia é sempre escolher o caminho com menor custo acumulado.

Programação Dinâmica

Programação dinâmica é utilizada para resolver problemas complexos dividindo-os em subproblemas menores.

Exemplos:

  • Mochila (Knapsack Problem);
  • Comparação de textos;
  • Distância entre palavras;
  • Sequência de Fibonacci.

A principal vantagem é evitar cálculos repetidos.

Algoritmos Gulosos

Algoritmos gulosos fazem sempre a escolha que parece ser a melhor naquele momento.

Exemplo:

Problema da cobertura de estações de rádio.

Em muitos casos, a solução ótima é encontrada de forma eficiente.

Grafos

Grafos aparecem em inúmeros problemas do mundo real.

Exemplos:

  • Redes sociais;
  • Mapas;
  • Dependências entre serviços;
  • Sistemas de recomendação.

Um grafo é composto por:

  • Nós;
  • Arestas.
A ----- B
\ /
C

Grande parte dos algoritmos modernos utiliza grafos.

O que mais gostei no livro

Alguns pontos que tornam o livro excelente:

  • Linguagem simples;
  • Muitos exemplos visuais;
  • Explicações intuitivas;
  • Código fácil de entender;
  • Introdução gradual aos conceitos.

É um livro ideal para quem está começando em estruturas de dados e algoritmos.

Vale a pena?

Na minha opinião, sim.

"Entendendo Algoritmos" é um dos melhores livros introdutórios para desenvolvedores que desejam compreender melhor como resolver problemas e escrever soluções mais eficientes.

Mesmo para quem já programa, ele ajuda a fortalecer conceitos fundamentais da ciência da computação.

Conclusão

Algoritmos e estruturas de dados são conhecimentos que acompanham qualquer desenvolvedor durante toda a carreira. "Entendendo Algoritmos" consegue apresentar esses conceitos de forma clara e prática, tornando assuntos que normalmente parecem complexos muito mais acessíveis.

Se você deseja fortalecer sua base em programação, este é um dos livros que mais vale a pena ler.

Saiba mais