Published on

Depois do Hello World, a estrutura de dados define o custo do código

Authors
depois-do-hello-world-a-estrutura-de-dados-define-o-custo-do-c-digo

O passo seguinte ao Hello World não é escrever programas maiores, mas entender o custo das escolhas que parecem triviais. Fábio Akita usa a correção de seu próprio vídeo sobre C como ponto de partida para mostrar que detalhes como stack, heap, ponteiros e segmentos de memória não são preciosismo: eles explicam por que o mesmo resultado pode ter custos muito diferentes quando o volume de dados cresce.

A conversa fica concreta quando ele compara arrays e listas ligadas. Um array permite acessar uma posição diretamente, desde que todos os elementos tenham tamanho previsível e estejam em sequência. O problema aparece quando a coleção precisa crescer sem que se saiba o tamanho final: alocar outro array, copiar elementos e liberar o anterior pode desperdiçar processamento e memória. A lista ligada inverte a vantagem. Inserir elementos é simples e barato, inclusive no meio da lista, mas procurar um item exige caminhar nó por nó.

O hash table entra como uma solução intermediária, não como uma resposta mágica. Akita mostra uma implementação rudimentar em C combinando um array fixo com listas ligadas para tratar colisões. A chave vira um número por uma função de hash; esse número aponta para uma posição do array; se duas chaves caem no mesmo lugar, os nós são encadeados. O mecanismo explica por que dicionários em Python ou objetos em JavaScript parecem simples na sintaxe, mas dependem de estruturas sofisticadas, geralmente implementadas em C ou C++, para entregar desempenho aceitável.

A consequência prática é menos confortável do que escolher uma linguagem ou framework favorito. Um bubble sort pode parecer suficiente com dez elementos e virar um problema com milhares. Um quicksort é bom no caso médio, mas pode piorar em certos dados. A notação Big O, com todas as ressalvas que ele menciona, serve para lembrar que código não roda no abstrato: roda sobre entradas específicas, com memória finita e piores casos possíveis. Aprender estruturas de dados e complexidade é o que permite decidir quando a solução simples continua simples e quando ela apenas adiou o custo para a produção.

Assistir ao episódio original

Referências encontradas

Livros

  • The C Programming Language By Brian W. Kernighan Dennis M. Ritchie(2010-11-17), de Brian W. Kernighan; Dennis M. Ritchie — Ver livro na Amazon
  • O Mítico Homem-mês: Ensaios Sobre Engenharia de Software, de Frederick P. Brooks Jr. — Ver livro na Amazon
  • Art Of Computer Programming, The, Volumes 1-4b, Boxed Set: Volume 1-4b, de Donald E. Knuth — Ver livro na Amazon
  • Algoritmos - Teoria e Prática, de Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein — Ver livro na Amazon

Este post contém links de afiliado. Se você comprar por eles, eu posso receber uma pequena comissão sem custo adicional para você.