Klasse PriorityQueue (als sortierte Liste)
Die Prioritätenliste ist hier der Einfachheit halber als sortierte Liste implementiert. Die Liste wird jeweils neu sortiert, bevor ein Element mit extract ausgegeben wird, nachdem vorher Elemente mit insert eingefügt worden sind.
Im schlechtesten Fall benötigt extract daher Θ(n log(n)) Schritte, wobei n die Länge der Liste ist; insert benötigt O(1) Schritte. Bei einer Implementierung als Heap benötigen die Operationen extract und insert jeweils Θ(log(n)) Schritte.
Beim Aufruf des Konstruktors wird mit dem Parameter updown = 1 oder updown = -1 festgelegt, ob mit extract das Paar mit dem höchsten oder mit dem niedrigsten Zahlenwert zurückgegeben werden soll.
class PriorityQueue(list):
def __init__(self, updown=1):
self.updown=updown
self.sorted=True
def insert(self, priority, item=None):
x=[priority, item]
self.append(x)
self.sorted=False
def extract(self):
if not self.sorted:
self.sort(reverse=self.updown<1)
self.sorted=True
return self.pop()
def size(self):
return len(self)
def isEmpty(self):
return self.size()==0
if __name__=="__main__":
p=PriorityQueue(-1)
p.insert(6, "f")
p.insert(5, "e")
p.insert(1, "a")
print(p.extract())
p.insert(3, "c")
p.insert(4, "d")
p.insert(2, "b")
print(p.extract())
print(p.extract())
print(p.extract())
print(p.extract())
print(p.extract())
[up]
H.W. Lang mail@hwlang.de Impressum Datenschutz
Created: 06.02.2009 Updated: 19.02.2023
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden