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 / decomposição

Divisão e conquista (Divide and Conquer).

Reduzir um problema grande a partes menores, resolver e combinar com método.

próxima lente
visualização passo a passo

Como ordenar sem enfrentar tudo de uma vez?

stage / Dividir
passo 01 / 05dividircamada / 0 → 1
foco atual / dividir o intervaloa faixa mostra o estado, não uma medição de tempo real
ação / progresso comparação / estado conflito / limite
telemetria / estratégia
passo01dividir o intervalo
camada0 → 1estado observado
códigolinha 3JavaScript
estadopausadocontrole manual
/ o que está acontecendo

dividir o intervalo
combine com método.

O intervalo inteiro é grande demais para uma decisão única. O corte cria dois subproblemas menores.

princípio /
Subproblemas menores tornam a decisão tratável; a combinação reconstrói a resposta completa.

limite que não pode ser omitido
Dividir indiscriminadamente não garante eficiência. A relação entre tamanho, quantidade de subproblemas e custo da combinação define o resultado.

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

A visualização usa a recorrência T(n) = 2T(n/2) + O(n) para explicar o custo do merge sort.

/ por baixo do palco

Um corte, uma combinação.

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.

01se tamanho ≤ 1: retornar
02meio ← tamanho / 2
03esquerda ← resolver metade
04direita ← resolver metade
05retornar combinar(esquerda, direita)
implementação / JavaScript
01function mergeSort(items) {02  if (items.length <= 1) return items;03  const middle = Math.floor(items.length / 2);04  const left = mergeSort(items.slice(0, middle));05  const right = mergeSort(items.slice(middle));06  return merge(left, right);07}
voltar ao índicecontinuar: Programação dinâmica (Dynamic Programming)