目次
PHP コアテクノロジーとベストプラクティスハッシュアルゴリズム
ホームページ バックエンド開発 PHPチュートリアル PHP コア テクノロジーとベスト プラクティス ハッシュ アルゴリズム_PHP チュートリアル

PHP コア テクノロジーとベスト プラクティス ハッシュ アルゴリズム_PHP チュートリアル

Jul 13, 2016 am 09:57 AM
テクノロジー アルゴリズム

PHP コアテクノロジーとベストプラクティスハッシュアルゴリズム

PHP コアテクノロジーとベストプラクティスハッシュアルゴリズム

ハッシュ テーブル (ハッシュ テーブルとも呼ばれる) は、検索を高速化するためにキーワード Key を配列内の位置にマッピングすることでレコードにアクセスします。このマッピング関数をハッシュ関数と呼び、レコードを格納する配列をハッシュテーブルと呼びます。

1.ハッシュ関数

この機能は、ハッシュ アルゴリズムを通じて任意の長さの入力を固定長の出力に変換することであり、出力はハッシュ値です。この変換は圧縮マッピングです。つまり、ハッシュ値の空間は通常、入力空間よりもはるかに小さいため、入力が行われない場合、ハッシュ化によって同じ出力が得られる可能性があり、データから入力値を一意に決定することは不可能です。ハッシュ値。

優れたハッシュ関数は、次の条件を満たす必要があります。各キーワードがハッシュ テーブル内の任意の位置に均等に分散でき、ハッシュ テーブルにハッシュされた他のキーワードと競合しないことです。これは、ハッシュ関数の実装が最も難しいことです。

2. ハッシュアルゴリズム

1) 直接剰余法

直接剰余法は比較的単純で、キーワード k をハッシュ テーブルのサイズ m で割って剰余を取得します。

アルゴリズムは次のとおりです。

H(k) = k mod m

例: ハッシュ テーブルのサイズは m=12、指定されたキーワードは k=100 であるため、h(k) = 4 となります。このアルゴリズムは剰余演算であり、比較的高速です。

2) 製品の四捨五入方法

積丸め法では、まずキーワード k を使用して定数 A(0

) を乗算します。

H(k) = 床 (m*(kA mod 1))

このうち、kA mod1はkAの小数部分を表し、floorは四捨五入演算です。

キーワードが文字列の場合、上記のハッシュアルゴリズムは使用できません。文字列は文字で構成されているため、文字列内のすべての文字の ASCII コードを合計して整数を取得し、上記のハッシュ アルゴリズムに従って計算できます。

アルゴリズムは次のとおりです:

関数ハッシュ($key,$m){

$strlen= strlen($key);

$ハッシュヴァル= 0;

For($i=0;$i

$hashval+=ord($key{$I});

}

$hashval % $m;を返します

}

3) 古典的なハッシュ アルゴリズム Times33

Unsigned int DJBHash(char *str){

Unsignedint ハッシュ = 5381;

ながら(*str){

ハッシュ+=(ハッシュ

}

リターン(ハッシュ&0x7FFFFFFF)

}

アルゴリズムのアイデアは、継続的に 33 を乗算することです。その効率とランダム性は非常に優れており、Apache、Perl、PHP などの多くのオープンソース プロジェクトで広く使用されています。

3. ハッシュテーブル

ハッシュ テーブルの時間計算量は O(1) であり、ハッシュ テーブルの構造は次の図で表すことができます。

ハッシュ テーブルを構築するには、データを保存するのに十分な大きさの配列を作成する必要があります。また、キーワード Key を配列内の特定の位置にマップするためのハッシュ関数も必要です。

ハッシュテーブルの実装手順:

1) データを保存するための固定サイズの配列を作成します。

2) ハッシュ関数を設計します。

3) ハッシュ関数を通じてキーワードを配列内の特定の位置にマッピングし、この位置でデータ アクセスを実行します。

4. PHPを使用してハッシュテーブルを実装します

まず、2 つのプロパティ $buckets と $size を持つ HashTable クラスを作成します。 $buckets はデータの配列を保存するために使用され、$size は $buckets 配列のサイズを記録するために使用されます。次に、コンストラクターで $buckets 配列にメモリを割り当てます。コードは次のとおりです:

クラスハッシュテーブル{

プライベート $バケット;

プライベート$サイズ = 10;

パブリック関数 __construct(){

$this->バケット =new SplFixedArray($this->size);

}

}

?>

コンストラクターでは、サイズ 10 の配列が $buckets 配列に割り当てられます。ここでは通常の配列(array)ではなく、SPL拡張されたSplFixedArray配列が使用されています

これは、SplFixedArray 配列が C 言語の配列に近く、より効率的であるためです。配列の作成時に初期サイズを指定する必要があります。

注: SplFixedArray 配列を使用するには、SPl 拡張機能を有効にする必要があります。有効になっていない場合は、代わりに通常の配列を使用できます。

