2016-11-02 2 views
1

Ich muss eine Datenstruktur beschreiben, die bestimmen kann, wo eine bestimmte ganze Zahl in einer Menge in O (1) erwartete Zeit und O (logn) worst case auch verbrauchen O (n) Raum. Ich habe mir eine Tabelle angesehen, die gängige Datenstrukturen und große Zeit/Raum-Komplexitäten enthält, aber ich kann anscheinend keine finden, die diesen Anforderungen entsprechen. Gibt es eine Möglichkeit, eine BST zu modifizieren, um diese Anforderungen zu erfüllen?Bestimmen, ob eine ganze Zahl in einer Menge in O (1) erwarteter Zeit und O (logn) worst case

+0

Dies beschreibt eine hashmap/set. – Carcigenicate

+0

worst case ist O (n) für hashmap/set nicht O (logn) @Carcigenicate – 101ldaniels

Antwort

4

Wenn @Carcigenicate kommentiert wurde, zeigt eine Hashmap das von Ihnen gewünschte Verhalten an. Es hat eine konstante Lookup-Zeit O(1), außer im Falle von Kollisionen. Im Falle von Kollisionen erstellen Hashmaps typischerweise eine Liste von Elementen für einen bestimmten Bucket. Im schlimmsten Fall würde sich eine Hashmap wie eine Liste verhalten. Dies würde jedoch eine Worst-Case-Suchzeit von O(n) bedeuten, die nicht zu Ihrer Anforderung passt.

Java, in seiner neuesten 8 Version, ausgesetzt eine HashMap Klasse, die ausgewogene Bäume anstelle von Listen verwendet, um Elemente zu speichern, die mit dem gleichen Eimer kollidieren. Dies garantiert eine Worst-Case-Suchzeit von O(logn).

Also, um Ihr Problem zu lösen, müssten Sie die Implementierung einer hashmap ändern, um Bäume für Kollisionen zu verwenden. Wenn Sie Java 8 verwenden, ist das Leben bereits gut und Sie können einfach mit HashMap laufen.

+0

ahh ich sehe so anstatt eine verkettete Liste, sie einfach nur für einen Baum? – 101ldaniels

+0

@ 101ldaniels Ja, tun dies und dann resultierende hashmap sollte sich im Einklang mit dem, was Sie brauchen, verhalten. –

+0

Ich denke, das 'O (log n)' gilt nur, wenn Ihre Schlüssel 'Comparable' implementieren, andernfalls kann es immer noch zu 'O (n) 'degenerieren. – TilmannZ

Verwandte Themen