Ich weiß, dass eine Karte eine Datenstruktur ist, die Schlüssel Werten zuordnet. Ist ein Wörterbuch nicht dasselbe? Was ist der Unterschied zwischen einer Karte und einem Wörterbuch 1 ?
1. Ich frage nicht, wie sie in der Sprache X oder Y definiert sind (was anscheinend das ist, was die Leute hier auf SO allgemein fragen), ich möchte wissen, was ihr Unterschied in der Theorie ist.
dictionary
data-structures
language-agnostic
key-value
verschlungenes Elysium
quelle
quelle
Antworten:
Zwei Begriffe für dasselbe:
"Map" ist der richtige mathematische Begriff, wird jedoch vermieden, da er in der funktionalen Programmierung eine separate Bedeutung hat .
Einige Sprachen verwenden noch andere Begriffe ("Objekt" in Javascript, "Hash" in Ruby, "Tabelle" in Lua) , aber alle haben auch in der Programmierung unterschiedliche Bedeutungen, daher würde ich sie vermeiden.
Sehen Sie hier für weitere Informationen.
quelle
Dictionary
in Java ist veraltet. Es ist eine abstrakte Klasse, die verwendet wurde, bevor dieMap
Schnittstelle erstellt wurde.Einer ist ein älterer Begriff für den anderen. Typischerweise wurde der Begriff "Wörterbuch" verwendet, bevor sich der mathematische Begriff "Karte" durchsetzte. Wörterbücher haben in der Regel einen Schlüsseltyp, aber das stimmt nicht überall.
quelle
Meine 2 Cent.
Dictionary ist eine abstrakte Klasse in Java, während Map eine Schnittstelle ist. Da Java keine Mehrfachvererbungen unterstützt, kann eine Klasse, die Dictionary erweitert, keine andere Klasse erweitern.
Daher wurde die Kartenschnittstelle eingeführt.
Die Wörterbuchklasse ist veraltet und die Verwendung von Map wird bevorzugt.
quelle
Die Beantwortung dieser Frage wird dadurch erschwert, dass Programmierer gesehen haben, dass die Begriffe in bestimmten Sprachen oder Systemen, die sie verwendet haben, spezifischere Bedeutungen haben, aber die Frage verlangt einen sprachunabhängigen Vergleich "in der Theorie", den ich in Begriffen der Informatik meine .
Die Terminologie erklärt
Das Oxford University Dictionary of Computer Science listet auf:
Der Computing Science-Begriff der Karte basiert jedoch auf dem mathematisch-sprachlichen Begriff Mapping , den das Oxford Dictionary definiert als:
Wörterbuch und Karte kontrastiert
Unter Verwendung der oben beschriebenen strengen Comp Sci-Terminologie ist ein Wörterbuch nur dann eine Karte, wenn die Schnittstelle zusätzliche Vorgänge unterstützt, die nicht für jedes Wörterbuch erforderlich sind:
die Fähigkeit, Speicherelemente mit unterschiedlichen Schlüsseln und Wertkomponenten
die Fähigkeit, die Werte nur mit dem Schlüssel abzurufen
Eine triviale Wendung:
Kommunizieren Sie eindeutig mit Ihrem Publikum
⚠ Wenn Sie trotz alledem ein Wörterbuch in der oben erläuterten strengen Bedeutung von Computing Science verwenden, sollten Sie nicht erwarten, dass Ihr Publikum Ihnen zunächst folgt oder beeindruckt ist, wenn Sie die Terminologie teilen und verteidigen. Die anderen Antworten auf diese Frage (und ihre positiven Stimmen) zeigen, wie wahrscheinlich es ist, dass "Wörterbuch" nach Erfahrung der meisten Programmierer gleichbedeutend mit "Karte" ist . Versuchen Sie, eine Terminologie zu wählen, die umfassender und eindeutiger verstanden wird: z
Crossreferencing Comp Sci-Terminologie mit spezifischen Implementierungen
C ++ Standard Library
map
,multimap
,unordered_map
,unordered_multimap
set
,multiset
,unordered_set
,unordered_multiset
std::find
Sie können ein Element und Test für die Mitgliedschaft in löschenarray
,vector
,list
,deque
usw., aber die Container - Schnittstellen unterstützen nicht direkt , dass da ein Element zu finden , bei O (N) spektakulär ineffizient ist, in einigen Fällen insert / Erase Ineffizient, und die Unterstützung dieser Vorgänge untergräbt die absichtlich eingeschränkte API, die der Container impliziert - z. B.deque
sollten s nur das Löschen / Pop auf der Vorder- und Rückseite und nicht in Bezug auf einen Schlüssel unterstützen. Wenn der Programmierer mehr Arbeit im Code leisten muss, um die Suche zu koordinieren, wird er aufgefordert, zu einer Container-Datenstruktur mit effizienterer Suche zu wechseln.... kann später weitere Sprachen hinzufügen / kann in ... bearbeitet werden
quelle
Normalerweise gehe ich davon aus, dass eine Karte von einer Hash-Tabelle unterstützt wird. es bedeutet einen ungeordneten Laden. Wörterbücher kennzeichnen einen bestellten Laden.
Es gibt ein baumbasiertes Wörterbuch namens Trie .
In Lisp könnte es so aussehen:
Welches kapselt die Wörter:
Die Durchquerung von oben zum Blatt ergibt ein Wort.
quelle
Dictionary
in .Net ist ungeordnet.std::map
wird bestellt, seine Implementierung ist nicht im Standard spezifiziert, diestd::unordered_map
wurde in C ++ 11 eingeführt, es wird über einen Hash implementiertstd::map
", versuchen Sie, etwas anderes zu verwenden. Ein AVL-Baum funktioniert nicht. Die Einfügungskosten entsprechen nicht dem Standard. Ein Hash wird nicht funktionieren; Ein Hash ist ungeordnet und entspricht daher nicht dem Standard. Der Standard sagt so ziemlich "du sollst einen rot-schwarzen Baum zum Implementieren verwendenstd::map
", ohne dies explizit zu sagen.Nicht wirklich dasselbe. Karten sind eine Teilmenge des Wörterbuchs. Wörterbuch ist hier so definiert , dass es die Funktionen Einfügen, Löschen und Suchen hat. Map, wie es von Java (gemäß diesem ) verwendet wird, ist ein Wörterbuch mit der Anforderung, dass die Schlüsselzuordnung zu Werten streng als Eins-zu-Eins-Funktion zugeordnet wird. Ein Wörterbuch kann mehr als eine Schlüsselzuordnung zu einem Wert oder eine Schlüsselzuordnung zu mehreren Werten haben (z. B. Verketten in einer Hashtabelle), z. B. Twitter-Hashtag-Suche.
Als Beispiel für eine "realere Welt" kann das Nachschlagen eines Wortes in einem Wörterbuch eine Reihe von Definitionen für dasselbe Wort ergeben, und wenn wir einen Eintrag finden, der uns auf einen anderen Eintrag verweist (siehe anderes Wort), eine Reihe von Wörtern für die gleiche Liste von Definitionen. In der realen Welt sind Karten viel breiter, so dass wir Orte für Namen oder Namen für Koordinaten haben können, aber wir können auch einen nächsten Nachbarn oder andere Attribute (Populationen usw.) finden, so dass meiner Meinung nach Argumente für eine größere Erweiterung von vorhanden sein könnten Der Kartentyp soll möglicherweise graphbasierte Implementierungen haben. Es ist jedoch am besten, immer nur das Schlüssel-Wert-Paar anzunehmen, zumal der nächste Nachbar und andere Attribute des Werts nur Datenelemente des Werts sein können.
Java-Maps können trotz der Eins-zu-Eins-Anforderung eher ein verallgemeinertes Wörterbuch implementieren, wenn der Wert als Sammlung selbst verallgemeinert wird oder wenn die Werte lediglich Verweise auf an anderer Stelle gespeicherte Sammlungen sind.
Denken Sie daran, dass Java-Betreuer nicht die Verwalter von ADT-Definitionen sind und dass Java-Entscheidungen speziell für Java gelten.
quelle
Andere Begriffe für dieses Konzept, die ziemlich häufig vorkommen: assoziatives Array und Hash.
quelle
Ja, sie sind gleich. Sie können der Mischung "Assoziatives Array" hinzufügen.
using
Hashtable
oder aHash
ofter bezieht sich auf die Implementierung.quelle
also auf einer rein theoretischen Ebene.
Ein Wörterbuch ist ein Wert, mit dem ein verknüpfter Wert gefunden werden kann. Eine Karte ist ein Wert, der Anweisungen zum Auffinden anderer Werte enthält
Alle Sammlungen, die einen nichtlinearen Zugriff ermöglichen (dh nur zuerst oder zuletzt erhalten), sind eine Karte, da selbst ein einfaches Array einen Index hat, der dem richtigen Wert zugeordnet ist. Während ein Wörterbuch ein Kartentyp ist, bieten Karten einen viel breiteren Funktionsbereich.
In der Praxis ist dies normalerweise die Zuordnungsfunktion, die den Namen definiert. Eine HashMap ist also eine zugeordnete Datenstruktur, die einen Hashing-Algorithmus verwendet, um den Schlüssel mit dem Wert zu verknüpfen, wobei ein Wörterbuch 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. Vom Ende der Nutzung ist es Ihnen normalerweise egal, welchen Algorithmus sie nur verwenden, sodass Sie ein generisches Wörterbuch verwenden und nur dann zu einer der anderen Strukturen wechseln, wenn Sie den Typ des Algorithmus angeben müssen
quelle
Dies sind zwei verschiedene Begriffe für dasselbe Konzept.
Hashtable
undHashMap
beziehen sich auch auf das gleiche Konzept.quelle
Der Hauptunterschied besteht darin, dass für eine Map alle Einträge (Wert & Schlüsselpaar) einen eindeutigen Schlüssel haben müssen. Wenn Kollisionen auftreten, dh wenn ein neuer Eintrag denselben Schlüssel wie ein Eintrag in der Sammlung hat, ist eine Kollisionsbehandlung erforderlich.
Normalerweise behandeln wir Kollisionen entweder mit einer separaten Verkettung . Oder lineare Prüfung .
Mit einem Wörterbuch können mehrere Einträge mit demselben Schlüssel verknüpft werden.
Wenn eine Karte eine separate Verkettung implementiert hat, ähnelt sie in der Regel einem Wörterbuch.
quelle