ホームページ バックエンド開発 PHPチュートリアル php-perl ハッシュ アルゴリズムの実装 (times33 ハッシュ アルゴリズム)_PHP チュートリアル

php-perl ハッシュ アルゴリズムの実装 (times33 ハッシュ アルゴリズム)_PHP チュートリアル

Jul 13, 2016 am 10:42 AM
declare コード ハッシュ コピー 成し遂げる アルゴリズム

复制代価代価如下:
APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char_key,
apr_ssize_t *klen)
{
unsigned int hash = 0;
const unsigned char *key = (const unsigned char *)char_key;
const unsigned char *p;
apr_ssize_t i;

/*
* これは、
* perl で使用され、Berkeley DB にも登場する人気のある `times 33' ハッシュ アルゴリズムです。これは、文字列に対する最良のハッシュ関数の 1 つです
* 非常に高速に計算
* され、非常によく分散されるためです。
*
* 発案者は Dan Bernstein かもしれませんが、Berkeley DB のコードでは Chris Torek が引用されています
*ソース。私が見つけた最高の引用
* は、「Chris Torek、C でのテキストのハッシュ関数、Usenet メッセージ
* <27038@mimsy.umd.edu> in comp.lang.c 、1990 年 10 月」です。 Rich
* INN に関する Salz の USENIX 1992 論文は、
* .
*
* 33 という数字の魔法、つまり、なぜそれが他の多くの
* 定数よりもうまく機能するのか、素数であろうとなかろうと、これまで十分に説明されたことはありません。
* 誰でも。そこで私は説明を試みます。1 から 256 までのすべての
* 乗算器を実験的にテストすると (以前、低レベルの
* データ構造ライブラリを作成したときに行ったように)、偶数の
* 数値はまったく使用できないことが検出されます。残りの 128 個の奇数
* (数字 1 を除く) は、多かれ少なかれすべて同じように機能します。
* これらはすべて許容可能な方法で分散され、この方法でハッシュ
* テーブルを平均約 100 パーセントで埋めます。 86%.
*
* バリアントの chi^2 値を比較すると (
* Bob Jenkins の「ハッシュに関するよくある質問」
* http://burtleburtle.net/bob/hash/hashfaq.html を参照) chi^2) の説明
* では、数値 33 は最適な値ですらない。しかし、
* 数値 33 と、17、31、63、
* 127 および 129 などの他のいくつかの同等の数値は、可能な乗算器の大規模なセットの残りの
* 数値に対して大きな利点を持っています。それらの乗算
* 演算は、 1 つの
* シフトと 1 つの加算または減算演算のいずれかに基づいた、より高速な演算に置き換えることができます。そして
* ハッシュ関数は適切な分散を行う必要があり、かつ_ 計算が非常に高速でなければならないため、これらの少数の数値が優先されるべきです。
* -- Ralf S. Engelschall
*/

if (*クレン = = APR_HASH_KEY_STRING) {
for (p = key; *p; p++) {
hash = hash * 33 + *p;
}
*klen = p - key;
}
else {
for (p = キー、i = *klen; i--, p++) {
ハッシュ = *p;
}
}
リターンハッシュ;
}

関数コメント部分の翻訳: これはよく知られているtimes33ハッシュアルゴリズムです。このアルゴリズムはperl言語で採用されており、Berkeley DBに登場する最もよく知られたハッシュアルゴリズムの1つであり、When aの処理に使用されます。文字列はキー値のハッシュであり、計算効率が非常に高く、ハッシュ分散が優れています。このアルゴリズムを最初に提案したのは Dan Bernstein ですが、ソース コードは Berkeley DB の Clris Torek によって実装されました。正確な引用は、「Chris Torek、Text Hash Functions in C、Usenet News <<27038@mimsy.umd.edu> in comp.lang.c、1990 年 10 月」となります。Rich Salz が 1992 年に発行した INN についての記事で言及されています。この記事は、なぜ 33 という素晴らしい数字が他の数値よりも優れているのでしょうか? 重要かどうかに関係なく、その理由を完全に説明できる人はいません。ここで説明してみましょう。誰かが 1 から 256 までのすべての数値をテストしようとした場合 (私が少し前に書いた低レベルのデータ構造ライブラリのように)、単一の数値のパフォーマンスが特に優れているということはないことがわかりました。 128 個の奇数 (1 を除く) のパフォーマンスは同様で、すべて許容可能なハッシュ分散を達成できます。これらの 128 個の分散値 (テナガザル: 統計用語) を比較すると、平均分散率は約 86% になります。奇数間の確率変数とその数学的期待値の間の平均偏差を示します (Bob Jenkins の <ハッシュに関するよくある質問> http://burtleburtle.net/ bob/hash/hashfaq.html、二乗差の説明を参照) 、数値 33 は最良のものではありません (テナガザル: ここでの私の理解によれば、いつものように、分散は小さいほど安定するはずですが、ここでは明確ではないため、著者の分散の計算式、およびハッシュ分散表では、分散が大きいほど優れているため、ここでの良好なパフォーマンスが大きな分散値を指すのか、小さな分散値を指すのかは不明ですが、数値 33 とその他のいくつかは同じ良い数値です残りの数値に関しては、多数のハッシュ演算に直面する場合に大きな利点があります。つまり、これらの数値は、乗算を加算と減算を組み合わせたビット演算に置き換えることができます。結局のところ、優れたハッシュ アルゴリズムには、優れた分散と高い計算速度の両方が必要です。これらの点を同時に達成できる数値はほとんどありません。

http://www.bkjia.com/PHPjc/633589.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633589.html技術記事次のようにコードをコピーします。 APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *char_key, apr_ssize_t *klen) { unsigned int hash = 0; const unsigned char *key = (const...
)
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 Mar 26, 2024 pm 12:41 PM

