Heim Backend-Entwicklung PHP-Problem Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

Aug 24, 2019 am 11:01 AM

1. Was ist eine Hash-Tabelle?

Wenn Sie wissen möchten, was eine Hash-Tabelle ist, müssen Sie zunächst die Hash-Funktion verstehen

Hash Funktion:

Verglichen mit dem im vorherigen Blog diskutierten binären Sortierbaum, dem binären ausgeglichenen Baum, dem Rot-Schwarz-Baum B und dem B+-Baum beginnt ihre Suche am Wurzelknoten und dann Entnimmt die Daten oder den Index und sucht den Wert aus dem Knoten. Führen Sie einen Vergleich durch. Gibt es also eine Funktion H? Basierend auf dieser Funktion und dem Suchschlüsselwort kann die Position des Suchwerts direkt bestimmt werden, ohne einen nach dem anderen zu vergleichen. Auf diese Weise können Sie den Standort des Schlüssels im Voraus „kennen“, die Daten direkt finden und die Effizienz verbessern.

Das heißt, Adressindex = H (Schlüssel)

Um es ganz klar auszudrücken: Die Hash-Funktion berechnet den Ort, an dem die Adresse basierend auf dem Schlüssel gespeichert werden soll, und die Hash-Tabelle ist a Suche basierend auf der Hash-Funktion. Tabelle

II, Aufbaumethode der Hash-Funktion

Nach bisherigen Erfahrungen sind die folgenden Konstruktionsmethoden häufig verwendeter Hash-Funktionen:

Direkte Anpassungsmethode

Die Hash-Funktion ist eine lineare Funktion des Schlüsselworts wie z als H (Schlüssel) = a* Schlüssel+b

Diese Konstruktionsmethode ist relativ einfach und einheitlich, weist jedoch große Einschränkungen auf und ist auf den Fall beschränkt, dass die Adressgröße = Schlüsselwortsatz

ist Anwendungsbeispiel:

Annahme Es ist notwendig, die Altersverteilung der chinesischen Bevölkerung zu berechnen, wobei 10 die Mindesteinheit ist. Dieses Jahr ist 2018, daher werden die unter 10-Jährigen im Zeitraum 2008–2018 verteilt, und die unter 20-Jährigen im Zeitraum 1998–2008. Unter der Annahme, dass 2018 direkte Daten aus den Jahren 2018–2008 darstellt, sollten die Schlüsselwörter 2018 lauten , 2008, 1998...

Dann kann die Hash-Funktion H(key)=(2018-key)/10=201-key/10 konstruiert werden

Dann wird die Hash-Tabelle erstellt wie folgt

Indexschlüssel Alter Anzahl der Personen (Angenommene Daten)

0 2018 0-10 200W

1 2008 10-20 250W

2 1998 20-30 253W

3 1988 30- 40 300W

……

Zahlenanalysemethode
Gehen Sie davon aus, dass jedes Schlüsselwort das Schlüsselwort eingibt Der Satz besteht aus s Ziffern (k1, k2,...,knk1,k2,...,kn), analysiert alle Daten im Schlüssel und extrahiert eine Anzahl gleichmäßig verteilter Bits oder deren Kombination, um das Ganze

Anwendungsbeispiel

Da wir wissen, dass ID-Nummern regulär sind, möchten wir nun die ID-Nummern der Schüler einer Klasse speichern. Gehen wir davon aus, dass die Schüler dieser Klasse alle in derselben Gegend geboren wurden Im selben Jahr sind die ersten Ziffern ihrer Ausweise gleich. Dann können wir die folgenden unterschiedlichen Bits abfangen und speichern. Angenommen, es gibt 5 verschiedene Bits, und dann verwenden wir diese fünf Bits, um die Adresse darzustellen.

H(key)=key%100000

Diese Methode wird normalerweise verwendet, wenn die Anzahl der Ziffern lang ist. Es müssen bestimmte Regeln für die Zahlen gelten und die Verteilung der Zahlen muss erfolgen bekannt, wie zum Beispiel oben. Wir wissen im Voraus, dass die Schüler dieser Klasse im selben Jahr und in der gleichen Gegend geboren wurden.

Quadriermethode

Wenn in jeder Ziffer des Schlüsselworts bestimmte Zahlen häufig vorkommen, können Sie zunächst den Quadratwert des Schlüsselworts ermitteln und die Differenz um erweitern quadrieren und dann die mittlere Ziffer als endgültige Speicheradresse verwenden.

