Galho Algoritmos — design e plano
Contexto
Segundo galho da Camada A do meta-plano de Fundamentos
(00-Meta/specs/2026-06-15-fundamentos-meta-planejamento-design.md): refatorar o monólito
03-Dominios/Fundamentos/Algoritmos.md (601 linhas) numa sub-trilha de notas atômicas em 3 fases.
Interview-critical (★, Fase 1 da Senda Entrevistas). Mesmo padrão tronco/galhos dos galhos
Complexidade de Software e Estruturas de Dados (ED).
Fronteira-chave (dono da teoria de complexidade): ED delegou a teoria de complexidade a este galho. Logo Algoritmos é o dono canônico de: análise de complexidade (Big-O, Θ/Ω, best/average/worst, amortizado), recorrências e Teorema Mestre, e os algoritmos clássicos (sorting, searching, two pointers, sliding window, recursão, divide & conquer, DP, greedy, backtracking). A nota Big-O (02) é o destino dos links de complexidade vindos de ED.
Decisões herdadas de ED (resolvidas neste galho, 2026-06-17)
- Seção “4 linguagens” — targeted, NÃO blanket. Diferente de ED (onde toda estrutura tem
divergência de runtime), em Algoritmos a maioria são técnicas que você implementa — sem
história cross-linguagem. Tratamento 4-linguagens COMPLETO só onde a stdlib faz o trabalho e
cai em entrevista:
- Ordenação (07): TimSort (Java objetos / Python), dual-pivot quicksort (Java primitivos), pdqsort (Go), V8 TimSort (JS). “Que sort sua linguagem usa?”
- Busca (08):
Arrays.binarySearch/Collections.binarySearch(Java),bisect(Python),sort.Search/slices.BinarySearch(Go), ausência built-in em JS. - Demais notas: código idiomático em 1–2 linguagens + callout “particularidades por
linguagem” quando houver divergência real (limite de recursão Python ~1000 vs Java ~10⁴
frames; ausência de TCO no Java;
BigInteger/overflow; gerador vs lista materializada em DP). Sem forçar colunas de 4 linguagens onde não há divergência.
- Teto de prosa = 2400 linhas SÓ NESTE GALHO (permissão, não alvo; código NÃO conta) — igual ED, por consistência e porque Big-O / Teorema Mestre / DP rendem fundo. Sem o blanket 4-linguagens, a maioria das notas aterrissa naturalmente ~500–900 linhas; o teto é liberdade pra ir fundo onde o tema pede, nunca licença pra padding.
- P/NP — teoria formal vai pro galho 10 (Teoria da Computação); Algoritmos fica com a face prática. O meta-plano já atribui “complexidade P/NP” ao galho 10. Algoritmos NÃO duplica a teoria formal (redução, NP-completude, Cook-Levin). Em vez disso ganha a nota 13 (Intratabilidade prática), que linka pra frente ao galho 10 quando nascer. Aplicação de feedback-redundancia-entre-notas (linka, não duplica).
Fronteira com grafos (rígido)
A seção inteira “Algoritmos em Grafos” do monólito (BFS, DFS, Dijkstra, Bellman-Ford,
topological sort, A*, Floyd-Warshall) NÃO entra neste galho — esses algoritmos moram em
Estruturas de Dados/11 - Grafos - travessia e algoritmos.md. As notas 11 (greedy) e 14
(capstone) apenas linkam pra lá ([[11 - Grafos - travessia e algoritmos]]). Redundância via
link, não duplicação de conteúdo.
Preservação (rígido)
A seção “Na prática (da minha experiência)” do monólito tem experiências REAIS do usuário. Relocar, NUNCA refazer/fabricar (feedback-no-fabrication):
- MedEspecialista — endpoint de busca O(n×m) → coluna desnormalizada + índice composto → O(log n) → nota 02 (Big-O).
- Digidados —
list.contains()em loop O(n²) →HashSet.contains()O(n) → nota 02 (Big-O). - Prática de patterns (NeetCode 150; “reconhecer padrões, não decorar soluções”) → nota 14 (capstone).
Recursos (cursos/livros/prática), vocabulário bilíngue e patterns de entrevista do monólito → migrar (capstone 14 + por nota onde couber).
Roster de notas (14 base; pode crescer por split)
Iniciado — análise e fundamentos
- O que é um algoritmo — correção, terminação, generalidade; algoritmo vs implementação; as 4 dimensões avaliadas em entrevista (intro mais leve)
- Análise de complexidade: Big-O — comportamento assintótico, hierarquia O(1)→O(n!), regras práticas, notação O/Θ/Ω, best/average/worst case. Nota-âncora (destino dos links de complexidade de ED). Recebe as 2 experiências reais de produção.
- Análise amortizada — custo amortizado; métodos agregado / contábil (banker’s) / potencial (physicist’s); dynamic array doubling como caso canônico (flag: fundir na 02 se ficar fina)
- Recursão — base/recursive case, garantia de progresso, call stack, recursão vs iteração, tail recursion (e ausência de TCO no Java), stack overflow e limites de profundidade por linguagem
Adepto — algoritmos clássicos
- Recorrências e o Teorema Mestre — T(n)=a·T(n/b)+f(n), os 3 casos, recursion-tree, método da substituição, menção a Akra-Bazzi (flag: fundir na 06 se ficar fina)
- Divisão e conquista — estratégia dividir/resolver/combinar; merge sort, quicksort (partição, escolha de pivô), closest pair of points, Karatsuba; liga ao Teorema Mestre (05)
- Ordenação — comparativo (bubble/insertion/selection/merge/quick/heap/Tim/counting/radix), estabilidade, in-place, comparison vs non-comparison, limite inferior Ω(n log n). Tratamento 4-linguagens completo dos stdlib.
- Busca — linear, binary search (template confiável, off-by-one, overflow), variações (lower/upper bound, busca no espaço de respostas / monotonicidade), quickselect. stdlib das 4 linguagens.
- Two pointers e sliding window — ponteiros convergentes/paralelos; janela fixa vs variável; fast/slow (Floyd cycle detection); combinação com hash
- Programação dinâmica — subestrutura ótima, subproblemas sobrepostos, memoização (top-down) vs tabulação (bottom-up), otimização de espaço, design de estado, problemas clássicos (coin change, knapsack 0/1, LCS, LIS, edit distance) (flag: forte candidata a split em “10 Fundamentos de DP” + “11 Padrões clássicos de DP” — renumerar o resto se ocorrer)
- Greedy — escolha localmente ótima, propriedade da escolha gulosa, exchange argument,
quando funciona vs falha (coin change canônico vs arbitrário), Huffman/interval scheduling;
Dijkstra/Kruskal/Prim como exemplos gulosos → linka
[[11 - Grafos - travessia e algoritmos]] - Backtracking — explorar + desfazer, poda, estrutura geral; N-queens, sudoku, permutações, combinações, subset sum, generate parentheses; complexidade exponencial com poda
Magus — síntese e limites
- Intratabilidade: quando não há algoritmo eficiente — tratável vs intratável, explosão combinatória (2ⁿ, n!), NP-difícil como SINAL PRÁTICO (“pare de procurar polinomial”), estratégias (aproximação, heurística, DP-exponencial, poda, parametrização). Linka P/NP formal → galho 10 (Teoria da Computação)
- Reconhecendo o algoritmo certo (capstone) — tabela “sinal no enunciado → abordagem”, framework dos 6 passos em entrevista (clarify→explore→brute force→optimize→code→test), edge cases esquecidos, armadilhas comuns, “How to explain in English” + vocabulário bilíngue, cheat-sheet. Recebe a prática de patterns (NeetCode) do monólito; recursos (cursos/livros)
Padrão por nota (herdado de Complexidade + ED)
- Profunda, à profundidade que o assunto exigir; registro Feynman didático (analogias, perguntas retóricas, resumo em 1 linha). Teto 2400 (permissão), código não conta.
- Diagramas Mermaid (3–5 por nota) onde ajudam (árvore de recursão, partição do quicksort, tabela DP preenchendo, recursion tree do Teorema Mestre, fluxo do backtracking). Cada diagrama com lead-in + “leitura do diagrama”.
- Seção “Em entrevista” (galho interview-critical) — frases prontas em inglês + vocabulário.
- Fontes verificadas na web para afirmações factuais; callout “lastro” de honestidade.
- Atomicidade: cada nota linka as vizinhas em vez de duplicar. Notas
NN - Título.mdflat. publish: falsenas notas;publish: truesó noindex.md(convenção de Fundamentos).- Frontmatter com
fase: iniciado|adepto|magus, tags.
Tronco e MOC
- Criar pasta
03-Dominios/Fundamentos/Algoritmos/comindex.md(MOC,type: moc,publish: true, agrupado por fase, rotas alternativas, dataview, “Veja também”). - O
index.mdrecebe alias “Algoritmos” (+ “algoritmos”) para que os 10 links de entrada existentes ([[Algoritmos]]em README, Senda Entrevistas, Coding Challenges Strategy, Helsinki MOOC, ED/01, ED/13, ED/index, Fundamentos/index, Fundamentos.md, index raiz) resolvam. - Migrar o conteúdo do monólito para as notas atômicas; depois remover
Algoritmos.md(git rm, conteúdo migrado). - Atualizar o MOC do domínio (
Fundamentos/index.mdeFundamentos.md): a entrada de Algoritmos passa a apontar para oindexdo galho. - Verbetes no Dicionário de Fundamentos conforme termos surgem (opcional, como em ED).
Convenções de execução
- Feynman didático; fontes/honestidade onde houver afirmação factual.
- Subagent-driven: um subagente por nota, sequencial (profundo, Feynman, diagramas).
- Commits direto na main, SEM push, SEM Co-Authored-By (feedback-commits).
Sequência de construção
- Scaffold
index.md(MOC, esqueleto das 14 entradas) + alias. - Atualizar MOC do domínio para apontar ao galho.
- Escrever as notas Iniciado (1–4), Adepto (5–12), Magus (13–14), uma por subagente.
- Relocar as experiências reais (“Na prática”) nas notas certas (2 prod → 02, NeetCode → 14).
- Remover o monólito antigo após migração; verbetes (opcional);
verificar-wikilinks; fechar MOC emgrowing.