LlHash/ja
< LlHash
Jump to navigation
Jump to search
Revision as of 14:09, 22 November 2023 by Misaki Vanilla (talk | contribs)
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の関連した項目が参考になるかもしれません。