Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Trees: PRIORITY QUEUE Use Python Binary Heap class: Using the BinHeap class belo

ID: 3567160 • Letter: T

Question

Trees: PRIORITY QUEUE

Use Python Binary Heap class:

Using the BinHeap class below, implement a new class called PriorityQueue. Your PriorityQueue class should implement the constructor, plus the enqueue and dequeue methods.

Start with BinHeap class Code:

class BinHeap:

    def __init__(self):

        self.heapList = [0]

        self.currentSize = 0

    def percUp(self,i):

        while i // 2 > 0:

          if self.heapList[i] < self.heapList[i // 2]:

             tmp = self.heapList[i // 2]

             self.heapList[i // 2] = self.heapList[i]

             self.heapList[i] = tmp

          i = i // 2

    def insert(self,k):

      self.heapList.append(k)

      self.currentSize = self.currentSize + 1

      self.percUp(self.currentSize)

    def percDown(self,i):

      while (i * 2) <= self.currentSize:

          mc = self.minChild(i)

          if self.heapList[i] > self.heapList[mc]:

              tmp = self.heapList[i]

              self.heapList[i] = self.heapList[mc]

              self.heapList[mc] = tmp

          i = mc

    def minChild(self,i):

      if i * 2 + 1 > self.currentSize:

          return i * 2

      else:

          if self.heapList[i*2] < self.heapList[i*2+1]:

              return i * 2

          else:

              return i * 2 + 1

    def delMin(self):

      retval = self.heapList[1]

      self.heapList[1] = self.heapList[self.currentSize]

      self.currentSize = self.currentSize - 1

      self.heapList.pop()

      self.percDown(1)

      return retval

    def buildHeap(self,alist):

      i = len(alist) // 2

      self.currentSize = len(alist)

      self.heapList = [0] + alist[:]

      while (i > 0):

          self.percDown(i)

          i = i

Explanation / Answer

class PriorityQueue(object):

def __init__(self):
self.pq = [] # list of entries arranged in a heap
self.entry_finder = {} # mapping of tasks to entries
self.REMOVED = '<removed-task>' # placeholder for a removed task
self.counter = itertools.count()

def enqueue(self, task, priority=0):
if task in entry_finder:
remove_task(task)
count = next(self.counter)
entry = [priority, count, task]
self.entry_finder[task] = entry
heappush(pq, entry)

def dequeue(self):
entry = self.entry_finder.pop()
entry[-1] = REMOVED

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote