Ein hashmap ist ein Set assoziative Array. So wird Ihr Array von Eingabewerten in Eimern gesammelt. In einem offenen Adressierungsschema, haben Sie einen Zeiger auf einen Eimer, und jedes Mal, wenn Sie einen neuen Wert in einen Eimer hinzufügen, können Sie herausfinden, wo in den Eimern dort Freiräume sind. Es gibt ein paar Möglichkeiten, this- Sie beginnen am Anfang des Eimers und erhöhen den Zeiger jedes Mal und zu testen, ob sie besetzt zu tun. Dies wird linear Sondieren genannt. Dann können Sie eine binäre Suche wie add tun, wo Sie den Unterschied zwischen dem Beginn des Eimers verdoppeln und wo Sie verdoppeln oder wieder nach unten jedes Mal, wenn Sie für einen freien Platz suchen. Dies wird quadratisches Sondieren genannt. OK. Nun sind die Probleme in diesen beiden Methoden ist, dass, wenn der Eimer läuft über in den nächsten Eimer adressieren, dann müssen Sie to-
- Doppel jeder Eimer größen- malloc (N Eimer) / den Hash ändern funktions- Dauer: abhängig von malloc Implementierung
- Transfer / Kopieren Sie jede der früheren Eimer Daten in die neuen Eimer Daten. Dies ist ein O (N) -Operation wobei N die gesamten Daten darstellt
OK. aber wenn Sie eine LinkedList verwenden soll es nicht so ein Problem, nicht wahr? Ja, verkettete Listen Sie haben dieses Problem nicht. Betrachte man jeden Eimer mit einer verknüpften Liste zu beginnen, und wenn Sie 100 Elemente in einem Eimer haben es erfordert, dass Sie diese 100 Elemente zu durchqueren, um das Ende des LinkedList daher die List.add (Element E) Zeit to- zu erreichen nehmen
- Hash des Elements auf eine Eimer-Normale, wie in allen Implementierungen
- Nehmen Sie sich Zeit das letzte Element in dem Eimer-O (N) Betrieb zu finden.
Der Vorteil der LinkedList Implementierung ist, dass Sie nicht die Speicherzuordnungsoperation und O (N) Transfer / Kopie aller Eimer, wie im Fall der offenen Adressierung Implementierung benötigen.
So ist der Weg, um die O (N) Betrieb zu minimieren, ist die Umsetzung der von ein binärer Suchbaum zu konvertieren, wo Operationen finden sind O (log (N)) und das Element in seiner Position hinzufügen, basierend auf seinen Wert. Die zusätzliche Funktion eines BST ist, dass es sortiert kommt!