Difference between revisions of "LlHash/ja"
< LlHash
Jump to navigation
Jump to search
(copy from english(Todo: need translate to japanese)) |
m |
||
(One intermediate revision by the same user not shown) | |||
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 | ||
|func_desc= | |func_desc=指定された文字列の32ビットハッシュを返します。入力文字列が空の場合、0を返します。 | ||
|return_type=integer | |return_type=integer | ||
|p1_type=string|p1_name=val|p1_desc= | |p1_type=string|p1_name=val|p1_desc=ハッシュする文字列。 | ||
|p1_hover= | |p1_hover=ハッシュする文字列。 | ||
|return_text= | |return_text= | ||
|func_footnote= | |func_footnote= | ||
|spec= | |spec= | ||
SDBMアルゴリズムは、一般的な用途に適したハッシュ関数で、一般的なケースでは32ビットスペース全体に対してかなり均等な分布を提供します。 | |||
ハッシュ関数に供給される文字は32ビット幅です。 | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 42: | Line 42: | ||
|caveats= | |caveats= | ||
このハッシュ値は暗号的に安全ではなく、セキュリティプロトコルの一部として使用すべきではありません。 | |||
SDBMはハッシュ値をその範囲全体に均等に提供しますが、32ビットしかないため、衝突の可能性が非常に高いです(1000エントリの場合、衝突の確率は約1/10000です)。 | |||
|examples= | |examples= | ||
オブジェクト名とオーナーのキーの組み合わせを与えて、ユニークな番号を生成します。この番号は、他のオブジェクトとの衝突の可能性が低いチャットチャネルを選択するなどの用途に使用できます。 | |||
<source lang="lsl2"> | <source lang="lsl2"> | ||
integer pickIDForObject() | integer pickIDForObject() | ||
Line 64: | Line 62: | ||
</source> | </source> | ||
|helpers|related | |helpers|related | ||
{{LSL DefineRow|[[llOrd/ja]]|文字を順序数に変換する}} | |||
{{LSL DefineRow|[[llOrd]]| | {{LSL DefineRow|[[llChar/ja]]|順序数を文字に変換する}} | ||
{{LSL DefineRow|[[llChar]]| | |also_articles={{LSL DefineRow||{{wikipedia|ハッシュ関数の一覧}}|}} | ||
|also_articles={{LSL DefineRow||{{wikipedia| | |||
{{LSL DefineRow||[https://preshing.com/20110504/hash-collision-probabilities/ Hash Collision Probabilities]|}} | {{LSL DefineRow||[https://preshing.com/20110504/hash-collision-probabilities/ Hash Collision Probabilities]|}} | ||
|notes | |notes |
Latest revision as of 14:09, 22 November 2023
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
仕様
SDBMアルゴリズムは、一般的な用途に適したハッシュ関数で、一般的なケースでは32ビットスペース全体に対してかなり均等な分布を提供します。 ハッシュ関数に供給される文字は32ビット幅です。
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;
}
警告
このハッシュ値は暗号的に安全ではなく、セキュリティプロトコルの一部として使用すべきではありません。 SDBMはハッシュ値をその範囲全体に均等に提供しますが、32ビットしかないため、衝突の可能性が非常に高いです(1000エントリの場合、衝突の確率は約1/10000です)。
サンプル
オブジェクト名とオーナーのキーの組み合わせを与えて、ユニークな番号を生成します。この番号は、他のオブジェクトとの衝突の可能性が低いチャットチャネルを選択するなどの用途に使用できます。
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;
}
関連項目
特記事項
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。