Генерация детерминированности c га sh число от 0 до 1 из строки - PullRequest
0 голосов
/ 06 мая 2020

Я ищу способ строки 'ha sh' в JavaScript, так что

  • результат будет детерминированным c (всегда дает тот же результат с тем же вводом строка)
  • результат представляет собой десятичное число от 0 до 1
  • результаты (как бы) равномерно распределены в пространстве от 0 до 1.

Например:

decimalHash('hallo world') = 0.145     // some made up number
decimalHash('how are you?') = 0.345    // some made up number
decimalHash('fine, thanks!') = 0.945   // some made up number

Я искал такой метод, но все функции ha sh, которые я нашел до сих пор, имеют разные характеристики. Любая помощь будет оценена!

1 Ответ

1 голос
/ 06 мая 2020

Вы можете создать собственное, используя значение для каждого chatacter с коэффициентом и суммируя это значение. В конце возьмите только дробную часть.

Этот подход может привести к коллизиям.

const decimalHash = string => {
    let sum = 0;
    for (let i = 0; i < string.length; i++)
        sum += (i + 1) * string.codePointAt(i) / (1 << 8)
    return sum % 1;
}

console.log(decimalHash('a'));
console.log(decimalHash('aa'));
console.log(decimalHash('hallo world'));
console.log(decimalHash('how are you?'));
console.log(decimalHash('fine, thanks!'));
...