文字列をインデックスにマッピングするためにPerlが使用するハッシュ関数/アルゴリズムについて、あなたは誰かに光をあててもらえますか?関連する読書は? hv.h
で定義されたPerlはどのようなハッシュ関数/アルゴリズムを使用していますか?
9
A
答えて
15
PERL_HASH_INTERNAL_
は、以下のコピー:
/* hash a key */
/* FYI: This is the "One-at-a-Time" algorithm by Bob Jenkins
* from requirements by Colin Plumb.
* (http://burtleburtle.net/bob/hash/doobs.html) */
/* The use of a temporary pointer and the casting games
* is needed to serve the dual purposes of
* (a) the hashed data being interpreted as "unsigned char" (new since 5.8,
* a "char" can be either signed or unsigned, depending on the compiler)
* (b) catering for old code that uses a "char"
*
* The "hash seed" feature was added in Perl 5.8.1 to perturb the results
* to avoid "algorithmic complexity attacks".
*
* If USE_HASH_SEED is defined, hash randomisation is done by default
* If USE_HASH_SEED_EXPLICIT is defined, hash randomisation is done
* only if the environment variable PERL_HASH_SEED is set.
* For maximal control, one can define PERL_HASH_SEED.
* (see also perl.c:perl_parse()).
*/
#define PERL_HASH_INTERNAL_(hash,str,len,internal) \
STMT_START { \
register const char * const s_PeRlHaSh_tmp = str; \
register const unsigned char *s_PeRlHaSh = (const unsigned char *)s_PeRlHaSh_tmp; \
register I32 i_PeRlHaSh = len; \
register U32 hash_PeRlHaSh = (internal ? PL_rehash_seed : PERL_HASH_SEED); \
while (i_PeRlHaSh--) { \
hash_PeRlHaSh += *s_PeRlHaSh++; \
hash_PeRlHaSh += (hash_PeRlHaSh << 10); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \
} \
hash_PeRlHaSh += (hash_PeRlHaSh << 3); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \
(hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \
} STMT_END
関連する問題
- 1. どのようにしてPerlの関数にハッシュを渡すのですか?
- 2. Perlでサブルーチンの引数としてハッシュを使用するにはどうすればよいですか?
- 3. Perlでサブルーチンの引数としてハッシュを使用するにはどうすればよいですか?
- 4. どのようにしてPerlでハッシュのハッシュを作成できますか?
- 5. Math.randomはどのようなアルゴリズムを使用していますか?
- 6. JavaScriptハッシュを関数の引数として使用するにはどうすればよいですか?
- 7. どのような種類のアルゴリズムを使用しますか?
- 8. Perlサブ関数のハッシュ
- 9. どのような遺伝的アルゴリズム/プログラミングライブラリを使用していますか?
- 10. SWIGを使用してCでPerlハッシュを構築するにはどうすればよいですか?
- 11. どのようなアルゴリズムがObjCの[NSString containString:]でこの関数で使用されていますか?
- 12. Perl grep関数を使用して変数にnull値が割り当てられないようにするにはどうすればよいですか?
- 13. エラーがハッシュで、引数perlを持っているかどうかをチェックしていますか?
- 14. Safari 4 Webページのプレビューでは、どのハッシュ関数を使用しますか?
- 15. SQL Server CEはどのような暗号化アルゴリズムを使用しますか?
- 16. MsOfficeはファイル暗号化にどのようなアルゴリズムを使用しますか?
- 17. 関数elgg_view_input()はどのように使用しますか?
- 18. pythonのsorted()はどのアルゴリズムを使用していますか?
- 19. のstd ::ビットセットのハッシュ関数アルゴリズム
- 20. RDBMSはどのアルゴリズムを使用していますか?
- 21. table.sortはどのアルゴリズムを使用していますか?
- 22. どのハッシュ関数が使用されたかをどのように把握できますか?
- 23. ハッシュ関数(MD5、SHAなど)で使用される文字セットはどのようなものです...
- 24. Verilogでどのように関数を使用していますか?
- 25. これにはどのようなPHP関数を使用しますか?
- 26. どのように関数getLastKnownLocation()を使用しますか?
- 27. どのようにdatatables ajax関数を使用しますか
- 28. GetHashCode()evil内でF#のハッシュ関数を使用していますか?
- 29. パーティショニング!どうしたの?ハッシュ関数を使用しますか?デフォルト機能は何ですか?
- 30. どのように私はperlを使用してクリックメソッドを使用してファイルをダウンロードできますか?
何をしようとしますか?うまくいかないコードの例を教えてもらえますか? –
コリジョンを生成する任意のキー:) – Jean
常に衝突する2つのキーはありません。ハッシングは、必要に応じてランダムに乱されます。 – ikegami