🧮 Algorithm Complexity Analyzer

🎯 A extensão mais avançada do VS Code para análise de complexidade de algoritmos em tempo real com IA integrada, interface profissional na Activity Bar e visualizações interativas de última geração.
📋 Índice
🎯 Visão Geral
O Algorithm Complexity Analyzer é uma ferramenta revolucionária que transforma a forma como você analisa e compreende algoritmos. Com tecnologia de ponta e interface intuitiva, oferece análise em tempo real, visualizações interativas e sugestões de otimização automatizadas.
🌟 Destaques
- ⚡ Análise em Tempo Real: Detecta complexidade enquanto você digita
- 🎨 Visualizações Interativas: Gráficos, heatmaps e dashboards personalizados
- 🤖 IA Integrada: Sugestões automáticas de otimização
- 📚 Centro de Aprendizado: Modo educativo com tutoriais interativos
- 🔍 Detecção de Padrões: Identifica padrões algorítmicos automaticamente
🚀 Interface Profissional
📌 Activity Bar Integrada
Nossa extensão oferece uma interface profissional e elegante diretamente na Activity Bar do VS Code, proporcionando acesso rápido e organizado a todas as funcionalidades.
🎯 Dashboard Principal
📊 Dashboard
├── 📈 Métricas em tempo real
├── 🎯 Análises recentes
├── 📊 Gráficos de performance
└── 🚀 Acesso rápido a ferramentas
🛠️ Analysis Tools
├── 📊 Analyze Current File
├── ⚖️ Compare Algorithms
├── 🚀 Performance Test
├── 🧠 Memory Analysis
├── 🔄 Recursion Depth
├── 🎬 Visualize Execution
├── ⚡ Algorithm Optimizer
├── 🔥 Complexity Heatmap
├── 🔍 Pattern Detector
└── ✨ Code Quality Analysis
📈 Analysis History
📈 Analysis History
├── 🟢 Recent successful analyses
├── 🟠 Performance comparisons
├── 🔴 Complexity alerts
├── 📊 Trends and patterns
└── 🗑️ History management
⚙️ Smart Settings
⚙️ Settings
├── 🔧 Analysis Settings
│ ├── ✅ Real-time Analysis
│ ├── ✅ Inline Complexity
│ └── ❌ Auto Run Tests
├── 🤖 AI Settings
│ ├── ✅ Gemini AI Enabled
│ ├── 🔑 API Key Status
│ └── 🔧 Test Connection
└── 🛠️ Tools & Features
├── 📚 Big O Guide
├── 📖 Algorithm Library
├── 🎓 Learning Mode
└── 🗑️ Clear History
🎨 Design Profissional
- 🎯 Interface Intuitiva: Navegação clara e organizada
- 📱 Responsiva: Adapta-se perfeitamente ao layout do VS Code
- 🌙 Dark Theme: Design moderno que complementa o VS Code
- ⚡ Performance: Interface leve e responsiva
- 🔄 Real-time Updates: Atualizações automáticas de status
🚀 Fluxo de Trabalho Otimizado
- 📌 Clique no ícone na Activity Bar para abrir o painel
- 🎯 Selecione a ferramenta desejada no Analysis Tools
- 📊 Visualize resultados no Dashboard integrado
- 📈 Acompanhe histórico de análises anteriores
- ⚙️ Configure preferências no painel de Settings
✨ Funcionalidades Principais
📊 Análise de Complexidade Avançada
- Detecção automática de complexidade Big O
- Análise linha por linha do código
- Identificação de worst-case, best-case e average-case
- Suporte para algoritmos recursivos e iterativos
🎬 Visualização de Execução Interativa
- Simulação step-by-step da execução
- Controles de reprodução (play, pause, step)
- Rastreamento de variáveis em tempo real
- Contadores de operações e tempo
🎯 Dashboard Profissional
- Gráficos de crescimento de complexidade
- Comparação de múltiplos algoritmos
- Métricas de performance detalhadas
- Histórico de análises
- Teste A/B entre implementações
- Benchmarks automatizados
- Análise de escalabilidade
- Recomendações de melhorias
🚀 Funcionalidades Avançadas
A extensão integra Google Gemini AI para análises ultra-avançadas:
🤖 Recursos de IA Integrados
├── 🧠 Análise de Complexidade com IA
├── ⚡ Otimizador de Código Automático
├── 🔄 Conversor de Linguagens
├── 📝 Geração de Exercícios Personalizados
├── 📊 Análise Preditiva de Performance
├── 🎯 Sugestões Contextuais Inteligentes
├── 📚 Documentação Automática
└── 🏆 Sistema de Gamificação IA
- Detecção Automática: Identifica complexidades mesmo em código complexo
- Explicação Detalhada: IA explica por que o código tem determinada complexidade
- Casos Edge: Detecta edge cases que podem afetar performance
- Padrões Não-Óbvios: Identifica problemas de performance sutis
⚡ Otimizador de Código Automático
- Refatoração Inteligente: Sugere mudanças específicas no código
- Preservação de Funcionalidade: Mantém comportamento original
- Múltiplas Abordagens: Oferece diferentes estratégias de otimização
- Estimativa de Ganho: Calcula melhoria esperada de performance
🔄 Conversor de Linguagens
- Tradução Inteligente: Converte algoritmos entre linguagens
- Preservação de Padrões: Mantém padrões idiomáticos de cada linguagem
- Otimização Específica: Aproveita features únicos de cada linguagem
- Análise Comparativa: Mostra diferenças de performance entre versões
📝 Geração de Exercícios Personalizados
- Nível Adaptativo: Exercícios baseados no seu progresso
- Foco em Fraquezas: Identifica conceitos que precisam de reforço
- Múltiplas Dificuldades: Do básico ao avançado
- Feedback Instantâneo: Correção e explicação em tempo real
🧠 Memory Usage Analysis
📈 Análise Completa de Memória
├── 📊 Complexidade espacial (Space Complexity)
├── 🔍 Detecção de vazamentos de memória
├── 📋 Mapeamento de alocações
└── 💡 Sugestões de otimização de memória
🔄 Recursion Depth Analysis
🌳 Análise de Recursão Avançada
├── 📏 Profundidade máxima da recursão
├── 🔄 Detecção de tail recursion
├── 📊 Visualização da árvore de chamadas
└── ⚡ Sugestões de iterativização
⚡ Algorithm Optimizer (IA)
🤖 Otimizador Inteligente
├── 🎯 Detecção automática de gargalos
├── 💡 Sugestões de refatoração
├── 📈 Estimativas de melhoria
└── 🔄 Transformações automáticas
🔥 Complexity Heatmap
🎨 Mapa de Calor Visual
├── 🌡️ Gradiente de complexidade por linha
├── 🎯 Identificação de hotspots
├── 📊 Escala de cores intuitiva
└── 🔍 Zoom e navegação
🏗️ Data Structure Recommender
🏛️ Recomendador Inteligente
├── 📋 Análise do uso atual
├── 💡 Sugestões contextuais
├── ⚡ Comparação de performance
└── 📚 Exemplos de implementação
🔍 Algorithm Pattern Detector
🕵️ Detector de Padrões
├── 🔄 Padrões algorítmicos clássicos
├── 📊 Nível de confiança
├── ⚠️ Anti-padrões identificados
└── 🎯 Sugestões de melhorias
🚀 Profiling Avançado
├── ⏱️ Métricas de tempo real
├── 📊 Breakdown de operações
├── 🎯 Identificação de gargalos
└── 📈 Tendências de performance
✨ Code Quality Analysis
💎 Análise de Qualidade
├── 📊 Score geral de qualidade
├── 📖 Métricas de legibilidade
├── 🛡️ Análise de manutenibilidade
└── 🔧 Sugestões de melhoria
📚 Algorithm Library - Biblioteca Completa (35+ Algoritmos)
A extensão inclui uma biblioteca completa com mais de 35 algoritmos implementados e analisados:
📖 Biblioteca de Algoritmos Completa
├── 🔄 Algoritmos de Ordenação (8 exemplos)
│ ├── Bubble Sort, Selection Sort, Insertion Sort
│ ├── Merge Sort, Quick Sort, Heap Sort
│ ├── Radix Sort, Bucket Sort
│ └── Análise comparativa completa
│
├── 🔍 Algoritmos de Busca (6 exemplos)
│ ├── Linear Search, Binary Search
│ ├── Jump Search, Interpolation Search
│ ├── Exponential Search, Ternary Search
│ └── Complexidade por tipo de dados
│
├── 🌐 Algoritmos de Grafos (8 exemplos)
│ ├── BFS, DFS, Dijkstra
│ ├── Bellman-Ford, Floyd-Warshall
│ ├── Kruskal, Prim, Topological Sort
│ └── Análise de conectividade
│
├── 🧩 Programação Dinâmica (5 exemplos)
│ ├── Fibonacci, Longest Common Subsequence
│ ├── Knapsack Problem, Coin Change
│ ├── Edit Distance
│ └── Otimizações bottom-up vs top-down
│
├── 📋 Estruturas de Dados (4 exemplos)
│ ├── Stack, Queue, LinkedList
│ ├── Binary Tree, Hash Table
│ └── Comparações de performance
│
└── 🔧 Algoritmos Especializados (4 exemplos)
├── String Matching (KMP, Rabin-Karp)
├── Mathematical (GCD, Prime Check)
└── Backtracking (N-Queens, Sudoku)
🎯 Cada Algoritmo Inclui:
- 📝 Código Comentado: Implementação completa em múltiplas linguagens
- 📊 Análise de Complexidade: Tempo e espaço detalhados
- 🧪 Casos de Teste: Exemplos práticos de uso
- 📈 Benchmarks: Comparação de performance real
- 💡 Casos de Uso: Quando usar cada algoritmo
- ⚡ Otimizações: Variações e melhorias possíveis
🔄 Algoritmos de Ordenação - Análise Completa:
Algoritmo |
Complexidade |
Estável |
In-Place |
Melhor Para |
Bubble Sort |
O(n²) |
✅ |
✅ |
Ensino, arrays pequenos |
Selection Sort |
O(n²) |
❌ |
✅ |
Memória limitada |
Insertion Sort |
O(n²) |
✅ |
✅ |
Arrays pequenos/parcialmente ordenados |
Merge Sort |
O(n log n) |
✅ |
❌ |
Garantia de performance |
Quick Sort |
O(n log n) |
❌ |
✅ |
Performance geral |
Heap Sort |
O(n log n) |
❌ |
✅ |
Memória limitada + garantia |
Radix Sort |
O(kn) |
✅ |
❌ |
Inteiros, strings |
Bucket Sort |
O(n+k) |
✅ |
❌ |
Distribuição uniforme |
Algoritmo |
Dados Ordenados |
Dados Não-Ordenados |
Complexidade |
Uso Principal |
Linear Search |
O(n) |
O(n) |
O(n) |
Arrays pequenos |
Binary Search |
O(log n) |
❌ |
O(log n) |
Arrays grandes ordenados |
Jump Search |
O(√n) |
❌ |
O(√n) |
Arrays grandes, poucos acessos |
Interpolation Search |
O(log log n) |
❌ |
O(n) worst |
Dados uniformemente distribuídos |
Exponential Search |
O(log n) |
❌ |
O(log n) |
Arrays infinitos/muito grandes |
Ternary Search |
O(log₃ n) |
❌ |
O(log₃ n) |
Funções unimodais |
🌐 Algoritmos de Grafos - Aplicações Práticas:
Algoritmo |
Tipo de Grafo |
Complexidade |
Aplicação Real |
BFS |
Qualquer |
O(V+E) |
Menor caminho (não-ponderado) |
DFS |
Qualquer |
O(V+E) |
Detecção de ciclos, conectividade |
Dijkstra |
Ponderado (+) |
O(V²) ou O(E log V) |
GPS, roteamento de rede |
Bellman-Ford |
Ponderado (±) |
O(VE) |
Forex, detecção ciclo negativo |
Floyd-Warshall |
Qualquer |
O(V³) |
Todos os caminhos mínimos |
Kruskal |
Não-direcionado |
O(E log E) |
Redes, clustering |
Prim |
Não-direcionado |
O(V²) ou O(E log V) |
Árvore de custo mínimo |
Topological Sort |
DAG |
O(V+E) |
Agendamento de tarefas |
🎓 Complexity Learning Mode
🎯 Modo Educativo Interativo
├── 📚 Tutoriais passo a passo
├── 🎮 Demos interativas
├── 🧠 Quizzes e exercícios
├── 📊 Visualizações didáticas
└── 🏆 Sistema de progresso
📊 Análises Suportadas
🧮 Complexidades Temporais (Big O Notation)
A notação Big O descreve como o tempo de execução de um algoritmo cresce em relação ao tamanho da entrada. É a ferramenta fundamental para analisar eficiência algoritmica.
Notação |
Nome |
Descrição |
Performance |
Exemplos Práticos |
O(1) |
Constante |
Tempo fixo independente do input |
🟢 Excelente |
Acesso direto a array, hash lookup, stack push/pop |
O(log n) |
Logarítmica |
Divide o problema pela metade a cada iteração |
🟢 Muito Bom |
Binary search, árvores balanceadas (AVL, Red-Black) |
O(n) |
Linear |
Tempo proporcional ao tamanho do input |
🟡 Bom |
Linear search, iteração simples, traversal de lista |
O(n log n) |
Linearítmica |
Combina crescimento linear com logarítmico |
🟡 Aceitável |
Merge sort, heap sort, algoritmos divide-and-conquer |
O(n²) |
Quadrática |
Crescimento quadrático - perigoso para inputs grandes |
🟠 Ruim |
Bubble sort, insertion sort, nested loops |
O(n³) |
Cúbica |
Crescimento cúbico - evitar para inputs > 1000 |
🔴 Muito Ruim |
Matrix multiplication naive, triple nested loops |
O(2ⁿ) |
Exponencial |
Crescimento exponencial - impraticável para n > 30 |
🔴 Terrível |
Fibonacci recursivo, subset problems |
O(n!) |
Fatorial |
Crescimento fatorial - impraticável para n > 10 |
🔴 Catastrófico |
Traveling salesman brute force, permutations |
🧠 Complexidades Espaciais
Analisa quanto espaço de memória um algoritmo consome.
Notação |
Descrição |
Impacto na Memória |
Exemplos |
O(1) |
Espaço constante |
Usa sempre a mesma quantidade de memória |
Bubble sort, selection sort |
O(log n) |
Espaço logarítmico |
Cresce lentamente com o input |
Binary search recursivo, quicksort |
O(n) |
Espaço linear |
Proporcional ao tamanho da entrada |
Merge sort, arrays auxiliares |
O(n²) |
Espaço quadrático |
Cresce rapidamente - cuidado! |
Matrix operations, dynamic programming tables |
🎯 Análise de Casos (Best, Average, Worst)
Algoritmo |
Best Case |
Average Case |
Worst Case |
Quando Usar |
Quick Sort |
O(n log n) |
O(n log n) |
O(n²) |
Arrays grandes, dados aleatórios |
Merge Sort |
O(n log n) |
O(n log n) |
O(n log n) |
Dados críticos, estabilidade necessária |
Bubble Sort |
O(n) |
O(n²) |
O(n²) |
Apenas para aprendizado |
Binary Search |
O(1) |
O(log n) |
O(log n) |
Arrays ordenados |
Hash Table |
O(1) |
O(1) |
O(n) |
Lookups frequentes |
🚀 Crescimento Comparativo (Referência Visual)
Para n = 1,000 elementos:
- O(1): 1 operação ⚡
- O(log n): 10 operações ⚡
- O(n): 1,000 operações ✅
- O(n log n): 10,000 operações ⚠️
- O(n²): 1,000,000 operações 🚨
- O(2ⁿ): Mais que átomos no universo 💀
📈 Regras Práticas de Big O
- Ignore constantes: O(2n) = O(n)
- Foque no termo dominante: O(n² + n) = O(n²)
- Analise worst-case por padrão
- Considere espaço E tempo
- Meça performance real para confirmação
💻 Linguagens e Tecnologias Suportadas
JavaScript/TypeScript 🟨
Python 🐍
C/C++ ⚡
Java ☕
🚀 Linguagens em Desenvolvimento
Linguagem |
Status |
Análise Sintática |
Profiling |
Otimizações IA |
ETA |
Go 🔵 |
🔄 Beta |
✅ |
⚡ |
🔄 |
Q2 2025 |
Rust 🦀 |
🔄 Alpha |
✅ |
🔄 |
🔄 |
Q3 2025 |
PHP 🟣 |
📋 Planned |
🔄 |
🔄 |
📋 |
Q4 2025 |
C# 🔷 |
📋 Planned |
🔄 |
🔄 |
📋 |
Q4 2025 |
Swift 🍎 |
📋 Planned |
🔄 |
🔄 |
📋 |
2026 |
Kotlin 🟩 |
📋 Planned |
🔄 |
🔄 |
📋 |
2026 |
🎯 Recursos Específicos por Linguagem
JavaScript/TypeScript
- Async Patterns: Promise chains, async/await complexity
- React Performance: Component re-render analysis, hooks dependency
- Node.js: Event loop impact, streaming operations
- Bundle Analysis: Webpack chunks, dynamic imports
Python
- Data Science: Pandas operations complexity, NumPy vectorization
- ML Pipelines: Scikit-learn model training complexity
- Web Frameworks: Django ORM queries, Flask route optimization
- Async Python: AsyncIO pattern detection
C/C++
- Memory Management: Stack vs heap allocation analysis
- Template Metaprogramming: Compile-time complexity
- STL Algorithms: std::sort, std::find complexity detection
- CUDA/OpenMP: Parallel processing analysis
Java
- JVM Performance: Garbage collection impact analysis
- Spring Boot: Bean creation, dependency injection complexity
- Concurrency: ForkJoinPool, CompletableFuture analysis
- Reactive Streams: RxJava operation complexity
🔧 Detecção Automática de Contexto
A extensão detecta automaticamente:
- Framework usado (React, Vue, Django, Spring, etc.)
- Padrões específicos da linguagem
- Bibliotecas externas e suas complexidades
- Paradigmas (funcional, OOP, procedural)
- Versão da linguagem e features utilizadas
📊 Métricas Especializadas
Linguagem |
Métricas Exclusivas |
JavaScript |
Event loop blocking, DOM manipulation cost |
Python |
GIL impact, memory allocation patterns |
C/C++ |
Cache misses, branch prediction |
Java |
Garbage collection pressure, JIT optimization |
🎓 Exemplos Comparativos Entre Linguagens
Busca Binária - Implementação Comparativa:
JavaScript:
// O(log n)
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
arr[mid] < target ? left = mid + 1 : right = mid - 1;
}
return -1;
}
Python:
# O(log n)
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
C++:
// O(log n)
int binarySearch(vector<int>& arr, int target) {
int left = 0, right = arr.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
Java:
// O(log n)
public static int binarySearch(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
🎮 Como Usar
🚀 Início Rápido (30 segundos)
Instalar a extensão
VS Code → Extensions → Search "Algorithm Complexity Analyzer"
Acessar a Activity Bar
🔍 Clique no ícone 📊 na Activity Bar (barra lateral esquerda)
📌 O painel Algorithm Complexity Analyzer será aberto
Abrir arquivo de código
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
}
Executar análise (3 formas diferentes)
📌 Activity Bar → Analysis Tools → "📊 Analyze Current File"
💨 Atalho: Ctrl+Alt+A
🎯 Command Palette: Ctrl+Shift+P → "📊 Analyze Algorithm Complexity"
Ver resultados 🎉
- 📊 Dashboard: Visualização completa no painel integrado
- 📈 History: Análise adicionada automaticamente ao histórico
- 🎯 Resultados: Complexidade detectada O(n²)
- 💡 Sugestão: "Considere usar merge sort para O(n log n)"
🎯 Fluxo de Trabalho Avançado
graph TD
A[Escrever Código] --> B[Análise Automática]
B --> C[Visualizar Resultados]
C --> D[Otimizar com Sugestões]
D --> E[Comparar Performance]
E --> F[Validar Melhorias]
F --> A
⚙️ Configurações
🔧 Configurações Básicas
{
"algorithmAnalyzer.enableRealTimeAnalysis": true,
"algorithmAnalyzer.showComplexityInline": true,
"algorithmAnalyzer.autoRunTests": false,
"algorithmAnalyzer.theme": "dark",
"algorithmAnalyzer.language": "pt-BR"
}
🎨 Configurações Avançadas
{
"algorithmAnalyzer.heatmap.enabled": true,
"algorithmAnalyzer.heatmap.opacity": 0.7,
"algorithmAnalyzer.profiling.sampleRate": 1000,
"algorithmAnalyzer.ai.suggestions": true,
"algorithmAnalyzer.learning.mode": "interactive",
"algorithmAnalyzer.notifications.level": "info"
}
🤖 Configurações de IA (Google Gemini)
{
"algorithmAnalyzer.useGeminiAI": true,
"algorithmAnalyzer.geminiApiKey": "sua-chave-api-aqui",
"algorithmAnalyzer.enableDeepAnalysis": true,
"algorithmAnalyzer.enableSmartSuggestions": true,
"algorithmAnalyzer.enablePredictiveAnalysis": true,
"algorithmAnalyzer.enableAutoDocumentation": true,
"algorithmAnalyzer.enableCodeQualityCheck": true
}
🎓 Configurações Educacionais
{
"algorithmAnalyzer.learning.mode": "interactive",
"algorithmAnalyzer.enableClassroomMode": true,
"algorithmAnalyzer.showStepByStepExecution": true,
"algorithmAnalyzer.enableComplexityVisualization": true,
"algorithmAnalyzer.enableBenchmarking": true,
"algorithmAnalyzer.generatePracticeExercises": true
}
🎯 Configurações por Projeto
// .vscode/settings.json
{
"algorithmAnalyzer.project.optimizationLevel": "aggressive",
"algorithmAnalyzer.project.targetComplexity": "O(n log n)",
"algorithmAnalyzer.project.excludePatterns": ["test/**", "docs/**"]
}
📈 Exemplos Práticos e Casos de Estudo
🔍 Exemplo 1: Otimização de Busca - Two Sum Problem
❌ Abordagem Naive (O(n²)):
function findPairs(arr, target) {
// Força bruta - compara todos os pares
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] + arr[j] === target) {
return [i, j];
}
}
}
return null;
}
// Análise: Para n=1000, executa ~500,000 comparações
✅ Solução Otimizada com Hash Map (O(n)):
function findPairs(arr, target) {
const map = new Map();
for (let i = 0; i < arr.length; i++) {
const complement = target - arr[i];
if (map.has(complement)) {
return [map.get(complement), i];
}
map.set(arr[i], i);
}
return null;
}
// Análise: Para n=1000, executa apenas ~1000 operações
📊 Resultado da Análise:
- Melhoria de Performance: 500x mais rápido para arrays grandes
- Trade-off Espaço-Tempo: +O(n) memória para -O(n²) tempo
- Ponto de Break-even: Vantajoso para arrays > 50 elementos
- Uso de Memória: ~24 bytes por elemento (JavaScript)
🎯 Cenários de Aplicação:
- ✅ Use Hash Map quando: n > 100, memória disponível, lookups frequentes
- ✅ Use Força Bruta quando: n < 50, memória limitada, implementação simples
🧮 Exemplo 2: Fibonacci - Evolução de Otimizações
🔄 Versão 1: Recursão Ingênua (O(2ⁿ)):
def fibonacci_naive(n):
"""Complexidade exponencial - evite para n > 35"""
if n <= 1:
return n
return fibonacci_naive(n-1) + fibonacci_naive(n-2)
# Problema: Recalcula os mesmos valores repetidamente
# fib(5) = fib(4) + fib(3)
# fib(4) = fib(3) + fib(2) <- fib(3) calculado novamente!
⚡ Versão 2: Memoização Top-Down (O(n)):
def fibonacci_memo(n, memo={}):
"""Recursão com cache - bom para compreensão"""
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci_memo(n-1, memo) + fibonacci_memo(n-2, memo)
return memo[n]
# Cada valor calculado apenas uma vez
# Espaço: O(n) para cache + O(n) para call stack
🚀 Versão 3: Dynamic Programming Bottom-Up (O(n)):
def fibonacci_dp(n):
"""Iterativo - melhor para performance"""
if n <= 1:
return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
# Espaço: O(n) apenas para array
# Tempo: O(n) com operações simples
⚡ Versão 4: Space-Optimized (O(1)):
def fibonacci_optimal(n):
"""Otimização de espaço - apenas O(1) memória"""
if n <= 1:
return n
prev, curr = 0, 1
for i in range(2, n + 1):
prev, curr = curr, prev + curr
return curr
# Melhor de todos os mundos: O(n) tempo, O(1) espaço
📊 Comparação Detalhada de Performance:
n |
Recursivo |
Memoização |
DP Array |
Otimizado |
Diferença |
10 |
0.1ms |
0.01ms |
0.005ms |
0.003ms |
33x |
20 |
10ms |
0.02ms |
0.01ms |
0.008ms |
1,250x |
30 |
1,000ms |
0.03ms |
0.015ms |
0.012ms |
83,333x |
40 |
109,000ms |
0.04ms |
0.02ms |
0.015ms |
7,266,667x |
50 |
~18 horas |
0.05ms |
0.025ms |
0.018ms |
~3.6 bilhões x |
🎓 Lições Aprendidas:
- Identificar subproblemas repetidos é chave para otimização
- Memoização vs DP: Memoização é mais intuitiva, DP é mais eficiente
- Space-time tradeoffs: Às vezes podemos melhorar ambos
- Escolha da técnica: Depende do contexto e constraints
🔍 Exemplo 3: Ordenação - Análise Comparativa Completa
🐌 Bubble Sort (O(n²)) - Educational Only:
function bubbleSort(arr) {
const n = arr.length;
let swaps = 0;
for (let i = 0; i < n; i++) {
let swapped = false;
for (let j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
swaps++;
swapped = true;
}
}
if (!swapped) break; // Otimização: já ordenado
}
console.log(`Bubble Sort: ${swaps} swaps realizados`);
return arr;
}
⚡ Quick Sort (O(n log n) average) - Production Ready:
function quickSort(arr, low = 0, high = arr.length - 1) {
if (low < high) {
const pi = partition(arr, low, high);
quickSort(arr, low, pi - 1); // Esquerda
quickSort(arr, pi + 1, high); // Direita
}
return arr;
}
function partition(arr, low, high) {
const pivot = arr[high];
let i = low - 1;
for (let j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
[arr[i + 1], arr[high]] = [arr[high], arr[i + 1]];
return i + 1;
}
🛡️ Merge Sort (O(n log n) guaranteed) - Stable & Predictable:
function mergeSort(arr) {
if (arr.length <= 1) return arr;
const mid = Math.floor(arr.length / 2);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));
return merge(left, right);
}
function merge(left, right) {
let result = [];
let i = 0, j = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
result.push(left[i++]);
} else {
result.push(right[j++]);
}
}
return result.concat(left.slice(i)).concat(right.slice(j));
}
📊 Análise Comparativa de Algoritmos de Ordenação:
Algoritmo |
Best Case |
Average Case |
Worst Case |
Space |
Stable |
In-Place |
Bubble Sort |
O(n) |
O(n²) |
O(n²) |
O(1) |
✅ |
✅ |
Selection Sort |
O(n²) |
O(n²) |
O(n²) |
O(1) |
❌ |
✅ |
Insertion Sort |
O(n) |
O(n²) |
O(n²) |
O(1) |
✅ |
✅ |
Merge Sort |
O(n log n) |
O(n log n) |
O(n log n) |
O(n) |
✅ |
❌ |
Quick Sort |
O(n log n) |
O(n log n) |
O(n²) |
O(log n) |
❌ |
✅ |
Heap Sort |
O(n log n) |
O(n log n) |
O(n log n) |
O(1) |
❌ |
✅ |
🎯 Recomendações por Cenário:
- Pequenos Arrays (n < 50): Insertion Sort
- Dados Parcialmente Ordenados: Insertion Sort ou Bubble Sort otimizado
- Garantia de Performance: Merge Sort ou Heap Sort
- Memória Limitada: Quick Sort ou Heap Sort
- Estabilidade Necessária: Merge Sort
- Performance Geral: Quick Sort (implementação cuidadosa)
🔍 Exemplo 4: Estruturas de Dados - HashMap vs Array
📊 Cenário: Sistema de cache com 10,000 usuários
❌ Implementação com Array (O(n)):
class UserCacheArray {
constructor() {
this.users = []; // [{id, name, data}, ...]
}
// O(n) - Busca linear
getUser(id) {
return this.users.find(user => user.id === id);
}
// O(n) - Verifica se existe + adiciona
addUser(user) {
if (!this.getUser(user.id)) {
this.users.push(user);
}
}
// O(n) - Busca + remoção
removeUser(id) {
const index = this.users.findIndex(user => user.id === id);
if (index !== -1) {
this.users.splice(index, 1);
}
}
}
// Para 10,000 usuários: ~5,000 comparações por busca
✅ Implementação com HashMap (O(1)):
class UserCacheMap {
constructor() {
this.users = new Map(); // id -> {name, data}
}
// O(1) - Acesso direto
getUser(id) {
return this.users.get(id);
}
// O(1) - Inserção direta
addUser(user) {
this.users.set(user.id, user);
}
// O(1) - Remoção direta
removeUser(id) {
return this.users.delete(id);
}
// Bonus: O(1) para verificar existência
hasUser(id) {
return this.users.has(id);
}
}
// Para 10,000 usuários: ~1 operação por busca
⚡ Performance Benchmark Real:
// Teste com 10,000 usuários
const arrayCache = new UserCacheArray();
const mapCache = new UserCacheMap();
// Popular com dados
for (let i = 0; i < 10000; i++) {
const user = {id: i, name: `User${i}`, data: `Data${i}`};
arrayCache.addUser(user);
mapCache.addUser(user);
}
// Benchmark: 1000 buscas aleatórias
console.time('Array Cache');
for (let i = 0; i < 1000; i++) {
const randomId = Math.floor(Math.random() * 10000);
arrayCache.getUser(randomId);
}
console.timeEnd('Array Cache'); // ~45ms
console.time('Map Cache');
for (let i = 0; i < 1000; i++) {
const randomId = Math.floor(Math.random() * 10000);
mapCache.getUser(randomId);
}
console.timeEnd('Map Cache'); // ~0.8ms
// Resultado: Map é ~56x mais rápido!
🎓 Insights Importantes:
- Escolha da estrutura de dados é crucial para performance
- O(1) vs O(n) faz diferença real em aplicações
- Trade-offs: Map usa mais memória, mas ganha em velocidade
- Ponto de break-even: Map vence para > 100 elementos
🎓 Para Educadores
📚 Recursos Pedagógicos
🎯 Modo Classroom
- Dashboard do Professor: Visualize o progresso de todos os alunos
- Exercícios Padronizados: Biblioteca de problemas graduados
- Relatórios Automáticos: Análise detalhada do aprendizado
- Gamificação: Sistema de pontos e conquistas
📊 Métricas de Aprendizado
🎓 Analytics Educacionais
├── ⏱️ Tempo médio por exercício
├── 🎯 Taxa de acerto por conceito
├── 📈 Progressão da complexidade
├── 🔄 Padrões de erro comuns
└── 💡 Sugestões personalizadas
🧪 Laboratório Virtual
- Ambiente Sandbox: Teste algoritmos sem setup
- Datasets Pré-configurados: Casos de teste padronizados
- Comparações Lado a Lado: Múltiplas implementações
- Exportação de Resultados: Relatórios em PDF/HTML
🎮 Exercícios Interativos
Nível Iniciante 🌱
- Loops Simples - Identificar O(n) vs O(1)
- Busca Linear - Compreender worst-case
- Arrays vs Listas - Trade-offs de estruturas
- Sorting Algorithms - Comparar bubble, merge, quick
- Nested Loops - Detectar O(n²) e otimizar
- Recursão - Fibonacci, factoriais, árvores
Nível Avançado 🏆
- Dynamic Programming - Memoização e bottom-up
- Graph Algorithms - DFS, BFS, Dijkstra
- Space-Time Tradeoffs - Balancear memória e velocidade
🔧 Instalação
📦 Via VS Code Marketplace
- Abra VS Code
- Vá para Extensions (Ctrl+Shift+X)
- Busque "Algorithm Complexity Analyzer"
- Clique "Install"
💻 Via Command Line
code --install-extension algorithm-tools.algorithm-complexity-analyzer
🛠️ Desenvolvimento Local
git clone https://github.com/estevam5s/algorithm-complexity-analyzer.git
cd algorithm-complexity-analyzer
npm install
code .
# Pressione F5 para debug
🐳 Via Docker (Para Testes)
docker run -p 8080:8080 algorithm-analyzer:latest
📚 Comandos Completos
📌 Activity Bar - Interface Principal
Seção |
Funcionalidade |
Descrição |
📊 Dashboard |
Painel Principal |
Dashboard interativo com métricas em tempo real |
🛠️ Analysis Tools |
Ferramentas de Análise |
Acesso rápido a todas as ferramentas de análise |
📈 Analysis History |
Histórico de Análises |
Visualização e gerenciamento do histórico |
⚙️ Settings |
Configurações Inteligentes |
Controle de todas as configurações da extensão |
🎯 Análise Principal
Comando |
Atalho |
Descrição |
📊 Analyze Algorithm Complexity |
Ctrl+Alt+A |
Análise completa do arquivo atual |
🎬 Visualize Execution |
Ctrl+Alt+V |
Simulação step-by-step |
🎯 Open Complexity Dashboard |
Ctrl+Alt+D |
Dashboard interativo |
⚡ Compare Algorithms |
Ctrl+Alt+C |
Comparação de múltiplos arquivos |
🧠 Análise Avançada
Comando |
Atalho |
Descrição |
🧠 Memory Usage Analysis |
Ctrl+Alt+M |
Análise de memória detalhada |
🔄 Recursion Depth Analysis |
Ctrl+Alt+R |
Profundidade de recursão |
⚡ Algorithm Optimizer |
Ctrl+Alt+O |
Sugestões de otimização |
🔥 Complexity Heatmap |
Ctrl+Alt+H |
Mapa de calor visual |
🏗️ Ferramentas de Desenvolvimento
Comando |
Atalho |
Descrição |
🏗️ Data Structure Recommender |
Ctrl+Alt+S |
Recomendações de estruturas |
🔍 Algorithm Pattern Detector |
Ctrl+Alt+P |
Detecção de padrões |
📈 Performance Profiling |
Ctrl+Alt+F |
Profiling de performance |
✨ Code Quality Analysis |
Ctrl+Alt+Q |
Análise de qualidade |
📚 Recursos Educacionais
Comando |
Atalho |
Descrição |
📚 Algorithm Library |
Ctrl+Alt+L |
Biblioteca de algoritmos |
🎓 Complexity Learning Mode |
Ctrl+Alt+T |
Modo tutorial interativo |
📚 Big O Notation Guide |
Ctrl+Alt+G |
Guia completo de Big O |
🚀 Run Performance Test |
Ctrl+Alt+U |
Testes de performance |
⚙️ Utilitários
Comando |
Atalho |
Descrição |
⚙️ Extension Settings |
Ctrl+Alt+, |
Configurações da extensão |
📊 Export Analysis Report |
Ctrl+Alt+E |
Exportar relatório |
🔄 Reset Analysis Cache |
Ctrl+Alt+X |
Limpar cache |
📱 Toggle Real-time Analysis |
Ctrl+Alt+Z |
Ligar/desligar análise automática |
🎛️ Configurações Inteligentes - Activity Bar
Configuração |
Ação |
Resultado |
⚡ Toggle Real-time Analysis |
1-click |
Liga/desliga análise em tempo real |
📝 Toggle Inline Complexity |
1-click |
Mostra/oculta complexidade inline |
🔄 Toggle Auto Tests |
1-click |
Habilita/desabilita testes automáticos |
🤖 Toggle Gemini AI |
1-click |
Liga/desliga análise com IA |
🔑 Configure API Key |
Input seguro |
Configuração da chave API do Gemini |
🗑️ Clear History |
1-click |
Limpa histórico de análises |
🔄 Refresh Views |
1-click |
Atualiza todas as visualizações |
🤝 Contribuição
🔧 Como Contribuir
- Fork o repositório
- Clone sua fork localmente
- Crie uma branch para sua feature
- Implemente as mudanças
- Teste thoroughly
- Submit um Pull Request
🐛 Reportar Bugs
- Use o GitHub Issues
- Inclua exemplos de código
- Descreva o comportamento esperado vs atual
- Adicione screenshots se relevante
💡 Sugerir Features
- Abra uma Feature Request
- Descreva o caso de uso
- Explique o benefício para a comunidade
📄 Licença
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.
🙋♂️ Suporte
📞 Canais de Suporte
❓ FAQ
🤔 A extensão funciona offline?
Sim, parcialmente!
- ✅ Análise básica de complexidade: Funciona 100% offline
- ✅ Visualizações e dashboards: Offline
- ✅ Biblioteca de algoritmos: Offline
- ✅ Comparações e benchmarks: Offline
- 🌐 Análise com IA (Gemini): Requer internet
- 🌐 Geração de exercícios: Requer internet
- 🌐 Otimizações automáticas: Requer internet
⚡ Como melhorar a performance da análise?
Para arquivos pequenos/médios (<1000 linhas):
- ✅ Mantenha análise em tempo real ativada
- ✅ Use todas as visualizações
Para arquivos grandes (>1000 linhas):
- 🔧 Desabilite análise em tempo real:
"algorithmAnalyzer.enableRealTimeAnalysis": false
- 🔧 Use análise sob demanda:
Ctrl+Alt+A
- 🔧 Exclua diretórios desnecessários:
"algorithmAnalyzer.project.excludePatterns": ["node_modules/**", "dist/**"]
- 🔧 Ajuste profundidade:
"algorithmAnalyzer.analysisDepth": "quick"
Para projetos grandes:
- 🚀 Use cache inteligente:
"algorithmAnalyzer.enablePerformanceMonitoring": true
- 🚀 Configure threshold:
"algorithmAnalyzer.complexityThreshold": "medium"
🎓 Posso usar em ambiente educacional?
Absolutamente! A extensão foi desenvolvida especificamente para educação:
🎓 Para Professores:
- ✅ Modo Classroom integrado
- ✅ Dashboard de progresso dos alunos
- ✅ Biblioteca de exercícios prontos
- ✅ Relatórios automáticos de aprendizado
- ✅ Sistema de gamificação
- ✅ Comparações de algoritmos lado a lado
📚 Para Alunos:
- ✅ Tutoriais interativos
- ✅ Explicações passo a passo
- ✅ Exercícios adaptativos
- ✅ Feedback instantâneo
- ✅ Visualizações didáticas
💰 Licenças Educacionais:
- 🆓 Gratuita para estudantes com email .edu
- 🆓 Gratuita para professores de instituições reconhecidas
- 🆓 Licença institucional disponível
- 📧 Contato: education@algorithm-analyzer.com
🔑 Como configurar a API do Google Gemini?
Passos para configurar:
Obter API Key:
Configurar na extensão:
{
"algorithmAnalyzer.useGeminiAI": true,
"algorithmAnalyzer.geminiApiKey": "SUA_API_KEY_AQUI"
}
Ou usar o comando:
Ctrl+Shift+P
→ "🔑 Configure API Key"
- Cole sua API key
- Teste a conexão
💡 Dica: A extensão inclui uma chave padrão para testes, mas recomendamos usar sua própria chave para uso intensivo.
🚀 Como contribuir para o projeto?
Formas de contribuir:
🐛 Reportar Bugs:
- Use GitHub Issues
- Inclua exemplos de código
- Descreva o comportamento esperado
💡 Sugerir Features:
🔧 Contribuir com Código:
- Fork o repositório
- Crie uma branch para sua feature
- Implemente com testes
- Abra um Pull Request
📚 Melhorar Documentação:
- Adicione exemplos
- Corrija erros
- Traduza para outros idiomas
🎓 Criar Conteúdo Educacional:
- Tutoriais em vídeo
- Artigos técnicos
- Exercícios práticos
🌍 A extensão suporta outros idiomas?
Idiomas Atualmente Suportados:
- 🇧🇷 Português (Brasileiro) - Completo
- 🇺🇸 English (US) - Completo
- 🇪🇸 Español - Em desenvolvimento
- 🇫🇷 Français - Planejado
Para alterar idioma:
{
"algorithmAnalyzer.language": "pt-BR" // ou "en-US", "es-ES", "fr-FR"
}
🌍 Quer ajudar com traduções?
- Entre em contato: i18n@algorithm-analyzer.com
- Contribua via Crowdin