2016-11-29 7 views
0

この問題があります。私は任意の6文字の文字列に基づいて配列[1,2,3,4]からランダムに選択したいと思います。文字列が同じ場合、この選択は常に同じです。文字列に基づいて配列を半ランダムに選択します。

私は文字列「dogdog」機能を持っているのであれば、たとえば、常に'3'返しますが、「bigcat」など

ため'4'は、私は解決策は、最初の文字列をハッシュかもしれないと思うだろう。どのように配列から選択肢にハッシュ文字列を変換することができますか?

答えて

1

文字列からハッシュを計算し、配列項目を[hash % array.length]にできます。 DJB hashfuncとの例は、(多くのためhttp://www.cse.yorku.ca/~oz/hash.htmlを参照してください):

function djbHash(s) { 
 
    let hash = 5381; 
 

 
    for (let c of s) { 
 
     hash = hash * 33 + c.charCodeAt(0); 
 
    } 
 
    return hash; 
 
} 
 

 
function mapToValues(s, values) { 
 
    return values[djbHash(s) % values.length]; 
 
} 
 

 
console.log(mapToValues('dogdog', [1, 2, 3, 4])); 
 
console.log(mapToValues('bigcat', [1, 2, 3, 4]));

+0

ハッシュ関数の分布が良いため、これは良い解決策です。より良いハッシング関数により、より良い結果が得られます! –

0

A本当に簡単ハッシュ関数:

  • 変更番号によってあなたの単語の各文字(aは、bが2である、などの1です)。 wと言い、単語全体が数字で変更されました。
  • 計算I = 4 MODワットI 0と3の間の数がそれに1を加えるであろう。
  • おめでとう、あなたは1から4の間の "ランダムな"数字に任意の単語を関連付けることができます。もちろん、他の数字で4を置き換えて、各世界を任意の範囲の乱数に関連付けることができます。
+0

あなたの乱数アルゴリズムは非常に貧しい分布を与えます。 –

関連する問題