Em tabelas de hash que resolvem colisões por sondagem linear, para garantir desempenho esperado, é necessário e suficiente que a função de hash seja de uma família 5 independente. (Suficiência: "Sondagem linear com independência constante", Pagh et al. , Necessidade: "Sobre a independência k exigida pela sondagem linear e independência minima", Pătraşcu e Thorup )
Entendo que as famílias independentes 5 mais rapidamente conhecidas usam tabulação. Escolher uma função de uma família assim pode ser caro, então eu gostaria de minimizar o número de vezes que o faço, enquanto ainda evito ataques de complexidade algorítmica, conforme descrito em "Negação de serviço por ataques de complexidade algorítmica", de Crosby e Wallach . Estou menos preocupado com ataques de tempo (ou seja, adversários com cronômetros). Quais são as consequências de reutilizar a mesma função:
- Ao cultivar uma tabela de hash muito cheia?
- Ao reduzir uma tabela de hash que não está cheia o suficiente?
- Ao reconstruir uma tabela de hash com muitos bits "excluídos" definidos?
- Em tabelas de hash diferentes que podem conter algumas chaves em comum?
- Em tabelas de hash diferentes que não contêm chaves em comum?