python优先队列_Python:在优先级队列实现中使用堆

我在使用我的定制堆类函数以用于优先级队列类时遇到了真正的麻烦。我在堆类中的哪些函数用于PriorityQueue的“enqueue”、“dequeue”、“front”和“size”函数时遇到问题。我知道对于“排队”我需要使用我的插入函数,但我不知道该怎么做,因为我有一个优先级。有人能帮我做些什么来让PriorityQueue类使用堆类中的函数来正常工作吗?我在这个问题上已经有一段时间了,我一直在寻找答案,包括使用内置的python函数,比如queue和heapq。在

类堆(对象):def __init__(self, items=None):

'''Post: A heap is created with specified items.'''

self.heap = [None]

if items is None:

self.heap_size = 0

else:

self.heap += items

self.heap_size = len(items)

self._build_heap()

def size(self):

'''Post: Returns the number of items in the heap.'''

return self.heap_size

def _heapify(self, position):

'''Pre: Items from 0 to position - 1 satisfy the Heap property.

Post: Heap Property is satisfied for the entire heap.'''

item = self.heap[position]

while position * 2 <= self.heap_size:

child = position * 2

# If the right child, determine the maximum of two children.

if (child != self.heap_size and self.heap[child+1] > self.heap[child]):

child += 1

if self.heap[child] > item:

self.heap[position] = self.heap[child]

position = child

else:

break

self.heap[position] = item

def delete_max(self):

'''Pre: Heap property is satisfied

Post: Maximum element in heap is removed and returned. '''

if self.heap_size > 0:

max_item = self.heap[1]

self.heap[1] = self.heap[self.heap_size]

self.heap_size -= 1

self.heap.pop()

if self.heap_size > 0:

self._heapify(1)

return max_item

def insert(self, item):

'''Pre: Heap Property is Satisfied.

Post: Item is inserted in proper location in heap.'''

self.heap_size += 1

# extend the length of the list.

self.heap.append(None)

position = self.heap_size

parent = position // 2

while parent > 0 and self.heap[parent] < item:

# Move the item down.

self.heap[position] = self.heap[parent]

position = parent

parent = position // 2

# Puts the new item in the correct spot.

self.heap[position] = item

def _build_heap(self):

''' Pre: Self.heap has values in 1 to self.heap_size

Post: Heap property is satisfied for entire heap. '''

# 1 through self.heap_size.

for i in range(self.heap_size // 2, 0, -1): # Stops at 1.

self._heapify(i)

def heapsort(self):

'''Pre: Heap Property is satisfied.

Post: Items are sorted in self.heap[1:self.sorted_size].'''

sorted_size = self.heap_size

for i in range(0, sorted_size -1):

# Since delete_max calls pop to remove an item, we need to append a dummy value to avoid an illegal index.

self.heap.append(None)

item = self.delete_max()

self.heap[sorted_size - i] = item

所以这是有效的,但正如我之前所说的,我有麻烦如何使一个优先队列从这?我知道要求密码是错误的,但我很绝望,有人能帮我吗?我对我想要我的优先代码做什么有了基本的概述。。在

^{pr2}$

这是我目前所得到的,但我不知道它是否完全正确。有人能帮我吗?在

我编辑了我的代码到它的最新版本。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值