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(10)   #   Happens in O(1)

handle_10.value = 25      #   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.9.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for priorityq-0.0.9.tar.gz
Algorithm Hash digest
SHA256 39a786a1f2badea96b30914794ae3a8bc281ccefd451a3838bf7cb7d1fbf1b13
MD5 c1e787341a0f2f02f02058a814271a61
BLAKE2b-256 56ec71249eee8f951d90033f8664ad8cf4d9f85ad58a10f75bde9ab06f0dafae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for priorityq-0.0.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b5c8cca37600adf04784e2f7fdd20e039b8f69b8c9c62b5b2222d07a416ad2e5
MD5 164d5bad70d834b47b4d2f20bc29d945
BLAKE2b-256 87f8f30580967db9407a6e6b834bf480f50cddf63c16578aabad5e06b88054e9

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