Pular para o conteúdo
Queimadas

Treze algoritmos de ordenação contra o fogo em São Paulo

Em 2024, os satélites do INPE registraram no estado 8.712 focos de incêndio, 5,2 vezes o total de 2023. Este sistema ordena, busca, mapeia e tenta prever esses focos com estruturas de dados escritas à mão, contando cada comparação.

Tela Visão geral do painel: manchete com 8.712 focos em 2024, faixa térmica dos 24 meses e gráfico da temporada mês a mês.
Visão geral no tema escuro. O painel roda sem internet: dados, malha do IBGE e mapa vêm dentro do programa.

O que o sistema faz

Um só programa em Java 21 com painel JavaFX, menu de console e relatórios. Cada parte usa código próprio, sem a ordenação pronta da biblioteca.

Ordena e conta

Bubble, Selection, Insertion, Shell, Merge, Quick, Quick 3-Way, Quick com dois pivôs, Intro, Heap, Tim, Radix e Counting. Todos acessam os dados por um vetor instrumentado que conta comparações, trocas, atribuições e acessos, e a ordenação pode ser seguida passo a passo, com o pseudocódigo ao lado.

Busca e indexa

Busca binária, árvore AVL, tabela hash, heap Top-K, Trie para autocompletar, árvore k-d para focos num raio e grafo de municípios vizinhos, tudo feito à mão. Para bases que não cabem na memória, External Merge Sort.

Mede de verdade

Benchmark com aquecimento do JIT, repetições e expoente empírico por regressão log-log, conferido com o JMH.

Mapeia

Pontos, agrupamento, calor e coroplético por densidade (focos por 1.000 km²) com quebras naturais de Jenks, sobre a malha municipal do IBGE.

Tenta prever

Random Forest com histórico de 2019 a 2024, validação no tempo e comparação honesta com previsões ingênuas.

É acessível

Modo daltônico com a paleta Okabe-Ito, alto contraste, texto ampliado e uso completo pelo teclado. Um teste automático simula três tipos de daltonismo a cada build.

Relata

PDF com capa, sumário, resumo executivo e gráficos vetoriais; Excel com gráficos nativos e aba explicando os dados.

Resultados reais

Os números abaixo vêm das execuções gravadas em docs/resultados. Nenhum foi digitado à mão.

Os 11 algoritmos que comparam, sobre a mesma base: 10.378 focos na ordem do arquivo, critério bioma → município → data. Barras em escala logarítmica; em azul, os algoritmos quadráticos.
AlgoritmoComparaçõesComparações em escala logTempo
Bubble Sort53.786.0783,973 s
Selection Sort53.846.2531,900 s
Insertion Sort26.762.938764,391 ms
Shell Sort187.23825,571 ms
Merge Sort122.68213,276 ms
Quick Sort169.10114,122 ms
Quick Sort 3-Way126.28015,156 ms
Quick Sort 2 pivôs154.94813,112 ms
Intro Sort151.43216,335 ms
Heap Sort244.05422,250 ms
Tim Sort (simplificado)127.01929,545 ms

O que menos comparou foi o Merge Sort (122.682 comparações); o Bubble Sort fez 53.786.078. Os tempos são de uma execução, sem aquecimento; as medições com rigor estão no benchmark. Radix e Counting não aparecem porque não comparam: exigem um critério numérico.

Encontrar um município

Comparações por consulta em 1.000 buscas por nome. O índice custa uma vez para montar e depois responde quase de graça.

MétodoPor consultaPreparo
Busca sequencial10.378,00
Ordenar + busca binária26,8123.132
Árvore AVL7,988.973
Tabela hash1,010.798

Prever o próximo mês

Erro médio absoluto (focos por município e mês) em 2024, treinando com 2020–2023. Agosto de 2024 fugiu de todo o histórico, e o modelo não bateu a previsão sazonal ingênua.

ModeloErro médio
Sazonal ingênuo (mesmo mês do ano anterior)1,196
Média histórica1,352
Random Forest1,355
Persistência (mês anterior)1,729

As telas

Paleta de comandos (Ctrl+K), modo apresentação (F5), tema claro e escuro, e navegação completa pelo teclado.

Animação do Insertion Sort: as barras se movem e a linha do pseudocódigo correspondente a cada comparação e escrita fica destacada.
Passo a passo: a linha do pseudocódigo acende a cada operação.
Tela Ordenação com placar de comparações, trocas e tempo e a tabela de dados ordenados.
Ordenação: placar de operações e verificação do resultado.
Animação da ordenação em barras sobre fundo térmico.
Cada comparação e troca vira animação.
Tela Estruturas e Busca com a árvore AVL desenhada e a comparação de métodos de busca.
Estruturas e busca, com a AVL girando ao vivo.
Tela Benchmark com curvas de tempo por tamanho de entrada em escala log-log.
Benchmark em escala log-log: a inclinação é o expoente.
Mapa coroplético dos municípios de São Paulo por densidade de focos.
Mapa coroplético por densidade, com quebras de Jenks.
Tela Machine Learning com validação em janelas, ablação e importância por permutação.
ML com validação no tempo e baselines.

Engenharia

Cada commit passa por testes, estilo, análise estática e cobertura mínima. As decisões de arquitetura estão registradas em ADRs, e a API em Javadoc.

307testes automatizados, incluindo a interface em modo headless
73%das linhas cobertas por testes (JaCoCo)
82%dos mutantes mortos nos algoritmos de ordenação (PIT)
0achados de Checkstyle, PMD e SpotBugs

Baixar

Os pacotes trazem o próprio Java: não é preciso instalar nada antes.

Ou rode a partir do código:

git clone https://github.com/gustavoblopes79/aps-queimadas
cd aps-queimadas
./mvnw javafx:run