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 é:
- Escolher um pivô;
- Separar elementos menores;
- Separar elementos maiores;
- 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
- Livro: Entendendo Algoritmos (Grokking Algorithms) — Aditya Bhargava
- Site oficial do autor
https://adit.io/ - Repositório com exemplos do livro
https://github.com/egonSchiele/grokking_algorithms - Visualgo (visualização de algoritmos)
https://visualgo.net/ - Big-O Cheat Sheet
https://www.bigocheatsheet.com/ - LeetCode
https://leetcode.com/