Ich versuche nur, einen Griff zu bekommen, wenn Sie einen Hash verwenden müssen und wenn es besser sein könnte, ein Array zu verwenden. Was für ein reales Objekt würde ein Hash beispielsweise für Strings darstellen?Was ist ein echtes Beispiel für etwas, das du mit einem Hash darstellen würdest?
Antwort
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.
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.
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).
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
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).
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.).
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.
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.
Ein Beispiel könnte Postleitzahl sein, die einem Gebiet, einer Stadt oder einer beliebigen Postadresse zugeordnet ist.
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.
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.
(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"]
- 1. Was ist ein echtes Beispiel für CORBA?
- 2. Was ist ein echtes Beispiel für eine prototypische Vererbung?
- 3. Ein echtes Beispiel für URL-Namespace
- 4. Was ist SELF JOIN und wann würdest du es verwenden?
- 5. Wie würdest du das Javascript für modals vom HTML trennen?
- 6. Würdest du Terrakotta als ein reifes Produkt betrachten?
- 7. Würdest du das jemals benutzen, oder hast du jemals über so etwas nachgedacht? (Custom Nav-Controller für iPhone)
- 8. Was ist das Problem mit dem Controller-Code unten? Wie würdest du es reparieren?
- 9. Ist ein Python-Wörterbuch ein Beispiel für eine Hash-Tabelle?
- 10. Rails Refactoring: Wo würdest du Hash setzen, die die Felder einer Tabelle zu einem anderen
- 11. Wie würdest du ein Rollmittel in Funken schreiben?
- 12. Wie beantwortet man die Interviewfrage: Was ist ein Singleton und wie würdest du eins benutzen?
- 13. Wie würdest du einem Nicht-Programmierer Schauspieler erklären?
- 14. MD5-Hash als Ganzzahl darstellen
- 15. Wo finden Sie ein echtes Beispiel für Flex und Bison?
- 16. Was ist ein Beispiel für das Prinzip der einheitlichen Verantwortung?
- 17. Wie würdest du hier einen Timer für den Slider implementieren?
- 18. Was sind Behauptungen? und warum würdest du sie benutzen?
- 19. Was ist ein praktisches Beispiel für Pooling?
- 20. Welche .emacs-Datei würdest du einem Vim-Veteranen geben?
- 21. Ist das wirklich ein Beispiel für das Adaptermuster?
- 22. Wie würdest du etwas animieren, so dass es einer Kurve folgt?
- 23. Wie würdest du Mathe in Kommentaren beschreiben?
- 24. Was ist ein gutes Beispiel für ein Open-Source-Java-Spiel?
- 25. Wann würdest du reduce() anstelle von sum() verwenden?
- 26. Einfache Backbone-Suchseite - wie würdest du es tun?
- 27. Skalierbarkeit der Java EE-Anwendung. Wie würdest du es angehen?
- 28. Was ist diese Chiffre/Hash?
- 29. Was ist ein qualitativ hochwertiges Beispiel für TDD in Aktion?
- 30. Was bedeutet ein Pluszeichen in einem Hash?
Das war was ich sagen wollte! Du schlägst mich dazu –
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
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. –