=head1 NAME SkewHeap - A fast and flexible heap structure =head1 SYNOPSIS use SkewHeap; my $heap = skewheap{ $a <=> $b }; $heap->put(42); $heap->put(35); $heap->put(200, 62); $heap->top; # 35 $heap->size; # 4 $heap->take; # 35 $heap->take; # 42 $heap->take; # 62 $heap->take; # 200 $heap->merge($other_skewheap); =head1 DESCRIPTION A skew heap is a memory efficient, self-adjusting heap (or priority queue) with an amortized performance of O(log n) (or better). C is implemented in C/C. The key feature of a skew heap is the ability to quickly and efficiently merge two heaps together. =head1 METHODS =head2 skewheap Creates a new C which will be sorted in ascending order using the comparison subroutine passed in. This sub has the same semantics as Perl's C, returning -1 if C<$a E $b>, 1 if C<$a E $b>, or 0 if C<$a == $b>. =head2 size Returns the number of elements in the heap. =head2 top Returns the next element which would be returned by L without removing it from the heap. =head2 put Inserts one or more new elements into the heap. =head2 take Removes and returns the next element from the heap. =head2 merge Destructively merges another heap into itself. After calling merge, the second heap is empty and the first holds all elements from both heaps. =head1 AUTHOR Jeff Ober =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2018 by Jeff Ober. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.