Skip to main content

A flexible priority queue library with support for pluggable storage strategies and fast lookups and mutability.

Project description

PriorityQ is a library for managing a priority queue (PQ) with a cleaner API to enable custom comparators, finding references to values efficiently (in constant time) and deleting values from the PQ. This was developed because the current heapq module (in python’s standard library) does not provide an efficient find operation (it is O(n)) and has no easy way to deleting an element and ensuring the heap invariant afterwards.

Features

  • O(1) finding of elements

  • Deletion of elements possible (in O(log n)).

  • Adjusting of the priority of an element without requiring a deletion followed by an insertion.

  • Opaque handles to elements that can be used to reference to the same item again.

  • Duplicate elements allowed.

  • Custom comparator function can be passed to the PQ itself instead of needing to implement __cmp__.

It is simple to use

To create a PQ simply do:

# A simple object with a comparator
class Item(object):
    def __init__(self, value):
        self.value = value
    def __cmp__(self, another):
        return cmp(self.value, another.value)

from priorityq import PQ
pq = PQ()
pq.heapify([Item(r) for r in [1, 10, 2, 20, 4, 7, 9, 3, 5, 6]])

print list(pq)

# Should print:
# 1 2 3 4 5 6 7 9 10 20

handle_10 = pq.find(25)   #   Happens in O(1)

handle_10.value = 12      #   Modify its value - O(log n)
pq.adjust(handle_10)      #   Indicate to the heap to reprioritise/adjust it

print list(pq)

# Should print:
# 1 2 3 4 5 6 7 9 20 25

handle_10.value = 10      #   Modify its value using the same opaque handle as before
pq.adjust(handle_10)      #   Indicate to the heap to reprioritise/adjust it

print list(pq)

# Should print:
# 1 2 3 4 5 6 7 9 10 20

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

priorityq-0.0.7.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

priorityq-0.0.7-py2.py3-none-any.whl (21.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file priorityq-0.0.7.tar.gz.

File metadata

  • Download URL: priorityq-0.0.7.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for priorityq-0.0.7.tar.gz
Algorithm Hash digest
SHA256 52b10d5d47277e02d9f26f1b07a21e28a92a3fb161523d46c7c6461ba5841d87
MD5 864710ac1607cd2f4cae328172262e2e
BLAKE2b-256 51c2235277321ef5bef7b017d42b24c5be2be9da398a0ae457f6212789b5eeaf

See more details on using hashes here.

File details

Details for the file priorityq-0.0.7-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for priorityq-0.0.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 eff908e17cd463da8e54d7c9a34ce92083603e4419e7f08b0f61293322df244a
MD5 216594169e0fe00708ece616d7ec428f
BLAKE2b-256 3dc71ade316bcf0b1f3cb32015ae5b19aec34aa547eced929882e5fff8675ccf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page