具有关键功能的堆结构在初始化器中

时间:2017-11-12 21:04:21

标签: python-3.x

我基本上试图在Python中实现这个Heap结构,并且我在def heap-iffy和def add下编辑部分,但是我不知道如何使用关键函数来使用当前初始化。此函数将用于从添加到堆中的每个元素中提取值;反过来,这些值将用于对元素进行排序。 f没有提供密钥功能,应该使用默认的最大堆行为 - 初始化方法的“lambda x:x”默认值就是这样。

    class Heap:
       def __init__(self, key=lambda x:x):
         self.data = []
         self.key  = key

       @staticmethod
       def _parent(idx):
         return (idx-1)//2

       @staticmethod
       def _left(idx):
         return idx*2+1

       @staticmethod
       def _right(idx):
         return idx*2+2

       def _heapify(self, idx=0):

       enter code here
       while True:
           l = Heap._left(idx)
           r = Heap._right(idx)
           maxidx = idx
           if l < len(self) and self.data[l] > self.data[idx]:
              maxidx = l
           if r < len(self) and self.data[r] > self.data[maxidx]:
              maxidx = r
           if maxidx != idx:
              self.data[idx], self.data[maxidx] = self.data[maxidx], self.data[idx]
              idx = maxidx
           else:
              break

        def add(self, x):
           enter code here
           self.data.append(x)
           i = len(self.data) - 1
           p = Heap._parent(i)
           while i > 0 and self.data[p] < self.data[i]:
              self.data[p], self.data[i] = self.data[i], self.data[p]
              i = p
              p = Heap._parent(i)

       def peek(self):
          return self.data[0]

       def pop(self):
          ret = self.data[0]
          self.data[0] = self.data[len(self.data)-1]
          del self.data[len(self.data)-1]
          self._heapify()
          return ret

       def __bool__(self):
          return len(self.data) > 0

       def __len__(self):
          return len(self.data)

       def __repr__(self):
          return repr(self.data)

0 个答案:

没有答案