我正在寻找一种算法来将DAG分类为多个顶点,这样批处理中没有顶点在它们之间有边缘,并且批处理按顺序排序,使得批处理中没有顶点在排序顺序之后的批处理边缘。我似乎无法对通用拓扑排序进行有效修改,因为要发现放置顶点的批次,必须在所有批次之前填充所有批次。有效地:
batches = []
while vertices:
batch = []
for v in vertices.copy():
for v' in v.edges:
if v' in vertices:
break
else:
batch.append(v)
vertices.remove(v)
batches.append(batch)
但是,此算法O(n^2)
用于反向排序'线性' graph with 用于顶点查找的哈希表。
对不起pythonic伪代码。