Complexidade e estruturas

Limites assimptóticos, tamanho da entrada e o custo das estruturas que suportam os algoritmos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Medir antes de escolher

EntradaTamanho relevanteArmadilha
Vetor com nn elementosnnOrdenar antes tem custo próprio
Grafon=∣V∣n=\lvert V\rvert, m=∣E∣m=\lvert E\rvert; lista usa Θ(n+m)\Theta(n+m)Dizer “linear” sem representação esconde o custo
Mochila com capacidade WWWW ocupa Θ(log⁡(W+1))\Theta(\log(W+1)) bitsTabela com WW colunas é enorme face à escrita
Números sem limiteBits dos operandosSomar kk bits custa Θ(k)\Theta(k)

Assume valores nos tipos usados e respeita limites dos enunciados.

Limites assimptóticos

Para ff não negativa e nn grande:

  • f∈O(g)f\in O(g) se f(n)≤cg(n)f(n)\le cg(n); limite superior.
  • f∈Ω(g)f\in\Omega(g) se f(n)≥cg(n)f(n)\ge cg(n); limite inferior.
  • f∈Θ(g)f\in\Theta(g) se valem os dois.

3n2+10n+5∈Θ(n2)3n^2+10n+5\in\Theta(n^2), embora também pertença a O(n3)O(n^3). O(n2)O(n^2) não fixa melhor caso nem tempo exato.

1≺log⁡n≺n≺nlog⁡n≺n2≺n3≺2n≺n!.1\prec\log n\prec n\prec n\log n\prec n^2\prec n^3\prec2^n\prec n!.

Base do logaritmo muda constante. Potência nkn^k com kk fixo é polinomial.

Contar ciclos sem multiplicar às cegas

  • Passos consecutivos somam; ciclo soma cada iteração.
  • Triângulo 0,…,n−10,\ldots,n-1 dá n(n−1)/2n(n-1)/2: Θ(n2)\Theta(n^2).
  • Duplicar índice até nn dá Θ(log⁡n)\Theta(\log n).
  • Percorrer todas as listas de adjacência examina mm arestas, não nmnm.
  • Fase que produz Θ(n2)\Theta(n^2) e ordena custa Θ(n2log⁡n)\Theta(n^2\log n).

Pior caso, médio e amortizado

  • Procura linear: melhor Θ(1)\Theta(1), pior Θ(n)\Theta(n).
  • Médio exige distribuição; média dos extremos não chega.
  • Amortizado limita sequência: nn inserções em vetor com crescimento geométrico custam O(n)O(n), embora uma realocação custe Θ(n)\Theta(n).

Estruturas e representação

EstruturaOperaçãoCusto
VetorAcessoΘ(1)\Theta(1)
Vetor ordenadoPesquisa; inserção deslocaO(log⁡n)O(\log n); O(n)O(n)
Fila ou pilhaExtremosO(1)O(1)
HeapMínimo; inserir e extrairO(1)O(1); O(log⁡n)O(\log n)
Árvore equilibradaPesquisa e atualizaçãoO(log⁡n)O(\log n)
DispersãoCom boa função e ocupaçãoO(1)O(1) esperado; pior O(n)O(n)
Union-findCom compressão e união por rankO(α(n))O(\alpha(n)) amortizado

Matriz usa Θ(n2)\Theta(n^2) espaço e testa aresta em Θ(1)\Theta(1). Listas usam Θ(n+m)\Theta(n+m) e percorrem vizinhos de uu em Θ(deg⁡(u))\Theta(\deg(u)). Distingue peso zero de ausência de aresta.

priority_queue sem decreaseKey: insere novos pares e ignora antigos. Não alteres chave na heap sem reorganizar.

Tabela O(nW)O(nW) com WW em binário é pseudopolinomial, não polinomial na entrada.

Análise completa.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.