2016-04-19 3 views
1

Ich brauche eine Datenstruktur wie ein Wörterbuch, aber mir sind die verwendeten Schlüssel egal. Ich möchte nur den Schlüssel als Griff verwenden, um den Gegenstand zu erkennen, also möchte ich es der Struktur überlassen.Wie lautet der eigentliche Name einer "zufälligen Schlüsselwörterbuch" -Struktur?

Beispiel:

RandomKeyDict dict; 
Key k = dict.insert(foobar); 
... 
// somewhere else in the code 
dict.get(k); 

Wie wird diese Struktur tatsächlich genannt?

edit: Ich glaube nicht, dass vector mein Mann hier ist, weil ich muß auch Elemente aus der Struktur entfernen.

+0

Hash und Schlüssel sind zwei verschiedene Dinge. Sie interessieren sich für den Schlüssel, aber nicht für den Hash, richtig? – BlackBear

+0

Nein, der Schlüssel könnte 0, 1234, 31415, 42, was auch immer sein. Ich möchte nur sicher sein, dass die Verwendung des beim Einfügen eines Objekts zurückgegebenen Schlüssels dasselbe Objekt zurückgibt. – Lithy

+0

Scheint so, als ob Sie ein Wörterbuch wünschen – BlackBear

Antwort

1

Dies wird als "Quasidictionary" bezeichnet. Siehe "An Efficient Quasidictionary", by Torben Hagerup and Rajeev Raman.

+0

Können Sie erklären, was ein Quasidictionary ist? Wenn dieser Link verschwindet, ist diese Antwort verwaist. Auch PostScript-Dateien sind für viele Menschen schwer zu lesen. –

+0

Danke, das ist, was ich gesucht habe! Eine PDF-Version hier: http://cdn.preterhuman.net/texts/math/Data_Structure_And_Algorithms/Algorithm%20Theory%20-%20SWAT%202002%20-%20M.%20Penttonen.pdf – Lithy

+0

@JohnKugelman „A quasidictionary ist ähnlich ein Wörterbuch, mit dem Unterschied, dass die Namen, die Datenelemente identifizieren, von der Datenstruktur und nicht von seinem Benutzer gewählt werden. " (aus dem Abstract) – Lithy

2

Implementation-weise, können Sie dies selbst mit einem Wörterbuch als Backend mit dem Frontend-Generierung willkürlicher Schlüssel erstellen. Sie sollten die Eindeutigkeit des Schlüssels garantieren, also würde ich eher einen inkrementierenden Zähler als zufällige Schlüssel vorschlagen, die sich wiederholen könnten.

Terminologieweise könnten Sie die Schlüssel Handles aufrufen, da sie undurchsichtigen Zeigern ähneln, die zum Nachschlagen von Objekten verwendet werden, wie Sie sie in C oder in der Win32-Programmierung finden. Oder Tickets, wie aus einer Garderobe oder Auto Valet.

+0

Ja, Wörterbuch + zufälliger Schlüssel ist eine Lösung, es zu implementieren, aber ich frage mich, ob es Algorithmen könnte Nutzen dieser Freiheit bei der Wahl der Tasten nehmen, wie ein Gleichgewicht Baum oder etwas. – Lithy

+1

Eine Hash-Tabelle hat O (1) amortisierte Suchvorgänge und Einfügungen. Da die Schlüsselreihenfolge keine Rolle spielt, ist das ziemlich optimal. –