LogRitmo client-side / livephase / 03LR / 03 active
vocabulário
registro local

Vocabulário revisado.

sem envio externo

Os termos entram aqui quando você abre uma explicação. O registro fica somente neste navegador, em armazenamento local.

nenhum termo consultado

Abra um tooltip do modo iniciante para começar seu vocabulário.

fase 03 / estratégias
estratégia / escolha local

Estratégia gulosa (Greedy).

Escolher bem agora — quando a estrutura do problema permite confiar no futuro.

próxima lente
visualização passo a passo

Qual atividade termina primeiro?

stage / Gulosa
passo 01 / 05preparar a entradaordem / fim crescente
foco atual / ordenar pelo fima faixa mostra o estado, não uma medição de tempo real
ação / progresso comparação / estado conflito / limite
telemetria / estratégia
passo01ordenar pelo fim
ordemfim crescenteestado observado
códigolinha 1JavaScript
estadopausadocontrole manual
/ o que está acontecendo

ordenar pelo fim
proteja o horizonte.

Antes da primeira escolha, colocamos as atividades em uma ordem que preserva o maior espaço possível para o restante.

princípio /
A melhor escolha local pode levar a uma solução ótima quando existe a propriedade de escolha gulosa.

limite que não pode ser omitido
Uma estratégia gulosa não é sinônimo de “escolha o maior valor”. Sem uma prova ou propriedade adequada, a decisão local pode bloquear a melhor solução global.

complexidade / mapa rápido
melhorO(n)
médioO(n log n)
piorO(n log n)

A seleção custa O(n) quando as atividades já estão ordenadas; nesta implementação, ordenar a entrada com toSorted domina o custo e leva a O(n log n).

/ por baixo do palco

Uma escolha, um futuro.

O destaque acompanha a decisão atual. Leia o pseudocódigo antes de trocar de linguagem; a implementação é uma tradução, não um novo algoritmo.

01ordenar atividades pelo fim
02último_fim ← −∞
03para atividade em atividades:
04 se início ≥ último_fim:
05 aceitar atividade
06 último_fim ← fim
implementação / JavaScript
01const ordered = activities.toSorted((a, b) => a.end - b.end);02let lastEnd = -Infinity;03return ordered.filter((activity) => {04  if (activity.start < lastEnd) return false;05  lastEnd = activity.end;06  return true;07});
voltar ao índicecontinuar: Divisão e conquista (Divide and Conquer)