Inhaltsverzeichnis
PHP核心技术与最佳实践之Hash算法
Heim Backend-Entwicklung PHP-Tutorial PHP核心技术与最佳实践之Hash算法_PHP教程

PHP核心技术与最佳实践之Hash算法_PHP教程

Jul 13, 2016 am 09:57 AM
技术 核心 算法

PHP核心技术与最佳实践之Hash算法

PHP核心技术与最佳实践之Hash算法

Hash表又称散列表,通过把关键字Key映射到数组中的一个位置来访问记录,以加快查找速度。这个映射函数称为Hash函数,存放记录的数组称为Hash表。

1. Hash函数

作用是把任意长度的输入,通过Hash算法变换成固定长度的输出,该输出就是Hash值。这种转换是一种压缩映射,也就是Hash值得空间通常远小于输入的空间,不输入可能会散列成相同的输出,而不可能从Hash值来唯一的确定输入值。

一个好的hash函数应该满足以下条件:每个关键字都可以均匀的分布到Hash表任意一个位置,并与其他已被散列到Hash表中的关键字不发生冲突。这是Hash函数最难实现的。

2. Hash算法

1) 直接取余法

直接取余法比较简单,直接用关键字k除以Hash表的大小m取余数,算法如下:

H(k) = k mod m

例如:Hash表的大小为m=12,所给关键字为k=100,则h(k) = 4.这种算法是一个求余操作,速度比较快。

2) 乘积取整法

乘积取整法首先使用关键字k乘以一个常数A(0

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

其中,kA mod1表示kA的小数部分,floor是取整操作。

当关键字是字符串的时候,就不能用上面的Hash算法。因为字符串是由字符组成,所以可以把字符串所有的字符的ASCII码加起来得到一个整数,然后再按照上面的Hash算法去计算即可。

算法如下:

Function hash($key,$m){

$strlen= strlen($key);

$hashval= 0;

For($i=0;$i

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

}

Return $hashval % $m;

}

3) 经典Hash算法Times33

Unsigned int DJBHash(char *str){

Unsignedint hash = 5381;

While(*str){

Hash+=(hash

}

Return (hash &0x7FFFFFFF)

}

算法思路就是不断乘以33,其效率和随机性都非常好,广泛运用于多个开源项目中,如Apache、Perl和PHP等。

3. Hash表

Hash表的时间复杂度为O(1),Hash表结构可用图表示:

\


要构造一个Hash表必须创建一个足够大的数组用于存放数据,另外还需要一个Hash函数把关键字Key映射到数组的某个位置。

Hash表的实现步骤:

1) 创建一个固定大小的数组用于存放数据。

2) 设计Hash函数。

3) 通过Hash函数把关键字映射到数组的某个位置,并在此位置上进行数据存取。

4. 使用PHP实现Hash表

首先创建一个HashTable类,有两个属性$buckets和$size。$buckets用于存储数据的数组,$size用于记录$buckets数组大小。然后在构造函数中为$buckets数组分配内存。代码如下:

ClassHashTable{

Private$buckets;

Private$size =10;

Publicfunction __construct(){

$this-> buckets =new SplFixedArray($this->size);

}

}

?>

在构造函数中,为$buckets数组分配了一个大小为10的数组。在这里使用了SPL扩展的SplFixedArray数组,不是一般的数组(array)

这是因为SplFixedArray数组更接近于C语言的数组,而且效率更高。在创建其数组时需要为其提供一个初始化的大小。

注意:要使用SplFixedArray数组必须开启SPl扩展。如果没有开启,可以使用一般的数组代替。

接着为Hash表指定一个Hash函数,为了简单起见,这里使用最简单的Hash算法。也就是上面提到了把字符串的所有字符加起来再取余。代码如下:

 

 

 

Public Function hashfunc($key){

$strlen= strlen($key);

$hashval= 0;

For($i=0;$i

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

}

Return $hashval % $this->size;

}

有了Hash函数,就可以实现插入和查找方法。插入数据时,先通过Hash函数计算关键字所在Hash表的位置,然后把数据保存到此位置即可。代码如下:

Public function insert($key,$val){

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

$this-> buckets[$index] = $val;

}

查找数据方法与插入数据方法相似,先通过Hash函数计算关键字所在Hash表的位置,然后返回此位置的数据即可。代码如下:

