【发布时间】:2017-09-30 17:53:48
【问题描述】:
我正在尝试使用 python 3.6 设计一个队列数据结构
队列旨在跟踪具有以下属性的节点对象:
class node(object):
def __init__(self, state, parent):
self.state = state
self.parent = parent
我想避免在队列中合并状态相同的节点。所以我设计了如下队列:
class queue(object):
def __init__(self):
self.list = []
self.explored = set()
def insert(self, element):
self.list = [element] + self.list
self.explored.add(str(element.state))
return self.list
def pop(self):
oldest_element = self.list.pop()
self.explored.remove(str(oldest_element.state))
return oldest_element
def empty(self):
return len(self.list) == 0
def check_member(self, other):
return other in self.explored
为了检查某个节点的状态是否在队列中,我使用check_member 方法将属性状态作为字符串类型来查看是否包含在具有成员的所有字符串状态的集合中。但这仍然很慢。
那么有可能检查一个实例是否具有另一个实例的相同属性而其他属性可能不同? 例如,两个节点,相同的状态属性但不同的父属性。
如何在不使用额外探索集的情况下保持元素的顺序并在 O(1) 中仍然检查队列中是否有某个元素?
【问题讨论】:
-
不太清楚你在问什么。您想避免在队列中出现两次相同的状态吗?或者解决当队列中可能有第二个具有相同状态的节点时从集合中删除弹出状态的问题?
-
我想避免在队列中合并具有相同状态的节点。我编辑问题以澄清这部分。
-
您希望添加现有状态的尝试大声失败还是被忽略?
-
在该状态存在的情况下使用属性
check_member时返回False
标签: python queue priority-queue