d-michail / jheaps

Master repository for the JHeaps project
http://www.jheaps.org
Apache License 2.0
44 stars 9 forks source link
algorithms data-structures fibonacci-heap heap meldable-heaps pairing-heap priority-queue

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.

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:

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:

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:

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:

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: