it-swarm.com.de

Was ist der Unterschied zwischen einer Karte und einem Wörterbuch?

Ich weiß, dass eine Karte eine Datenstruktur ist, die Schlüssel zu Werten bildet. Ist ein Wörterbuch nicht gleich? Was ist der Unterschied zwischen einer Karte und einem Wörterbuch?1?


1. Ich frage nicht danach, wie sie in der Sprache X oder Y definiert sind (was scheinbar das ist, was die Leute hier in der Regel so fragen), ich möchte wissen, was in ihrer Theorie ihr Unterschied ist.

147

Zwei Begriffe für das Gleiche:

  • "Map" wird von Java, C++ verwendet
  • "Dictionary" wird von .Net, Python verwendet
  • "Assoziatives Array" wird von PHP verwendet

"Map" ist der korrekte mathematische Begriff, der jedoch vermieden wird, da er in Funktionsprogrammierung eine eigene Bedeutung hat.

Einige Sprachen verwenden noch andere Begriffe ("Objekt" in Javascript, "Hash" in Ruby, "Tabelle" in Lua), aber alle haben unterschiedliche Bedeutungen in der Programmierung.

hier für weitere Informationen.

Einer ist ein älterer Begriff für den anderen. Typischerweise wurde der Begriff "Wörterbuch" verwendet, bevor sich der mathematische Begriff "Karte" durchsetzte. Außerdem haben Wörterbücher tendenziell einen Schlüsseltyp, aber das trifft nicht überall zu 100% zu.

17
Edwin Buck

Normalerweise gehe ich davon aus, dass eine Karte von einer Hashtabelle unterstützt wird. es bezieht sich auf einen ungeordneten Laden . Wörterbücher bedeuten einen geordneten Laden.

Es gibt ein Verzeichnis auf Baumbasis, das als Trie bezeichnet wird.

In LISP könnte es so aussehen:

(a (n (d t)) n d )

Welches die Wörter kapselt:

  • ein 
  • und 
  • ameise
  • ein 
  • anzeige

Die Durchquerung von oben bis zum Blatt ergibt ein Wort. 

3
Paul Nathan

Meine 2 Cent. 

Dictionary ist eine abstrakte Klasse in Java, während Map eine Schnittstelle ist. Da Java mehrere Vererbungen nicht unterstützt, kann eine Klasse das Dictionary erweitern, da es keine anderen Klassen erweitern kann.

Daher wurde die Map-Schnittstelle eingeführt. 

Die Wörterbuchklasse ist veraltet und die Verwendung von Map wird bevorzugt.

3
Nishit

Nicht wirklich das Gleiche. Karten sind eine Teilmenge des Wörterbuchs. Das Wörterbuch ist hier als das Einfügen, Löschen und Suchen von Funktionen definiert. Map, wie von Java (gemäß this ) verwendet, ist ein Wörterbuch, bei dem die Zuordnung von Schlüsseln zu Werten streng als One-to-One-Funktion definiert wird. Ein Wörterbuch kann mehr als eine Schlüsselzuordnung zu einem Wert haben oder eine Schlüsselzuordnung zu mehreren Werten (wie Verketten in einer Übertabelle), z. B. Twitter-Hashtag-Suchen.

Ein "realeres" Beispiel: Wenn Sie ein Wort in einem Wörterbuch nachschlagen, können wir eine Reihe von Definitionen für dasselbe Wort erhalten. Wenn wir einen Eintrag finden, der auf einen anderen Eintrag (siehe anderes Wort) verweist, eine Reihe von Wörtern für dieselbe Liste von Definitionen. In der realen Welt sind Karten viel breiter, so dass wir Standorte für Namen oder Namen für Koordinaten haben können, aber wir können auch einen Nachbarn oder andere Attribute (Populationen usw.) finden, sodass IMHO Argumente für eine größere Ausdehnung von sein könnte Der Kartentyp sollte möglicherweise auf Graphen basierende Implementierungen haben, aber es ist am besten, immer nur das Schlüssel-Wert-Paar anzunehmen, insbesondere da der nächste Nachbar und andere Attribute des Werts nur Datenelemente des Werts sein könnten. 

Java-Karten können trotz der Eins-zu-Eins-Anforderung etwas mehr wie ein verallgemeinertes Wörterbuch implementieren, wenn der Wert als Sammlung selbst verallgemeinert wird oder wenn die Werte lediglich Verweise auf Sammlungen sind, die an anderer Stelle gespeichert sind. 

