Implementieren Sie eine queue, in die push_rear(), pop_front() und get_min() sind alle Konstanten Zeit-Operationen

Stieß ich auf diese Frage:
Implementieren Sie eine queue, in die push_rear(), pop_front() und get_min() sind alle Operationen Konstante Zeit.

Ursprünglich habe ich daran gedacht, mit einem min-heap-Datenstruktur, die O(1) Komplexität für eine get_min(). Aber push_rear() und pop_front() wäre O(log(n)).

Weiß jemand, was wäre die beste Art und Weise zu implementieren, die eine solche Warteschlange, die hat O(1) push(), pop() und min()?

Habe ich gegoogelt, und wollte darauf hinweisen, diese Algorithmus Geeks thread. Aber es scheint, dass keine der Lösungen Folgen konstanter Zeit gilt für alle 3 Methoden: push(), pop() und min().

Danke für die vielen Vorschläge.

Sind Sie okay mit amortisiert O(1) Zeit-Grenzen, die für das alles, oder haben diese worst-case-Grenzen?
Ich bin nicht sicher, es ist ein Google-interview-Frage, ich sah es zunächst auf careercup.com/question?id=7263132 .... Es fühlt sich an wie die Frage gemeint worst-case-Grenzen. Scheint es unmöglich?
Nein, es scheint durchaus möglich, und ich bin ankurbeln Weg jetzt. 🙂 Ich war auf der Suche bei Verwendung von kartesischen Bäume - dies gibt Ihnen die O(1) amortisiert einsetzen und O(1) lookup, und ich habe fast O(1) amortisiert Löschung so gut funktioniert. Aber, wenn Sie sind auf der Suche für den worst-case bounds, werde ich ändern mein Ansatz.
ok, jetzt sehe Kdoto die Antwort von unten her, ich bin jetzt sicher, dass worst-case-Grenzen vielleicht nicht ein mögliches Ding. Also vielleicht Google-Mitarbeiter, die müssen gesucht werden, Amortisiert O(1). EDIT: ok, als templatetypedef Zeiger in die Kommentare Kdoto Antwort, die den Nachweis nicht korrekt ist. Notiert.
Nicht so sicher sein, mein Beweis war nicht richtig. Aber ich glaube nicht, dass O(1) gefunden wurde, der für alle Vorgänge, fortgeführten oder nicht. Und ich vermute, dass es nicht möglich ist.

InformationsquelleAutor bits | 2011-01-26

Schreibe einen Kommentar