- Apresentado por Edilberto: Clique aqui para assistir no YouTube.
Neste vídeo, é feita uma explicação detalhada sobre o funcionamento do algoritmo Mediana das Medianas (Median of Medians - MOM), com foco no raciocínio por trás da implementação, nos passos do algoritmo e na comparação com o QuickSelect.
K-Tastrophe é uma aplicação interativa que demonstra o funcionamento do algoritmo Mediana das Medianas (MOM) passo a passo. O sistema permite visualizar como o algoritmo encontra o k-ésimo menor elemento, k-ésimo maior elemento ou a mediana exata de um array, comparando sua performance com o algoritmo QuickSelect tradicional.
- Visualização Passo a Passo: Acompanhe cada etapa do algoritmo Mediana das Medianas
- Comparação com QuickSelect: Veja as diferenças de performance entre os dois algoritmos
- Busca Personalizada: Encontre o k-ésimo menor, k-ésimo maior elemento ou a mediana exata
- Interface Interativa: Navegue pelos passos com controles intuitivos
- Análise de Complexidade: Visualize métricas de eficiência e eliminação de elementos
- Explicações Detalhadas: Compreenda cada decisão do algoritmo com explicações claras
O algoritmo Mediana das Medianas é uma técnica determinística para encontrar o k-ésimo elemento de um array com complexidade O(n) garantida no pior caso:
- Divisão: O array é dividido em grupos de 5 elementos
- Ordenação: Cada grupo é ordenado individualmente usando insertion sort
- Extração de Medianas: A mediana de cada grupo é extraída
- Recursão: O algoritmo é aplicado recursivamente para encontrar a mediana das medianas
- Particionamento: O array original é particionado usando a mediana das medianas como pivot
- Decisão: Baseado nas condições de contorno, continua na partição apropriada
Implementação do algoritmo QuickSelect tradicional para comparação:
- Complexidade: O(n) no caso médio, O(n²) no pior caso
- Estratégia de Pivot: Utiliza o primeiro elemento (demonstra vulnerabilidade a arrays ordenados)
- Particionamento: Divide em elementos menores, iguais e maiores que o pivot
A aplicação demonstra visualmente:
- Número de comparações realizadas por cada algoritmo
- Porcentagem de elementos eliminados a cada recursão
- Garantia de eliminação de pelo menos 30% dos elementos no MOM
- Diferenças de comportamento em casos adversos
- Node.js (versão 18 ou superior)
- npm ou yarn
-
Clone o repositório:
git clone https://github.com/edilbertocantuaria/K-Tastrophe cd K-Tastrophe
-
Instale as dependências:
cd code yarn install
-
Realizar o build do projeto:
yarn run build
-
Execute o projeto em modo de desenvolvimento:
yarn dev
-
Acesse o aplicativo em seu navegador:
http://localhost:3000
-
Frontend:
-
Next.js 15 (App Router)
-
React 19
-
TypeScript 5
-
TailwindCSS 3.4
-
Shadcn/ui (componentes)
-
Lucide React (ícones)
-
Algoritmos:
-
Median of Medians (Determinístico)
-
QuickSelect (Probabilístico)
-
Insertion Sort (para grupos pequenos)
Esta aplicação é ideal para:
- Estudantes de Ciência da Computação aprendendo algoritmos de seleção
- Professores demonstrando conceitos de complexidade algorítmica
- Desenvolvedores interessados em algoritmos determinísticos vs probabilísticos
- Pesquisadores analisando comportamento de algoritmos em diferentes cenários
- Algoritmos de seleção determinísticos
- Análise de complexidade temporal
- Estratégias de escolha de pivot
- Particionamento de arrays
- Recursão e condições de parada
- Comparação de performance algorítmica
- Insira um array: Digite números separados por vírgulas
- Escolha o tipo de busca: k-ésimo menor, k-ésimo maior ou mediana (nesse último caso, a mediana exata)
- Execute os algoritmos: Clique em "Executar Algoritmos"
- Navegue pelos passos: Use os botões "Anterior" e "Próximo"
- Compare algoritmos: Ative a comparação para ver QuickSelect
- Analise resultados: Observe as métricas de performance
// Exemplo de array para teste
Array: 856, 692, 306, 215, 884, 776, 538, 98, 162, 785, 62, 320, 303, 333, 40, 123, 569, 504, 844, 453
// Buscar mediana (elemento central)
Tipo: Mediana
Resultado: Elemento na posição ⌈n/2⌉
// Buscar 5º menor elemento
Tipo: k-ésimo menor, k=5
Resultado: 5º elemento em ordem crescente
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature
) - Faça commit das suas alterações (
git commit -m 'Adiciona nova feature'
) - Faça push para a branch (
git push origin feature/nova-feature
) - Abra um Pull Request
- Implementação de outros algoritmos de seleção
- Visualização gráfica da árvore de recursão
- Modo de análise estatística avançada
- Suporte a diferentes tipos de dados
- Testes automatizados para os algoritmos
- Algoritmo Median of Medians desenvolvido por Blum, Floyd, Pratt, Rivest e Tarjan (1973)
- Interface inspirada em ferramentas educacionais modernas
- Componentes UI baseados em Shadcn/ui
Desenvolvido com ❤️ por Edilberto Almeida Cantuária e Kauan de Torres Eiras
Universidade de Brasília - Faculdade do Gama