Denken Sie daran, dass Java-Betreuer keine Betreuer von ADT-Definitionen sind und dass Java-Entscheidungen speziell für Java gelten. 

1
user6585083

Ja, sie sind gleich, Sie können dem Mix "Associative Array" hinzufügen.

die Verwendung von Hashtable oder eines Hash-Angebots bezieht sich auf die Implementierung. 

1
OscarRyz

so rein theoretisch.

Ein Wörterbuch ist ein Wert, mit dem ein verknüpfter Wert ermittelt werden kann .. Eine Karte ist ein Wert, der Anweisungen zum Auffinden weiterer Werte enthält

alle Sammlungen, die einen nichtlinearen Zugriff ermöglichen (dh nur den ersten oder letzten Rang erhalten), sind eine Map, da selbst ein einfaches Array einen Index besitzt, der den korrekten Wert darstellt. Während also ein Wörterbuch ein Kartentyp ist, sind Karten eine viel breitere Palette möglicher Funktionen.

In der Praxis ist dies normalerweise die Zuordnungsfunktion, die den Namen definiert. Eine HashMap ist also eine zugeordnete Datenstruktur, die einen Hash-Algorithmus verwendet, um den Schlüssel mit dem Wert zu verknüpfen, während ein Dictionary nicht angibt, wie die Schlüssel mit einem Wert verknüpft sind Dies könnte über eine verknüpfte Liste, einen Baum oder einen anderen Algorithmus gespeichert werden. Normalerweise kümmert es Sie in der Regel nicht darum, welchen Algorithmus sie verwenden, also verwenden Sie ein allgemeines Wörterbuch und wechseln Sie nur dann zu einer der anderen Strukturen, wenn Sie den Algorithmus-Typ festlegen müssen 

1
MikeT

Andere Ausdrücke für dieses Konzept, die ziemlich allgemein sind: assoziatives Array und Hash.

0
Hank Gay

Der Hauptunterschied besteht darin, dass für eine Map , dass alle Einträge (Wert und Schlüsselpaar) einen eindeutigen Schlüssel haben. Wenn Kollisionen auftreten, d. H. Wenn ein neuer Eintrag denselben Schlüssel hat wie ein Eintrag, der sich bereits in der Sammlung befindet, ist eine Kollisionsbehandlung erforderlich.

Normalerweise behandeln wir Kollisionen mit Separate Chaining . Oder Lineares Antasten .

Mit einem Dictionary können mehrere Einträge mit demselben Schlüssel verknüpft werden.

Wenn eine Map eine separate Verkettung implementiert hat, ähnelt sie einem Wörterbuch.

0
Bondo Kalombo

Die Beantwortung dieser Frage wird dadurch erschwert, dass Programmierer die Begriffe in bestimmten Sprachen oder Systemen, die sie verwendet haben, als spezifischere Bedeutungen gesehen haben. In der Frage wird jedoch ein sprachunabhängiger Vergleich "in der Theorie" verlangt, den ich damit meine Informatikbegriffe.

Die Terminologie erklärt

Die Universität OxfordDictionary of Computer Sciencelistet auf:

dictionary jede Datenstruktur, die eine Menge von Elementen darstellt, die das Einfügen und Löschen von Elementen sowie das Testen auf unterstützt Mitgliedschaft

  • Zum Beispiel haben wir eine Reihe von Elementen {A, B, C, D ...}, die wir einfügen und löschen konnten, und die wir abfragen können."Ist C vorhanden? ".

Der Begriff der Informatik vonmapbasiert jedoch auf dem mathematischen Sprachbegriffmapping, den das Oxford Dictionary definiert als:

