A Queue that Supports Enqueue, Dequeue, and GetMin in Constant Time | Algorithms Notes



A Queue that Supports Enqueue, Dequeue, and GetMin in Constant Time | Algorithms Notes

Design a queue that supports enqueue, dequeue, and retrieving the minimum element in constant time.

Solution:

Suppose that there are two elements x and y, such that x < y. If y is enqueued before x is enqueued, then y cannot be the output of operation getMin, since a queue is first-in-first-out. Based on this idea, we can use another queue that stores only the elements that can be outputted by getMin. For any elements y in this queue and x, the element before y, y is no smaller than x and y is enqueued before x is enqueued.

The algorithm is as follows. Use two queues A and B, where A stores all elements and B is a queue of minima. For enqueueing an element x, first enqueue x into A. Then, starting from the tail of B, remove all elements smaller x in B and enqueue x into B. For the dequeue operation, first dequeue A's head element and call it y. If y is the same as B's head element, then dequeue B's head element as well. Finally, return y. For the getMin operation, return B's head element. In this way, all three operations can be done in O(1) time.


Read full article from A Queue that Supports Enqueue, Dequeue, and GetMin in Constant Time | Algorithms Notes


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts