^ Brodal and Okasaki later describe a persistent variant with the same bounds except for decrease-key, which is not supported.There are several specialized heap data structures that either supply additional operations or outperform heap-based implementations for specific types of keys, specifically integer keys. The section on the equivalence of priority queues and sorting algorithms, below, describes how efficient sorting algorithms can create efficient priority queues. From a space-complexity standpoint, using self-balancing binary search tree with linked list takes more storage, since it requires to store extra references to other nodes.įrom a computational-complexity standpoint, priority queues are congruent to sorting algorithms. Īlternatively, when a self-balancing binary search tree is used, insertion and removal also take O(log n) time, although building trees from existing sequences of elements takes O( n log n) time this is typical where one might already have access to these data structures, such as with third-party or standard libraries. Variants of the basic heap data structure such as pairing heaps or Fibonacci heaps can provide better bounds for some operations. To improve performance, priority queues are typically based on a heap, giving O(log n) performance for inserts and removals, and O( n) to build the heap initially from a set of n elements. Highest = list.get_at_index(list.length-1) In another case, one can keep all the elements in a priority sorted list ( O(n) insertion sort time), whenever the highest-priority element is requested, the first one in the list can be returned. Whenever the highest-priority element is requested, search through all elements for the one with the highest priority. They provide an analogy to help one understand what a priority queue is.įor instance, one can keep all the elements in an unsorted list ( O(1) insertion time). There are a variety of simple, usually inefficient, ways to implement a priority queue. In a queue, the priority of each inserted element is monotonically decreasing thus, the first element inserted is always the first retrieved. In a stack, the priority of each inserted element is monotonically increasing thus, the last element inserted is always the first retrieved. Stacks and queues can be implemented as particular kinds of priority queues, with the priority determined by the order in which the elements are inserted. More advanced implementations may support more complicated operations, such as pull_lowest_priority_element, inspecting the first few highest- or lowest-priority elements, clearing the queue, clearing subsets of the queue, performing a batch insert, merging two or more queues into one, incrementing priority of any element, etc. This operation and its O(1) performance is crucial to many applications of priority queues. In addition, peek (in this context often called find-max or find-min), which returns the highest-priority element but does not modify the queue, is very frequently implemented, and nearly always executes in O(1) time. This may instead be specified as separate " peek_at_highest_priority_element" and " delete_element" functions, which can be combined to produce " pull_highest_priority_element". Some conventions reverse the order of priorities, considering lower values to be higher priority, so this may also be known as " get_minimum_element", and is often referred to as " get-min" in the literature. This is also known as " pop_element(Off)", " get_maximum_element" or " get_front(most)_element".
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |