opérations des file de priorités en python code example

Example: opérations des file de priorités en python

class heap:
    def __init__(self):
        self.t=[]

    def push(self, x):
        t=self.t
        t.append(x)
        k=len(t)-1
        while k:
            m=(k-1)//2
            if t[k]<t[m]:
                t[k], t[m]=t[m], t[k]
                k=m
            else:
                break
    def pop(self):
        t=self.t
        if not t:
            raise IndexError("pop from empty heap")
        if len(t)==1:
            return t.pop()
        root=t[0]
        t[0]=t.pop()
        k=0

        while True:
            L=[i for i in [2*k+1, 2*k+2] if i<len(t)]
            if not L:
                break
            mini=min(t[i] for i in L)
            if t[k]<mini:
                break
            for i in L:
                if t[i]==mini:
                    t[i],t[k]=t[k], t[i]
                    k=i
                    break

        return root


from random import randrange


n=6
h=heap()


for _ in range(n):
    x=randrange(10,100)
    h.push(x)
    print(x, h.t)

print()

for _ in range(n):
    print(h.pop())

Tags:

Misc Example