Tipos abstratos e escolha da representação

Separar operações observáveis, invariantes da representação e custos concretos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

O que o cliente vê

Um TAD promete valores e operações. A representação escolhe campos e custos.

  • Consulta de i pede 0<=i<size. Retirada da frente pede lista não vazia ou ausência explícita.
  • Invariante típico de lista simples: sem ciclos, termina em nulo, tem exatamente tamanho nós. primeiro é nulo só no vazio.
  • Construtor cria o invariante. Cada método repõe-no. Destrutor liberta o que é possuído.

Vetor ou nós

Precisas dePrefere
Índice em O(1)O(1) e poucas inserções à frenteVetor
Frente em O(1)O(1) e inserção após posição conhecidaLista
Consultar o fimVetor, ou lista com cauda
Inserir no fimVetor em O(1)O(1) amortizado, ou lista com cauda em O(1)O(1)
Remover o fimVetor em O(1)O(1); na lista, duplamente ligada com cauda em O(1)O(1), simples com cauda em O(n)O(n) pelo anterior

A pesquisa binária corre sobre qualquer sequência ordenada, mas o custo logarítmico habitual exige acesso direto em O(1)O(1). Numa lista ligada com iteradores de avanço, chegar ao meio já custa deslocações lineares, por isso o vetor ordenado é a escolha natural.

«Inserir em O(1)O(1)» só conta depois de teres a ligação. Localizar a posição pode dominar.

Quem liberta e o que invalida

  • Não copies só o apontador inicial: dois donos libertam os mesmos nós.
  • vector pode realocar ao inserir e nesse caso invalida tudo. Sem realocar, inserir invalida os iteradores da posição em diante.
  • list conserva iteradores ao inserir; apagar invalida só os do elemento.
  • n inserções em set custam O(nlog⁡n)O(n\log n). Hash com constantes esperadas dá linear esperado, não garantido.

Testa vazio, um elemento, repetidos e extremidades. Confere o invariante, não só a impressão final.

Exemplos e contratos.

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