Algoritmos e complexidade

Pesquisar, justificar uma redução e comparar crescimento do trabalho para entradas maiores.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Pesquisa linear e binária

  • A pesquisa linear visita elementos por ordem. Devolver no primeiro igual encontra a primeira ocorrência, mesmo numa lista desordenada.
  • A pesquisa binária exige uma sequência ordenada e acesso direto ao meio. Compara com o meio e exclui a metade impossível.
  • Define o resultado para ausência: aqui usamos None, distinguindo-o do índice zero. Com repetidos, esta pesquisa binária pode devolver qualquer ocorrência.
Reduzir o intervalo de pesquisa
def binaria(valores, alvo):
    inicio, fim = 0, len(valores) - 1
    while inicio <= fim:
        meio = (inicio + fim) // 2
        if valores[meio] == alvo:
            return meio
        if alvo < valores[meio]:
            fim = meio - 1
        else:
            inicio = meio + 1
    return None

xs = [2, 5, 8, 11, 14, 17, 20]
print(binaria(xs, 14), binaria(xs, 9), binaria([], 2))
Resultado

Executa o código para ver a saída e os gráficos.

A saída é 4 None None: para 14, os meios têm valores 11, 17 e 14.

  • inicio <= fim inclui o último candidato; meio ± 1 exclui o meio já rejeitado e garante progresso.
  • Ausência termina num intervalo vazio.
  • Ordenar antes da pesquisa muda as posições relativamente à entrada original.

Crescimento do trabalho

Define o tamanho n da entrada, a operação contada e o caso analisado.

  • O(g(n))O(g(n)) é um limite superior para entradas suficientemente grandes; Θ(g(n))\Theta(g(n)) dá também um limite inferior da mesma ordem.
  • 3n+23n+2 é Θ(n)\Theta(n) e também O(n2)O(n^2); o segundo limite não prova custo quadrático.
Operação ou estratégiaCusto neste modelo
Aceder a uma posição de listaO(1)O(1)
Pesquisa binária, pior casoO(log⁡n)O(\log n) comparações
Pesquisa linear, pior casoO(n)O(n) comparações
sorted, limite geral por comparaçãoO(nlog⁡n)O(n\log n)
Visitar todos os pares de posiçõesΘ(n2)\Theta(n^2)
  • O modelo considera acessos e comparações de valores com custo limitado.
  • Aritmética com inteiros Python arbitrariamente grandes não é sempre constante.

Ciclos e operações escondidas

  • Dois percursos sucessivos de n elementos somam trabalho linear; dois percursos aninhados completos fazem n² visitas.

  • Para pares i < j, as visitas são n(n−1)/2n(n-1)/2: com n = 4, há 6 pares. O crescimento continua quadrático.

  • Uma fatia de k elementos copia-os, custando Θ(k)\Theta(k); inserir no início desloca elementos. append tem custo amortizado constante.

  • Pertença numa lista pode visitar todos os elementos. Dicionários/conjuntos têm custo médio esperado constante sob hipóteses adequadas sobre hashes, mas pior caso linear.

  • Ordenar para uma só procura pode acrescentar trabalho desnecessário; muitas procuras podem compensar a preparação.

  • Medir segundos compara implementações num ambiente; analisar crescimento compara o efeito de aumentar a entrada. Nenhum dos dois prova correção.

À 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.