Estabilidade: 1 - Experimental
Função de hash universal.
npm install universal-hash-function
Se um adversário malicioso escolher as chaves a serem hash por alguma função de hash fixa, o adversário pode escolher n chaves que todos hash no mesmo slot, produzindo um tempo médio de recuperação de O (n) . Qualquer função de hash fixa é vulnerável a um comportamento tão terrível no pior caso; A única maneira eficaz de melhorar a situação é escolher a função de hash aleatoriamente de uma maneira independente das chaves que realmente serão armazenadas. Essa abordagem, chamada Universal Hashing, pode produzir um bom desempenho, em média, não importa quais chaves o adversário escolhe. http://mitpress.mit.edu/books/introduction-algorithms
prime , numberOfHashSlots e someKey são todos números inteiros .
var uhf = require ( 'universal-hash-function' ) ;
// prime should be such that the greatest integer value of someKey should be
// less than prime
// uhf(prime, numberOfHashSlots);
var hashFunc1 = uhf ( 17 , 6 ) ;
var hashFunc2 = uhf ( 17 , 6 ) ;
var hashFunc3 = uhf ( 17 , 6 ) ;
// hashFunc(someKey)
hashFunc1 ( 0 ) ; // -> 2
hashFunc2 ( 0 ) ; // -> 1
hashFunc3 ( 0 ) ; // -> 5
hashFunc1 ( 1 ) ; // -> 3
hashFunc2 ( 1 ) ; // -> 5
hashFunc3 ( 1 ) ; // -> 1
hashFunc1 ( 2 ) ; // -> 5
hashFunc2 ( 2 ) ; // -> 2
hashFunc3 ( 2 ) ; // -> 3
// etc...