A Máquina por Baixo do Algoritmo: Tipos, Cache e Desvios
por Frank de Alcantara em 30/09/2026
- 1. Contar Antes de Programar: Complexidade, Restrições e Medição
- 2. A Máquina por Baixo do Algoritmo: Tipos, Cache e Desvios
- 3. Treino T01: Contando Antes de Codificar
- 4. Caixa de Ferramentas I: Tipos, Números e Trabalho em Tempo de Compilação
- 5. Caixa de Ferramentas II: Vetores, Matrizes, Vistas e Algoritmos
- 6. Treino T02: Pagar Uma Vez, Perguntar Sempre
- 7. Entrada e Saída de Alto Desempenho
- 8. Treino T03: Alimentando a Máquina
- 9. Busca Binária: Comprar Informação pela Metade
- 10. Ordenar por Comparação: o Limite, a Biblioteca e a Seleção
- 11. Ordenar sem Comparar: Contagem, Radix e a Escolha da Ferramenta
- 12. Treino T04: Comprar Informação
- 13. Somas de Prefixo e Arrays de Diferenças: Integrar e Derivar em Tempo Constante
- 14. Janelas que Deslizam: Deque Monotônico, Dois Ponteiros, Kadane e Sparse Table
- 15. Bits como Conjuntos: Máscaras, popcount e Bitsets de Muitas Palavras
- 16. Hash de Prefixo, Seleção em Três Partes e o Algoritmo de Mo
- 17. Treino T05: Intervalos com Orçamento
- 18. Pilhas, Filas, Heaps e Contêineres Associativos: o Estado que Sobrevive à Pergunta Seguinte
O Artigo 1 terminou com uma derrota incômoda. Uma hash table (tabela indexada por uma função de hash), que faz
Este artigo abre a máquina que executa os algoritmos. Vamos começar pelo menor objeto de um programa, uma variável, e descobrir que a escolha do seu tipo já é uma decisão de correção e de desempenho. Depois, vamos preparar o ambiente de compilação em C++23 e medir três forças que a notação assintótica ignora: a ordem em que o programa percorre a memória, a previsibilidade dos desvios condicionais e as promessas que o programador pode fazer ao compilador. No fim, vamos aprender a escrever a saída de um programa com a biblioteca de formatação do C++23, porque um juiz que compara saídas não perdoa um espaço fora do lugar.
Todos os tempos deste artigo foram medidos com o compilador do Visual Studio 18.10.3, versão 19.51 do cl, com as opções /std:c++latest /O2 /EHsc /W4 /permissive- /utf-8, em um notebook com processador Intel Core i7-10750H, de seis núcleos. Cada medição segue o protocolo do Artigo 1: uma execução de aquecimento descartada, cinco execuções cronometradas e a mediana como resumo. Os números mudam de máquina para máquina. As relações entre eles, que são o assunto do artigo, mudam muito menos.
1. Objetos, tipos e inicialização
Antes de usar C++23 como linguagem de trabalho, precisamos desacelerar diante de uma única linha:
1
int contador{1};
A linha parece inofensiva. É inofensiva da mesma forma que uma chave de fenda é inofensiva antes de alguém usá-la em um fio energizado. Ela contém seis ideias: um tipo, um nome, um objeto, uma região de armazenamento, um tempo de vida e um valor inicial.
O tipo é int. Um tipo diz ao compilador quais valores podem ser representados e quais operações são válidas sobre eles. Um int aceita aritmética, comparações, operações bit a bit e atribuição. Ele não promete uma faixa infinita. No MSVC, no GCC e no Clang, em todas as plataformas de 64 bits que os juízes usam, int tem 32 bits, e sua faixa será dada por
isto é, de
Este artigo completo contém estratégias práticas e dados exclusivos reservados para nossos membros cadastrados.
Continuar com Google Acesso gratuito e instantâneo com sua conta Google(Updated: )