Uma aplicação web moderna e interativa para aprender algoritmos fundamentais da ciência da computação através de visualizações dinâmicas e exercícios práticos.
- Next.js 15 - Framework React com App Router
- React 18 - Biblioteca para interfaces de usuário
- TypeScript - Tipagem estática para JavaScript
- Tailwind CSS - Framework CSS utilitário
- shadcn/ui - Componentes UI reutilizáveis
- React Context API - Gerenciamento de estado global
- useReducer - Padrão Redux-like para estado complexo
- Custom Hooks - Lógica reutilizável e separação de responsabilidades
- SVG nativo - Renderização de grafos e árvores
- CSS Animations - Animações fluidas para algoritmos
- DOM Manipulation - Controle direto para visualizações complexas
components/
├── navigation.tsx # Navegação lateral esquerda
├── visualization.tsx # Área central de visualização
├── explanation.tsx # Painel direito de explicações
├── sorting-visualization.tsx
├── graph-visualization.tsx
├── tree-visualization.tsx
└── dp-visualization.tsx
hooks/
├── use-sorting-algorithms.ts # Lógica de algoritmos de ordenação
├── use-graph-algorithms.ts # Algoritmos de grafos (BFS, DFS, Dijkstra)
├── use-tree-algorithms.ts # Algoritmos de árvores
└── use-dp-algorithms.ts # Programação dinâmica
// Estado global centralizado
interface AppState {
currentTopic: string | null
array: number[]
isAnimating: boolean
speed: number
comparisons: number
swaps: number
// ...
}
// Actions tipadas
type AppAction =
| { type: "SET_TOPIC"; payload: string }
| { type: "SET_ANIMATING"; payload: boolean }
// ...
- Componentes: Apenas renderização e interação
- Hooks: Lógica de negócio e algoritmos
- Context: Gerenciamento de estado
- Data: Conteúdo educacional separado
const bubbleSort = useCallback(async () => {
for (let i = 0; i < n - 1; i++) {
for (let j = 0; j < n - i - 1; j++) {
highlightComparison(j, j + 1)
await sleep(state.speed) // Pausa controlada
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
await sleep(state.speed)
}
}
}
}, [dependencies])
const renderVisualization = () => {
if (state.currentTopic?.includes("sort")) {
return <SortingVisualization />
}
if (["bfs", "dfs", "dijkstra"].includes(state.currentTopic)) {
return <GraphVisualization />
}
// ...
}
const renderGraph = (topic: string, container: HTMLElement) => {
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg")
graphData.nodes.forEach((node) => {
const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle")
circle.setAttribute("cx", node.x.toString())
// Eventos interativos
circle.addEventListener("click", () => startAlgorithm(node.id))
})
}
- useCallback para funções custosas
- Memoização de componentes pesados
- Lazy loading de visualizações
- Debouncing em controles de velocidade
- Universidades: Complemento para aulas de algoritmos
- Cursos Online: Material interativo para MOOCs
- Autodidatas: Aprendizado visual e prático
- Desenvolvedores: Revisão de algoritmos fundamentais
- Estudantes: Preparação para processos seletivos
- Bootcamps: Material de apoio para intensivos
- Professores: Ferramenta visual para aulas
- Palestrantes: Demonstrações ao vivo
- Workshops: Material interativo
Problema: Estudantes têm dificuldade em entender diferenças entre O(n²) e O(n log n)
Solução:
- Visualização lado a lado de Bubble Sort vs Merge Sort
- Contador de comparações em tempo real
- Controle de velocidade para análise detalhada
Resultado: Compreensão visual clara das diferenças de performance
Problema: Conceitos abstratos de BFS vs DFS são difíceis de visualizar
Solução:
- Grafos interativos clicáveis
- Animação passo a passo da exploração
- Cores diferentes para nós visitados/atuais
Resultado: Entendimento intuitivo dos padrões de busca
Problema: Conceito de "tabela DP" é abstrato para iniciantes
Solução:
- Visualização da construção da tabela em tempo real
- Fibonacci e Mochila como exemplos práticos
- Destaque das células sendo calculadas
Resultado: Desmistificação da programação dinâmica
- Bubble Sort: O(n²) - Algoritmo didático
- Merge Sort: O(n log n) - Dividir para conquistar
- Quick Sort: O(n log n) médio - Particionamento
- BFS: Busca em largura com fila
- DFS: Busca em profundidade com pilha
- Dijkstra: Caminho mínimo com pesos
- Árvore Binária: Percursos (pré, em, pós-ordem)
- Árvore AVL: Auto-balanceamento
- Fibonacci: Sequência clássica
- Problema da Mochila: Otimização combinatória
- ⚡ Controle de Velocidade: Ajuste fino das animações
- 🎲 Dados Aleatórios: Geração de arrays e grafos
- 📊 Estatísticas: Comparações, trocas, tempo
- 🧠 Quizzes: Avaliação do aprendizado
- 📈 Progresso: Acompanhamento de tópicos estudados
- Node.js 18+
- npm ou yarn
- Git
git clone https://github.com/seu-usuario/algolearn-platform.git
cd algolearn-platform
# Com npm
npm install
# Ou com yarn
yarn install
# Modo desenvolvimento
npm run dev
# Ou com yarn
yarn dev
Abra seu navegador e acesse: `http://localhost:3000\`
# Build
npm run build
# Iniciar produção
npm start
npm run dev # Desenvolvimento
npm run build # Build para produção
npm run start # Servidor de produção
npm run lint # Verificação de código
npm run type-check # Verificação de tipos
algolearn-platform/
├── app/ # App Router do Next.js
│ ├── page.tsx # Página principal
│ ├── layout.tsx # Layout global
│ └── globals.css # Estilos globais
├── components/ # Componentes React
│ ├── ui/ # Componentes shadcn/ui
│ ├── navigation.tsx # Navegação lateral
│ ├── visualization.tsx # Área de visualização
│ └── ...
├── contexts/ # Context API
│ └── app-context.tsx # Estado global
├── hooks/ # Custom hooks
│ ├── use-sorting-algorithms.ts
│ ├── use-graph-algorithms.ts
│ └── ...
├── data/ # Dados estáticos
│ └── algorithm-content.ts
├── lib/ # Utilitários
│ └── utils.ts
└── public/ # Arquivos estáticos
Solução:
rm -rf node_modules package-lock.json
npm install
Solução:
npm run dev -- -p 3001
Solução:
npm run type-check
- Fork o projeto
- Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
- Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
- Push para a branch (`git push origin feature/AmazingFeature`)
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.
- shadcn/ui - Componentes UI elegantes
- Tailwind CSS - Framework CSS utilitário
- Next.js - Framework React moderno
- Vercel - Plataforma de deploy
Desenvolvido com ❤️ para a comunidade de desenvolvedores