实际上,我的排序算法是有效的,但是有一个问题。 我有一个类叫做SortedItem,它包括
def __init__(self, point, cost):
self.coordinate = point
self.cost = cost
我还有一个优先级队列,它根据成本对这个SortedItem进行排序:
^{pr2}$问题出现在这里: -我定义了一些添加队列的顺序。假设我要将此对象添加到队列中:
obj1 = SortedItem((1,0), 10))
queue.enqueue(obj1)
obj2 = SortedItem((2,0), 15))
queue.enqueue(obj2)
obj3 = SortedItem((2,1), 15))
queue.enqueue(obj3)
请注意:我刚刚创建了一个简单的问题示例。如果您尝试此代码,您可以按以下顺序获取对象:obj1、obj2、obj3
而不是按相反的顺序把它们从右边移走
你可以把它们从左边移走。这将避免以相同的成本颠倒项目的插入顺序。在
但是,从列表is not efficient开始删除项,这样您可以更好地使用^{} (将
pop(0)
替换为popleft()
)来解决这个问题。另一方面,deque
没有到位的sort()
方法,因此也需要将self.items.sort()
替换为self.items = deque(sorted(self.items))
。在相关问题 更多 >
编程相关推荐