mapping Eine Operation, die jedes Element einer bestimmten Menge (die Domäne) mit einem oder mehreren Elementen einer Sekunde verknüpft set (der Bereich).

  • Als solches bietet einemapDatenstruktur eine Möglichkeit, vonElementen einer gegebenen Menge- bekannt sind "keysmsgstr "in der Karte zu einem oder mehreren Elementen in der zweiten Gruppe - bekannt als"Wert (e)".
  • Das "...oder mehr Elemente in der zweiten Menge "Aspekt kann durch eine Implementierung auf zwei verschiedene Arten unterstützt werden:
    • Viele Kartenimplementierungen erzwingen die Eindeutigkeit der Schlüssel und erlauben nur, dass jeder Schlüssel einem Wert zugeordnet wird. Dieser Wert kann jedoch eine Datenstruktur selbst sein, die viele Werte eines einfacheren Datentyps enthält, z. {{1, {"eins", "ichi"}, {2, {"zwei", "ni"}}} veranschaulicht Werte, die aus Paaren von Zeichenfolgen bestehen.
    • Andere Zuordnungsimplementierungen ermöglichen das Duplizieren von Schlüsseln, die jeweils denselben oder unterschiedlichen Werten zugeordnet sind - was funktional den Fall "Ordnet ... jedes [Schlüssel] -Element ... mehreren [als einem] [Wert] -Elementen zu" erfüllt. Zum Beispiel {{1, "eins"}, {1, "ichi"}, {2, "zwei"}, {2, "ni"}}.

Wörterbuch und Karte kontrastiert

Daher ist ein Wörterbuch unter Verwendung der oben genannten strengen Comp Sci-Terminologie nur dann eine Zuordnung, wenn die Schnittstelle zusätzliche Funktionen unterstützt Operationen, die nicht für jedes Wörterbuch erforderlich sind:

  • die Fähigkeit, Elemente mit verschiedenenkeyundvaluecomponents zu speichern

  • die Fähigkeit,die Werte abzurufen, die nur den Schlüssel enthalten

Eine triviale Wendung:

  • eine Kartenschnittstelle unterstützt möglicherweise nicht direkt den Test, ob sich ein {key, value} -Paar im Container befindet. Dies ist pedantisch eine Anforderung eines Wörterbuchs, in dem die Elemente zufällig {key, value} -Paare sind. Eine Karte verfügt möglicherweise nicht einmal über eine Funktion zum Testen eines Schlüssels. Im schlimmsten Fall können Sie jedoch feststellen, ob der Versuch, einen Schlüssel zum Abrufen von Werten zu verwenden, erfolgreich ist oder fehlschlägt. Wenn Sie sich darum kümmern, können Sie überprüfen, ob der Schlüssel einen erwarteten Wert abgerufen hat.

Kommunizieren Sie eindeutig mit Ihrem Publikum

⚠ Wenn Sie trotz alledemdictionaryin der oben erläuterten strengen rechnerwissenschaftlichen Bedeutung verwenden, dürfen Sie nicht erwarten, dass Ihr Publikum Ihnen zuerst folgt, oder beeindruckt sein, wenn Sie die Terminologie teilen und verteidigen. Die anderen Antworten auf diese Frage (und ihre Upvotes) zeigen, wie wahrscheinlich es ist, dass "dictionary" synonym ist mit "map" nach Erfahrung der meisten Programmierer. Versuchen Sie, eine allgemeinere und eindeutig verständliche Terminologie zu wählen: z.

  • assoziativer Container: Beliebiger Container, der Schlüssel/Wert-Paare mit Wert-Abfrage und Löschen per Schlüssel speichert
  • hash map: eine Hash-Tabellen-Implementierung eines assoziierten Containers
  • Hash-Set, das eindeutige Schlüssel erzwingt: Eine Hash-Tabellen-Implementierung eines Wörterbuchs, in dem Elemente/Werte gespeichert werden, ohne dass sie unterschiedliche Schlüssel/Wert-Komponenten enthalten, wobei Duplikate der Elemente nicht eingefügt werden können
  • Balance-Binärbaum-Map, die doppelten Schlüssel unterstützt: ...

Crossreferencing Comp Sci-Terminologie mit spezifischen Implementierungen

C++ Standard Library

  • karten: map , multimap , unordered_map , unordered_multimap
  • andere Wörterbücher: set , multiset , unordered_set , unordered_multiset
  • anmerkung: mit Iteratoren oder std::find Sie können ein Element löschen und die Mitgliedschaft in array , vector , list , deque etc, aber die Container-Interfaces unterstützen dies nicht direkt, da das Auffinden eines Elements bei O (N) spektakulär ineffizient ist. Das Löschen ist ineffizient, und die Unterstützung dieser Vorgänge untergräbt die absichtlich eingeschränkte API, die der Container impliziert - z deques sollte nur Löschen/Pop auf der Vorder- und Rückseite unterstützen und nicht in Bezug auf eine Taste. Wenn Sie mehr Code-Arbeit leisten müssen, um die Suche zu orchestrieren, wird der Programmierer sanft dazu ermutigt, zu einer Container-Datenstruktur mit effizienterer Suche zu wechseln.

... kann später weitere Sprachen hinzufügen/Sie können diese gerne bearbeiten in ...

0
Tony Delroy