2009-03-19 5 views

Antwort

14

Ich glaube manchmal ein Hash wird als "Wörterbuch" bezeichnet, und ich denke, das ist ein gutes Beispiel für sich. Wenn Sie die Definition eines Wortes nachschlagen möchten, dann ist es schön, einfach nur etwas zu tun:

definition['pernicious'] 

Anstatt zu versuchen, den richtigen numerischen Index, um herauszufinden, dass die Definition bei gespeichert würden.

Diese Antwort geht davon aus, dass Sie mit "Hash" im Grunde genommen nur auf ein assoziatives Array verweisen.

+0

Das war was ich sagen wollte! Du schlägst mich dazu –

+0

Wirklich, der Punkt des Hashes ist es, das Objekt schneller zu suchen. Wenn dieses gehashte Objekt einem anderen Objekt zugeordnet ist, ist das großartig (und wahrscheinlich die häufigste Situation). Aber es ist nicht notwendig: Betrachte hash_set in C++ (http://www.sgi.com/tech/stl/hash_set.html) – Brian

+0

Ich denke nicht, dass dies ein echtes Beispiel aus der Praxis ist. Ein Mensch, der durch ein Wörterbuch schaut, benutzt eine Interpolationssuche. Physische Wörterbücher haben keine O (1) Möglichkeit, ein Wort zu finden. –

0

Wenn Sie eine Variable mit einer anderen verknüpfen müssen. Es gibt kein "type limit" auf was ein Schlüssel/Wert in einem Hash sein kann.

5

Ich denke, Sie sehen Dinge in die falsche Richtung. Es ist nicht das Objekt, das bestimmt, ob Sie einen Hash verwenden sollen, sondern die Art und Weise, in der Sie darauf zugreifen. Eine häufige Verwendung eines Hash ist die Verwendung einer Nachschlagetabelle. Wenn Ihre Objekte Zeichenfolgen sind und Sie überprüfen möchten, ob sie in einer Dictionary existieren, wird (vorausgesetzt, der Hash funktioniert ordnungsgemäß) nach O (1) gesucht. Beim Sortieren wäre die Zeit stattdessen O (logn), was möglicherweise nicht akzeptabel ist.

Somit sind Hashes für die Verwendung mit Wörterbücher (HashMaps) ideal, Sets (hashsets) usw.

Sie sind auch eine nützliche Möglichkeit, ein Objekt zu repräsentieren, ohne das Objekt selbst zu speichern (für Passwörter).

1

Immer wenn Sie Daten haben, die gut von einer 1-zu-1-Karte bedient werden.

Zum Beispiel Noten in einer Klasse:

"John Smith" => "B +"

"Jacob Jenkens" => "C"

etc

2

Das Telefonbuch - Schlüssel = Name, Wert = Telefonnummer.

Ich denke auch an die alten Weltbuch-Enzyklopädien (tatsächliche Bücher). Jeder Artikel wird in ein einzelnes Buch "gehackt" (Katze geht in das "C" -Band).

0

Hashed haben viele Verwendungen. Abgesehen von kryptografischen Anwendungen werden sie häufig zum schnellen Nachschlagen von Informationen verwendet. Um ähnlich schnelle Suchvorgänge mit einem Array zu erhalten, müssten Sie das Array sortiert halten und dann eine binäre Suche verwenden. Mit einem Hash erhalten Sie die schnelle Suche, ohne sortieren zu müssen. Dies ist der Grund, warum die meisten Skriptsprachen Hashing unter dem einen oder anderen Namen implementieren (Wörterbücher usw.).

1

Im Allgemeinen werden Hashes verwendet, um Dinge schnell zu finden - eine Hash-Map kann verwendet werden, um eine Sache schnell miteinander zu verknüpfen, ein Hash-Satz speichert Dinge einfach "schnell".

Bitte beachten Sie auch die Komplexität und Kosten der Hash-Funktion bei der Prüfung, ob es besser ist, einen Hash-Container oder einen normalen weniger als Container zu verwenden - die zusätzliche Größe des Hash-Wertes und die Zeit, um einen "perfekten" Hash zu berechnen die Zeit, die benötigt wird, um einen 1: 1-Vergleich am Ende im Falle eines Hash-Funktionskonflikts zu machen, kann tatsächlich viel höher sein, als nur durch eine Baumstruktur mit logarithmischer Komplexität unter Verwendung der weniger als Operatoren zu gehen.

0

Ich benutze eins oft für ein "Wörterbuch" von Einstellungen für meine App.

Einstellung | Wert

Ich lade sie aus der Datenbank oder Konfigurationsdatei, in Hashtabelle für die Verwendung von meiner App.

Funktioniert gut und ist einfach.

0

Ein Beispiel könnte Postleitzahl sein, die einem Gebiet, einer Stadt oder einer beliebigen Postadresse zugeordnet ist.

0

Ein gutes Beispiel ist ein Cache mit vielen Elementen darin. Sie haben einen Identifikator, mit dem Sie den a-Wert nachschlagen möchten (sagen Sie eine URL, und Sie möchten die entsprechende zwischengespeicherte Webseite finden). Sie möchten, dass diese Suchvorgänge so schnell wie möglich durchgeführt werden und nicht jedes Mal, wenn eine URL angefordert wird, alle gespeicherten Seiten durchsuchen. Eine Hash-Tabelle ist eine großartige Datenstruktur für ein Problem wie dieses.

0

Ein Beispiel aus der realen Welt, das ich gerade geschrieben habe, ist, als ich die Menge aufaddierte, die Leute für Mahlzeiten ausgegeben haben, wenn ich Spesenabrechnungen einreichte.

Ich brauchte eine Tagesgesamtmenge, ohne zu wissen, wie viele Artikel an einem bestimmten Tag existieren würden und keine Ahnung, welchen Datumsbereich die Spesenabrechnung hätte. Es gibt Einschränkungen, wie viel eine Person mit vielen Variablen kosten kann (Welche Stadt, Wochenende, etc ...)

Die Hash-Tabelle war das perfekte Werkzeug, um damit umzugehen. Der Schlüssel war das Datum, an dem der Wert der Quittungsbetrag war (umgerechnet in USD). Die Quittungen könnten in beliebiger Reihenfolge eingehen, ich bekomme einfach den Wert für dieses Datum und füge es hinzu, bis der Job erledigt ist. Das Anzeigen war auch einfach.

0

(PHP-Code)

$david  = new stdclass(); 
$david->name = "david"; 
$david->age = 12; 
$david->id = 1; 
$david->title = "manager"; 

$joe  = new stdclass(); 
$joe->name = "joe"; 
$joe->age = 17; 
$joe->id = 2; 
$joe->title = "employee"; 

// option 1: lets put users by index 
$users[] = $david; 
$users[] = $joe; 

// option 2: lets put users by title 
$users[$david->title] = $david; 
$users[$joe->title] = $joe; 

nun die Frage: Wer ist der Manager? antwort:

$users["manager"] 
Verwandte Themen