Python 2.7 Python中需要相同的相对级别节点(同级)DAG算法
因此,我目前正在从事一个快速而肮脏的Python项目,该项目支持一个由字典组成的数据结构,其中键是来自开放生物本体格式的GOID。它散列到另一个字典,其中包含父节点或术语列表和子节点或术语列表,帮助我形成本体中给定节点的所有子节点或所有祖先的列表(使用GO.obo文件,如果有帮助的话) 我的问题是,我一直在寻找一种算法,可以帮助我返回与给定节点id相同级别上的所有相同节点,该节点id必须是相对的,因为一个节点可能有多条路径(这是一个有向无环图,但每个节点可以有多个父节点)。我基本上需要查找节点的父节点,将父节点的子节点全部存储在一个公共列表中,然后在添加的每个节点上重复此过程,而不重复节点或显著降低计算速度 我认为这可以很容易地通过使用集合来防止重复条目,并且只跟踪我访问过的家长,直到访问了兄弟姐妹的所有家长,而无法添加新的家长,但我怀疑这可能是非常低效的。如果有任何人有这种算法的经验,和见解将高度赞赏!希望这一点足够清楚,可以得到回应Python 2.7 Python中需要相同的相对级别节点(同级)DAG算法,python-2.7,ontology,directed-acyclic-graphs,Python 2.7,Ontology,Directed Acyclic Graphs,因此,我目前正在从事一个快速而肮脏的Python项目,该项目支持一个由字典组成的数据结构,其中键是来自开放生物本体格式的GOID。它散列到另一个字典,其中包含父节点或术语列表和子节点或术语列表,帮助我形成本体中给定节点的所有子节点或所有祖先的列表(使用GO.obo文件,如果有帮助的话) 我的问题是,我一直在寻找一种算法,可以帮助我返回与给定节点id相同级别上的所有相同节点,该节点id必须是相对的,因为一个节点可能有多条路径(这是一个有向无环图,但每个节点可以有多个父节点)。我基本上需要查找节点的
谢谢 好了,伙计们,这就是我到目前为止所开发的,但由于一些奇怪的原因,它似乎一直给我错误的值。是否有一个小错误,任何人都可以看到我意外地没有正确终止
# A helper function to find generations of a given node
def getGenerationals(self,goid):
quit = False
visitedParents = set()
generation = set()
tempGen = set()
generation.add(goid)
while not quit:
quit = True
generation |= tempGen
tempGen = set()
print "TEMP GEN:",tempGen
for g in generation:
parents = set(self._terms[g]['p'])
for p in parents:
if p not in visitedParents:
visitedParents.add(p)
print "Parent:",p
quit = False
tempGen |= set(self._terms[p]['c'])
raw_input("Break")
return generation
# Working function
def getGeneration(self,goid):
generation = list(self.getGenerationals(goid))
generation.remove(goid)
return list(generation)