Algoritmos

A receita pra resolver um problema — busca, ordenação, listas, mapas, árvores; e por que um algoritmo é "rápido" ou "lento"

A história dos algoritmos — de Euclides e Al-Khwarizmi até o Clean Code, passando por linguagem de máquina, ALGOL inventando o for/while/if, Knuth formalizando estruturas de dados, e a chegada da OO.

Visão Geral

if/else, switch, for, while, do-while — o jeito de mandar o algoritmo seguir um caminho ou repetir um bloco. O que ALGOL inventou em 1958 e o C consolidou.

Estruturas de Controle

Empacotar lógica em blocos reutilizáveis com nome próprio. E a função que chama a si mesma — recursão, pilha de chamadas, e quando vale a pena.

Funções e Recursão

Vocabulário pra dizer se um algoritmo escala — O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ). Por que dois loops aninhados em 1 milhão de itens trava a aplicação.

Big O

A estrutura mais básica — sequência indexada de itens. Quando usar array fixo, lista dinâmica (ArrayList) ou linked list. O que cada uma custa em memória e tempo.

Arrays e Listas

Duas formas opostas de tirar um item: a pilha (LIFO — último entra, primeiro sai) e a fila (FIFO — primeiro entra, primeiro sai). Botão "voltar" do navegador, fila de impressão, undo/redo.

Pilha e Fila

Busca por chave em tempo constante. Como o HashMap do Java e o dict do Python funcionam por baixo — função hash, colisões, fator de carga, rehashing.

Hash / Dicionário

Hierarquia + busca rápida. Árvore binária, BST, AVL, Red-Black, B-Tree. Onde aparecem na vida real: sistema de arquivos, DOM do navegador, índices de banco de dados.

Árvores

Relações entre entidades — vértices e arestas. BFS, DFS, Dijkstra (caminho mais curto). Onde aparecem: rede social, mapa de ruas no GPS, dependências entre tarefas.

Grafos

Linear vs binária — encontrar um item numa coleção. Por que a busca binária precisa estar ordenada e quanto mais rápida fica em listas grandes.

Busca

Bubble, selection, insertion, merge, quick — diferentes formas de colocar uma lista em ordem. Por que algumas são minutos mais lentas que outras pro mesmo input.

Ordenação

Programação Dinâmica (memoização), algoritmos gulosos e backtracking. Técnicas pra problemas que não cedem a uma volta só — precisam de estratégia.

Avançados