Difference between revisions of "LlHash/ja"
(copy from english(Todo: need translate to japanese)) |
m |
||
Line 1: | Line 1: | ||
{{LSL Function | {{LSL Function/ja | ||
|func_sleep=0.0|func_energy=10.0 | |func_sleep=0.0|func_energy=10.0 | ||
|func=llHash|sort=Hash | |func=llHash|sort=Hash | ||
Line 65: | Line 65: | ||
|helpers|related | |helpers|related | ||
|also_functions= | |also_functions= | ||
{{LSL DefineRow|[[llOrd]]|Convert a character into an ordinal}} | {{LSL DefineRow|[[llOrd/ja]]|Convert a character into an ordinal}} | ||
{{LSL DefineRow|[[llChar]]|Convert an ordinal into a character}} | {{LSL DefineRow|[[llChar/ja]]|Convert an ordinal into a character}} | ||
|also_articles={{LSL DefineRow||{{wikipedia|List of hash functions}}|}} | |also_articles={{LSL DefineRow||{{wikipedia|List of hash functions}}|}} | ||
{{LSL DefineRow||[https://preshing.com/20110504/hash-collision-probabilities/ Hash Collision Probabilities]|}} | {{LSL DefineRow||[https://preshing.com/20110504/hash-collision-probabilities/ Hash Collision Probabilities]|}} |
Revision as of 12:16, 2 November 2023
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
仕様
The SDBM algorithm provides a good general purpose hash function with a fairly even distribution across the 32 bit space in the general case. The characters fed into the hash function are 32bit wide.
U32 SDBMHash(const std::wstring &val)
{
U32 hash(0);
for(const wchar_t &c: val)
{
hash = c + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
In LSL:
integer llSDBMHash(string value)
{
integer hash = 0;
integer index = 0;
for (index = 0; index < llStringLength(value); ++index)
{
hash = llOrd(value, index) + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
警告
This hash value is not cryptographically secure and should not be used as part of any security protocol. SDBM provides a good distribution of hash values across its range, however with only 32 bits the chance of a collision is unacceptably high.(with 1000 entries, the odds for a collision are about 1 in 10000.)
サンプル
Given the combination of the object name and the owner's key generate a unique number. This number could be used for things like selecting a chat channel that has a low probability of colliding with another object.
integer pickIDForObject()
{
/* Generate an arbitrary integer ID for the combination of the
* object name and the ower's key. This value could be used
* for selecting a chat/listen channel.
*/
string obj_name = llGetObjectName();
key obj_owner = llGetOwner();
integer hash = llHash(obj_name + (string)obj_owner);
return hash;
}
関連項目
関数
• llOrd/ja | Convert a character into an ordinal | |||
• llChar/ja | Convert an ordinal into a character |
記事
• | List of hash functions | |||
• | Hash Collision Probabilities |