|
In computer science, a queap is a priority queue data structure. The data structure allows insertions and deletions of arbitrary elements, as well as retrieval of the highest-priority element. Each deletion takes amortized time logarithmic in the number of items that have been in the structure for a longer time than the removed item. Insertions take constant amortized time. The data structure consists of a doubly linked list and a 2-4 tree data structure, each modified to keep track of its minimum-priority element. The basic operation of the structure is to keep newly inserted elements in the doubly linked list, until a deletion would remove one of the list items, at which point they are all moved into the 2-4 tree. The 2-4 tree stores its elements in insertion order, rather than the more conventional priority-sorted order. Both the data structure and its name were devised by John Iacono and Stefan Langerman. ==Description== A queap is a priority queue that inserts elements in O(1) amortized time, and removes the minimum element in O(log(''k'' + 2)) if there are ''k'' items that have been in the heap for a longer time than the element to be extracted. The queap has a property called the queueish property: the time to search for element ''x'' is O(lg ''q''(''x'')) where ''q''(''x'') is equal to ''n'' − 1 − ''w''(''x'') and ''w''(''x'') is the number of distinct items that has been accessed by operations such as searching, inserting, or deleting. ''q''(''x'') is defined as how many elements have not been accessed since ''x'' A queap can be represented by two data structures: a doubly linked list and a modified version of 2-4 tree. The doubly linked list, ''L'', is used for a series of insert and locate-min operations. The queap keeps a pointer to the minimum element stored in the list. To add element ''x'' to list ''l'', the element ''x'' is added to the end of the list and a bit variable in element ''x'' is set to one. This operation is done to determine if the element is either in the list or in a 2-4 tree. A 2-4 tree is used when a delete operation occurs. If the item ''x'' is already in tree ''T'', the item is removed using the 2-4 tree delete operation. Otherwise, the item ''x'' is in list ''L'' (done by checking if the bit variable is set). All the elements stored in list ''L'' are then added to the 2-4 tree, setting the bit variable of each element to zero. ''x'' is then removed from ''T''. A queap uses only the 2-4 tree structure properties, not a search tree. The modified 2-4 tree structure is as follows. Suppose list ''L'' has the following set of elements: . When the deletion operation is invoked, the set of elements stored in ''L'' is then added to the leaves of the 2-4 tree in that order, proceeded by a dummy leaf containing an infinite key. Each internal node of ''T'' has a pointer , which points to the smallest item in subtree ''v''. Each internal node on path ''P'' from the root to has a pointer , which points to the smallest key in . The pointers of each internal node on path ''P'' are ignored. The queap has a pointer to , which points to the smallest element in ''T''. An application of queaps includes a unique set of high priority events and extraction of the highest priority event for processing. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Queap」の詳細全文を読む スポンサード リンク
|