A Fibonnaci Heap supports the following operations:
insert(key, data)
: adds a new element to the data structurefind-min()
: returns a pointer to the element with minimum keydelete-min()
: removes the element with minimum keydelete(node)
: deletes the element pointed to bynode
decrease-key(node)
: decreases the key of the element pointed to bynode
All non-delete operations are $O(1)$ (amortized) time, and the delete operations are $O(\log n)$ amortized time.
Are there any implementations of a priority queue which also supportincrease-key(node)
in $O(1)$ (amortized) time?
Asked By : Joe
Answered By : jbapple
Assume you have a priority queue that has $O(1)$ find-min
, increase-key
, and insert
. Then the following is a sorting algorithm that takes $O(n)$ time:
vector<T> fast_sort(const vector<T> & in) { vector<T> ans; pq<T> out; for (auto x : in) { out.insert(x); } for(auto x : in) { ans.push_back(*out.find_min()); out.increase_key(out.find_min(), infinity); } return ans; }
Best Answer from StackOverflow
Question Source : http://cs.stackexchange.com/questions/880
0 comments:
Post a Comment
Let us know your responses and feedback