Skip to main content

A clean priority queue library with several types and utility helpers.

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.6.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

priorityq-0.0.6-py2.py3-none-any.whl (17.9 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for priorityq-0.0.6.tar.gz
Algorithm Hash digest
SHA256 011efaa9aa3e3b8215d418d488059ba5fbff41bc8d306f8bbbd1e4e2ac2a03c1
MD5 a827da92fdd93eead005fb389fe8ea15
BLAKE2b-256 b52c9e06a1d1f75fa7ba8c553fd24e70dccfda3fd431a82cb9ab36a050371dad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for priorityq-0.0.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 dae2f1d1b650cccdfe75aae744f7ade599d34bb2ddd069270002d964e01e4e20
MD5 d785eb7560606fc7822d59b21bb17ac8
BLAKE2b-256 0cb8f46b5e5f21cb285d140787df09aa6f12789b05339ae66d537751d0ae3c5c

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