Introdução
- No outono de 2021, Andrew Krapivin, estudante de graduação da Rutgers University, se deparou com um artigo que mudaria sua vida.
- O artigo tratava de "ponteiros pequenos" usados para apontar informações na memória do computador.
- Krapivin concebeu uma forma de reduzir o tamanho dos ponteiros para diminuir o consumo de memória.
Descoberta de uma nova tabela hash
- Krapivin conduziu experimentos usando tabelas hash, um método comum de armazenar dados.
- Durante os experimentos, Krapivin acabou inventando um novo tipo de tabela hash que opera mais rápido do que as existentes.
- A descoberta levou a um resultado que derruba uma conjectura de 40 anos na ciência de dados.
A importância das tabelas hash
- As tabelas hash são uma das estruturas de dados mais antigas da ciência da computação e oferecem eficiência no armazenamento de dados.
- Elas são projetadas para executar três funções: buscar, remover e inserir elementos.
A conjectura de Yao e sua refutação
- Em 1985, o cientista da computação Andrew Yao apresentou uma conjectura sobre como encontrar elementos no pior caso em tabelas hash com certas propriedades.
- A nova tabela hash de Krapivin refuta a conjectura de Yao ao provar que, no pior caso, o tempo necessário para consultas e inserções é proporcional a
(log x)².
Nova descoberta sobre o tempo médio de consulta
- Krapivin e sua equipe mostraram que, em tabelas hash não gananciosas, o tempo médio de consulta não depende de
x.
- Isso significa que é possível atingir um tempo médio de consulta constante independentemente do grau de preenchimento da tabela hash.
Conclusão
- Este estudo aprofunda a compreensão sobre tabelas hash e pode levar a aplicações práticas.
- Esse entendimento sobre estruturas de dados pode servir de base para melhorias práticas no futuro.
1 comentários
Comentários no Hacker News
Krapivin conseguiu um avanço sem conhecer a conjectura de Yao
Ótimo resultado, mas parece que isso deveria ser chamado de conjectura da ciência da computação
Fico curioso se alguém conhece um repositório no GitHub com essa implementação
É legal, mas esse estilo de "culto à personalidade" do artigo me incomoda um pouco
Na nova tabela hash, o tempo necessário para consultas e inserções no pior caso é proporcional a
(log x)²Ler este artigo é como ler a explicação do problema de Monty Hall
Um bom teste recente
Fico curioso se alguém tem uma implementação simples de 'Tiny pointers'
Como o vilão de <i>Scooby Doo</i> sempre dizia:
Dei uma folheada no artigo, e a principal diferença que eles usam parece ser que o algoritmo de inserção da tabela hash procura mais longe em vez de preencher de forma gulosa o primeiro slot vazio
Resultado teórico interessante, mas na prática o "truque" atual de alocar uma tabela maior do que o necessário provavelmente parece uma solução melhor