次に、ハッシュ テーブルのハッシュ関数を指定します。簡単にするために、ここでは最も単純なハッシュ アルゴリズムを使用します。つまり、上で述べたように、文字列のすべての文字を追加し、残りを取得します。コードは次のとおりです:

パブリック関数 hashfunc($key){

$strlen= strlen($key);

$ハッシュヴァル= 0;

For($i=0;$i

$hashval+=ord($key{$I});

}

$hashval % $this->size;を返します

}

ハッシュ関数を使用すると、挿入メソッドと検索メソッドを実装できます。データを挿入するときは、まずハッシュ関数を使用してハッシュ テーブル内のキーワードの位置を計算し、次にデータをこの場所に保存します。コードは次のとおりです:

パブリック関数 insert($key,$val){

$index= $this -> hashfunc($key);

;

$this->バケット[$index] = $val;

}

データを検索する方法は、データを挿入する方法と似ています。まず、ハッシュ関数を使用してハッシュ テーブル内のキーワードの位置を計算し、この位置のデータを返します。コードは次のとおりです:

パブリック関数 find($key){

$index= $this -> hashfunc($key);

;

$this を返す ->バケット[$index];

}

この時点で、単純なハッシュ テーブルが作成されました。このハッシュ テーブルをテストしてみましょう。コードリストは次のとおりです:

$ht= 新しいハッシュテーブル();

$ht->insert('key1','value1');

$ht->insert('key2','value2');

Echo$ht ->find(‘key1’);

Echo$ht ->find(‘key2’);

?>

完全なコード: #hash.php

リーリー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/984757.html技術記事 PHP コア テクノロジーとベスト プラクティス ハッシュ アルゴリズム PHP コア テクノロジーとベスト プラクティス ハッシュ アルゴリズム ハッシュ テーブルとも呼ばれるハッシュ テーブルは、キーワード Key を配列内の位置にマッピングすることでレコードにアクセスします...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

自動運転と軌道予測についてはこの記事を読めば十分です! 自動運転と軌道予測についてはこの記事を読めば十分です! Feb 28, 2024 pm 07:20 PM

自動運転では軌道予測が重要な役割を果たしており、自動運転軌道予測とは、車両の走行過程におけるさまざまなデータを分析し、将来の車両の走行軌跡を予測することを指します。自動運転のコアモジュールとして、軌道予測の品質は下流の計画制御にとって非常に重要です。軌道予測タスクには豊富な技術スタックがあり、自動運転の動的/静的知覚、高精度地図、車線境界線、ニューラル ネットワーク アーキテクチャ (CNN&GNN&Transformer) スキルなどに精通している必要があります。始めるのは非常に困難です。多くのファンは、できるだけ早く軌道予測を始めて、落とし穴を避けたいと考えています。今日は、軌道予測に関するよくある問題と入門的な学習方法を取り上げます。関連知識の紹介 1. プレビュー用紙は整っていますか? A: まずアンケートを見てください。

Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Stable Diffusion 3 の論文がついに公開され、アーキテクチャの詳細が明らかになりましたが、Sora の再現に役立つでしょうか? Mar 06, 2024 pm 05:34 PM

StableDiffusion3 の論文がついに登場しました!このモデルは2週間前にリリースされ、Soraと同じDiT(DiffusionTransformer)アーキテクチャを採用しており、リリースされると大きな話題を呼びました。前バージョンと比較して、StableDiffusion3で生成される画像の品質が大幅に向上し、マルチテーマプロンプトに対応したほか、テキスト書き込み効果も向上し、文字化けが発生しなくなりました。 StabilityAI は、StableDiffusion3 はパラメータ サイズが 800M から 8B までの一連のモデルであると指摘しました。このパラメーター範囲は、モデルを多くのポータブル デバイス上で直接実行できることを意味し、AI の使用を大幅に削減します。

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

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

DualBEV: BEVFormer および BEVDet4D を大幅に上回る、本を開いてください! DualBEV: BEVFormer および BEVDet4D を大幅に上回る、本を開いてください! Mar 21, 2024 pm 05:21 PM

この論文では、自動運転においてさまざまな視野角 (遠近法や鳥瞰図など) から物体を正確に検出するという問題、特に、特徴を遠近法 (PV) 空間から鳥瞰図 (BEV) 空間に効果的に変換する方法について検討します。 Visual Transformation (VT) モジュールを介して実装されます。既存の手法は、2D から 3D への変換と 3D から 2D への変換という 2 つの戦略に大別されます。 2D から 3D への手法は、深さの確率を予測することで高密度の 2D フィーチャを改善しますが、特に遠方の領域では、深さ予測に固有の不確実性により不正確さが生じる可能性があります。 3D から 2D への方法では通常、3D クエリを使用して 2D フィーチャをサンプリングし、Transformer を通じて 3D と 2D フィーチャ間の対応のアテンション ウェイトを学習します。これにより、計算時間と展開時間が増加します。

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

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

改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 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