Verwendungsbeispiel

Zum Beispiel key=1234 1234^2=1522756, nehmen Sie 227 als Hash-Adresse

Zum Beispiel key=4321 4321^2=18671041, Nehmen Sie 671 als Hash-Adresse

Diese Methode eignet sich für Situationen, in denen die Daten nicht im Voraus bekannt sind und die Datenlänge gering ist

Faltmethode Wenn Die Zahl hat viele Ziffern, die Zahl kann in mehrere Teile geteilt werden, ihre Überlagerungssumme wird als Hash-Adresse verwendet
Verwendungsbeispiel
Beispiel: Schlüssel=123 456 789
Wir können es in 61524 speichern die letzten drei Ziffern, und es gibt eine Position von 524
Diese Methode eignet sich für Zahlen, wenn es viele Ziffern gibt und die Datenverteilung nicht im Voraus bekannt ist

Die Divisions- und Restmethode wird häufig verwendet

H (Schlüssel) = Schlüssel MOD p (p Offensichtlich ist die Wahl von p eine Schlüsselfrage.

Verwendungsbeispiel

Wenn wir beispielsweise 3 6 9 speichern, dann kann p nicht 3 sein

Weil 3 MOD 3 == 6 MOD 3 == 9 MOD 3

p sollte eine Primzahl sein, die nicht größer als m ist, oder eine zusammengesetzte Zahl ohne Primfaktoren unter 20, was Adressduplizierungen (Konflikte) reduzieren kann

Zum Beispiel: Schlüssel = 7, 39, 18, 24, 33. Wenn 21, nehmen Sie die Tabellenlänge m als 9 und p als 7 und speichern Sie sie dann wie folgt:

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

Zufallszahlenmethode H (Schlüssel) =Random (Schlüssel)
Nimm den Zufallsfunktionswert des Schlüsselworts als Hash-Adresse

Überlegungen zum Design der Hash-Funktion

1 Die zum Berechnen der Hash-Adresse erforderliche Zeit (d. h. die Hash-Funktion selbst sollte nicht zu kompliziert sein)
2 Länge des Schlüsselworts
3. Ist die Verteilung der Schlüsselwörter gleichmäßig und regelmäßig?
5
3. Hash-Konflikt

Das heißt, unterschiedliche Schlüsselwerte erzeugen dieselbe Adresse, H (Schlüssel1) = H (Schlüssel2) Zum Beispiel, wenn wir 3 6 9 speichern Oben nimmt p 3 als

3 MOD 3 == 6 MOD 3 == 9 MOD 3

Zu diesem Zeitpunkt traten Hash-Konflikte in 3 6 9 auf


Die Lösung für den Hash Konflikt

Egal wie clever die Hash-Funktion gestaltet ist, es wird immer spezielle Schlüssel geben, die Hash-Konflikte verursachen, insbesondere bei dynamischen Nachschlagetabellen.

Die Hash-Funktion verfügt über die folgenden gängigen Methoden zum Lösen von Konflikten

1. Offene Anpassungsmethode

2 >

3. Methode des öffentlichen Überlaufbereichs

Erstellen Sie einen speziellen Speicherplatz zum Speichern widersprüchlicher Daten. Diese Methode eignet sich für Situationen, in denen weniger Daten und Konflikte vorliegen.

4. Rehash-Methode

Wenn ein Konflikt mit der ersten Hash-Funktion auftritt, verwenden Sie die zweite Hash-Funktion Dritte... Konzentrieren Sie sich auf die offene Anpassungsmethode und die Kettenadressmethode

Die offene Anpassungsmethode

Zuerst gibt es eine H-(Tasten-)Hash-Funktion

Wenn H(key1)=H(keyi)

Dann ist keyi Speicherort Hi=(H(key)+di)MODmHi=(H(key)+di)MODmm die Tabellenlänge

Beachten Sie, dass

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?Inkrement di die folgenden Eigenschaften haben sollte (Vollständigkeit): Die generierten Hi (Adressen) sind nicht gleich und die generierten s (m -1) Hi kann alle Adressen in der Hash-Tabelle abdecken

* Während der Quadraterkennung muss die Tabellenlänge m eine Primzahl von 4j+3 sein (die Länge der Quadraterkennungstabelle ist begrenzt)

* Es gibt keinen gemeinsamen Faktor zwischen m und di während der Zufallserkennung (die Zufallserkennung di ist begrenzt)

Beispiele für Konfliktlösungslösungen für drei offene Adressierungsmethoden

Den gibt es Ein Datensatz 19 01 23 14 55 68 11 86 37 soll in einem Array mit der Tabellenlänge 11 gespeichert werden, wobei H (Schlüssel) = Schlüssel MOD 11

Folgen Sie dann den oben genannten Anweisungen Drei Konfliktlösungsmethoden zum Speichern Der Prozess ist wie folgt:

(Tabellenerläuterung: Daten von vorne nach hinten einfügen. Wenn die Einfügeposition bereits belegt ist und ein Konflikt auftritt, beginnen Sie eine neue Zeile für den Konflikt und berechnen Sie die Adresse, bis die Adresse verfügbar ist. Das Endergebnis sind die obersten Daten (da es sich um die am meisten „belegenden“ Daten handelt)

Lineare Erkennung dann Hashing

Wir nehmen di=1, d. h. Nach dem Konflikt wird es an der Position nach dem Konflikt gespeichert. Wenn immer noch ein Konflikt besteht, fahren Sie rückwärts fort

Quadraterkennung und dann HashingWas ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?Zufällige Erkennung nach Hashing (doppelte Erkennung und dann Hashing)

Nach der Kollision

H(key)'=(H(key) +di)MOD m In diesem Beispiel
H(key)=key MOD 11
Wenn wir di=key MOD 10 +1
nehmen, dann haben wir folgende Ergebnisse:



Kettenadressmethode

Nachdem ein Hash-Konflikt auftritt, fügen Sie nach den gespeicherten Daten einen Zeiger hinzu, um auf die widersprüchlichen Daten zu verweisen
Im obigen Beispiel ist die Kettenadressmethode wie folgt:

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

4. Durchsuchen der Hash-Tabelle

Der Suchvorgang ist derselbe wie der Tabellenerstellungsprozess Die offene Adressierungsmethode wird verwendet, um Konflikte zu behandeln. Der Suchvorgang ist dann:

Berechnen Sie für einen bestimmten Schlüssel den Hash-Adressindex = H (Schlüssel)

Wenn der Wert des Arrays arr [index] ist leer, die Suche ist nicht erfolgreich

Wenn das Array arr[index] == ist, ist die Suche erfolgreich

Andernfalls verwenden Sie die Konfliktlösungsmethode, um die nächste Adresse zu finden, bis arr[index] == key oder arr[index] == null

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

Es ist ersichtlich, dass unabhängig von der Funktion der Durchschnitt umso größer ist, je größer der Ladefaktor ist Suchlänge: Je kleiner der Ladefaktor α, desto besser? Nein, genau wie eine Tabellenlänge von 100 nur ein Datenelement speichert, ist α klein, aber die Raumnutzung ist nicht hoch. Dies ist ein Kompromiss zwischen Zeit und Raum. Unter normalen Umständen gilt α = 0,75 als die Situation mit der höchsten Gesamtnutzungseffizienz von Zeit und Raum.

Die obige Tabelle ist besonders nützlich. Angenommen, ich habe jetzt 10 Daten, möchte die Kettenadressmethode zum Lösen von Konflikten verwenden und benötige eine durchschnittliche Suchlänge

, dann gibt es 1+α/2

α

Das heißt, n/m

m>10/2

m>5 Das heißt, unter Verwendung der Kettenadresse Methode, die durchschnittliche Suchlänge beträgt Es handelt sich um eine Funktion, die auf dem Ladefaktor basiert, das heißt, wenn die Daten n zunehmen, kann ich die Tabellenlänge m erhöhen, um den Ladefaktor unverändert zu lassen und sicherzustellen, dass ASL unverändert bleibt.

Dann sollte die Struktur der Hash-Tabelle so aussehen:

Was ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?

5. Löschen der Hash-Tabelle

Zuerst kann die Kettenadressierungsmethode Elemente direkt löschen, die offene Adressierungsmethode jedoch nicht. Wenn wir Element 1 löschen und seine Position leer lassen, wird 23 nie gefunden. Der richtige Ansatz sollte darin bestehen, nicht vorhandene Daten einzufügen, bevor sie gelöscht werden, z. B. -1.

Weitere verwandte Fragen finden Sie auf der chinesischen PHP-Website:

Praktisches PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist die Datenstruktur einer Hash-Tabelle (Hash-Tabelle)? Was sind die spezifischen Operationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

OWASP Top 10 PHP: Beschreiben und mildern gemeinsame Schwachstellen. OWASP Top 10 PHP: Beschreiben und mildern gemeinsame Schwachstellen. Mar 26, 2025 pm 04:13 PM

In dem Artikel werden OWASP Top 10 Schwachstellen in PHP- und Minderungsstrategien erörtert. Zu den wichtigsten Problemen gehören die Injektion, die kaputte Authentifizierung und XSS mit empfohlenen Tools zur Überwachung und Sicherung von PHP -Anwendungen.

PHP 8 JIT (Just-in-Time) -Kompilation: Wie es die Leistung verbessert. PHP 8 JIT (Just-in-Time) -Kompilation: Wie es die Leistung verbessert. Mar 25, 2025 am 10:37 AM

Die JIT -Kompilierung von PHP 8 verbessert die Leistung, indem häufig ausgeführte Code in den Maschinencode zusammengestellt wird, um Anwendungen mit schweren Berechnungen zugute und die Ausführungszeiten zu reduzieren.

PHP Secure-Datei-Uploads: Verhindern von Sicherheitslücken im Zusammenhang mit Datei. PHP Secure-Datei-Uploads: Verhindern von Sicherheitslücken im Zusammenhang mit Datei. Mar 26, 2025 pm 04:18 PM

In dem Artikel wird das Sicherung von PHP -Dateien -Uploads erläutert, um Schwachstellen wie die Code -Injektion zu verhindern. Es konzentriert sich auf die Dateitypvalidierung, den sicheren Speicher und die Fehlerbehandlung, um die Anwendungssicherheit zu verbessern.

PHP -Verschlüsselung: Symmetrische und asymmetrische Verschlüsselung. PHP -Verschlüsselung: Symmetrische und asymmetrische Verschlüsselung. Mar 25, 2025 pm 03:12 PM

In dem Artikel wird die symmetrische und asymmetrische Verschlüsselung in PHP erörtert und ihre Eignung, Leistung und Sicherheitsunterschiede verglichen. Die symmetrische Verschlüsselung ist schneller und für Massendaten geeignet, während asymmetrisch für den sicheren Schlüsselaustausch verwendet wird.

PHP -Authentifizierung & amp; Autorisierung: sichere Implementierung. PHP -Authentifizierung & amp; Autorisierung: sichere Implementierung. Mar 25, 2025 pm 03:06 PM

In dem Artikel wird die Implementierung einer robusten Authentifizierung und Autorisierung in PHP erörtert, um den nicht autorisierten Zugriff zu verhindern, Best Practices zu beschreiben und sicherheitsrelevante Tools zu empfehlen.

PHP -API -Rate Begrenzung: Implementierungsstrategien. PHP -API -Rate Begrenzung: Implementierungsstrategien. Mar 26, 2025 pm 04:16 PM

In dem Artikel werden Strategien zur Implementierung der API-Rate in PHP erörtert, einschließlich Algorithmen wie Token-Bucket und Leaky Bucket sowie Bibliotheken wie Symfony/Rate-Limiter. Es deckt auch die Überwachung, die dynamischen Einstellungsgeschwindigkeiten und die Hand ab

PHP -Eingabevalidierung: Best Practices. PHP -Eingabevalidierung: Best Practices. Mar 26, 2025 pm 04:17 PM

In Artikel werden Best Practices für die Validierung der PHP-Eingabe erörtert, um die Sicherheit zu verbessern und sich auf Techniken wie die Verwendung integrierter Funktionen, den Whitelist-Ansatz und die serverseitige Validierung zu konzentrieren.

PHP -CSRF -Schutz: Wie Sie CSRF -Angriffe verhindern. PHP -CSRF -Schutz: Wie Sie CSRF -Angriffe verhindern. Mar 25, 2025 pm 03:05 PM

In dem Artikel werden Strategien erörtert, um CSRF-Angriffe in PHP zu verhindern, einschließlich der Verwendung von CSRF-Token, selben Cookies und ordnungsgemäßem Sitzungsmanagement.

See all articles