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

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for priorityq-0.0.8.tar.gz
Algorithm Hash digest
SHA256 843d19d18a21a8bc4db075e61b7bf91cf7e2df688cc21c57830eb3749b414bb6
MD5 e726c8b12a19651afd00867c653949e3
BLAKE2b-256 e5d4e3c0a326a739a4b94ab5a319e4f13b41a4a3a8549af9f538fc5ae851d506

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for priorityq-0.0.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 146e544cce5959005d5cbe4c646038cd73938b06f16900ae40ece36eef4d78e0
MD5 22b58888f10094097534ad8bc38d7d4d
BLAKE2b-256 b2b0213bfcbd0372efd362f59b43b7b90dbb5c20253934f995bafd3fb15a26a2

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