上記および筆者の個人的な理解: 現在、自動運転システム全体において、認識モジュールが重要な役割を果たしている。道路を走行する自動運転車は、認識モジュールを通じてのみ正確な認識結果を得ることができる。下流の規制および制御モジュール自動運転システムでは、タイムリーかつ正確な判断と行動決定が行われます。現在、自動運転機能を備えた自動車には通常、サラウンドビューカメラセンサー、ライダーセンサー、ミリ波レーダーセンサーなどのさまざまなデータ情報センサーが搭載されており、さまざまなモダリティで情報を収集して正確な認識タスクを実現しています。純粋な視覚に基づく BEV 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか? Mar 24, 2024 am 11:27 AM

Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか?ソーシャルメディアの台頭により、WeChatは人々の日常生活に欠かせないコミュニケーションツールの1つになりました。ただし、多くの人は、同じ携帯電話で同時に複数の WeChat アカウントにログインするという問題に遭遇する可能性があります。 Huawei 社の携帯電話ユーザーにとって、WeChat の二重ログインを実現することは難しくありませんが、この記事では Huawei 社の携帯電話で WeChat の二重ログインを実現する方法を紹介します。まず第一に、ファーウェイの携帯電話に付属するEMUIシステムは、デュアルアプリケーションを開くという非常に便利な機能を提供します。アプリケーションのデュアルオープン機能により、ユーザーは同時に

C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 Jun 03, 2024 pm 01:25 PM

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

Huawei携帯電話にWeChatクローン機能を実装する方法 Huawei携帯電話にWeChatクローン機能を実装する方法 Mar 24, 2024 pm 06:03 PM

Huawei 携帯電話に WeChat クローン機能を実装する方法 ソーシャル ソフトウェアの人気と人々のプライバシーとセキュリティの重視に伴い、WeChat クローン機能は徐々に人々の注目を集めるようになりました。 WeChat クローン機能を使用すると、ユーザーは同じ携帯電話で複数の WeChat アカウントに同時にログインできるため、管理と使用が容易になります。 Huawei携帯電話にWeChatクローン機能を実装するのは難しくなく、次の手順に従うだけです。ステップ 1: 携帯電話システムのバージョンと WeChat のバージョンが要件を満たしていることを確認する まず、Huawei 携帯電話システムのバージョンと WeChat アプリが最新バージョンに更新されていることを確認します。

C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる Apr 02, 2024 pm 05:36 PM

C++sort 関数の最下層はマージ ソートを使用し、その複雑さは O(nlogn) で、クイック ソート、ヒープ ソート、安定したソートなど、さまざまなソート アルゴリズムの選択肢を提供します。

PHP プログラミング ガイド: フィボナッチ数列を実装する方法 PHP プログラミング ガイド: フィボナッチ数列を実装する方法 Mar 20, 2024 pm 04:54 PM

プログラミング言語 PHP は、さまざまなプログラミング ロジックやアルゴリズムをサポートできる、Web 開発用の強力なツールです。その中でも、フィボナッチ数列の実装は、一般的で古典的なプログラミングの問題です。この記事では、PHP プログラミング言語を使用してフィボナッチ数列を実装する方法を、具体的なコード例を添付して紹介します。フィボナッチ数列は、次のように定義される数学的数列です。数列の最初と 2 番目の要素は 1 で、3 番目の要素以降、各要素の値は前の 2 つの要素の合計に等しくなります。シーケンスの最初のいくつかの要素

改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 Jun 06, 2024 pm 12:33 PM

01 今後の概要 現時点では、検出効率と検出結果の適切なバランスを実現することが困難です。我々は、光学リモートセンシング画像におけるターゲット検出ネットワークの効果を向上させるために、多層特徴ピラミッド、マルチ検出ヘッド戦略、およびハイブリッドアテンションモジュールを使用して、高解像度光学リモートセンシング画像におけるターゲット検出のための強化されたYOLOv5アルゴリズムを開発しました。 SIMD データセットによると、新しいアルゴリズムの mAP は YOLOv5 より 2.2%、YOLOX より 8.48% 優れており、検出結果と速度のバランスがより優れています。 02 背景と動機 リモート センシング技術の急速な発展に伴い、航空機、自動車、建物など、地表上の多くの物体を記述するために高解像度の光学式リモート センシング画像が使用されています。リモートセンシング画像の判読における物体検出

人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる 人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる Mar 22, 2024 pm 10:10 PM

人工知能 (AI) と法執行機関の融合により、犯罪の予防と検出の新たな可能性が開かれます。人工知能の予測機能は、犯罪行為を予測するためにCrimeGPT (犯罪予測技術) などのシステムで広く使用されています。この記事では、犯罪予測における人工知能の可能性、その現在の応用、人工知能が直面する課題、およびこの技術の倫理的影響について考察します。人工知能と犯罪予測: 基本 CrimeGPT は、機械学習アルゴリズムを使用して大規模なデータセットを分析し、犯罪がいつどこで発生する可能性があるかを予測できるパターンを特定します。これらのデータセットには、過去の犯罪統計、人口統計情報、経済指標、気象パターンなどが含まれます。人間のアナリストが見逃す可能性のある傾向を特定することで、人工知能は法執行機関に力を与えることができます

See all articles