Pular para o conteúdo
Skillpedia
Código em geral48 mil · #2609

complexity-cuts

Ajuda seu agente a otimizar código para ser mais rápido. Ele faz mudanças pequenas e verifica se tudo continua funcionando. Útil para melhorar a performance de programas.

O que ela faz

O 'complexity-cuts' ajuda a deixar seu código mais rápido e eficiente. Ele encontra partes do código que estão lentas ou usam muita memória e sugere melhorias, uma de cada vez, garantindo que tudo continue funcionando como antes.

Quando usar

  • ✓Seu código está lento com muitos dados.
  • ✓Seu programa trava ou usa memória demais.
  • ✓Você precisa otimizar um código que já existe.

Exemplo do que pedir para a IA

“Como posso deixar este código mais rápido? Ele está demorando muito para processar listas grandes.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/complexity-cuts/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/complexity-cuts/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele analisa seu código para achar gargalos (pontos lentos) e sugere mudanças específicas. Cada mudança é testada para garantir que o código não quebre. Se uma mudança falhar, ela é desfeita automaticamente.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill complexity-cuts

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/complexity-cuts/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

complexity-cuts — Reduzir Big-O em Código Existente

lemmaly impede complexidade ruim antes que o código seja escrito. complexity-cuts corrige isso depois do fato: o código já existe, funciona, mas sua complexidade de tempo ou espaço é pior do que o necessário.

Violar a letra destas regras é violar o espírito da habilidade. Adaptar "só um pouquinho" é como um refatoramento mais rápido-mas-errado é entregue.

Quando Usar Esta Habilidade

Use complexity-cuts ao refatorar código existente que tenha Big-O ruim:

  • Loops aninhados, O(n²) ou piores varreduras, trabalho repetido, alocações redundantes, memória estourada.
  • Sintomas declarados: "isso é lento em entradas grandes", "tempo esgotado", "OOM" (Out Of Memory), "muita memória", "reduzir complexidade", "otimizar este algoritmo".
  • Padrões de consulta N+1 em ORMs (Prisma, Drizzle, SQLAlchemy, Django, ActiveRecord).
  • await dentro de for sobre itens independentes causando latência serial.

Para prevenir complexidade ruim antes que o código seja escrito, use lemmaly. Para otimizações de nível matemático (Bloom, HLL, FFT, projeção JL), escale para mathguard.

A Lei de Ferro

NO TRANSFORMATION WITHOUT EXISTING TESTS GREEN BEFORE AND AFTER

Se o código não tem testes, escreva um teste de caracterização primeiro (entrada de referência → saída atual). Depois, transforme. E verifique se o teste ainda passa. Se você pular isso, a otimização pode quebrar silenciosamente os chamadores — e mais rápido-mas-errado é pior do que lento-e-certo.

Regras Inegociáveis

  1. Declare o Big-O atual e o alvo antes de tocar no código. Em uma linha:

    • Atual: time = O(?), space = O(?)
    • Alvo: time = O(?), space = O(?)
    • Dimensão de entrada dominante (n = o quê, quão grande na prática)

    Se você não consegue declarar o Big-O atual, você ainda não entende o código. Leia mais.

  2. Identifique o gargalo, não adivinhe. Aponte para a(s) linha(s) exata(s) responsável(is) pelo termo dominante. Loop aninhado? Varredura linear repetida? Recálculo? Alocação dentro de um loop quente? A correção está lá, não em outro lugar.

  3. Uma transformação de cada vez, com um loop de verificar-reverter-parar. O loop é:

    1. Aplique exatamente uma transformação do playbook.
    2. Execute a suíte de testes existente (ou o teste de caracterização que você escreveu de acordo com a Lei de Ferro).
    3. Se algum teste quebrar: reverta imediatamente. Não corrija o teste. Não corrija em torno da falha. Reverter.
    4. Conte as reversões nesta peça de código. Se 3 reversões seguidas, PARE de otimizar. O gargalo está errado, a transformação está errada, ou o código tem invariantes que você não modelou. Escalar para invariant-guard e escreva o contrato ausente — não tente uma quarta transformação.
    5. Somente após uma transformação passar com sucesso: escolha a próxima.

    Mudanças empilhadas escondem regressões. Testes corrigidos escondem regressões mais alto.

  4. Preserve as semânticas exatamente. Complexidade menor não deve alterar saídas, garantias de ordenação, estabilidade ou comportamento de erro. Se a otimização exigir uma mudança semântica (por exemplo, saída não ordenada), chame-a explicitamente e confirme se é aceitável.

  5. Sem números inventados. Nunca escreva "10x mais rápido" ou "economiza 200MB" sem medir. Escreva <measured: TBD> e siga em frente, ou meça de fato com uma entrada representativa.

  6. Sempre relate a razão de aceleração medida após uma transformação ser concluída. Uma vez que o novo código esteja verde, execute um benchmark representativo (mesma entrada, mesma máquina, cache aquecido) e relate before → after mais a razão como N× faster (ou N× less memory). Uma linha, anexada ao diff:

    p50:  186 ms → 1.1 ms   (169× faster, n=20,000, 200 samples)
    

    Se você não puder medir (por exemplo, a vantagem é puramente assintótica em entradas que você não tem), diga isso explicitamente: asymptotic only, no measurement — O(n²) → O(n). Nunca pule silenciosamente esta etapa.

O playbook de transformação

A grande maioria das vitórias de Big-O no mundo real vêm de um pequeno conjunto de movimentos. Tente-os nesta ordem:

Reduções de complexidade de tempo

Cheiro Correção Vitória Típica
for x in A: if x in B onde B é lista/array Converta B para Set/Map uma vez O(n·m) → O(n+m)
Loop aninhado calculando pares/junções Hash-join na chave; indexar por campo de consulta O(n·m) → O(n+m)
.find / .indexOf / .includes repetido dentro de um loop Pré-calcule o índice Map<key, item> fora do loop O(n^2) → O(n)
Recálculo repetido do mesmo valor Memoizar / cachear por chave de entrada O(n·f(n)) → O(n + f(n))
Ordenar dentro de um loop Ordenar uma vez fora O(n^2 log n) → O(n log n)

…

Perguntas frequentes

O que é 'Big-O'?

É uma forma de descrever o quão rápido um código fica mais lento conforme a quantidade de dados aumenta. Por exemplo, 'O(n²)' significa que se você dobrar os dados, o tempo pode quadruplicar.

E se o código não tiver testes?

Antes de fazer qualquer mudança, você precisa criar um teste simples que mostre como o código funciona agora. Só depois disso você tenta a otimização e verifica se o teste ainda passa.

Posso fazer várias mudanças de uma vez?

Não. O 'complexity-cuts' exige que as mudanças sejam feitas uma de cada vez. Isso ajuda a identificar qual mudança trouxe o ganho e a evitar que o código quebre sem saber o motivo.

Detalhes

Descrição original do autor

Lower Big-O on existing code via a one-transformation-at-a-time playbook with verify-revert-stop. For new code use lemmaly; for math-level wins escalate to mathguard.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#2609
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas