实际上我的排序算法有效,但有一个问题。我有一个名为 SortedItem 的类,其中包括
def __init__(self, point, cost):
self.coordinate = point
self.cost = cost
我还有优先级队列,它按成本对这个 SortedItem 进行排序:
class PriorityQueue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def sortComparatorByCost(self, item):
return item.cost
def enqueue(self, item):
self.items.append(item)
self.items.sort(key=self.sortComparatorByCost, reverse=True)
def dequeue(self):
return self.items.pop()
def returnQueueAsString(self):
queue_str = ""
for eachItem in self.items:
queue_str += str(eachItem) + " "
return queue_str
def isQueueContainsElement(self, element):
for eachElement in self.items:
if eachElement[0] == element:
return True
return False
问题出现在这里: - 我已经定义了一些添加队列的顺序。假设我将此对象添加到队列中:
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)。
然而python内置的sort函数是这样对这些对象进行排序的:(obj1, obj3, obj2)(因为obj2和obj3的开销是一样的)
我该如何解决这个问题。我的意思是如果 2 个对象的成本相同,我应该得到第一个添加的对象。
请注意:我刚刚创建了一个简单的问题示例。如果您尝试此代码,您可能会按以下顺序获得对象:obj1、obj2、obj3
相关分类