Public function find($key){

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

Return$this ->buckets[$index];

}

至此,一个简单的Hash表编写完成,下面测试这个Hash表。代码清单如下:

$ht= new HashTable();

$ht->insert(‘key1’,’value1’);

$ht->insert(‘key2’,’value2’);

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

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

?>

完整代码:#hash.php

 

<!--?PHP
             Class HashTable{
                    Private$buckets;
                    Private $size=10;
                    Public function__construct(){
                           $this---> buckets =new SplFixedArray($this->size);
                    }
                    PublicFunction hashfunc($key){
                           $strlen= strlen($key);
                           $hashval= 0;
                           For($i=0;$i< $strlen;$i++){
                                  $hashval+=ord($key{$i});
                           }
                           return$hashval % $this->size;
                    }
                    Publicfunction insert($key,$val){
                           $index= $this -> hashfunc($key);
                           $this-> buckets[$index] = $val;
                    }
                    Publicfunction find($key){
                           $index= $this -> hashfunc($key);
                           Return$this ->buckets[$index];
                    }
 
 
             }
             $ht = newHashTable();
             $ht->insert(&#39;key1&#39;,&#39;value1&#39;);
             $ht->insert(&#39;key2&#39;,&#39;value2&#39;);
             Echo $ht->find(&#39;key1&#39;);
             Echo $ht->find(&#39;key2&#39;);
 
?>
Nach dem Login kopieren


 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/984757.htmlTechArticlePHP核心技术与最佳实践之Hash算法 PHP核心技术与最佳实践之Hash算法 Hash表又称散列表,通过把关键字Key映射到数组中的一个位置来访问记录...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern Mar 26, 2024 pm 12:41 PM

Oben geschrieben und das persönliche Verständnis des Autors: Derzeit spielt das Wahrnehmungsmodul im gesamten autonomen Fahrsystem eine entscheidende Rolle Das Steuermodul im autonomen Fahrsystem trifft zeitnahe und korrekte Urteile und Verhaltensentscheidungen. Derzeit sind Autos mit autonomen Fahrfunktionen in der Regel mit einer Vielzahl von Dateninformationssensoren ausgestattet, darunter Rundumsichtkamerasensoren, Lidar-Sensoren und Millimeterwellenradarsensoren, um Informationen in verschiedenen Modalitäten zu sammeln und so genaue Wahrnehmungsaufgaben zu erfüllen. Der auf reinem Sehen basierende BEV-Wahrnehmungsalgorithmus wird von der Industrie aufgrund seiner geringen Hardwarekosten und einfachen Bereitstellung bevorzugt, und seine Ausgabeergebnisse können problemlos auf verschiedene nachgelagerte Aufgaben angewendet werden.

Dieser Artikel reicht aus, um etwas über autonomes Fahren und Flugbahnvorhersage zu lesen! Dieser Artikel reicht aus, um etwas über autonomes Fahren und Flugbahnvorhersage zu lesen! Feb 28, 2024 pm 07:20 PM

Die Trajektorienvorhersage spielt eine wichtige Rolle beim autonomen Fahren. Unter autonomer Fahrtrajektorienvorhersage versteht man die Vorhersage der zukünftigen Fahrtrajektorie des Fahrzeugs durch die Analyse verschiedener Daten während des Fahrvorgangs. Als Kernmodul des autonomen Fahrens ist die Qualität der Trajektorienvorhersage von entscheidender Bedeutung für die nachgelagerte Planungssteuerung. Die Trajektorienvorhersageaufgabe verfügt über einen umfangreichen Technologie-Stack und erfordert Vertrautheit mit der dynamischen/statischen Wahrnehmung des autonomen Fahrens, hochpräzisen Karten, Fahrspurlinien, Fähigkeiten in der neuronalen Netzwerkarchitektur (CNN&GNN&Transformer) usw. Der Einstieg ist sehr schwierig! Viele Fans hoffen, so schnell wie möglich mit der Flugbahnvorhersage beginnen zu können und Fallstricke zu vermeiden. Heute werde ich eine Bestandsaufnahme einiger häufiger Probleme und einführender Lernmethoden für die Flugbahnvorhersage machen! Einführungsbezogenes Wissen 1. Sind die Vorschaupapiere in Ordnung? A: Schauen Sie sich zuerst die Umfrage an, S

Das Stable Diffusion 3-Papier wird endlich veröffentlicht und die architektonischen Details werden enthüllt. Wird es helfen, Sora zu reproduzieren? Das Stable Diffusion 3-Papier wird endlich veröffentlicht und die architektonischen Details werden enthüllt. Wird es helfen, Sora zu reproduzieren? Mar 06, 2024 pm 05:34 PM

Der Artikel von StableDiffusion3 ist endlich da! Dieses Modell wurde vor zwei Wochen veröffentlicht und verwendet die gleiche DiT-Architektur (DiffusionTransformer) wie Sora. Nach seiner Veröffentlichung sorgte es für großes Aufsehen. Im Vergleich zur Vorgängerversion wurde die Qualität der von StableDiffusion3 generierten Bilder erheblich verbessert. Es unterstützt jetzt Eingabeaufforderungen mit mehreren Themen, und der Textschreibeffekt wurde ebenfalls verbessert, und es werden keine verstümmelten Zeichen mehr angezeigt. StabilityAI wies darauf hin, dass es sich bei StableDiffusion3 um eine Reihe von Modellen mit Parametergrößen von 800 M bis 8 B handelt. Durch diesen Parameterbereich kann das Modell direkt auf vielen tragbaren Geräten ausgeführt werden, wodurch der Einsatz von KI deutlich reduziert wird

Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Jun 03, 2024 pm 01:25 PM

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

DualBEV: BEVFormer und BEVDet4D deutlich übertreffen, öffnen Sie das Buch! DualBEV: BEVFormer und BEVDet4D deutlich übertreffen, öffnen Sie das Buch! Mar 21, 2024 pm 05:21 PM

In diesem Artikel wird das Problem der genauen Erkennung von Objekten aus verschiedenen Blickwinkeln (z. B. Perspektive und Vogelperspektive) beim autonomen Fahren untersucht, insbesondere wie die Transformation von Merkmalen aus der Perspektive (PV) in den Raum aus der Vogelperspektive (BEV) effektiv ist implementiert über das Modul Visual Transformation (VT). Bestehende Methoden lassen sich grob in zwei Strategien unterteilen: 2D-zu-3D- und 3D-zu-2D-Konvertierung. 2D-zu-3D-Methoden verbessern dichte 2D-Merkmale durch die Vorhersage von Tiefenwahrscheinlichkeiten, aber die inhärente Unsicherheit von Tiefenvorhersagen, insbesondere in entfernten Regionen, kann zu Ungenauigkeiten führen. Während 3D-zu-2D-Methoden normalerweise 3D-Abfragen verwenden, um 2D-Features abzutasten und die Aufmerksamkeitsgewichte der Korrespondenz zwischen 3D- und 2D-Features über einen Transformer zu lernen, erhöht sich die Rechen- und Bereitstellungszeit.

Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Apr 02, 2024 pm 05:36 PM

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Jun 06, 2024 pm 12:33 PM

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Mar 22, 2024 pm 10:10 PM

Die Konvergenz von künstlicher Intelligenz (KI) und Strafverfolgung eröffnet neue Möglichkeiten zur Kriminalprävention und -aufdeckung. Die Vorhersagefähigkeiten künstlicher Intelligenz werden häufig in Systemen wie CrimeGPT (Crime Prediction Technology) genutzt, um kriminelle Aktivitäten vorherzusagen. Dieser Artikel untersucht das Potenzial künstlicher Intelligenz bei der Kriminalitätsvorhersage, ihre aktuellen Anwendungen, die Herausforderungen, denen sie gegenübersteht, und die möglichen ethischen Auswirkungen der Technologie. Künstliche Intelligenz und Kriminalitätsvorhersage: Die Grundlagen CrimeGPT verwendet Algorithmen des maschinellen Lernens, um große Datensätze zu analysieren und Muster zu identifizieren, die vorhersagen können, wo und wann Straftaten wahrscheinlich passieren. Zu diesen Datensätzen gehören historische Kriminalstatistiken, demografische Informationen, Wirtschaftsindikatoren, Wettermuster und mehr. Durch die Identifizierung von Trends, die menschliche Analysten möglicherweise übersehen, kann künstliche Intelligenz Strafverfolgungsbehörden stärken

See all articles