In computer science, a priority search tree is a tree data structure for storing points in two dimensions. It was originally introduced by Edward M. McCreight.[1] It is effectively an extension of the priority queue with the purpose of improving the search time from O(n) to O(s + log n) time, where n is the number of points in the tree and s is the number of points returned by the search.
The priority search tree is used to store a set of 2-dimensional points ordered by priority and by a key value. This is accomplished by creating a hybrid of a priority queue and a binary search tree.
The result is a tree where each node represents a point in the original dataset. The point contained by the node is the one with the lowest priority. In addition, each node also contains a key value used to divide the remaining points (usually the median of the keys, excluding the point of the node) into a left and right subtree. The points are divided by comparing their key values to the node key, delegating the ones with lower keys to the left subtree, and the ones strictly greater to the right subtree.[2]
The construction of the tree requires O(n log n) time and O(n) space. A construction algorithm is proposed below:
The priority search tree can be efficiently queried for a key in a closed interval and for a maximum priority value. That is, one can specify an interval [''min_key'', ''max_key''] and another interval [-{{math|∞|size=100%}}, ''max_priority''] and return the points contained within it. This is illustrated in the following pseudo code: