All Projects → d-michail → jheaps

d-michail / jheaps

Licence: Apache-2.0 License
Master repository for the JHeaps project

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to jheaps

heap-js
Efficient Binary heap (priority queue, binary tree) data structure for JavaScript / TypeScript. Includes JavaScript methods, Python's heapq module methods, and Java's PriorityQueue methods.
Stars: ✭ 66 (+94.12%)
Mutual labels:  priority-queue, heap
Data Structures
A collection of powerful data structures
Stars: ✭ 2,534 (+7352.94%)
Mutual labels:  priority-queue, heap
go-heaps
Reference implementations of heap data structures in Go - treap, skew, leftlist, pairing, fibonacci
Stars: ✭ 79 (+132.35%)
Mutual labels:  pairing-heap, fibonacci-heap
Fastpriorityqueue.js
a fast heap-based priority queue in JavaScript
Stars: ✭ 240 (+605.88%)
Mutual labels:  priority-queue, heap
Heapify
The fastest JavaScript priority queue out there. Zero dependencies.
Stars: ✭ 520 (+1429.41%)
Mutual labels:  priority-queue, heap
DEPRECATED-data-structures
A collection of powerful data structures
Stars: ✭ 2,648 (+7688.24%)
Mutual labels:  priority-queue, heap
priority-queue-dictionary
A Pythonic indexed priority queue
Stars: ✭ 74 (+117.65%)
Mutual labels:  priority-queue
Competitive Coding
Contains Solution for all type of Problems of Competitive Programming. Updates Frequently as any problem is solved.
Stars: ✭ 16 (-52.94%)
Mutual labels:  heap
DSA
Project : Data Structures and Algorithms in C#
Stars: ✭ 31 (-8.82%)
Mutual labels:  heap
PixelGlitch
Image glitch visualization using various Pixel Sorting methods for Processing
Stars: ✭ 25 (-26.47%)
Mutual labels:  heap
data-structure-and-algorithm
Basic data structures, sorting algorithms, algorithms learning tools. 基本数据结构,排序算法,算法学习工具
Stars: ✭ 86 (+152.94%)
Mutual labels:  heap
priority queue
A JavaScript PriorityQueue
Stars: ✭ 28 (-17.65%)
Mutual labels:  priority-queue
Algorithms
Data Structures & Algorithms. Includes solutions for Cracking the Coding Interview 6th Edition
Stars: ✭ 89 (+161.76%)
Mutual labels:  heap
ctf-writeups
📚 Yet another CTF writeups repository. PWN and RE tasks
Stars: ✭ 29 (-14.71%)
Mutual labels:  heap
Data-Structures-Algorithms-Handbook
A series of important questions with solutions to crack the coding interview and ace it!
Stars: ✭ 30 (-11.76%)
Mutual labels:  heap
gctoolkit
Tool for parsing GC logs
Stars: ✭ 1,127 (+3214.71%)
Mutual labels:  heap
ctl
My variant of the C Template Library
Stars: ✭ 105 (+208.82%)
Mutual labels:  priority-queue
refreturn
Find functions that return a reference and cause allocations.
Stars: ✭ 27 (-20.59%)
Mutual labels:  heap
Data-Structures
Algorithmic Problems Solutions -- hash table code featured in geeksforgeeks
Stars: ✭ 44 (+29.41%)
Mutual labels:  heap
cs.js
Computer Science Data Structures and Algorithms in JavaScript ( Node.JS, ES ) in simple, clean, reusable code
Stars: ✭ 86 (+152.94%)
Mutual labels:  heap

JHeaps

JHeaps Library

Copyright (C) 2014-2021 Dimitrios Michail

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


What is this library?

This library contains various heap implementations written in Java.

  • It is easy to use
  • The data structures have a well defined interface
  • It is fast and well documented
  • The heaps are written in a similar way as in the JDK
  • It does not depend on other libraries, so classpathing 'jheaps.jar' is sufficient to use in your project.

What is a heap?

A heap is a priority queue data type which contains elements with keys (duplicate keys are permitted) from a totally-ordered universe. A min-oriented heap supports the following core operations:

  • MAKE-HEAP(): create an empty heap
  • INSERT(H,x): insert an element x into the heap
  • FIND-MIN(H): return an element with the smallest key
  • EXTRACT-MIN(H): remove the element with the smallest key
  • IS-EMPTY(H): is the heap empty?
  • SIZE(H): return the number of elements of the heap
  • CLEAR(H): remove all elements of the heap

A heap does not support a search operation. A special type of heap called explicit or addressable resolves this issue by returning a handle when inserting a new element. This handle can later be used to additionally perform the following operations:

  • DECREASE-KEY(H,x,k): decrease the key of element x to k
  • DELETE(H,x): delete the element x from the heap

Implicit heaps are represented using arrays. They are not addressable as the location of the elements in memory can change. However, they can be made to be addressable by using an additional layer of indirection. In this case we store handles inside the array. Each handle contains an additional integer property, designating the location in the array where the handle is stored.

Some heaps are meldable, that is they efficiently support the union operation:

  • MELD(H1,H2): add all elements of H2 into H1 and destroy H2

As a general rule, heaps using an array representation are not meldable.

Available Heaps

The library contains an extensive collection of heap data structures such as:

  • Tree-based
    • Fibonacci mergeable and addressable heaps
    • Simple Fibonacci heaps
    • Pairing mergeable and addressable heaps
    • Costless-meld variant of Pairing heaps
    • Rank-Pairing (type-1) mergeable and addressable heaps
    • Leftist mergeable and addressable heaps
    • Explicit binary tree addressable heaps
    • Binary tree soft heaps
    • Skew heaps
  • Dag-based
    • Hollow mergeable and addressable heaps
  • Double-ended mergeable and addressable heaps
    • Reflected Fibonacci heaps
    • Reflected Pairing heaps
  • Array-based
    • Binary heaps
    • Binary addressable heaps
    • D-ary heaps
    • D-ary addressable heaps
    • Binary weak heaps
    • Binary weak heaps supporting bulk insertion
    • Highly optimized binary heaps for integer keys using the Wegener bottom-up heuristic and sentinel values
  • Double-ended array-based
    • Binary MinMax heaps
  • Monotone heaps
    • Addressable radix heaps with double, long, int or BigInteger keys
    • Non-addressable radix heaps with double, long, int or BigInteger keys

Compatibility

The library requires JDK v1.8 and above.

Python Bindings

We also provide Python bindings which compile the Java library into a native shared library using GraalVM. The result is a native self-contained library with no dependency on the JVM! For more information see the following links:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].